All posts
Web design & development

Conversion Tracking for Lead-Gen Websites: Forms, Demos and Signups

Website conversion tracking for lead-gen sites: track form submissions, demo requests and signups in GA4, including embedded HubSpot, Calendly and Typeform forms.

By Mehdi Hassan8 min read

The short answer

Website conversion tracking for a lead-gen site means sending a GA4 event when a form is submitted, a demo is booked or an account is created, then marking those events as key events. Native forms are easy; embedded HubSpot, Calendly and Typeform forms need listeners for the messages their embeds send, or a thank-you page, because tag managers can't see inside iframes.

Key takeaways

  • Track the outcome, not the click: fire events on confirmed submission, not on button press.
  • Embedded forms live in iframes, so GTM's form trigger can't see them; use their message events.
  • Calendly broadcasts a calendly.event_scheduled message you can listen for and send to GA4.
  • Name events consistently, such as generate_lead and sign_up, and mark only real outcomes as key events.
  • Test every conversion in DebugView before launch and after each form or template change.

Part of GA4 Setup for Marketing Websites: The Complete Guide

What should a lead-gen website track as conversions?

A lead-gen website should track the actions that create a sales opportunity: contact and demo form submissions, booked meetings, trial or account signups and, if you sell self-serve, purchases. Those are your key events in GA4. Everything else, like scroll depth or video plays, is supporting behavior that helps diagnose pages but shouldn't be counted as a conversion.

Keep the list short. A property with fifteen key events makes every report noisy and every ad platform optimize for the wrong thing. If you're setting GA4 up from scratch, start with our GA4 setup guide for marketing websites, then come back here for the forms, which is where tracking usually breaks.

Conversion

Suggested GA4 event

Mark as key event?

Demo or sales contact form submitted

generate_lead with a form_name parameter

Yes

Meeting booked in a scheduler

generate_lead or a custom book_meeting event

Yes

Trial or account created

sign_up

Yes

Newsletter signup

a custom newsletter_signup event

Usually no; track it, don't optimize for it

Pricing page viewed

page_view, filtered in reports

No

CTA button clicked

a custom cta_click event

No; it's intent, not an outcome

How do you track form submissions in GA4?

For forms built into your own site, send a GA4 event from your code when the form submits successfully, or use a Google Tag Manager trigger on the success state. The key word is successfully: fire the event after the server accepts the submission, not when someone clicks the button, or failed and duplicate submissions inflate your numbers.

  1. Write the event down first

    Decide the event name and parameters, such as generate_lead with form_name set to demo, before anyone builds anything. A tracking plan template keeps this consistent.

  2. Fire on confirmed success

    In custom code, push the event to the data layer or call gtag inside the submit handler's success branch. In GTM, trigger on a custom data-layer event rather than the generic form submission trigger.

  3. Add useful parameters

    Include the form name and the page it was submitted from. Never send names, emails or other personal data to GA4.

  4. Mark it as a key event

    In GA4, go to Admin, then Events, and mark the event as a key event once it has appeared, or create it in advance under Key events.

  5. Test in DebugView

    Use GTM Preview or the GA4 debug mode, submit a test form and confirm the event and parameters arrive once, and only once.

Why does conversion tracking break with embedded forms?

Embedded forms break tracking because they usually run in an iframe from another domain. Your GTM container and GA4 tag run on your page and can't see clicks, fields or submissions inside a cross-origin iframe, so a HubSpot, Calendly or Typeform submission produces nothing in your analytics unless you listen for the signal the embed sends out.

Most embed providers handle this by broadcasting a message to the parent page with the postMessage browser API when something happens inside the iframe. You add a small listener on your page that catches that message and pushes a data-layer event. The alternative is to redirect to a thank-you page on your own domain and count views of that page.

Embed

What it exposes

How to track it

HubSpot forms

A submission message to the parent page; legacy forms use the hsFormCallback message, newer forms expose submission events

Listener that pushes generate_lead, or a redirect to a thank-you page

Calendly

postMessage events including calendly.event_scheduled

Listener for calendly.event_scheduled that pushes generate_lead or book_meeting

Typeform

An onSubmit callback in its embed SDK

Push the event inside onSubmit, or redirect on completion

Webflow and Framer native forms

A success state on your own page

Trigger on the success message or a data-layer push in custom code

Other iframe embeds

Varies; check the provider's docs for postMessage events

Listener if available, thank-you page if not

How a Calendly listener works, in plain terms

When someone books a meeting in an embedded Calendly widget, the widget sends a message to your page. The message data includes an event name, and the one that matters is calendly.event_scheduled. Your listener checks that the message came from calendly.com, checks the event name, and then pushes an event like book_meeting into the data layer.

In GTM, a custom event trigger fires on book_meeting and sends a GA4 event tag. In GA4, you mark that event as a key event. The whole setup is a few lines of code and two GTM items, and it's an easy gap to miss on sites that book demos through Calendly. HubSpot's newer forms and other embeds follow the same listen-and-push pattern; check their documentation for the exact message names.

Should you use a thank-you page for demo request tracking?

A thank-you page is the simplest and most reliable fallback, and for many startups it's the best choice. After a successful submission, the form redirects to a page like /thanks/demo on your domain, and GA4 counts it as a key event with a page-view-based event. It works with almost any form tool and survives most embed changes.

Pros

  • Works with nearly every form and scheduling tool, including embeds.
  • Easy to verify: if the page loads, the conversion happened.
  • Gives you a place to set expectations, such as what happens next and when.

Cons

  • Direct visits or refreshes of the thank-you page can inflate counts unless you noindex it and keep it out of navigation.
  • Scheduler embeds may not redirect by default, so check the setting.
  • Adds a page load at the moment a buyer is most engaged, so make the page useful.

Whichever method you use, also make sure the lead actually reaches someone. A form that tracks perfectly but whose notification emails go to spam is still a broken funnel; our guide to email deliverability for website forms covers SPF, DKIM and DMARC.

Consent settings decide whether GA4 can store cookies for a visitor, so they directly affect how many conversions you see. In regions that require consent, visitors who decline analytics will either be missing or modeled, depending on whether you use Google Consent Mode. Set it up deliberately, or your conversion counts quietly drop when the banner goes live.

The common failure modes are well documented: tags firing before the consent default is set, missing ad_user_data and ad_personalization signals, and duplicate GA4 or Ads tags from a plugin plus a manual install. Our guide to Google Consent Mode v2 walks through the setup and the mistakes that break data.

How do you check that website conversion tracking is working?

Check it by submitting real test conversions and following them all the way through: browser, tag manager, GA4 and your CRM. A conversion that shows in GTM Preview but not in GA4 reports, or in GA4 but not in the CRM, is still broken. Do this before launch and after every change to forms, templates or consent settings.

  1. Submit each form once with a test email and watch GTM Preview for the data-layer event and the GA4 tag.
  2. Open GA4 DebugView and confirm the event, its parameters and that it fires exactly once.
  3. Check the key event count in GA4 reports the next day, since standard reports lag.
  4. Match against the CRM. Compare a week of GA4 key events with the leads your CRM received. Big gaps mean missed events or consent losses.
  5. Re-test after changes. Form tool updates, redesigns and migrations are when tracking breaks; see analytics continuity in a migration.

If numbers still look wrong, our troubleshooting guide for GA4 not tracking conversions covers the usual causes. Once tracking is reliable, you can start judging your demo request conversion rate with numbers you trust.

Frequently asked questions

What's the difference between a conversion and a key event in GA4?
GA4 has renamed its conversions to key events. A key event is any event you mark as important in GA4, such as a demo request. The word conversion is now used for key events that you import into Google Ads for bidding. In practice, you mark lead events as key events in GA4 and then choose which ones Ads should optimize for.
Can I track form submissions without Google Tag Manager?
Yes. You can call gtag directly from your form's success handler in custom code, or use the event-creation features in GA4 for a thank-you page view. Tag Manager is helpful when several tools need the same event, such as GA4, Google Ads and LinkedIn, because you push one data-layer event and send it to each tag without touching site code again.
Should I send lead data like emails to GA4?
No. Google's policies prohibit sending personally identifiable information, such as names, email addresses or phone numbers, to GA4. Send only non-identifying details, like the form name, the page and the plan the visitor chose. Keep lead details in your CRM, and connect the two through your CRM's own tracking or offline conversion imports if you need to.
Why does GA4 show more conversions than my CRM?
Usually because the event fires more than once per submission, fires on a button click rather than a confirmed submit, or is triggered by both enhanced measurement and a custom tag. Thank-you pages visited directly or refreshed also inflate counts. Check DebugView for duplicate events, remove overlapping triggers and make sure only confirmed submissions are counted.

· CEO & Design Director

Copywriter, designer and developer, and founder of Designify Studio. Over five years, 60+ projects across 14+ industries, for startups that have raised $300M+.

Want this done for you? Website, $8,000.

A multi-page marketing site, designed by us, developed in Next.js and animated. $8,000, one-time, up to 6 pages. Book a free 30-minute call to see if it fits.

Schedule Call