Skip to content
← All articles

Analytics & Tracking

Your Donation Platform Is on Another Domain, and GA4 Lost the Donor

Classy, Givebutter, Donorbox and the rest take the gift on their own domain, which breaks the session and credits the appeal to nobody. How to tell what is happening, and what actually fixes it.

September 24, 2026 · 10 min read

A tagged visit ending at a domain boundary while a new, unattributed visitor starts on the far side and reaches the donation

Someone opens your spring appeal, clicks through, reads the page, and clicks Donate. The button sends them to give.yourplatform.org. They give fifty dollars.

In your donation platform's dashboard, that gift is there with the others. In GA4, something stranger has happened. Either there is no record of it at all, or there is a conversion credited to a brand new visitor who arrived from nowhere in particular. The appeal that earned the gift shows nothing.

Multiply that by every gift you take, and the report you use to decide next year's fundraising is describing a different organisation than the one that exists.

What actually happens when a donor crosses to your donation platform?

The moment the donor leaves your domain, GA4 stops recognising them.

Analytics identifies a browser with an identifier stored against the domain that set it. yoursite.org can read the identifier it wrote. give.yourplatform.org cannot: different domain, different storage, no access. So when your donor lands on the platform, the tag there, if there is one, sees somebody it has never met.

That produces two separate records of one person. A session on your site that came from your email campaign and ended without giving anything. A session on the platform by a new user who appeared out of nowhere and donated. Nothing connects them.

Then it gets worse in a specific way. The platform can usually see it was your site that sent the visitor, so it records a referral from yoursite.org. Your own domain shows up in your reports as a traffic source, sending you donors. That is the self-referral, and it is the clearest fingerprint of this problem.

The campaign, meanwhile, is gone. It was attached to the session that did not convert.

Why the gift often disappears entirely

The version above assumes your tag is on the platform at all. Frequently it is not, and then the gift is not misattributed. It is invisible.

Donations complete on the platform's confirmation page. That page belongs to the platform, not to you, and unless someone deliberately put your measurement ID into the platform's settings, nothing there reports to your property. GA4 never learns the donation happened.

This is why the first number to check is not your attribution, it is your total. Open GA4 for last month, find whatever you count as a donation, and compare it against the platform's own dashboard for the same period. If GA4 is showing a fraction of the gifts, or none, you do not have an attribution problem yet. You have a collection problem, and attribution is the thing you fix second.

How do I tell if this is happening to me?

Three checks, in order, and none of them takes long.

Reconcile the totals. GA4's donation count against the platform's, for the same month. A large gap means the platform is not reporting to you.

Look for the self-referral. In the traffic acquisition report, look for your own domain or the platform's domain listed as a source. Neither belongs there. Your own domain appearing as a referrer is not a curiosity, it is the session break made visible.

Check the hostname. Build an exploration with Hostname as the dimension. You should see your own domain, and you should see the platform's domain if your tag is installed there. If the platform's domain is absent, your tag is not on it and nothing it does is being recorded.

Then walk the donation flow yourself, slowly, with the network tab open. Click your Donate button and look at the URL you land on. If cross-domain measurement is working you will see a _gl parameter appended to it, carrying the identifier across. If the URL is clean, nothing is being carried and the two sessions are already separate.

Which of the three setups are you dealing with?

The right fix depends on how the platform is attached to your site, and the same vendor often offers more than one arrangement. Find out which you have before changing anything.

A redirect to their domain. The donor leaves your site entirely. This is the classic case and the one cross-domain measurement was built for.

An embedded form in an iframe. The donor appears to stay on your page, but the form inside it is a separate document belonging to the platform. Your tag on the parent page cannot see inside it, so it does not know the form was submitted. Confusingly, this often looks healthiest, because your analytics shows a normal session on your own domain that simply never converts.

A form hosted on your own domain. The best case, and the rarest. No boundary is crossed and ordinary tracking works, though the confirmation step can still redirect away at the last moment, so follow it to the end before assuming you are fine.

How do I fix it properly?

For the redirect case, cross-domain measurement is the real answer, and it has one prerequisite people miss.

In GA4, open Admin, then Data Streams, choose your web stream, then Configure tag settings, then Configure your domains. List both your site and the donation platform's domain. From then on the Google tag appends the _gl parameter to links between them, so the identifier travels and the two sessions become one.

The prerequisite is this: your measurement ID has to be present on both domains. Cross-domain measurement links two tags. If the platform has no tag of yours, there is nothing at the other end to link to, and the setting changes nothing at all.

So the actual question is whether your platform will let you install it. Many donation platforms have a settings field for a GA4 measurement ID or a Google Tag Manager container, sometimes only on paid tiers. Find that field first, because everything else depends on it. If it exists, fill it in, add both domains to the cross-domain list, and most of this problem goes away.

Why excluding the referral is not the fix

This is the step that gets taken instead, and it is worth understanding what it actually does.

GA4 lets you list unwanted referrals, which stops a domain being recorded as a traffic source. Add the donation platform, and the self-referral disappears from your reports.

The problem does not. Without the identifier crossing over, the donor is still a new user on the other domain, still disconnected from the session that brought them. All you have changed is where the gift lands: instead of being credited to a referral from your own site, it is now credited to direct traffic. It looks tidier and it tells you exactly as much as before, which is nothing.

Referral exclusion is worth doing alongside cross-domain measurement, to clean up the edges. On its own it removes the evidence and keeps the fault. If you only ever do one of the two, do the other one.

What if the platform will not let me install my tag?

Some will not, and no amount of configuration gets round it. The honest answer is that you cannot fully measure a black box, and the options are about recovering most of the value rather than all of it.

Track the click, and label it honestly. Fire an event when someone clicks through to donate. It is intent, not a gift, and it must never be set up as your donation conversion or you will optimise toward people who nearly gave. Used as a step rather than an outcome, it tells you which appeals send people to the form, which is most of what you wanted to know.

Send the gift back yourself. If the platform offers webhooks or a data export, you can push completed donations into GA4 through the Measurement Protocol, or import them into Google Ads as offline conversions. This is the version that genuinely recovers attribution, and it has a condition: you need an identifier captured at the start and carried through, whether that is the GA4 client ID or the gclid from an ad click. If the platform will pass a hidden field through to its export, that is the hook to hang it on.

Reconcile outside the tools. Export gifts from the platform, export sessions from GA4 or BigQuery, and match on date, amount and campaign where you can. It is manual and imperfect, and for an annual appeal it is often good enough to answer the only question that matters: did this campaign raise money.

How do I verify it worked?

Do the same walk as before and expect different results.

Click Donate and confirm the _gl parameter is now on the destination URL. Complete a real donation, using your own card if you have to, and confirm it appears in GA4 with the campaign that brought you, not as direct and not as a referral from your own site. Check the hostname dimension again and expect both domains. Then reconcile the totals once more, a week later, and confirm the gap has closed.

Test the flow again after any platform change, because form embeds get swapped and settings get reset during redesigns, and this is the kind of breakage nobody notices until the year-end report looks wrong.

FAQ

Why does my own website show as a referral source in GA4?

Because a visitor crossed to another domain, usually your donation platform, and came back or converted there without their identifier travelling with them. The other domain sees the visit as new and records your site as the referrer. A self-referral is the clearest sign that a session is breaking at a domain boundary, and it means the campaign that earned the conversion is getting no credit for it.

How do I set up cross-domain tracking for a donation platform?

In GA4, go to Admin, Data Streams, select your web stream, then Configure tag settings, then Configure your domains, and list both your site and the platform's domain. The prerequisite that catches people out is that your measurement ID must also be installed on the platform, since cross-domain measurement links two tags. Check whether your platform has a field for a GA4 ID or GTM container before anything else.

Why are my donations missing from GA4 entirely?

Because the gift completes on the platform's confirmation page, which is their page and not yours, and your tag is not on it. Nothing reports the donation to your property. Compare GA4's donation count with your platform's dashboard for the same month: a large gap means you have a collection problem to fix before you worry about which campaign to credit.

Does adding the platform to unwanted referrals fix attribution?

No. It stops your reports showing a referral from that domain, but without the identifier crossing over the donor is still an unconnected new user, so the gift simply moves from referral to direct traffic. It is worth doing alongside cross-domain measurement to tidy the edges. On its own it hides the symptom and leaves the cause.

Can I track donations if the form is in an iframe?

Not directly. The iframe is a separate document belonging to the platform, and your tag on the parent page cannot see inside it or know the form was submitted. Your options are to have your measurement installed by the platform itself, to use any events the platform publishes to the parent page, or to send completed gifts back from the platform's webhook or export.

Want help with Conversion Tracking Setup & Implementation?

Accurate, deduplicated conversions wired into every platform you buy media on, so bidding optimizes toward revenue rather than noise.

More reading

Advanced Tracking

September 24, 2026 · 10 min read

Shopify's Meta CAPI Is Not Server-Side Tracking

Shopify really does send Conversions API events, and that still is not a server-side tagging layer. What the native channel cannot do, what owning the layer changes, and how to implement server-side GTM with Stape without double counting every order.

Read article
Advanced Tracking

September 23, 2026 · 9 min read

Basic or Advanced Consent Mode: What Each One Costs You

Both are Consent Mode, and they behave completely differently before a visitor chooses. What advanced mode really sends, what conversion modelling needs in return, and how to tell which one you are actually running.

Read article
Analytics & Tracking

September 23, 2026 · 9 min read

Why Your Best Campaign Shows Up as Four Mediocre Ones

GA4 compares campaign values character by character, so one campaign tagged four ways is four rows. The convention that prevents it, how to find the duplicates you already have, and what can still be salvaged in BigQuery.

Read article