Track Form Submissions

Track form submissions to measure lead generation, contact requests, and user signups.

Basic Form Tracking

Track form submissions by adding an event handler to the form's submit event:

<form onSubmit={handleSubmit}>
  <input type="email" name="email" placeholder="Your email" />
  <button type="submit">Subscribe</button>
</form>

function handleSubmit(e) {
  e.preventDefault();

  // Track the submission
  window.narrowbeam.trackAction('newsletter-signup');

  // Process the form
  submitToServer(formData);
}

Common Form Types

Newsletter Signup

function handleNewsletterSubmit(e) {
  e.preventDefault();
  window.narrowbeam.trackAction('newsletter-signup');
  // ... submit logic
}

Contact Form

function handleContactSubmit(e) {
  e.preventDefault();
  window.narrowbeam.trackAction('contact-form-submit');
  // ... submit logic
}

Lead Generation Form

function handleLeadSubmit(e) {
  e.preventDefault();
  const planType = e.target.plan.value;
  window.narrowbeam.trackAction('lead-form-submit', planType);
  // ... submit logic
}

Registration Form

function handleRegistration(e) {
  e.preventDefault();
  window.narrowbeam.trackAction('user-registration');
  // ... registration logic
}

Tracking Form Success vs Errors

Track successful submissions separately from failed attempts:

async function handleFormSubmit(e) {
  e.preventDefault();

  try {
    await submitForm(formData);

    // Track successful submission
    window.narrowbeam.trackAction('form-submit-success');
    showSuccessMessage();
  } catch (error) {
    // Track error
    window.narrowbeam.trackAction('form-submit-error');
    showErrorMessage();
  }
}

Multi-Step Forms

Track progress through multi-step forms:

// Step 1
function completeStep1() {
  window.narrowbeam.trackAction('signup-step-1-complete');
  goToStep2();
}

// Step 2
function completeStep2() {
  window.narrowbeam.trackAction('signup-step-2-complete');
  goToStep3();
}

// Final step
function completeSignup() {
  window.narrowbeam.trackAction('signup-complete');
  redirectToDashboard();
}

React Example

function ContactForm() {
  const handleSubmit = async (e) => {
    e.preventDefault();

    window.narrowbeam.trackAction('contact-form-submit');

    const response = await fetch('/api/contact', {
      method: 'POST',
      body: JSON.stringify(formData)
    });

    if (response.ok) {
      window.narrowbeam.trackAction('contact-form-success');
    }
  };

  return <form onSubmit={handleSubmit}>...</form>;
}

Best Practices

Form Tracking Tips

  • Track after validation: Only track successful validation, not every attempt
  • Unique names: Use descriptive names like newsletter-signup
  • Track abandonment: Monitor where users drop off in multi-step forms
  • Separate success/error: Track outcomes differently for better analysis
  • Include context: Use action values to pass form types or selected options

Calculating Conversion Rates

Create a conversion funnel in your dashboard:

  1. Widget 1: Page views for form page (group by url_path)
  2. Widget 2: Form submissions (filter action_name = "form-submit")
  3. Calculate: Submissions / Page views = Conversion rate

Related Documentation