Tracking Campaign Source in Survey Responses Without Asking a Question¶
"How did you hear about us?" is one of the most common questions tacked onto the end of a survey, and it's also one of the least reliable. People genuinely don't remember which email or ad actually got them there, or they pick the option that feels closest without much confidence, or they skip it entirely because by that point they just want to finish. If you're distributing the same survey link across multiple channels, there's a much more direct way to know where a response came from: capture it from the link itself, automatically, without asking anything.
How This Works¶
A Hidden Field question reads a named parameter straight from the survey link's URL at the moment someone opens it, and stores that value as part of their response - with nothing shown to the respondent at all. Distribute a different version of the same link through each channel, and every response comes back already tagged with exactly where it came from, no self-report required.
Setting It Up¶
Add a Hidden Field question to your survey, and set its URL parameter name to something simple - source, for instance. Then build a distinct link for each channel you're using, appending that same parameter with a different value each time:
- Email campaign:
https://yoursurvey.example/?source=email_march - Social post:
https://yoursurvey.example/?source=social_linkedin - In-app prompt:
https://yoursurvey.example/?source=in_app
Every respondent's answer to the Hidden Field question is filled in automatically based on which link they actually clicked - no manual entry, and nothing for them to get wrong.
Why This Beats a Self-Reported Question¶
It's accurate by construction. A respondent can't misremember or guess incorrectly about something that was captured from the link they clicked, rather than from their own recollection.
It doesn't cost survey length. A self-reported source question is one more thing standing between a respondent and the content you actually want to ask about - a Hidden Field costs nothing in terms of respondent time or attention, since it's never shown at all.
It supports finer granularity than people would bother self-reporting. Distinguishing "email_march" from "email_april" is trivial with a URL parameter and tedious to ask someone to type out themselves - most people would just answer "email" and leave you with less resolution than you actually wanted.
What You Can Do With the Captured Value¶
Beyond simple reporting (filtering or cross-tabbing responses by source in your Report tab), the captured value is available to your survey's display logic from the very first question - so you can route respondents differently depending on which channel brought them in, if that's useful for your specific study.
FAQ¶
Do I need a different Hidden Field for each channel, or one field with different values?
One field, with a different value in the URL for each channel - that's what the field is designed for. You'd only need multiple Hidden Fields if you're tracking genuinely different kinds of information (source and a separate respondent ID, say), not different values of the same kind of information.
What if someone opens the survey through a link that's missing the parameter?
You can configure a default value the field falls back to in that case, or leave it blank to capture nothing rather than a placeholder guess. See our full guide on passing data into a survey with hidden fields.
Does this work the same way for tracking anything besides campaign source - a respondent ID, for instance?
Yes - the mechanism is identical regardless of what the parameter represents. A panel or respondent ID passed the same way lands in your response data just as reliably.
For the complete setup walkthrough, see Passing Data into Your Survey with Hidden Fields.