← Answers

Why doesn't my Google Analytics revenue match Stripe?

Short answer

Google Analytics and Stripe almost never report the same revenue, and in most cases neither is wrong. The four usual causes are: the two tools bucket days in different timezones; Stripe subtracts refunds from the day of the original charge while GA4 leaves the original purchase intact; ad blockers and consent refusals stop GA4 recording perhaps 10–30% of purchases that Stripe still charges; and GA4 reports in the property currency while Stripe reports in the currency each payment was taken in. Stripe is the authoritative record of money, because it is the system that actually moved it.

Timezone is the most common cause

A GA4 property has its own reporting timezone, set when the property was created and easy to forget. Stripe reports in the timezone of your Stripe account. If the two differ by even a few hours, every sale near midnight is filed on a different day by each tool.

This produces a very recognisable pattern: daily totals disagree, but the weekly or monthly totals are close. If that describes your numbers, timezone is your answer and there is nothing else to find.

Check it in GA4 under Admin → Property settings → Reporting time zone, and compare it with the country on your Stripe account. Changing the GA4 timezone does not retroactively rewrite past data, so historical gaps stay.

Refunds are attributed to different days

When a customer is refunded three weeks after buying, Stripe reduces the revenue of the day they originally paid. GA4 recorded a purchase event on the day of the sale and, unless you send a matching refund event, it stays there permanently.

The consequence is that a past day in Stripe can change after the fact, and the same day in GA4 cannot. Any report built from GA4 will overstate revenue for a period with refunds in it.

GA4 misses purchases that Stripe records

GA4 depends on a tag firing in the buyer’s browser. Stripe records the charge on its own servers. Anything that stops the tag also stops the sale being counted: ad blockers, tracking prevention in Safari and Firefox, a declined cookie banner, a customer closing the tab before the confirmation page loads, or a purchase completed by an offline or manual invoice.

A shortfall of 10–30% in GA4 against Stripe is ordinary. A shortfall above 40% usually means the purchase event is misconfigured rather than blocked, and is worth checking directly.

Currency is converted differently

GA4 converts every transaction into the property currency using its own daily exchange rate. Stripe reports each payment in the currency it was taken in, and converts at payout using the rate at that moment.

If you sell in more than one currency, the two will drift apart permanently, and the gap will move with the exchange rate rather than with anything happening in your business.

Which number should you trust?

Use Stripe for revenue. It is the system that actually moved the money, it is what reconciles with your bank, and it is the number your accountant will use.

Use GA4 for traffic — sessions, users, and where they came from. That is the thing Stripe cannot see at all.

The two are complementary rather than competing, and the useful move is to stop reconciling them and start dividing them. Orders from Stripe divided by sessions from GA4 gives a conversion rate that is correct regardless of which purchases GA4 missed, because the numerator comes from the system that cannot miss any.