Page changes without a reload
After the first page, Framer usually swaps pages in the browser instead of loading new ones. A GTM page-view trigger fires once, so GA4 and Meta miss most of the pages people visit.
This is for startups, SaaS teams and agencies who build their marketing site in Framer and send paid traffic to it. Framer sites navigate between pages without full reloads, and its forms finish on the same page, so standard tracking misses page views and leads. I install GTM properly, track every page and form submission, and add server-side events for the conversions you bid on.
Proper Framer tracking means adding GTM once in the site-wide custom code, sending a page view on every client-side route change, tracking native forms by their success state or redirect, and keeping Framer's preview and staging domains out of reports. Server-side GTM can add Meta CAPI events, using form webhooks or your app's sign-up data.
The events I set up on Framer, and where each one is sent.
After the first page, Framer usually swaps pages in the browser instead of loading new ones. A GTM page-view trigger fires once, so GA4 and Meta miss most of the pages people visit.
Framer's custom code can run once or on every page visit. Put a GTM or pixel snippet in the wrong mode, or in both site and page settings, and you get duplicate containers and doubled events.
Native Framer forms show a success state on the same page unless you set a redirect. Click triggers on the submit button count failed and empty submissions as leads.
Framer sites also live on a Framer subdomain, and custom code only runs on the published site, not the canvas preview. Without hostname rules, team tests on the Framer domain end up as conversions.
For SaaS sites, the sign-up or trial happens on app.yourdomain.com, not in Framer. Without cross-domain setup, Google Ads loses the click that started it.
| Event | When it fires | Sent to |
|---|---|---|
page_view | First load and every client-side page change | GA4, Meta Pixel (PageView) |
generate_lead / Lead | Framer form shows its success state or redirects | GA4, Google Ads, Meta Pixel + CAPI |
book_demo_click | Click on a demo or booking button | GA4, Meta Pixel |
book_appointment / Schedule | Embedded scheduler confirms a booking | GA4, Google Ads, Meta |
sign_up_click | Click through to your app's sign-up page | GA4 |
sign_up / CompleteRegistration | Account created in your app | GA4, Google Ads, Meta Pixel + CAPI |
I check custom code in site and page settings, embeds and any analytics already connected, and test what currently fires on your live domain.
We agree on the conversions that matter, such as a demo request, a booked call or a sign-up in your app, and how each should be valued.
I set up GTM, route-change page views, form and click events, cross-domain tracking and, where it helps, server-side GTM.
Custom code only runs on the published site, so I publish and test real submissions on your live domain.
You get an event map and notes on what to check when you add pages, forms or new embeds.
A Framer site loads the first page normally, then handles most clicks between pages in the browser. That makes the site feel fast, but it means the browser never reloads, so tags that fire on page load only fire once.
I track page views from the URL changes instead, using a history change trigger in GTM or a small script that pushes a page_view event to the dataLayer. Then I check GA4's enhanced measurement settings so page views aren't sent twice, and confirm in DebugView that each page appears once.
Native Framer forms can show a success state or redirect to a page after submission. I track the success state directly, so only completed submissions count, or use a thank-you page if you'd rather. Where the form is sent to a webhook, that can also feed server-side GTM so Meta CAPI gets a server copy of the lead.
For SaaS sites, the most valuable conversion usually happens in your app. I set up cross-domain tracking so the visit continues from Framer into the app, and have the app push sign-up events, so Google Ads and Meta can credit the right campaign.
Add the GTM head snippet at the start of the head and the noscript snippet at the start of the body in the site-wide custom code settings, set to run once, then publish. Custom code doesn't run in the canvas preview.
Because Framer navigates between pages without full reloads, and a standard page-view trigger only fires on the first load. Send page views on route changes, and check that enhanced measurement doesn't duplicate them.
Track the form's success state, or set a redirect to a thank-you page, and fire the Google Ads conversion from that event. Don't use a button click, as it counts failed submissions.
Framer doesn't run server code, so I use server-side GTM on a subdomain of your domain. Browser events are forwarded there, and form webhooks or your app can send server copies with a shared event ID.
Yes. I set up cross-domain tracking between the Framer site and your app, and work with your developers so the app pushes a sign-up event that GTM sends to GA4, Google Ads and Meta.

Duplicate tags, loose triggers and missing transaction IDs quietly corrupt your conversion data. Here is how to find and fix the most common GTM mistakes.

How enhanced conversions use hashed email and phone data to recover conversions Google Ads would otherwise miss, with setup steps for GTM and leads.
The Pixel tracks from the browser, the Conversion API from your server. Here is why the best Meta tracking setups run both, with shared event IDs.
Get a free audit of your tracking and ad account. Usually replies within 1–2 hours.