This is for coaches, course creators and info-product sellers running ads into ClickFunnels 2.0. Funnels with opt-ins, order bumps and one-click upsells are easy to build but easy to mis-track: purchases get counted twice, or upsell revenue never reaches the ad platforms. I set up tracking that follows each step and reports the true value of every customer.
CFClickFunnels · Ecommerce & lead gen
Opt-in, order form and upsell steps each tracked correctly
Upsell and order bump revenue included in purchase value
Browser and server purchases deduplicated in Meta
One clean setup instead of codes pasted on every step
Proper ClickFunnels tracking means installing GTM once at the right level, firing lead events on opt-in steps and purchase events with real order values on order form, upsell and thank-you steps. Server-side events from order webhooks then go to Meta CAPI and Google Ads with shared event IDs, so nothing is double-counted.
Tracking flow
How tracking works on ClickFunnels
The events I set up on ClickFunnels, and where each one is sent.
01ClickFunnels siteVisitors browse, sign up and buy
03Google Tag ManagerOne web container for all tags
04Server-side GTMOn your own subdomain
Sent to
GA4Ecommerce and lead events
Google AdsConversions
MetaPixel + Conversions API
Why it breaks
Why ClickFunnels tracking goes wrong
Tracking codes on too many levels
ClickFunnels 2.0 accepts tracking code in workspace settings, funnel settings and each page. When a pixel sits at two of those levels, every event fires twice, and when a cloned funnel brings old codes with it, the data gets messy fast.
Upsells break the purchase value
With one-click upsells the buyer pays on the order form, then again on each upsell page without filling in a checkout. If only the order form step is tracked, upsell and downsell revenue never reaches Google Ads or Meta.
Thank-you step reloads count twice
A purchase event tied to a thank-you page view fires again each time a buyer refreshes it or returns from an email link. Without an order ID to deduplicate on, your ROAS looks better than it is.
Native pixel plus custom CAPI
Adding the Meta Pixel through ClickFunnels' settings and then sending server events from another tool, without shared event IDs, means Meta receives two purchases for every sale.
Funnels on a different domain
Many businesses keep their main site on WordPress or Webflow and run funnels on a ClickFunnels domain. Without cross-domain setup, GA4 splits one visitor into two sessions and credits the sale to your own site.
What I set up
My ClickFunnels tracking setup
Funnel step tracking
GTM installed at one level with duplicate codes removed from cloned funnels
Lead events on opt-in and application steps
Order form, order bump, upsell and downsell purchase events
Order or transaction ID on every purchase for deduplication
Cross-domain tracking between your main site and funnel domain
Google Ads & GA4
Google Ads purchase conversion with dynamic value
Separate secondary actions for opt-ins and upsells
Enhanced conversions using hashed customer email
GA4 purchase events with product names per funnel step
Funnel step reporting so you can see where people drop off
Meta Pixel & Conversions API
Lead, InitiateCheckout and Purchase on the right steps
Server-side CAPI purchases from order webhooks
Shared event IDs between the Pixel and CAPI
Customer email, phone, fbp and fbc sent for event matching
Payments & checks
Order totals checked against Stripe or your payment processor
Test purchases run through every upsell path
Refund and cancellation handling agreed for reporting
A short doc so your team can add new funnels safely
Event map
Events I track on ClickFunnels
Event
When it fires
Sent to
generate_lead
Opt-in form submitted
GA4, Google Ads, Meta Pixel + CAPI
view_offer
Sales or order form page viewed
GA4, Meta (ViewContent)
begin_checkout
Order form step loaded
GA4, Meta (InitiateCheckout)
purchase
Initial order paid, including order bump
GA4, Google Ads, Meta Pixel + CAPI
upsell_purchase
One-click upsell or downsell accepted
GA4, Google Ads, Meta Pixel + CAPI
book_call
Application or call booking confirmed
GA4, Google Ads, Meta (Schedule)
Process
How the setup works
01
Audit
I check tracking codes at workspace, funnel and page level, and compare what Meta and Google Ads report with your actual orders.
02
Map the funnel
I list every step in each funnel, from opt-in to order form, bumps, upsells, downsells and thank-you, and decide which event and value each step sends.
03
Build
I set up GTM, the step events and server-side GTM fed by ClickFunnels order webhooks, with event IDs for deduplication.
04
Test every path
I run test purchases that accept and decline each upsell, and check that values and counts match in every platform.
05
Hand over
You get documentation and a checklist for adding tracking to new or cloned funnels.
Tracking order bumps and one-click upsells
In a ClickFunnels 2.0 funnel, one customer can pay several times: the main offer plus a bump on the order form, then one or more one-click upsells. There are two sensible ways to report this. You can send a purchase for each payment with its own value, or send the initial purchase and record upsells as separate conversions.
I pick the approach that matches how you judge ad performance. If you want Google Ads and Meta to optimise for total customer value, include upsell revenue rather than leaving it out.
Deduplicating Meta Pixel and Conversions API
ClickFunnels thank-you pages are fine for the browser pixel, but ad blockers and browser privacy limits stop some of those events. Order webhooks from ClickFunnels, or from Stripe, give a server-side record of each payment that I send to Meta CAPI through server-side GTM.
The browser and server events share the same event ID, built from the order, so Meta keeps one and drops the duplicate. That gives you more complete purchase data without inflating it.
FAQ
ClickFunnels tracking FAQ
Where do I add tracking code in ClickFunnels 2.0?
ClickFunnels 2.0 lets you add code at the workspace, funnel and page level. I usually install GTM once at the broadest level that covers your funnels and manage everything else inside GTM. The important thing is not to load the same pixel in more than one place.
How do I track one-click upsells in ClickFunnels?
Fire a purchase or upsell event when the upsell is accepted, with that offer's price and a unique order or transaction ID. Since there's no checkout form on upsell pages, the event has to be tied to the acceptance itself, the next step or the order webhook.
Why does Meta show more purchases than ClickFunnels?
Usually because the Pixel is loaded twice, thank-you pages are reloaded, or browser and server events are sent without matching event IDs. An audit of the tracking code levels and deduplication setup normally finds the cause.
Can ClickFunnels send purchases to Google Ads with the real value?
Yes. I pass the order value and currency into the Google Ads conversion tag and add a transaction ID so repeat page loads aren't counted. Enhanced conversions with hashed email can improve matching.
Do I need server-side tracking for ClickFunnels?
It isn't required, but it helps if you spend seriously on Meta. Server events from order webhooks recover purchases the browser pixel misses, as long as they're deduplicated.
I use Stripe with ClickFunnels. Does that change anything?
Stripe is useful as a source of truth: I compare tracked revenue against Stripe payments when testing, and Stripe webhooks can be used for server-side purchase events if needed.
A step-by-step guide to Google Ads conversion tracking with GTM: conversion actions, the Google tag, conversion linker, values, transaction IDs and testing.