Google Analytics logo

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.

When this happens

New submission on your demo request form

Do this

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. 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. 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. 3

    Create a Zap with formformform as the trigger app, choose New Submission, and select the published demo request form.

  4. 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. 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. 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. 7

    In Admin → Key events, mark generate_lead as a key event so demo requests appear in the acquisition tables beside sessions.

  8. 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 fieldGoogle Analytics
How did you hear about us?lead_source event parameter, registered as an event-scoped custom dimension
Company Sizecompany_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 Titlejob_role event parameter, kept to a short list of options so it stays under GA4's cardinality limits
Work EmailHashed in a Zapier formatter step and sent as user_id; the address itself never reaches Google Analytics

Variations worth knowing

Give large accounts their own grade

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.

Keep a copy outside Google Analytics

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

The events arrive, but every lead shows as Direct or (not set)

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.

lead_source is blank in every report

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

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