Count demo requests as a generate_lead conversion
Each demo request fires a GA4 generate_lead event, so completions sit in your reports next to the campaigns that produced them.
New submission on your demo request form
Send a GA4 generate_lead event with the form name and lead source as event parameters
One-directional. A submission triggers the action — nothing is written back into your form.
A demo request is the point where paid spend stops being a guess. Until the completion is an event in GA4, the report ends at the pricing page and the rest of the story lives in a spreadsheet. This flow sends one generate_lead event per submission, carrying the lead source and the size of the company behind it.
Marketing teams running paid search or a mix of channels reach for it first, usually the week before a budget review. Once the event is marked as a key event, channel and campaign reports show qualified requests rather than sessions.
Setting it up
- 1
Publish the demo request form in formformform and keep "How did you hear about us?" on it — that answer is what makes the event worth reporting on.
- 2
In Google Analytics, open Admin → Data Streams, pick your web stream and copy the Measurement ID. Under Measurement Protocol API secrets, create a secret named for this Zap so it can be revoked on its own.
- 3
Create a Zap with formformform as the trigger app, choose New Submission, and select the published demo request form.
- 4
Add the Google Analytics action that sends a GA4 event through the Measurement Protocol, paste in the Measurement ID and API secret, and set the event name to generate_lead.
- 5
Add the event parameters: lead_source from "How did you hear about us?", company_size from "Company Size", implementation_timing from "When are you looking to implement?".
- 6
Register those three in Admin → Custom definitions as event-scoped dimensions, using the same parameter names. GA4 collects nothing it has not been told about, and a dimension only fills from the day it is created.
- 7
In Admin → Key events, mark generate_lead as a key event so demo requests appear in the acquisition tables beside sessions.
- 8
Send a test submission, watch it land in Realtime → Event count by Event name, then turn the Zap on.
What maps where
Using the Demo Request Form as the starting point. These are its real fields — swap in your own and the mapping works the same way.
| Form field | Google Analytics |
|---|---|
| How did you hear about us? | lead_source event parameter, registered as an event-scoped custom dimension |
| Company Size | company_size event parameter, used to break demo requests down by segment in exploration reports |
| When are you looking to implement? | implementation_timing event parameter, so near-term requests can be counted apart from browsing |
| Job Title | job_role event parameter, kept to a short list of options so it stays under GA4's cardinality limits |
| Work Email | Hashed in a Zapier formatter step and sent as user_id; the address itself never reaches Google Analytics |
Variations worth knowing
Put a Zapier path on "Company Size". Requests above your threshold send generate_lead with a lead_grade parameter of enterprise, the rest send the same event marked self_serve. One event name keeps the conversion count clean, and the parameter does the splitting inside GA4.
GA4 holds counts, not contact details. Add a second action to the same Zap that writes the row into a sheet or your CRM, so the sales team gets the name and email while Google Analytics gets an anonymous event. The submission drives both, and nothing returns to the form.
If something isn't arriving
A Measurement Protocol event carries whatever client ID the Zap sends, not the one in the visitor's browser, so it cannot always be stitched to the session that produced it. Where you can supply the visitor's own GA client ID, map it into the client_id slot; where you cannot, read channel attribution from your on-page tag and treat this event as the conversion count.
Two causes. The custom dimension was created after the events started arriving, so it is empty for anything older, or the parameter name in the Zap does not match the one registered in Admin → Custom definitions character for character. Both fail quietly — GA4 accepts the event either way.
Frequently asked questions
Does this replace the GA4 tag on my site?
No. The tag still records pages, sessions and traffic sources. This flow adds one server-side event for the submission itself, which matters when the form is embedded or sits on a subdomain and the on-page tag never sees the completion.
Can I see who submitted the form in Google Analytics?
You should not send names or email addresses into Google Analytics — its terms rule out personal data, and a free-text field would pass the cardinality limits anyway. Keep the identity in formformform or your CRM, and send the event only.
Will Google Analytics write campaign data back into the submission?
No. The connection runs one direction only: a submission fires an event, and nothing is written back into the form or the response. If you need campaign detail beside the lead, capture it on the way in and pass it to your CRM.
Related automations
- Log support requests with the issue category attached
Each support request sends a form_submit event carrying the issue category, so you can see which topics drive people off the docs.
- Measure newsletter signups as a sign_up event
Every newsletter subscription sends a GA4 sign_up event, so you can build a funnel from landing page visit to completed signup.
- Record webinar registrations as a conversion event
Every webinar registration fires a GA4 sign_up event carrying the session name, so registrations can be attributed campaign by campaign.
- Track survey completions with the rating attached
Every product survey response sends a custom feedback_submitted event carrying the rating, so respondents become a segment you can analyse.
- Weigh quote requests by estimated deal size
Each quote request sends a generate_lead event with a value attached, so pages bringing bigger requests stand out from pages bringing many.
- Add webinar registrants to a remarketing list
Every webinar registration joins a Customer Match audience you can run follow-up campaigns to after the session.
Build the form first
The automation needs somewhere to fire from. Publish a form, connect it once, and every submission from then on runs this flow.
Start free