New records are arriving with no source
A brand-new contact with an empty source means one link in the chain is broken: the script, the form, the field name, or the way the record was created. Work down the causes in order. The first that matches is almost certainly yours. If your older records are the problem rather than your new ones, read why your traffic shows as Direct instead, at /help/when-a-number-looks-wrong/why-your-traffic-shows-as-direct.
Before you start
Open Setup & diagnostics first. It runs the same checks against your real data and tells you which ones are already passing, so you can skip straight to the one that is failing.
Tip
Test with one form, in a private browser window, using a tagged link. One deliberate submission proves the chain end to end; watching the contact list for real traffic does not tell you which link is broken.
The causes, most common first
Nothing at all is arriving — no source on any new record, from any form
Why: The tracking script is not running on the page. Either it was never pasted, or it is on the form page only and not on the landing pages people arrive at.
Fix: Open Setup & diagnostics. It distinguishes a genuinely missing install from a site that worked and then went quiet, and it names which. Then check the tag is on every page of the site, not only the page the form is on — the source is learned on arrival, not at the form.
One form captures a source and another does not
Why: The second form does not carry the hidden fields. Old landing pages are the usual culprit — a form built before the tracking fields existed, on a page nobody has opened since.
Fix: Open Hidden form fields, choose your tool, and read the badge on each row. With the default Most Recent (Last Touch) · 9 set ticked, a HubSpot form that is missing them reads "0/9 added". Tick that form and click Add to 1 form. Marketo rows carry no badge, so add the fields and read the result line instead.
The hidden fields are on the form, but they submit empty
Why: The field name is not one the tracking script recognises. The script fills a fixed list of 34 names. The bare names utm_source, utm_medium, utm_campaign, utm_term, utm_content, entry_url, current_url and referral_url are not in that list, so a hand-built form using them is never filled by the script.
Fix: Rename the inputs to the Most Recent names — utm_source_most_recent and its siblings — or open Field mapping and record the name you actually use. A mapped name is compiled into the script you are served, and takes effect on the next script load.
Only the First Touch fields are on the form, and only they are empty
Why: Under their default names, the First Touch fields are not in the list the script fills. They are written by the source tracking workflow, which copies each Most Recent value across once.
Fix: Add the Most Recent (Last Touch) · 9 set to the form, then build the workflow on First-touch backfill. Adding the First Touch set to a form on its own does nothing.
The form is embedded from another domain, and the parent page tracks fine
Why: The form renders in a cross-origin frame. That frame has its own cookies and knows nothing about the visit.
Fix: Install the script in both places — on your site and in the form host's layout template. The parent then answers the frame with the resolved values. MarqIQ replies only to a frame whose origin is one of your own domains, a sibling of the same registrable domain, a configured origin, or pardot.com, mktoweb.com, exacttarget.com or sfmc-content.com. HubSpot and Marketo inline forms do not need this.
Everything looks right and nothing is recorded, on any page
Why: Consent gating is on and your banner never reports a decision, so the script keeps waiting and writes nothing.
Fix: Open Script & Deploy and read the consent card. It lists every way a banner can report consent — Google Consent Mode, window.marqiqConsentGranted(), window.MarqIQConsent, or an mp_consent=granted cookie. Setup & diagnostics compares your capture rate before and after consent was switched on, so a broken banner shows up in days rather than after thirty silent ones.
The records with no source were not created by a form
Why: An import, a sales rep typing a name in, or another integration created them. There was no visit and no form, so there was never a source to capture. This is not a fault in your setup.
Fix: Nothing on the website will fix these. Decide how you want them attributed and set the field deliberately. Records that do carry a most-recent value but no first touch can be filled in from First-touch backfill. A record with no recorded source anywhere stays unknown, and MarqIQ says unknown rather than guessing.
The source is right at creation and empty an hour later
Why: Something clears or overwrites the field after the record is made — a workflow, an import, an integration or a person.
Fix: Open Field discipline on the Analysis screen. It names the field, lists the records that changed, and says what made each change. Then move first touch into a field nothing else writes to.
Prove the fix before you trust it
Once you have changed something, run one end-to-end test rather than waiting for real traffic.
Build a tagged link in UTM Builder.
Open that link in a private browser window.
Click through to the form page rather than going to it directly.
Going straight to the form page loses the UTM parameters from the tagged link, so the test proves nothing. Clicking through is what checks the value survives a second page.
Submit the form with a test email address.
Find the test record in your tool.
Read every tracking field on it in order.
The nine Most Recent fields should carry the values from your tagged link. First Touch is filled by the workflow, so check it after the workflow has run.
Note
MarqIQ receives the submission as well, so you do not have to wait for the next sync to see whether anything arrived. The fill appears in the Form fills analysis.
If it did not work
You worked through every cause above and the next test record is still empty
Why: You recorded a name on Field mapping but the browser is still running the script it was served before. A mapped name is compiled into the script you are served, so it takes effect on the next load of that script, not on the next page view.
Fix: Open the test page in a fresh private window with the browser cache emptied, then submit again. Check the served script carries your name by opening it from Script & Deploy.
The empty record you are looking at was created before you changed anything
Why: A fix reaches submissions made after it. A record created an hour earlier is not evidence either way.
Fix: Judge the fix on a record you created yourself after the change, using the end-to-end test above. Records that already carry a most-recent value but no first touch can be filled in from First-touch backfill.
Next steps
Related articles
Was this article helpful?