← Back to desktop
Charities

Donation Tracking for Charities: Know What Every Pound of Ad Spend Raises

NUVIX · 13 July 2026 · 10 min read
TLDR: Most charities can’t connect ad spend to donations. Their donation platform (JustGiving, Enthuse, Donorbox) sits on a different domain or inside an iframe, and the tracking chain breaks at the handover. The fix is a donation completed event with a value attached, fired somewhere your GA4 and Meta tags can see it, plus separate handling for regular gifts and Gift Aid. Test it with a small live donation before you trust a single report. Once it works, you can tell your board exactly what each appeal raised per pound spent.

The Question Every Trustee Asks

‘We spent £2,000 on the winter appeal. What did it raise?’

Most charity digital teams can’t answer that question with a number. They can answer it with clicks, sessions, and a feeling. The donations arrived, and the fundraising platform shows them, but nobody can say which ones came from the ads, which came from the email, and which came from a supporter who was going to give anyway.

This isn’t a skills problem. It’s a plumbing problem. Commercial businesses get conversion tracking almost for free because the sale happens on their own website. Charities usually don’t, because the donation happens somewhere else.

Why Donation Tracking Breaks

Three things break the chain between your ad and your donation data, and most charities have at least two of them.

The off-site redirect

Your ad sends someone to yourcharity.org.uk. They click ‘Donate’ and land on justgiving.com. Your GA4 property and Meta pixel live on your domain, so they cannot see anything that happens on JustGiving’s domain. As far as your analytics is concerned, the supporter clicked a button and vanished. The donation gets recorded in JustGiving’s reporting, with no connection to the campaign, ad, or keyword that drove it.

Worse, attribution dies at the handover. The UTM parameters and click IDs (gclid, fbclid) travelling with the visitor get dropped during the redirect unless someone deliberately passes them through. No click ID, no attribution, whatever the platform’s integrations promise.

The iframe embed

Embedded donation forms (Donorbox is the common one) look like they’re on your site, but the form is an iframe loading from the provider’s domain. Browsers treat that as a separate page. Your GA4 tag on the parent page can’t see form submissions inside the iframe, and the provider’s scripts inside the iframe can’t set cookies your pixel can read. The result is the same vanishing act, just better disguised.

The missing thank-you page

Even when the donation flow stays on your domain, plenty of setups confirm the gift with an inline message, and the page never changes. With no dedicated confirmation URL, there’s nothing reliable to fire a conversion event from. Teams fall back to tracking clicks on the donate button instead, which counts intent, not money. In our experience, 50–80% of people who click ‘Donate’ never complete the gift. Counting clicks as donations inflates your numbers and trains Google’s and Meta’s bidding algorithms to find people who click and abandon.

What You Should Actually Track

Get these three things right and everything downstream works: reporting, bidding, budget decisions.

1. Donation completed, with a value

One event, fired only when money has actually moved, carrying the amount. In GA4 the cleanest approach is the standard purchase event with value and currency: "GBP". Ad platforms understand it natively, and it turns on value-based bidding. If you prefer a custom donation_completed event for cleaner reporting, fine, but it still needs the value parameter. A donation event without a value tells you that donations happened. A donation event with a value tells you a £500 campaign raised £2,100. Only one of those survives a board meeting.

2. One-off vs regular gifts

A £10 one-off gift and a £10 monthly direct debit are not the same conversion. UK regular givers typically stay for years. A £10/month donor retained for five years is worth £600 before Gift Aid. Add a donation_type parameter (one_off or regular) to the event, and decide deliberately what value to assign a new regular gift. Recording £10 undervalues it massively; many charities record the first 12 months (£120) so the ad platforms optimise towards recurring donors rather than the cheapest single gift. Whatever you choose, only fire the event once at sign-up. Never fire it on each monthly payment, or your ad attribution inflates every month.

3. Gift Aid opt-in

Gift Aid adds 25p to every £1 from a UK taxpayer. A £20 donation with Gift Aid is worth £25 to you, a 25% uplift your reporting should reflect. Track opt-in as a gift_aid: true/false parameter. If your opt-in rate from paid traffic is 40% and your email traffic is at 70%, that’s a landing page problem worth fixing. You’ll only see it if you’re tracking it.

Implementation: Three Scenarios

How you wire this up depends entirely on where the money changes hands.

Scenario A: donations on your own domain

If you process donations on your own site (your own checkout, or a white-labelled solution running on your domain), you’re in the easy case. Fire the purchase event on the confirmation page with value, currency, donation type, and Gift Aid status. If there’s no confirmation page, get one built: a dedicated /thank-you URL that’s only reachable after payment. It’s the single most reliable tracking anchor you can own, and it doubles as the destination for testing. If you’re starting from scratch, our conversion tracking setup guide walks through the event structure in more detail.

Scenario B: hosted platform (JustGiving, Enthuse)

You can’t put your tags on JustGiving’s domain, so work with what the platform offers:

If your platform supports none of this, that’s a real cost. We’ve seen charities switch platforms over tracking alone. When you’re spending £1,000+/month on donor acquisition, a platform that hides your results is more expensive than its fee suggests.

Scenario C: iframe embed (Donorbox and similar)

Embedded forms sit between the two. Donorbox supports adding your own GA4 and Meta pixel IDs inside the form, which solves most of the visibility problem. Configure that before anything else. Where direct integration isn’t available, the workaround is a redirect: configure the form to send donors to a thank-you URL on your domain after payment, and fire your event there. As a last resort, track the donate button click as a separate begin_donation event. It’s useful as a funnel metric, but never report it as a donation.

Not sure where your donation tracking is leaking? We run a free, no-obligation audit of the full journey from ad click to confirmed gift, and tell you plainly what is working and what is not.

Get a free tracking audit →

GA4 Key Events and Meta CAPI

Once the event fires somewhere visible, finish the job on both platforms.

In GA4: mark your donation event as a key event (Admin > Key events), then import it into Google Ads as a primary conversion with ‘Every’ counting, because one supporter giving twice is two donations. With values attached, you can move to Maximise Conversion Value bidding, which optimises towards the £100 donor instead of treating them the same as the £3 donor. If you’re running a Google Ad Grant alongside paid ads, import the same conversion into both accounts. The Grant requires conversion tracking anyway.

For Meta: the pixel alone now misses a meaningful share of donations, because iOS restrictions and ad blockers hit charity audiences just like everyone else. The Conversions API (CAPI) sends the donation event from a server instead of the browser, typically recovering 15–30% more conversions. Some donation platforms offer a native CAPI integration; where they don’t, a webhook from the platform into a connector (Zapier, Stape, or server-side GTM) can fire the CAPI event when a donation lands. We cover the trade-offs of that approach in our piece on whether server-side tracking is worth the investment. If you run pixel and CAPI together, send a matching event_id from both so Meta deduplicates. Otherwise every donation counts twice and your results look better than they are.

Attribution Windows for Considered Giving

People rarely donate on first click. They see your appeal on Instagram, mention it to a partner, get paid on the 28th, then search your charity’s name and give. Default attribution settings are built for impulse e-commerce, not that journey.

In Google Ads, the default 30-day click window suits most one-off appeals, but extend it to 60–90 days for regular giving, since recurring gifts are considered decisions. Meta caps you at 7-day click, 1-day view, which structurally under-reports considered giving; treat Meta’s reported results as the floor, not the ceiling. And watch brand search during appeals: a supporter who saw your ad and later searched your name shows up as ‘organic’. If brand searches jump 40% while your awareness campaign runs, the campaign is working even when last-click numbers look soft.

Reporting Your Board Will Actually Understand

Trustees don’t want CTR and CPM. Give them two numbers:

Cost per donation: ad spend divided by donations generated. If the winter appeal spent £2,000 and generated 145 donations, that’s £13.79 per donation. Report regular gifts separately. A £45 cost per new regular giver is excellent; a £45 cost per £10 one-off gift is not.

Return on ad spend (ROAS): the line the board remembers.

ROAS = (donations + Gift Aid) ÷ ad spend

If those 145 donations averaged £38 and 55% opted into Gift Aid, the appeal raised £5,510 plus roughly £758 in Gift Aid. That’s about £6,270 from £2,000 of spend, or £3.13 raised per £1 spent. That sentence justifies next year’s budget in a way no engagement metric ever will. For regular giving campaigns, present projected first-year value, and label it as a projection.

One discipline: pick a single source of truth for the board number. Platform-reported figures (Google says X, Meta says Y) will overlap and disagree. Use your donation platform’s actual income as the truth, and the ad platforms’ numbers for optimisation.

Test It With a Real Donation

Before trusting any of this, make a small live donation yourself. £2 is enough. Click one of your own ads (or a UTM-tagged test link), complete the gift including the Gift Aid declaration, and then check:

  1. The event appears in GA4 Realtime/DebugView with the correct value and currency
  2. The donation type and Gift Aid parameters came through
  3. Meta Events Manager shows the event once, not twice (deduplication working)
  4. The conversion lands in Google Ads within 24 hours, attributed to the right campaign
  5. The donation appears in your platform’s own report, so you can match the two

Leave the donation in rather than refunding it. Refunds can confuse reconciliation, and some platforms keep their fees anyway. Two pounds is cheap insurance on a five-figure annual ad budget. Re-test after every platform update, website change, or consent banner tweak. Tracking doesn’t break loudly; it breaks silently and you find out at the quarterly review.

Common Failure Modes

None of this requires a big budget. Most of it is a few hours of configuration and one honest test donation. What it requires is treating donation tracking as fundraising infrastructure rather than a technical afterthought. The charities that can say ‘every £1 we spent raised £3.13’ get their budgets approved. The ones that can’t, don’t.