Open your referral report. If checkout.stripe.com or paypal.com is anywhere near the top, stop reading the rest of that report — it is describing a measurement artifact, not your marketing.
Payment providers do not send you customers. They send you back your own customers, and GA4 is counting the return trip as an arrival.
What actually happens
- Someone arrives from a Google Ads campaign. GA4 opens a session, source
google / cpc. - They add to cart and hit checkout.
- Checkout redirects them to the payment provider’s domain.
- They pay, and the provider redirects them to your confirmation page.
- GA4 sees a visitor arriving from a different domain and starts a new session, source
checkout.stripe.com / referral. - The
purchaseevent fires inside that new session.
The revenue is now attributed to Stripe. The Google Ads campaign that actually produced the sale shows the cost and none of the return.
The fix takes two minutes
Admin → Data streams → your web stream → Configure tag settings → List unwanted referrals
Add every domain the customer touches in the round trip. Not just the obvious one:
checkout.stripe.com,stripe.compaypal.com,paypalobjects.com- Regional gateways —
mollie.com,adyen.com,razorpay.com,vnpay.vn, whatever applies - 3-D Secure verification domains for the banks your customers use
- Buy-now-pay-later providers — Klarna, Afterpay, Affirm
- Any hosted subscription or billing portal
The 3-D Secure hop is the one most people miss, because it is invisible in the normal flow and only appears for certain cards and certain banks. It will still split the session when it fires.
Why “referral exclusion” is a misleading name
The setting does not delete the traffic. It tells GA4 “an arrival from this domain is not a new campaign — keep the session and its original attribution running.”
The customer stays in the google / cpc session that started the journey. The purchase lands where it belongs.
| Without the exclusion | With it | |
|---|---|---|
| Sessions per purchase journey | 2 | 1 |
| Purchase attributed to | stripe.com / referral | google / cpc |
| Paid ROAS | understated | correct |
| Direct traffic share | inflated | normal |
| Existing data | — | unchanged |
The variant where it shows up as direct
Sometimes the payment domain does not appear in your referral report at all — instead direct traffic is suspiciously high and correlates with purchases.
Same root cause, different symptom. If the referrer header gets stripped on the way back — an HTTPS to HTTP hop, an in-app browser, an aggressive referrer policy on the provider’s side — GA4 has no referrer to record and falls back to (direct) / (none). The session still splits; you just cannot see the culprit.
The fix direction is identical. Add the domains anyway, because the split is what you are preventing, not the label.
The reason this is worth acting on today rather than adding to a backlog: it does not distort your numbers randomly. It systematically moves credit away from the channels that produce sales and toward a domain that produces none. Every day it runs, your paid channels look worse than they are.
Fix it, then annotate it
The exclusion list is not retroactive. Sessions already recorded with Stripe as the source keep that attribution forever. There is no reprocessing.
So: apply the fix, write down the date, and treat any comparison spanning it as a comparison across two different measurement setups. Your paid channels will appear to improve overnight. They did not. You just stopped mis-crediting them.
How you would notice this in the first place
This is where our extension is genuinely useful, and it is a narrow claim: the Referral Details panel in GA4 Simple View lists full referring URLs rather than only hostnames, so a payment domain in your referral traffic is visible on the Traffic tab without building anything.
That is the entire contribution — noticing. The fix itself is two minutes in the GA4 admin panel, it is free, and no third-party tool is required to apply it. The failure mode with this bug is not that it is hard to fix; it is that it runs for months because nobody opened the referral report.
Questions people also ask
Each answer stands on its own, so it still makes sense quoted somewhere else.
Why does Stripe or PayPal show up as a referrer in GA4?
Because the customer left your site for the payment provider and came back. GA4 sees a returning visitor arriving from a different domain, treats it as a new session, and records the payment domain as the referrer. The purchase then gets credited to that domain rather than to the channel that brought the customer in.
How do I stop payment gateways appearing as referrals?
In GA4, go to Admin, Data streams, select your web stream, then Configure tag settings, then List unwanted referrals. Add every payment and third-party domain in your checkout flow, including checkout.stripe.com, paypal.com and any regional gateway or 3-D Secure domain your bank uses.
Does the unwanted referrals list fix historical data?
No. It changes how future sessions are attributed only. Sessions already recorded with the payment provider as the source keep that attribution permanently, so annotate the date you applied the fix and treat comparisons that span it with care.
Why is my revenue attributed to direct instead of the payment provider?
If the referrer header is stripped during the return redirect, which happens with some HTTPS to HTTP hops and some in-app browsers, GA4 has no referrer at all and falls back to direct and none. Same root cause as a self-referral, different symptom, same fix direction.
How does this affect my return on ad spend?
It understates it. Purchases that a paid campaign genuinely produced get credited to the payment domain or to direct instead, so paid channels look less profitable than they are. Teams have cut working campaigns on the strength of numbers distorted by exactly this.
Does this affect subscriptions and 3-D Secure too?
Yes. Any flow that sends the customer to another domain and back can split the session, including 3-D Secure bank verification pages, hosted subscription portals and some buy-now-pay-later providers. Add every domain in the round trip, not just the main payment processor.