Third-party checkout tracking

Stripe Payment Tracking for GA4, Google Ads & Meta

Stripe takes the payment on its own page, where your tags cannot run. I connect every successful Stripe payment back to GA4, Google Ads and Meta, with the right value, once, and credited to the ad that brought the customer.

The problem

Why Stripe needs an advanced setup

Installing GA4 and a pixel is enough for most websites. It is not enough when the money is taken on Stripe, because the most important moment of the journey happens on a page your tracking cannot see.

01

Your ads optimise on what they can see

Google Ads Smart Bidding and Meta delivery learn from the purchases they receive. If Stripe payments are missing, campaigns that bring buyers look like they bring nothing, and budget moves to the wrong ads.

02

Basic tracking guesses; advanced tracking confirms

A basic setup counts a page view as a sale. An advanced setup asks Stripe whether the payment was actually paid, so unpaid sessions, refreshed pages and test visits are not counted.

03

Revenue keeps coming after the first payment

For subscriptions, most of the value arrives in renewals that never touch your website. Only Stripe webhooks can report them.

04

The sale must be linked to the click

Stripe knows the customer, not the ad. Without saving click IDs before checkout, even confirmed payments cannot be credited to a campaign.

What goes wrong technically: Your tags cannot run on Stripe Success page visits are not payments Buyers close the tab Renewals are invisible
Basic vs advanced

What changes with advanced Stripe tracking

The same payment, measured two ways.

Basic setup Advanced setup
Where the purchase comes fromA visit to the success pageStripe confirms the payment (session or webhook)
Buyers who close the tabLostTracked from the webhook
Page refreshes and shared linksCounted againBlocked by the Stripe ID
Delayed payment methodsCounted before money arrivesCounted when the payment succeeds
Subscription renewalsInvisibleReported from invoice.paid
Which ad gets the creditOften Direct or stripe.comThe campaign that brought the buyer
Ad blockers and Safari limitsLose eventsServer-side, first-party delivery
How I solve it

The path of one Stripe payment

Every step is built so the purchase is counted once, with the real value, and credited to the right ad.

  1. 1

    Before payment

    When the visitor clicks Buy, I save their GA4 client and session ID, gclid and Meta fbc/fbp, and send begin_checkout. A short reference is attached to the Stripe session so the payment can be matched later.

  2. 2

    During payment

    The visitor pays on Stripe. Nothing is tracked there, and nothing needs to be: the payment is confirmed in the next step, not guessed.

  3. 3

    After payment

    Stripe sends checkout.session.completed to your server-side GTM container on your own subdomain. If the buyer returns, the success page checks the same session, and both use the same ID so the sale counts once.

  4. 4

    Sent to every platform

    The server sends one purchase with value, currency and the Stripe ID to GA4, Google Ads (with enhanced conversions) and Meta Conversions API, together with the saved click IDs.

  5. 5

    Verified

    I test with Stripe test mode, check every platform, then compare a week of live sales with your Stripe payments list. You get the full setup report in PDF.

The result

Every paid Stripe payment counted once, including buyers who never return

Real revenue in GA4, Google Ads and Meta, not page views

Sales credited to the campaigns that brought them

Renewals visible, so you can judge the real value of each campaign

Setups I build

Stripe tracking, matched to how you take payments

Most setups combine two of these, so the browser event and the server confirmation back each other up.

Verified success page

Stripe redirects to your success page with {CHECKOUT_SESSION_ID} in the URL. The session is checked on the server (paid or not) before a purchase is sent, and the ID is used to block refreshes.

Best for: Simple one-off payments

Stripe webhooks → server-side GTM

Stripe sends checkout.session.completed (and async_payment_succeeded for delayed methods) to your server container, which sends the purchase to GA4, Google Ads and Meta even if the buyer never comes back.

Best for: Every serious setup

Payment Links

Payment Links are set to redirect after payment, with client_reference_id added to the link so each payment can be matched to the visitor and their ad click.

Best for: No-code sellers and coaches

Subscriptions & renewals

First payments come from the Checkout Session; renewals come from invoice.paid. Each payment gets its own transaction ID so GA4 and the ad platforms count every renewal once.

Best for: SaaS and memberships
Events

What gets tracked

Standard GA4 event names, mapped to each ad platform.

EventWhen it firesSent to
begin_checkoutThe visitor clicks Buy and leaves for StripeGA4, Meta (InitiateCheckout)
purchasecheckout.session.completed with payment_status paidGA4, Google Ads, Meta (Purchase)
purchase (delayed)checkout.session.async_payment_succeededGA4, Google Ads, Meta
subscription renewalinvoice.paid on a subscriptionGA4 (optional to ad platforms)
refund (optional)charge.refundedGA4 refund event
What you get

Everything included

  • Audit of your current Stripe flow: Checkout, Payment Links, Elements or an app
  • Click ID and GA4 client ID saved before the visitor leaves for Stripe
  • Stripe webhook connected to a server-side GTM container on your domain
  • Purchase sent to GA4, Google Ads (with enhanced conversions) and Meta CAPI
  • Deduplication by Stripe session or invoice ID, so each payment counts once
  • Stripe domains added as unwanted referrals in GA4
  • Test payments in Stripe test mode and one live check
  • Full tracking setup report (PDF) and 7 days of free support
Mistakes I fix

Common Stripe tracking mistakes

  • Counting every visit to the success page as a purchase
  • Sending purchase from both the success page and the webhook with different IDs
  • Using payment_intent.succeeded and checkout.session.completed for the same sale
  • Putting an email address in client_reference_id (Stripe drops values with invalid characters)
  • Losing the GA4 client ID, so server purchases show as (not set) or Direct
Also tracking PayPal?
Guides

Read more about Stripe tracking

GA4 & Tracking

How to Track Stripe Payments in GA4, Google Ads and Meta

Stripe takes the payment on its own page, where your tags cannot run. Here is how to track every Stripe payment correctly, once, with the right value.

5 min read · November 2, 2026
GA4 & Tracking

How to Keep Ad Click IDs Through a Third-Party Checkout

Webhooks know who paid but not which ad they clicked. Here is how to carry gclid, fbc, fbp and the GA4 client ID through Stripe, PayPal and other checkouts.

4 min read · November 2, 2026
GA4 & Tracking

GA4 Cross-Domain Tracking: Setup, Testing and Common Failures

When GA4 cross-domain tracking is needed, how to configure your domains and the _gl linker, handle iframes and payment gateways, and fix what breaks it.

7 min read · October 31, 2026
Support & aftercare

Support after your Stripe tracking goes live

Delivery is not the end of the project. You get a fast reply, a full written report and a free fix window, and you always know what happens next.

Handover

A full tracking setup report, in PDF

No guessing what was done. The report lists your accounts, every event, where it is sent and how it was tested, so your team or any future developer can pick it up.

See a real sample report (PDF)

Reply in 1–2 hours

Message me on WhatsApp, email or Messenger and you get an answer the same day, usually within an hour or two.

7 days free support

Tracking setup is a one-time project. If anything I set up has a problem in the 7 days after setup, I fix it free.

Full setup report (PDF)

You get a complete report of your tracking, so you and your team always know what is set up and where.

  1. 1Day 0

    Setup goes live

    Every event is tested in GTM Preview, GA4 DebugView and each ad platform before handover.

  2. 2Handover

    Full report (PDF)

    What was set up, where each event is sent and how it was tested, in one document you keep.

  3. 3Day 1–7

    Free support

    Anything I set up that stops working or sends wrong data is fixed free. Questions are answered too.

  4. 4After day 7

    Care or hourly

    Tracking Care at $129 a month keeps it checked. Or pay $40 an hour for one-off fixes.

Fixed free in the first 7 days

  • An event I set up stops firing
  • Missing or duplicate conversions
  • Wrong value, currency or order ID
  • Questions about your report or setup

Quoted separately

  • New events, pages or ad platforms
  • A new theme, site rebuild or checkout change
  • Ad campaign changes and new strategy
After day 7

Tracking Care $129/month

  • Monthly health check of GA4, GTM, Google Ads and Meta
  • Fixes for anything that broke (up to 2 hours a month)
  • Alerts when conversions suddenly drop

Or one-off fixes at $40/hour

Ask on WhatsApp
FAQ

Stripe tracking: FAQ

Can I add Google Tag Manager to Stripe Checkout?

No. Stripe-hosted Checkout and Payment Links do not run your own scripts. Tracking happens before the visitor leaves your site, on your success page, and from Stripe webhooks on the server.

Do I need server-side tracking for Stripe?

For reliable purchase tracking, yes. Webhooks are the only way to record payments from buyers who close the tab, and the only way to track subscription renewals. A server-side GTM container receives them and forwards them to each platform.

Will Stripe purchases be credited to my ads?

Only if the click IDs and GA4 client ID are saved before the visitor goes to Stripe and passed with the payment, for example through client_reference_id or session metadata. That is a core part of the setup.

Does this work with Stripe Elements or embedded checkout on my own site?

Yes. When the payment form runs on your site, the browser stays on your domain, which makes tracking easier. The webhook is still added so every payment is confirmed on the server.

Can you track Stripe payments from Kajabi, ClickFunnels or other tools?

Often yes. Many platforms use Stripe behind the scenes. Depending on the tool, I use its own purchase event, its webhooks or Stripe webhooks directly.

Want every Stripe payment tracked?

Get a free audit of your tracking and ad account. Usually replies within 1–2 hours.