Google Forms UTM tracking: the source as a prefilled answer
Google Forms cannot hide a field, but it can prefill an answer from the form's URL. TraceLead keeps the campaign, channel and click id of the visit that first found you, and a short script puts them into the embed as prefilled answers, so each response records where it came from.
No card needed. No lead caps on any plan.
- Google Forms: Tested on every release against the builder's markup
- How we test
Added by TraceLead's hidden fields. The name and email stay in your form.
- Channel
- Paid search
- Source / medium
- google / cpc
- Campaign
- brand-uk
- Click ID
- gclid
What Google Forms can and cannot do with the source
There is no hidden question type in Google Forms. The one way to put a value into a form from outside is a prefilled link, where each question's answer is set by an entry.<id> parameter. Those questions stay visible: the respondent sees the channel and campaign and could change them.
The embed is a frame served by Google, so nothing on your page can fill it after it loads, and copying today's UTM tags into its URL helps only when the visitor answers on the page the ad pointed to.
-
Monday
Clicks a Google ad, lands on
/pricing?utm_source=google&utm_medium=cpc&utm_campaign=brand-uk&gclid=…, leaves. -
Thursday
Types your address, opens
/contact, answers the embedded Google Form.
| Question | Copied from the address | Prefilled by TraceLead |
|---|---|---|
| Channel | empty | paid_search |
| Source | empty | |
| Campaign | empty | brand-uk |
| Google click id | empty | Cj0KCQjw… |
TraceLead keeps the first visit in a first-party cookie on your own domain once your banner allows it, and builds the form URL from that record.
How to track the source in Google Forms
Two changes in the form, one script on your page. The script is the tested embedded-form pattern with Google's entry ids in place of TraceLead's field names.
The full Google Forms guide-
Add the TraceLead tag to your site
Paste the one-line script tag on every page, with your site ID, and connect your cookie banner so TraceLead knows when it may store the first touch.
-
Add a short-answer question per value
Add an optional Short answer question for each value you want: Channel, Source, Campaign, Google click id. A short description such as "Filled in for you" tells respondents why they are there.
-
Copy each question's entry id
Open ⋮ → Get pre-filled link, type any answer into the attribution questions and copy the link. Each answer shows up as
entry.<number>=…; note the number for each question. -
Load the form from a script
Map each TraceLead field to its entry id and create the iframe once the stored touch is known. After 1.5 seconds without consent, the form loads with the questions blank.
<div id="enquiry"></div> <script> window.tracelead = window.tracelead || function () { (window.tracelead.q = window.tracelead.q || []).push(arguments); }; (function () { // TraceLead field → the entry id from your pre-filled link var ENTRIES = { channel: 'entry.1111111111', source: 'entry.2222222222', utm_campaign: 'entry.3333333333', gclid: 'entry.4444444444' }; var mounted = false; function mount(fields) { if (mounted) { return; } mounted = true; var params = new URLSearchParams({ embedded: 'true' }); Object.keys(ENTRIES).forEach(function (key) { if (fields && fields[key]) { params.set(ENTRIES[key], fields[key]); } }); var iframe = document.createElement('iframe'); iframe.src = 'https://docs.google.com/forms/d/e/FORM_ID/viewform?' + params.toString(); iframe.title = 'Enquiry form'; iframe.style.cssText = 'width:100%;min-height:600px;border:0'; document.getElementById('enquiry').appendChild(iframe); } window.tracelead('touch', function (fields) { mount(fields); }); setTimeout(function () { mount(null); }, 1500); })(); </script>
What arrives with each Google Forms response
Each attribution question holds a plain value, kept with the response in the Responses tab and in the linked spreadsheet if you use one, ready to sort and filter.
Any other TraceLead field, such as utm_medium, landing_page or first_touch_at, works the same way: one more question, one more line in ENTRIES.
| TraceLead field | Holds | Example |
|---|---|---|
| channel | The channel the first visit came from | paid_search |
| source | Where it came from | |
| utm_campaign | The campaign name from your UTM tags | brand-uk |
| gclid | Google Ads click id, for offline conversion import | Cj0KCQjw… |
| landing_page | The first page seen, sensitive parameters removed | /pricing? |
| first_touch_at | When the first visit happened | 2026-10-05T09:14:02Z |
Attribution without personal data. No names, emails, form values, IP addresses or user agents. Ever.
No privacy workarounds. Nothing before consent, no fingerprinting, no ad-blocker bypass, no cross-site identity.
Made in the UK. GBP pricing, UK consent rules in mind, and a person who answers email.
Questions, answered
Anything else? Email us and a person replies.
Can Google Forms have hidden fields?
No. Google Forms has no hidden question type. What it offers is a prefilled link: each question can be given an answer in the form's URL. TraceLead uses that, so the source arrives as a prefilled answer the respondent can see.
How do I track the source of Google Forms responses?
Add a short-answer question for each value you want, such as Channel and Campaign, find each question's entry id from a pre-filled link, and load the form from a script that puts TraceLead's stored first touch into those entry ids. Every response then carries the channel and campaign of the visit that first found you.
Where do I find a question's entry id?
In the form editor, open the ⋮ menu and choose Get pre-filled link, type any answer into each attribution question and copy the link. Each answer appears in it as entry.<number>=<your answer>; that number is the id to use in the script.
Can respondents see or change the prefilled source?
Yes. The prefilled questions are part of the form, so the respondent sees them and can edit them. Make them optional and give them a short description, so nobody has to answer them and nobody is surprised by them.
Does UTM tracking still work if the form is on a different page from the ad?
Yes. TraceLead keeps the first campaign touch in a first-party cookie for the lifetime you set, 90 days by default, and the script builds the form URL from that record on whichever page the form is embedded.
What does the form show before a visitor accepts cookies?
TraceLead stores nothing until your banner says yes. After 1.5 seconds without consent the script loads the form without prefilled answers, so the form always appears.
Does TraceLead see the other answers in the form?
No. Only the attribution values travel in the form URL. The rest of the response goes from the respondent to Google. Google keeps what you prefill with the response under its own terms, so prefill only what you need.
Your next Google Forms response, with its source.
Add the tag, add a question per value, copy the entry ids and load the form from the script.
No card needed. Cancel any time.
Google Forms: one optional short-answer question per value
Channel, Source, Campaign, Google click id
⋮ → Get pre-filled link gives each question an id:
entry.1111111111 = channel
The form URL your page builds:
https://docs.google.com/forms/d/e/FORM_ID/viewform?embedded=true&entry.1111111111=paid_search