The question usually arrives in a specific shape. Two hundred people were sent a link, forty answered, and somebody wants to know what happened to the other one hundred and sixty. Did they open it. Did they start and stop. Was it the third question or the file upload that lost them. Google Forms answers none of that, and the search for "google forms analytics" is normally the first step in finding out why.
The short version is that Google Forms is a collection tool, not a measurement tool, and the form page is hosted by Google rather than by you. That single fact decides which measurements are possible and which are not, so it is worth being precise about it before installing anything.
What Google Forms reports on its own
The Responses tab has three views. Summary gives charts and grouped text per question. Question steps through one question at a time across all respondents. Individual shows one submission at a time. From the same tab you can use Link to Sheets to send every response into a spreadsheet, or More and Download responses (.csv) to export them. Email notifications for new responses can be switched on there too, and under Accepting responses you can set a close date or a response limit.
That is a complete set of tools for reading answers. Notice what is absent from all of it.
There is no count of how many people opened the form. There is no count of people who started and did not finish. There is no per question drop off. There is no traffic source, so a response cannot be attributed to the newsletter rather than the tweet. The denominator of every rate you might want to calculate simply does not exist inside Google Forms.
This is why the answer to the question "where is the Analytics setting" is not a settings screen. There is no field for a measurement ID, because there is nowhere for the tag to run.
Why the tag cannot sit on the form itself
A Google Form is served from Google's own domain. You publish it, responders open the link, and the page that renders belongs to Google. There is no template, no head section, and no place to paste a snippet. Whatever measurement you want has to happen either before the form or after it.
The second constraint is less obvious and catches people who have measured web forms before. In Google Forms, the setting for what happens after submission is called Confirmation message, and it is a message. You can change the wording. You cannot point it at a page of your own. That means the classic technique of counting completions by measuring a thank you page is unavailable, because no such page exists.
So the honest starting position is this. Three points in the journey can be measured, none of them are inside the form, and each answers a different question.
The three places measurement is actually possible
A page of your own, with the form embedded
Google Forms can be embedded in a page you control, which puts your own tag on the page that surrounds it. GA4 then reports page views, sessions, devices and traffic source for that page in the normal way, which gives you the denominator you were missing.
The limit is the iframe boundary. The embedded form runs on Google's domain inside your page, and a tag on the parent page cannot read what happens inside a frame served from a different origin. Scrolls, keystrokes, question changes and the submit click are all invisible from outside. What you gain is a reliable count of arrivals. What you do not gain is any visibility of progress.
The link, tagged with campaign parameters
Campaign parameters work only where a tag of yours is running. If the shared link points at a page of yours that holds the embedded form, parameters on that link are collected and the report tells you which channel produced the arrivals. If the shared link points straight at the form, the parameters travel to a page Google measures for its own purposes and your property never sees them.
That distinction is the entire argument for embedding rather than sharing the raw link. Not aesthetics. Attribution.
The submission, sent from Apps Script
Google Apps Script supports installable triggers, including one that fires on form submit. Inside that trigger you can call the GA4 Measurement Protocol, which accepts events over HTTP using a measurement ID and an API secret, and have a submission event appear in the same property as your page data.
This is the only method that reports completions without guesswork, because it fires from the form itself rather than from a page. Two cautions are worth stating plainly. The event arrives without a browser session attached, so unless you capture a client identifier on your page and carry it into the form as a prefilled field, the submission will not join to the visit that produced it. And an API secret used in a script is a credential, which means it belongs to the form owner and not in a shared document.
Before setting any of this up, check which question is being asked
The three methods above look like a menu, but they are answers to different questions, and picking the wrong one wastes a week. Three requests turn up most often, and each has exactly one method attached to it.
If somebody wants to know whether the campaign worked, the question is about arrivals and channel, and only the hosting page with tagged links answers it. If somebody wants a reliable count of submissions in the same place as the rest of the site data, the question is about completions, and only the script method answers it. If somebody wants to know why the form is losing people, the honest answer is that Google Forms cannot tell you, and the time is better spent shortening the form than building measurement that will not arrive.
Writing the request down in those terms takes a minute and often ends the project early, because the number already exists in the spreadsheet.
| Where it runs | What it answers | What it cannot answer |
|---|---|---|
| Your page with the embedded form | How many arrived, from where, on what device | Anything that happens inside the form |
| Campaign parameters on the link | Which channel produced the arrivals | Nothing, unless the link lands on your page |
| Apps Script trigger to Measurement Protocol | How many completed, and when | Which visit it belonged to, without extra work |
Put the three together and you have arrivals, channel and completions. You still do not have drop off, and that is not a configuration mistake.
What "where people leave" can and cannot mean here
Sections are the closest thing Google Forms has to steps. A form can hold up to 75 sections and up to 300 pieces of content, counting questions, descriptions, images and videos, which is more than enough to break a long form into stages.
What sections do not do is report progress. A responder who reaches section three and closes the tab leaves no record at all, and no setting changes that. Per step drop off requires the tool to store partial responses, and a tool that only writes a row on submit has nothing to show you. This is a structural property, not a missing feature to be enabled.
Given that, there are two reasonable responses.
The first is to stop trying to find the exact question that lost people and instead test the form as a whole. Cut the length, move anything sensitive such as phone number or salary toward the end, and compare the completion rate on your hosting page across two versions over the same number of arrivals. That is a crude instrument, but it is a real measurement rather than an inference.
The second is to split the request into two stages. Ask for the minimum in the first form, then follow up by email for the rest. Completion on a short form is higher, and the people who do not answer the second stage are now visible as a list of contacts rather than as an unexplained gap. That trade is usually worth more than the analytics you were trying to build.
The arithmetic that is available today
None of this needs a dashboard. Once the form sits on a page you measure, three numbers per week are enough.
Arrivals come from GA4 for the hosting page. Completions come from the row count in the linked spreadsheet, or from the submission event if you set up the script. Divide the second by the first and you have a completion rate that means something, because both numbers now describe the same population. If the link is also sent by email, the click count from the sending tool gives you a third number and the gap between clicks and arrivals tells you whether the link itself is the problem.
Track those on one row per week and the changes will tell you more than per question data would. A completion rate that moves after you cut four questions is evidence. A completion rate you never calculated because the denominator was missing is the situation most teams are actually in.
There is one more number worth keeping, and it costs nothing. Count how long a response waits before somebody answers it. The spreadsheet has the submission timestamp already, and your sent folder has the reply, so a rough figure can be worked out by hand for a single week. Teams that do this once are usually surprised, and the figure tends to explain the completion rate better than any per question data would: people who waited nine days for an answer to their first enquiry do not fill in the second form.
Where measurement stops being the problem
There is a point in this project where people realise they are measuring the wrong end. Forty responses arrived. The question that matters is not which of the other one hundred and sixty gave up, it is who is replying to the forty, whether anyone has replied twice, and what state each conversation is in right now.
Google Forms has nothing for that. A spreadsheet row has no owner and no status, so teams add columns by hand and keep the real state in an inbox. That holds at twenty responses a month and stops holding somewhere around two hundred, when the same applicant gets two different answers or none.
A form builder with response management treats that as the main job rather than an export. Each response keeps an owner, a stage and a history, replies are sent from the same screen as the answers, and the record of what was sent stays attached to the person. The useful comparison is not which tool has better charts but which tool still helps once the response has arrived, and the patterns for recruiting, events, courses and enquiries look quite different from each other in the shapes teams actually run.
What to change first
Move the form onto a page of your own and embed it, so arrivals and channel become measurable at all. Then set one weekly number, arrivals against completions, and leave it alone for a month before changing the form. If the numbers show the collection is fine and the delay is in the replying, the part worth fixing is after the submit, not before it.
Q1. Can a Google Analytics measurement ID be added to a Google Form directly?
No. The form is served from Google's own domain and there is no field for a measurement ID and no template to edit. The nearest equivalent is to embed the form in a page you control and measure that page, which gives you arrivals and traffic source but nothing from inside the form.
Q2. How do you count completions if there is no thank you page?
Use the linked spreadsheet as the count, or send an event from an Apps Script trigger that fires on submit. The Confirmation message setting in Google Forms changes wording only and cannot redirect to a page of yours, so the usual thank you page method is not available.
Q3. Will campaign parameters on a forms.gle link show up in reports?
Only if the link lands on a page where your tag runs. Parameters on a link that points straight at the form are not collected by your property, because the page that opens is not yours. Point the link at your hosting page instead and let the embedded form load there.
Q4. Is there any way to see which question people abandon?
Not with Google Forms. Partial responses are never stored, so there is no record of a session that ended at question three. Per step drop off needs a tool that saves progress as it goes, and if that number is genuinely required, the tool has to change rather than the settings.
Q5. Does the number of responses affect what Google Forms will show?
The Responses tab keeps working as the count grows, and you can cap it deliberately under Accepting responses by setting a close date or a maximum number of responses. The practical limit is not the chart but the spreadsheet, because a wide sheet with manually maintained status columns becomes the slowest part of the process long before the form does.
