
You've built a beautiful Framer site with lead capture forms. Potential customers are filling them out. But you can't accurately track which forms convert, which traffic sources drive leads, or measure your true ROI.
Framer's Advanced Analytics can help, but it uses event-based pricing. The free tier covers around 25k events per month, after which paid tiers start at roughly $50/month and up depending on your volume.
The alternative? Google Tag Manager + GA4, which is free for the vast majority of Framer sites. The standard version of GA4 has no per-event fees and typically remains free even at very high traffic levels. Only extremely large enterprises with massive data needs would potentially require GA4 360, which is a paid product.

This guide covers two methods to track Framer form submissions with Google Tag Manager and GA4:
Method 1: Thank You pages (Simple) — Best for small Framer sites with 1–3 forms where you just need to count conversions. Setup takes 15–20 minutes and requires no code. Choose this if you're comfortable redirecting users to a Thank You page after submission.
Method 2: Custom listener (Advanced) — Best for agencies, Framer sites with multiple forms on the same page, or anyone who needs granular tracking without redirects. Setup takes 30–45 minutes and involves pasting JavaScript into GTM. Choose this if you use success messages instead of redirects, need to differentiate multiple forms on the same page, or plan to set up Google Ads Enhanced Conversions later.
If you're not sure which to choose, start with Method 1. You can always upgrade to Method 2 later if you hit its limitations.
Tracking form submissions gives you visibility into what's actually driving leads on your Framer site, not just traffic. Here's what proper form tracking enables:
Campaign optimization: See which Google Ads campaigns, Facebook ads, or email campaigns actually generate form submissions instead of just clicks. Stop spending budget on traffic sources that don't convert.
Form performance analysis: Identify which forms convert best and which ones users abandon. Test different form placements, copy, and field configurations based on real conversion data.
Multi-channel attribution: Understand the full customer journey across organic search, paid ads, social media, and direct traffic. Know which channels assist conversions even if they don't get the last click.
Google Ads optimization: Import form submissions as conversions into Google Ads to enable Smart Bidding strategies like Target CPA and Maximize Conversions. Let Google's algorithms optimize toward actual leads instead of just clicks.
Lead quality assessment: Track which traffic sources and landing pages generate the most qualified leads by analyzing form submission patterns alongside your CRM data.
ROI calculation: Calculate true cost per lead and return on ad spend by connecting your marketing costs to actual form submissions in GA4.
You have two main options for tracking forms on Framer sites: Framer's Advanced Analytics or Google Tag Manager with GA4. Here's how they compare:
Framer Advanced Analytics gives you built-in event tracking directly in the Framer Editor with zero code required. You get visual insights about form submissions, button clicks, and user behavior without leaving Framer's interface. The free tier covers roughly 25k events per month, with paid tiers starting around $50/month and scaling up based on volume. This makes sense for teams that work primarily in Framer, have relatively low form activity, and don't need deep integration with Google's advertising and analytics ecosystem.
Google Tag Manager + GA4 provides enterprise-grade tracking and unlimited form events at no cost for the vast majority of sites. You get deeper integration with Google Ads for conversion import and Smart Bidding, the ability to create complex custom explorations in GA4, cross-domain tracking for multi-site setups, and compatibility with your broader marketing stack including BigQuery, Looker Studio, and third-party tools. The tradeoff is a more technical setup that requires understanding GTM concepts like tags, triggers, and the dataLayer.
Many teams use both: Framer Advanced Analytics for quick in-editor insights about overall engagement, and GTM + GA4 for detailed conversion tracking, Google Ads optimization, and reporting. The two systems can run side by side without conflicts.
Before starting either method, ensure you have:
If you haven't set up GTM or GA4 on Framer yet, check out Framer's official guides on how to install Google Tag Manager and how to set up Google Analytics 4.
Before tracking forms, confirm that basic GA4 tracking works on your Framer site:
If you don't see a GA4 tag firing, create one now:

GA4 includes an automatic form tracking feature called Enhanced Measurement. While convenient, it creates conflicts with custom form tracking and can cause double-counting or inaccurate data on Framer sites.
Here's why GA4's automatic form tracking doesn't work well with Framer:
Unreliable detection: GA4's Enhanced Measurement looks for traditional HTML form elements and native browser form submission events. Framer forms are React components that handle submissions through JavaScript, which means GA4 often misses them entirely or captures incomplete data.
No form identification: When Enhanced Measurement does catch a Framer form submission, it can't distinguish between different forms. You'll see generic "form" events without knowing which specific form was submitted.
Double-counting risk: If you implement custom tracking while Enhanced Measurement is enabled, you might count the same submission twice—once from Enhanced Measurement and once from your custom implementation.
Turn off Enhanced Measurement's form tracking before implementing either method in this guide:

This disables only automatic form tracking. Other Enhanced Measurement features like scroll tracking, outbound clicks, and video engagement remain active.
This method uses Framer's built-in redirect feature to send users to a Thank You page after form submission. GA4 tracks the page view as a conversion. No custom code required.
Method 1 is ideal if your Framer site has:
Choose Method 2 instead if you have multiple forms on the same page that would all redirect to the same Thank You page, need to show success messages without redirecting users, or want detailed form-level data for each submission.
Create a separate Thank You page for each form type you want to track.
In the Framer Editor, create new pages with descriptive slugs:
Add a simple confirmation message to each page thanking users for their submission.
Important: In each page's SEO settings, add a noindex meta tag or configure your robots settings to prevent Google from indexing these pages. You don't want Thank You pages appearing in search results. Users should only reach these pages through form submissions, not organic search.

For each form on your Framer site:

Test each form to confirm it redirects to the correct Thank You page after submission. Fill out the form on your published Framer site (not preview mode) and verify the redirect works as expected.
For each Thank You page, create a trigger that fires when users visit that page.

This listens for the page_view event that Framer sends when it navigates to your Thank You page (even when the site behaves like a single-page app).
Now create the GA4 event tag that fires when users reach your Thank You page:
Repeat this process for each form type, creating a separate tag with a descriptive event name for each Thank You page.

Test your implementation before publishing:

Once everything works correctly, click Submit in GTM to publish your changes.
Now verify the event appears in GA4:

Once your events are flowing into GA4, mark them as Key Events to use them as conversions:
To import this conversion into Google Ads:
That's it for Method 1. For most small Framer sites with straightforward forms, this setup is all you need.
Before moving on, consider whether these limitations affect your use case:
Requires page redirects: Users must be sent to a new page after submission. If you prefer showing a success message on the same page without a redirect, this method won't work.
One conversion per Thank You page: If you have multiple different forms that redirect to the same Thank You page, GA4 can't distinguish between them. You'll see all submissions as a single conversion type.
Back button overcounting: If users click the browser back button after reaching a Thank You page and then resubmit the form, GA4 counts both submissions as separate conversions. For most sites this is rare, but it can skew data.
No form-level detail: You track page views, not actual form submissions. If users somehow reach your Thank You page without submitting a form (direct link, bookmark, etc.), it counts as a false conversion.
Difficult multi-form pages: If you have a page with multiple forms—like a contact form and a newsletter signup in the footer—both would redirect to different pages. This creates a disjointed user experience.
If any of these limitations are dealbreakers, use Method 2 instead.
This method uses a JavaScript listener in GTM that monitors Framer's native form events and pushes detailed data to GA4. It requires some code but provides more accurate tracking and works without redirects.
When you configure a Framer form with a Tracking ID, Framer automatically fires a custom JavaScript event called framer:formsubmit each time that form is successfully submitted.
This method adds a listener to your Framer site that:
The result is accurate, real-time form tracking without redirects, with full visibility into which specific form was submitted even if you have multiple forms on the same page.
The listener only captures form metadata—never actual form field values.
Here's what the listener does send to GA4:
Here's what the listener does not send to GA4:
This is intentional. Google's Terms of Service explicitly prohibit sending personally identifiable information (PII) to GA4. Violations can result in your account being suspended and your historical data deleted. The actual form data users submit goes through Framer's native integrations to your email, Google Sheets, webhooks, or CRM—not to GA4.
While Method 2 handles native Framer forms reliably, it has some limitations:
Embedded third-party forms: Forms embedded via iframe (Typeform, HubSpot, Tally, Calendly, etc.) run in a separate browsing context and cannot be tracked with this listener. You'll need to use each platform's native GA4 integration or their own GTM tag.
Rare server-side errors: The listener fires when Framer's framer:formsubmit event occurs, which happens after client-side validation. If Framer's backend encounters a server error after the event fires, the event still gets tracked even though the submission technically failed. This is extremely rare in practice.
Multi-step form intermediate steps: If you build a multi-step form in Framer, the framer:formsubmit event only fires on the final submission, not intermediate steps. Track those separately if needed.
For Method 2 to work, each Framer form must have a unique Tracking ID configured. Without a Tracking ID, Framer won't fire the framer:formsubmit event and GTM will receive nothing.
To add Tracking IDs to your Framer forms:

Important: Changes to Tracking IDs only take effect on your published Framer site, not in preview mode. Always republish after adding or modifying Tracking IDs.
This tag contains the JavaScript that listens for Framer's framer:formsubmit event and pushes data to the dataLayer.
<script>
/*!
* BRIX Templates Framer Form Listener for GTM & GA4
* ----
* Listens to native Framer `framer:formsubmit` events and pushes
* framer_form_submit with form_id, form_url and page_title
* into dataLayer to use in GTM + GA4.
* Simple version: uses only the Tracking ID configured on each Framer form.
*/
(function () {
'use strict';
// Ensure dataLayer exists
window.dataLayer = window.dataLayer || [];
// Avoid attaching the listener twice
if (window.__brixFramerFormListenerAttached) return;
window.__brixFramerFormListenerAttached = true;
document.addEventListener('framer:formsubmit', function (event) {
var details = event && event.detail ? event.detail : {};
var trackingId = details.trackingId || 'unknown';
window.dataLayer.push({
event: 'framer_form_submit',
form_id: trackingId,
form_url: window.location.href,
page_title: document.title || ''
});
});
})();
</script>This listener runs once when the page loads and attaches an event listener that waits for the framer:formsubmit event. When it fires, the listener extracts the Tracking ID and pushes it to the dataLayer along with the current page URL and title.

This trigger fires when the listener pushes the framer_form_submit event to the dataLayer.

These variables extract the form data from the dataLayer so your GA4 tag can access it.
Create three Data Layer Variables:
Variable 1: form_id

Variable 2: form_url
Variable 3: page_title
This tag sends the form submission data to GA4 whenever the framer_form_submit event is pushed into the dataLayer.

Now every time Framer fires framer:formsubmit and your listener pushes framer_form_submit to the dataLayer, this GA4 event will be sent to Analytics.
Privacy note: This listener only captures the form's Tracking ID and page metadata—it does not capture any form field values (names, emails, phone numbers, messages). This is intentional and keeps you compliant with GA4's PII policies.
Alternative event name: You can use generate_lead instead of form_submission if you prefer alignment with GA4's recommended events. Either name works fine as long as you mark it as a Key Event in GA4.
Test your implementation before publishing:

Now verify in GA4 DebugView:

If everything looks correct, click Submit in GTM to publish your container.
Once your events are flowing into GA4:

The primary identifier for forms in Method 2 is the Tracking ID you assign in Framer. For cleaner GA4 reports, use consistent, descriptive Tracking IDs like contact_form, demo_pricing, or newsletter_footer.
For even more readable reports, create a Lookup Table variable in GTM that maps Tracking IDs to human-friendly labels:
Then modify your GA4 Event tag to use this lookup variable instead of the raw form_id:
Now your GA4 reports will show "Contact form – Main page" instead of "contact_form_main".
Proper testing ensures your tracking works before real users start submitting forms.
After testing in GTM:
Testing in Framer's preview mode instead of the published site: Custom code and redirects only work on your published Framer domain, not in Framer's preview environment. Always test on your live site.
Missing Tracking IDs in Method 2: If forms don't have Tracking IDs configured in Framer, the framer:formsubmit event never fires and GTM sees nothing. Double-check each form has a Tracking ID set.
Forgetting to publish after GTM changes: Changes made in GTM Preview mode don't affect real users until you click Submit to publish the container. Test thoroughly, then publish.
GTM + GA4 isn't always the right choice for every Framer site. Here's when Framer's Advanced Analytics (an add-on for Business/paid plans) might make more sense:
Low form activity: If your site stays within Framer's free tier (around 25k events per month), you get analytics without any setup. The convenience might outweigh the GTM implementation effort.
Teams that live in Framer: If your designers and content editors already work in the Framer Editor and don't use Google Analytics, keeping analytics inside Framer means one less tool to learn.
Quick visual insights: Framer's analytics provides visual engagement data that's native to the platform. If you're focused on basic metrics without deep conversion analysis, it's faster to use.
No technical resources: If your team doesn't have anyone comfortable with JavaScript, dataLayer concepts, or tag management, Framer's turnkey approach avoids potential setup errors.
GTM + GA4 makes more sense when:
Many teams use both: Framer Advanced Analytics for quick in-editor insights about overall engagement, and GTM + GA4 for detailed conversion tracking, Google Ads optimization, and reporting. The two systems can run side by side without conflicts.
Form submissions aren't appearing in GTM Preview at all: Verify that each form has a Tracking ID assigned in Framer. The framer:formsubmit event only fires for forms with Tracking IDs. Also confirm you're testing on your published Framer site, not Framer's preview mode—custom code doesn't execute in preview. Republish your site after setting Tracking IDs.
The form_id shows as "unknown" in GA4: This means the Tracking ID isn't being captured correctly. Ensure each form has a Tracking ID set in Framer's form properties panel. Publish your Framer site after adding or changing Tracking IDs—changes don't take effect until published.
The framer_form_submit event appears but the GA4 tag doesn't fire: Check that your Custom Event trigger is attached to your GA4 Event tag in the Triggering section. Verify that the event name in your trigger (framer_form_submit) exactly matches the event name in the listener code—event names are case-sensitive.
Events show in GA4 DebugView but not in standard reports: DebugView displays real-time data, while standard GA4 reports have a processing delay of 24–48 hours. Check that you're looking at the correct date range in reports. Also verify the event is marked as a Key Event if you want it to appear in conversion reports.
GA4 shows more submissions than expected: Check if GA4's Enhanced Measurement is creating duplicate form events. Go to Admin → Data streams, click on your web stream, then click the gear icon next to Enhanced measurement. Disable Form interactions to prevent GA4 from automatically tracking forms alongside your custom tracking.
The listener doesn't track my embedded form (Typeform, HubSpot, Tally, etc.): Third-party forms embedded via iframe run in a separate browsing context and cannot be accessed by scripts on your main page. You'll need to use the third-party platform's native analytics or their GTM integration. This is a browser security limitation.
Redirect tracking counts duplicate submissions: If users click the browser back button after reaching a Thank You page and resubmit, GA4 counts both submissions. This is rare but can happen. Consider switching to Method 2 if this affects your data significantly.
Multiple forms redirect to the same Thank You page: Method 1 can't distinguish between different forms that share a Thank You page. Switch to Method 2 or create unique Thank You pages for each form type.
Use a custom JavaScript listener that monitors Framer's native framer:formsubmit event and pushes data to GTM's dataLayer. GTM's built-in Form Submission trigger and GA4's Enhanced Measurement don't work with Framer's React-based forms. The setup includes a Custom HTML tag with the listener, Data Layer Variables for form_id and metadata, and a GA4 Event tag.
GTM's Form Submission trigger relies on native HTML form events that fire when a traditional form element submits. Framer forms are React components that handle submissions through JavaScript without triggering browser-native form events, so GTM never sees them. The custom listener monitors Framer's own framer:formsubmit event instead.
Yes, absolutely. If a form doesn't have a Tracking ID configured in Framer's form properties, Framer won't emit the framer:formsubmit event and GTM will receive nothing. The Tracking ID is required for Method 2 to work. Method 1 (Thank You pages) doesn't require Tracking IDs since it tracks page views instead of form events.
Both work fine. Use generate_lead if you want alignment with GA4's recommended events and only track lead-generation forms. Use form_submission if you track multiple form types and prefer clarity. Either way, mark it as a Key Event in GA4 for conversion tracking. The event name doesn't affect functionality, only how it appears in reports.
Go to Admin → Data display → Events, find your form_submission event (may take 24–48 hours to appear after first submission), and toggle "Mark as key event" next to it. To import into Google Ads: go to Tools & Settings → Conversions → Import → select your GA4 property → check your form_submission event. This enables the event for conversion tracking and Smart Bidding.
Give each form a unique Tracking ID in Framer (like contact_form_main, demo_pricing, newsletter_footer). The listener automatically captures this ID and sends it as the form_id parameter. In GA4, create explorations that filter by form_id to analyze each form separately. You can also create conditional GTM triggers based on form_id to fire different events for different form types.
No. The listener only works with native Framer forms that use Framer's built-in Forms component and fire the framer:formsubmit event. Forms embedded inside iframes can't be tracked this way due to browser security restrictions. For third-party embedded forms, use the platform's native GA4 integration or their official GTM tags.
The listener only sends metadata: the form's Tracking ID (form_id), the page URL where submission occurred (form_url), and the page title (page_title). It does not capture any form field values like names, emails, phone numbers, or messages. This keeps you compliant with GA4's PII policies. The actual form data goes through Framer's native integrations to your email, CRM, or webhook.
The listener fires when Framer's framer:formsubmit event occurs, which happens after client-side validation and when Framer begins processing the submission. It won't capture rare edge cases where Framer's backend encounters server errors after the event fires. It also won't automatically track intermediate steps in multi-step forms unless you configure those separately.
Yes. Framer's custom code and the framer:formsubmit event only execute on the published site, not in Framer's preview mode. Always test your tracking on the published domain. Make sure to republish your Framer site after adding Tracking IDs or making form changes—those updates don't take effect in preview mode.
You've implemented professional form tracking that works reliably for most Framer sites without per-event fees. Whether you chose Method 1 (Thank You pages) for its simplicity or Method 2 (custom listener) for its power and flexibility, you now have accurate conversion data flowing into GA4.
Next steps to get more value from your tracking:
Create custom explorations in GA4 to analyze form performance by traffic source, landing page, and device type. Build audiences based on form completers for remarketing campaigns. Import your Key Events into Google Ads to enable Smart Bidding optimization toward actual leads instead of just clicks. Set up custom dashboards in Looker Studio to visualize form conversion trends over time.
Test different form placements, field configurations, and copy to see what drives more submissions. Use GA4's path analysis to understand the journey users take before completing forms. Compare conversion rates across traffic channels to identify your highest-quality lead sources.
For advanced implementations like Enhanced Conversions with hashed email data, CRM integrations via GTM, or custom reporting dashboards, our Framer agency team can help you take your analytics further.

Learn how to track specific Webflow button clicks using Google Tag Manager and send detailed events to GA4—no coding required.

Set up accurate Webflow form tracking with GTM and GA4. Learn multiple methods, custom listeners, testing, and troubleshooting.

Switching to Framer? Learn how to preserve SEO rankings, fix on-page issues, and boost search performance during migration.