You published an Everest Forms enquiry form. The ads are tagged. A person clicks, reads a service page, then submits. You open the entry. The name and email are there. The campaign is empty.
The usual fix is a hidden field that reads utm_source from the current URL. Everest’s own documentation describes that as Auto Populate from a query string, and it says the option is Pro on their side. Even if you pay for Everest Pro, it still fails the visit that actually happens. The tags were on the first page. They are gone by the time the form loads.
Hidden fields only see the form page
A hidden field, a static default, or Everest Auto Populate reads the address bar of the page that holds the form. If the visitor landed on /contact/?utm_campaign=roof-repair, the field can fill. Most people do not submit on the landing page. They click a Google ad onto a service URL, click Contact, and send. The form page has a clean URL. The hidden field submits empty.
That is why a tagged test on the form page looks fine, then live Ads leads arrive with no campaign. You tested the wrong visit.
Page cache makes a PHP hidden field worse. The cached HTML was built without that visitor’s query string. A JavaScript snippet that copies the current URL into the field has the same form-page problem unless it stored the first page earlier.
Everest query string populate is a different job
Everest Forms documents Auto Populate as three steps. Enable it on the field, set a parameter name, append that name to the form URL. Their FAQ says the option is Pro on their side. Free Everest can set a static default. It cannot change that default per URL.
That feature is useful when you control the link. An email that opens /contact/?plan=pro can pre-fill a plan field. It is not UTM tracking for ads. Google Ads auto-tagging appends gclid to whatever landing URL you set. It will not rename gclid to the parameter name you typed in Everest. The visitor will not keep that string when they move to another page.
You also do not get organic search, direct, or a referral from a query string you never put on the link. Those visits have no utm_campaign to copy.
Capture the first page, then hook the save
What you need is the landing URL’s tags stored for the rest of the visit, then attached when Everest saves the entry. The capture has to run in the browser so a cached page still sees that visitor’s query string. The attach has to use Everest’s own save hook, so you do not edit the form.
That flow is in How It Works. A small script reads UTM parameters and ad click IDs from the URL, stores them in a first-party session cookie, and the plugin reads that cookie when a supported form is saved.
The free LeadSource plugin does this for Everest Forms as of 1.0.5, still true in 1.0.7. You install it, run the wizard, and leave Everest enabled. You do not add hidden fields, shortcodes, or a parameter name on the form.
It also hooks Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Formidable Forms, Fluent Forms, and Elementor Pro Forms the same way. It does not hook Forminator. If the enquiry form is Forminator, this plugin will not stamp that submission.
What gets stored on the lead
LeadSource writes to its own WordPress table. It does not fill Everest field values and it does not change the Everest entries screen. Open the LeadSource dashboard (or the per-submission email) after a real fill. You should see the name and email Everest already collected, plus the source for that visit.
When the visit had tags or a click ID, you get these values.
- A human traffic source label (Google Ads, Meta Ads, LinkedIn Ads, Microsoft Ads, TikTok Ads, Organic Search, Direct, or Referral)
- utm_source, utm_medium, utm_campaign, utm_term, and utm_content
- The click ID that arrived (gclid, fbclid, msclkid, li_fat_id, or ttclid)
- Landing page
- Form page (from the Everest embed post, when it is there)
- Referrer (the cookie first, then a server-side HTTP referrer fallback if the cookie had none)
gclid is the proof a Google Ads click happened. utm_campaign is the name sales can read. Keep both. Counting Ads conversions against named form rows is a different argument, covered in Why Google Ads Conversions Don’t Match WordPress Form Leads.
Organic and direct visits still get a label. There is no UTM to invent. Direct means this visit arrived without a tag, a click ID, or an external referrer.
Same session only
The cookie is a session cookie. It lasts until the browser is closed. That is the visit that produced the enquiry. It is not a 90-day first-touch cookie, and the free plugin has no 1-day or 7-day window.
If someone clicks an ad, keeps the tab open, reads three pages, and submits, the ad is still there. If they close the browser, come back tomorrow by typing the URL, and submit, the row will show Direct (or whatever this visit actually was), not yesterday’s ad.
If they click a second tagged campaign in the same session, the later click overwrites the earlier one. That is still this visit, not a lifetime score.
Capture is JavaScript in the visitor’s browser. The plugin does not read the first request on the server before cache. Caching plugins do not block the script from seeing the live URL. A consent banner or an ad blocker that stops the script can leave the source empty or Direct. The form still saves.
How to test an Everest form
Do not test by pasting tags onto /contact/ and submitting on that page. That is the hidden-field test, and it will flatter a broken setup.
- Open a landing URL with utm_source, utm_campaign, and a fake gclid (or a real Ads preview URL).
- Click through to a second page that holds the Everest form. The address bar should no longer show the tags.
- Submit with a name and email you can find.
- Open the LeadSource dashboard. The row should show Google Ads (or the label for that click ID), the campaign, the gclid, and the first landing page, not the form page as the landing page.
Then submit once from an untagged internal visit. That row should look like Direct. If both tests look the same, the cookie never ran or Everest is not on the enabled list in LeadSource settings.
Staff fills and your own IP will look like Direct unless you came in on a tagged URL. That is expected on the free plugin. Pro can exclude internal traffic. The free plugin does not.
What it does not do
It does not populate Everest hidden fields. If a Zap or an Everest CRM add-on only reads Everest field values, those fields will still be empty. Use the LeadSource dashboard, the LeadSource email, or the CSV export, or map from LeadSource rather than from Everest meta. Getting those values onto a HubSpot or Salesforce contact is the next job, in How Do I Get WordPress Form UTM and GCLID Data onto a CRM Contact.
It does not upload conversions to Google Ads. It stores gclid so you can match a named lead back to a click. The upload, if you do one, is a separate Ads import.
It does not capture gbraid or wbraid. It does not hook Forminator. It does not claim first-touch plus last-touch. Referrer is the only server-side fallback. UTM and click IDs come from the browser script.
The free plugin on wordpress.org includes the Everest hook, unlimited stored entries, notifications, and CSV export. Lead Source Pro is $99 a year if you want the page journey, saved reports, per-source routing, internal-traffic exclusion, or scheduled client reports. You do not need Pro to stamp UTM data on an Everest submission.
A short checklist
- Confirm the form is Everest Forms, not Forminator.
- Install LeadSource 1.0.7 from wordpress.org and leave Everest enabled in the wizard.
- Do not add hidden UTM fields for this capture. Leave the form as it is.
- Test a tagged landing URL, then a second page, then submit.
- Read the source in the LeadSource dashboard, not only in Everest’s entries list.
- Tell sales the field is this visit, not a 90-day first click.
Once that test passes, the Everest form can keep collecting names the way it already does. The missing piece was the click that produced the name, stored without a hidden field that only works on the form page.

Leave a Reply