How to track lead source in Web Form submission
Capture the marketing source and pre-conversion journey behind every form submission. Automated for embedded forms, semi-automated for hosted form tools.
On this page
Web forms are the most common conversion type SourceLoop captures. Once the tracker is on your site, every form submission is enriched with marketing source, UTMs, landing page, and the visitor’s full pre-submit journey, so when a lead lands in your dashboard you immediately see what brought them in.
This article is the overview. For setup specifics on individual form tools, the left sidebar has a per-tool article for every supported builder.
Step 1: Install the SourceLoop tracking script
The tracker is the prerequisite for both capture paths below. It records every visitor’s session, UTMs, landing page, and journey, so when a form submission arrives (directly from the browser or later via a webhook), SourceLoop can stitch it to the right visitor.
- Sign in to SourceLoop.
- Open Setup -> Tracking code in the left sidebar.
- Copy the snippet shown.
- Paste it into the
<head>of every page on your site, especially the pages where forms (or the buttons that open hosted forms) appear.
Once the tracker is live, head to the matching section below depending on whether your form is embedded on your own site (automated) or hosted on the form tool’s domain (semi-automated).
How form capture works
SourceLoop supports two capture paths, depending on where your form actually lives:
| Path | What it means | Setup |
|---|---|---|
| Automated | The form is embedded on a page that loads the SourceLoop tracker, the browser fires the submit, the tracker reads the email field. | Install the tracker. That’s it. |
| Semi-automated | The form is hosted off-site (e.g., typeform.com/..., jotform.co/...) so the tracker never sees the submit. The form tool forwards each submission to SourceLoop via a webhook. | Install the tracker, add SourceLoop’s webhook URL inside the form tool, pass the visitor’s identifier through the form URL. |
Both paths produce the same end result: a lead in the Contacts Hub with full first-touch and last-touch attribution, the converting landing page, and the entire pre-submit session timeline.
Why two paths
Forms hosted on your own domain (HTML, Webflow, Framer, every WordPress plugin) submit through the browser. The SourceLoop tracker is already running on that page, so it can read the email field directly as the submission fires. No extra wiring needed.
Forms hosted on the form tool’s own domain (Typeform’s hosted page, JotForm’s hosted page, Fillout’s hosted page) submit on a different origin. The visitor leaves your site before the form fires its submit event, so the tracker never sees it.
The semi-automated webhook fills that gap. Before the visitor leaves your site to open the hosted form, the tracker quietly passes the visitor’s anonymous identifier along on the form URL. When the visitor submits, the form tool sends a webhook to SourceLoop with the submission data plus that identifier. SourceLoop stitches the submission back to the visitor’s pre-submit journey server-side, so the lead arrives with the same full attribution as an automated capture would have produced.
Automated capture: supported tools
Tracker on the page is the only setup. Pick the matching article for the small confirmation steps.
Semi-automated capture: supported tools
Hosted on the form tool’s own domain. Install the tracker on your site (so the visitor’s pre-submit journey is captured), then wire a webhook inside the form tool and add SourceLoop’s anonymous-id parameter to the form URL.
Verify it’s working
Once the tracker is installed (and the webhook is configured, for semi-automated tools):
- Open the page that hosts your form in an incognito window.
- Append
?utm_source=test&utm_medium=verify&utm_campaign=form-checkto the URL. - Fill in the form with a real email you can access and submit.
- Within seconds, the lead should appear at the top of the Contacts Hub at app.sourceloop.ai/contacts with the three test UTM values, the converting landing page, and the full pre-submit timeline.
If the test submission doesn’t appear, open the matching per-tool article from the sidebar and walk the verification step there. The most common cause is the tracker not loading on the page that hosts the form.
Don’t see your form tool?
If your form is a plain <form> element embedded on a tracked page, capture works automatically, no per-tool article needed.
If your form uses a custom JavaScript submit handler (an AJAX submit, a React form library, a Vue component that hijacks the submit event), call SourceLoop’s tracker directly in your success handler:
window.SourceLoop?.track("form_submit", {
email: "[email protected]",
formId: "contact-us",
custom: { plan: "Pro", company: "Acme Co." },
});
The email field is required (it’s how SourceLoop dedups the lead). Everything else is optional and lands as custom data on the lead in the Contacts Hub.
Where lead source shows up
- Contacts Hub — every form submission becomes a row with full first-touch and last-touch source plus the pre-submit timeline. See Contacts (Leads) table.
- Traffic dashboard — group submissions by channel, source, medium, campaign, landing page. See Traffic dashboard.
- Funnels — build a funnel ending in “Web form submission” to find the highest-converting paths from first visit to form fill. See Conversion funnels guide.
For paid acquisition feeding form submissions, mirror leads back to Google Ads, Meta, and LinkedIn as offline conversions so the bidding algorithms train on real qualified leads instead of vanity clicks. See Connect Google Ads for the wiring.
Frequently asked questions
-
What's the difference between automated and semi-automated form capture?
Automated means SourceLoop captures the submission entirely from the visitor's browser, no setup needed in your form tool. It works when the form is embedded on a page that loads the SourceLoop tracker. Semi-automated means the form tool hosts the form on its own domain (so the tracker can't see the submit), and you wire a webhook in the form tool to forward each submission to SourceLoop. Both paths give you full marketing source and journey on the lead.
-
My form tool isn't listed. Can I still track it?
Yes. Any HTML form embedded on a page where the SourceLoop tracker runs is captured automatically. For tools that host the form on their own domain and don't offer webhooks, see the Custom form tracking section for the JS snippet to fire on submission success.
-
Do I need to add UTM parameters to capture lead source?
No. UTM parameters help SourceLoop attribute paid campaigns precisely, but they're not required. The tracker also resolves source from the referrer, click IDs (gclid, fbclid, msclkid, li_fat_id), and channel rules. Untagged visits land as Direct or Organic.
-
Can SourceLoop attribute form fills back to specific Google Ads campaigns or Facebook ads?
Yes. SourceLoop captures the click ID on the landing session (gclid for Google Ads, fbclid for Facebook and Instagram, msclkid for Microsoft Ads, li_fat_id for LinkedIn) and stores it on the lead. Each form fill in the Contacts Hub shows the exact campaign, ad group, keyword, or creative that produced the click, and the Traffic dashboard groups every form fill by paid platform and campaign.
-
Will the same lead be captured twice if the form is set to redirect after submit?
No. SourceLoop dedups submissions by email within a short window, so a quick redirect, a submit retry, or a hidden duplicate form on the page won't create two leads.
-
Does this work for multi-step forms?
Yes. SourceLoop captures the lead the moment the final step is submitted (when the email arrives). Intermediate step transitions don't trigger a capture.
-
My form uses AJAX and never fires a real submit event. What do I do?
Use the SourceLoop JavaScript API in your success handler, see Custom form tracking below. Pass the email as the required field; everything else is optional. This works regardless of how the form library handles the submission internally.