How to Track Stripe Payments in Google Ads and GA4
Stripe knows about every payment. Your ad platforms know about none of them. Here is how to connect the two with webhooks and click IDs.

Stripe knows every payment you have ever taken. Google Ads knows none of them.
For SaaS and service businesses that is a real gap, because the payment often happens days after the click, on a page that has no tracking on it, or through an invoice sent by email.
Why the usual approach falls apart
The standard advice is to fire a conversion on your success page after Stripe redirects back.
That works if every payment goes through a checkout the customer completes in one sitting, in the same browser, with cookies intact. Which describes some businesses and not most.
It breaks when:
The customer pays an invoice from their email a week later.
They start on mobile and finish on desktop.
A subscription renews automatically with no browser involved.
Payment succeeds but the redirect fails, which happens more than you would think.
Their browser blocked the tracking on the way through.
Every one of those is a real payment that your ad account never hears about.
The reliable pattern
Report from Stripe’s webhook, not from the browser.
Stripe fires a webhook the moment a payment succeeds, regardless of what the browser is doing. That is your source of truth. The job is to connect that webhook back to the original ad click.
Four steps:
Capture the click ID on arrival. When someone lands from an ad, grab the identifier from the URL.
Attach it to the Stripe object. Pass it into metadata on the customer or the checkout session. This is the crucial step.
Listen for the webhook. payment_intent.succeeded or checkout.session.completed, depending on your flow.
Send the conversion to Google Ads with that click ID, the amount, the currency, and a timestamp.
Step two is where implementations fail. If the click ID is not on the Stripe object, the webhook arrives with no way to identify which ad produced it, and you are stuck.
Image: architecture diagram showing ad click to landing page to Stripe checkout with metadata, then webhook to server to Google Ads.
Getting the click ID into Stripe
How you do it depends on your setup.
Stripe Checkout. Pass metadata when you create the session server side. Read the click ID from a cookie your site set on arrival.
Payment Links. Append the click ID as a URL parameter and map it into metadata.
Invoices. Set the metadata on the customer when they first sign up, so it carries to every invoice later.
For subscription businesses, storing it on the customer rather than the session is the better move. Then every future renewal already has it.
Amounts, and the mistake with them
Stripe reports amounts in the smallest currency unit. A fifty dollar payment arrives as 5000.
Send that straight through and you will report fifty times your actual revenue. Your ROAS will look astonishing and every decision you make from it will be wrong. Divide before sending.
Also decide how to handle Stripe fees and taxes. Reporting gross is normal and simpler. Just be consistent.
Refunds and failed payments
Stripe will also tell you when a charge is refunded or a subscription payment fails. Those should flow back as conversion adjustments, or your reported performance drifts away from reality over time.
This matters most for businesses with meaningful involuntary churn from expired cards. Those failures are invisible otherwise.
Should GA4 get these too?
Yes, and it is worth doing. Send the same payment to GA4 through the Measurement Protocol so your funnel reports include the money, not just the signups.
Use the same transaction ID in both places. When the numbers disagree later, and they will, a shared ID is how you work out which system is wrong.
Verifying it
Make a real test payment through your normal flow.
Confirm the click ID appears in the Stripe object metadata.
Confirm the webhook fired and your endpoint received it.
Check the payload sent to Google Ads for a valid click ID and a sane amount.
Wait 24 to 48 hours and confirm the conversion appears.
Reconcile a month of Stripe revenue against reported conversions.
Expect reported conversions to be lower than total Stripe revenue, because not every customer came from an ad. If they match exactly, something is being attributed that should not be.
Need this built properly?
If your payments live in Stripe and your ad account cannot see them, connecting the two usually changes which campaigns look profitable. I set up and repair tracking for ecommerce stores and lead generation businesses, so the numbers in your ad accounts match the money in your bank account.
Have a look at what I do, or book a call and we can go through your setup together.



















