UTM Tracking & Campaign Attribution
Tag your campaign URLs so you can see which ads, channels, and emails actually convert.
What UTMs do
UTMs are five extra parameters you append to a URL — utm_source, utm_medium, utm_campaign, utm_term, and utm_content. When someone clicks a tagged link and submits a form, LeadToSheet automatically reads those parameters and attaches them to the submission.
The result: every lead in your dashboard and Google Sheet carries the campaign that produced it. No spreadsheet plumbing, no Zapier, no UTM-only landing pages.
How LeadToSheet captures UTMs
Both capture paths handle UTMs the same way:
- SDK install — the snippet reads the URL on page load, persists UTMs across navigations within the session, and attaches them to every form submission
- Form endpoint (no-JS) — UTMs from the page that submitted the form are picked up via the Referer header. For the most reliable attribution, include the UTMs as hidden fields on your form (see below)
Note
Ad click IDs (gclid, fbclid, msclkid, ttclid, li_fat_id) are captured automatically alongside UTMs — no extra setup required for paid ads attribution.
The five UTM parameters
Use this loose convention so reports stay readable:
- utm_source — where the click came from (google, facebook, newsletter)
- utm_medium — the channel type (cpc, social, email, referral)
- utm_campaign — the campaign name (spring-launch, blackfriday-2026)
- utm_term — paid keyword or audience (optional)
- utm_content — variant for A/B testing (cta-blue vs cta-orange) (optional)
Tip
Pick one casing convention and stick to it — "Facebook" and "facebook" become two rows in your reports. Lower-kebab-case is the safest default.
A worked example
If you're driving traffic from a Google Ads campaign for a spring product launch, your tagged URL might look like this:
- https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=spring-launch
Anyone who clicks that link and submits a form lands in your leads dashboard with utm_source=google, utm_medium=cpc, utm_campaign=spring-launch attached — and a row in your Google Sheet with the same columns.
Tagging URLs
- 1
Build the URL
Use Google's Campaign URL Builder (search "Google URL Builder") or hand-write the query string. Order doesn't matter, but every parameter must be URL-encoded.
- 2
Use the tagged URL in your campaign
Paste it into the destination URL of your ad, the link in your email, or the bio link on social. Each campaign should have its own tagged URL.
- 3
Verify a real submission carries the UTMs
Click your own tagged link, submit the form, then open the leads view and confirm the new row shows the expected utm_source / utm_medium / utm_campaign values.
Hidden-field fallback for no-JS forms
If you're using a form endpoint (no SDK installed), the most reliable way to capture UTMs is to write them into hidden fields on the form so they're submitted with the rest of the data. This avoids any reliance on referer headers.
- <input type="hidden" name="utm_source" value="google">
- <input type="hidden" name="utm_medium" value="cpc">
- <input type="hidden" name="utm_campaign" value="spring-launch">
Tip
If your landing page is dynamic, populate those hidden fields from the URL on page load with a tiny inline script — or just install the SDK, which does it for you.
Where UTMs show up
- Leads table — toggle on the UTM column group to see source, medium, campaign, term, and content per row
- Site analytics — the Sources and Campaigns charts on the analytics page break leads down by utm_source and utm_campaign
- Google Sheet — the synced row includes a column for each UTM parameter, ready for pivot tables and filtered views
Common mistakes
- Mixed casing — Facebook vs facebook fragments your reports
- Spaces in values — use hyphens instead (spring-launch, not "spring launch")
- Forgetting to tag — untagged links land as utm_source=null in reports
- Tagging your own internal links — only tag external URLs that drive new visitors, otherwise UTMs will overwrite the original campaign attribution mid-session
