How to track the source of your leads in WPForms.
WPForms stores every entry, right down to the geolocation. The one thing it does not store is which campaign sent them.
Works with all WPForms features
Two ways to run it on WPForms.
The plugin files each source beside its WPForms entry in wp-admin. The hosted script sends the lead to your Lead Source dashboard, which keeps it whatever happens to the WordPress install. Identical capture either way. You are only choosing a filing cabinet.
The official plugin
- Writes the source next to each WPForms entry, right there in wp-admin
- Two-click install from the directory, no account needed
- Leaves your Form Entries and notification emails as they were
The one-line script
- One JavaScript line in your <head>, no plugin and no PHP
- Leads land in your Lead Source dashboard, independent of WordPress
- Survives a rebuild, host change or full migration
WPForms is the friendly form builder. It was never the source of truth for where leads come from.
WPForms is the form plugin most people reach for first, and with good reason. Entries get stored, notifications are clean, and the Geolocation addon will even tell you roughly where the submitter was sitting. None of that answers which ad, post or campaign sent them.
The entry, neatly stored
- Every field value, saved as a Form Entry
- Approximate location via the Geolocation addon
- Notifications, confirmations, and entry exports
- Payments, conditional logic and page breaks
Which campaign sent them
- The ad, post or email that earned the visit
- UTM parameters captured at landing, not lost by submit time
- Each page they opened before your form
- A source record that survives a theme or plugin change
Adding a hidden field in WPForms
Drop a Hidden field into the builder, give it a query-string Smart Tag, and WPForms will save a UTM with the entry. The Smart Tag fills in when the form renders. The source, meanwhile, arrived on an earlier page and left with it.
The manual way
- 01Drag five Hidden fields onto each form: source, medium, campaign, term and content.
- 02Populate each with a query-string Smart Tag, matching the parameter name exactly, on every form you build.
- 03Smart Tags only see the URL of the page the form sits on. A visitor who lands on a blog post with UTMs and then opens your contact page hands WPForms a bare address, so now you need a cookie script as well.
- 04Rebuild all of that on the next form, then retest after the next WPForms release or theme change.
With Lead Source
- One install, plugin or script, and every WPForms form on the site reports its source, forms you build later included.
- The UTMs are read on the first page the visitor lands on and kept for the visit. Three pages later, the WPForms entry still has them.
- You read a named campaign on the lead, where a Hidden field would have handed you utm_campaign=spring_q2_v3.
- Next month's WPForms form is covered on day one. Nobody opens the builder to add a Hidden field.
WPForms is very good at the form. The source turns up a few pages before the form does, so it gets caught by something watching the whole site.
WPForms lead source tracking across page views
The query-variable Smart Tag has one page to look at: the one WPForms renders on. Arrive there with the parameter and the Hidden field fills. Arrive anywhere else first and it stays blank.
Most visitors land somewhere else first. They arrive on a blog post, read it, click through to the contact page, submit from there. The parameter never existed on the page the form rendered on, so the hidden field stores an empty string.
Form tracking picks the source up on the page the visitor lands on and carries it from page to page, so it is waiting when the WPForms form eventually appears.
Why the WPForms hidden field is empty
A blank Hidden field in a WPForms entry has four usual suspects.
First, the UTMs stayed on the landing page and the Smart Tag, on the contact page, found none. Second, the Hidden field has no Smart Tag or default value set, so WPForms saves an empty string every time. That one reads as a tracking fault and is a settings fault. Third, the value went in exactly as typed, so google, Google and google.com sit in the entries as three separate sources. Fourth, the notification predates the Hidden field, so the value sits on the entry and never reaches the email.
Test like a stranger would. Load a page with UTMs on it, click two links, then submit the form. If the entry is fine on a direct load and blank on the wander, the session is the problem, and mapping every value to a fixed lead source taxonomy is what stops google and Google splitting your report in two.
One script tag. That’s the whole thing.
Plugin count already high enough? Create an account, copy the tag from your dashboard and put it in the site header. WPForms forms are found on their own from then on, popup embeds and AJAX submits among them. This is roughly what the tag looks like, with a placeholder where your site key goes.
Lead source tracking installs in a few minutes and asks nothing of your Hidden fields. Already running the Smart Tag setup? Check it against the source your forms are capturing today.
<!-- Paste your real snippet from app.leadsource.co --> <script async src="https://app.leadsource.co/ft.js" data-site="YOUR_SITE_KEY"></script>
The real snippet is generated for your account when you sign up. Copy it from the install page in your dashboard. Under 50ms execution. Async, so it doesn’t block your page. No dependencies.
Three steps. Most sites are done in five minutes.
Pick your path
Choose the free plugin from WordPress.org or the hosted tag from your dashboard. WPForms Lite and Pro sites are covered by both.
Activate, or paste the snippet
Plugin: hit Activate, then follow the setup wizard for a minute. Script: add it to the <head> through WPCode, Insert Headers and Footers, or the theme's header file.
Submit a test through any WPForms form
Send a real entry through a WPForms contact form. A minute or two later Lead Source has it, tagged with channel, campaign name and page path attached.
?utm_source=test to the URL before you submit. That’ll be the source on the lead.Questions, answered.
Do I use the plugin or the script for WPForms?
Whichever suits where you want the leads. The free plugin keeps each source next to its WPForms entry in wp-admin and needs no account. The hosted script sends leads to your Lead Source dashboard, so they stay put through a rebuild or a host move. The capture is identical.
Is there an official WPForms plugin on WordPress.org?
Yes, it is free on WordPress.org. In wp-admin go to Plugins, Add New, search "Lead Source", then install and activate. WPForms submissions carry their source from that point, and no individual form needs a Hidden field or a Smart Tag.
Do I need WPForms Pro, or does the Lite version work?
Lite works. Lead Source spots the WPForms submit in the browser, so it has no need for Pro's entry storage or any addon. Lite, Pro and Elite behave the same.
Will it interfere with WPForms entries or notifications?
No. Lead Source watches the submit and logs the source in parallel. Your entries, notification emails, confirmation messages and addons run as they did yesterday, and no WPForms data is changed.
Does it capture UTM parameters on AJAX-submitted WPForms?
Yes, and most WPForms sites submit by AJAX anyway. The UTMs were stored when the visitor landed, so when the AJAX submit fires on a page with no parameters in its URL, the source is already there to attach.
Track your WPForms leads. Free to start.
Every WPForms entry gets its channel, UTMs and page path, from the free plugin or one script. Your first attributed lead can land within minutes.
Start freeFree to start · no card











