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.
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.
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.
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.
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.
For subscriptions, most of the value arrives in renewals that never touch your website. Only Stripe webhooks can report them.
Stripe knows the customer, not the ad. Without saving click IDs before checkout, even confirmed payments cannot be credited to a campaign.
The same payment, measured two ways.
Every step is built so the purchase is counted once, with the real value, and credited to the right ad.
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.
The visitor pays on Stripe. Nothing is tracked there, and nothing needs to be: the payment is confirmed in the next step, not guessed.
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.
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.
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.
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
Most setups combine two of these, so the browser event and the server confirmation back each other up.
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 paymentsStripe 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 setupPayment 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 coachesFirst 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 membershipsStandard GA4 event names, mapped to each ad platform.
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, Metasubscription renewalinvoice.paid on a subscriptionGA4 (optional to ad platforms)refund (optional)charge.refundedGA4 refund eventStripe 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.
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.
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.
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.
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)Message me on WhatsApp, email or Messenger and you get an answer the same day, usually within an hour or two.
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.
You get a complete report of your tracking, so you and your team always know what is set up and where.
Every event is tested in GTM Preview, GA4 DebugView and each ad platform before handover.
What was set up, where each event is sent and how it was tested, in one document you keep.
Anything I set up that stops working or sends wrong data is fixed free. Questions are answered too.
Tracking Care at $129 a month keeps it checked. Or pay $40 an hour for one-off fixes.
Or one-off fixes at $40/hour
Ask on WhatsAppNo. 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.
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.
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.
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.
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.
Get a free audit of your tracking and ad account. Usually replies within 1–2 hours.