Donation Tracking for Charities: Know What Every Pound of Ad Spend Raises
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:
- Check the analytics integration first. Some platforms let you add your GA4 measurement ID or Meta pixel to your donation pages; Enthuse is generally stronger here than JustGiving. If your platform supports it, switch it on. It’s the difference between guessing and knowing.
- Pass parameters through. When you link to your donation page, append your UTM parameters to the URL and confirm the platform preserves them through the payment flow. If it strips them, attribution dies regardless of what else you do.
- Use a return redirect. If the platform can send donors back to a thank-you page on your domain after payment, use it: you can fire your conversion event there. The catch is that the amount usually isn’t passed back, so you may need to record an average gift value rather than the exact one.
- Reconcile weekly. Export the platform’s donation report and compare it against what your analytics captured. The gap tells you how much you’re flying blind, and whether the platform is still passing your parameters through after its next update.
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.
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:
- The event appears in GA4 Realtime/DebugView with the correct value and currency
- The donation type and Gift Aid parameters came through
- Meta Events Manager shows the event once, not twice (deduplication working)
- The conversion lands in Google Ads within 24 hours, attributed to the right campaign
- 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
- Counting intent as income. Donate-button clicks or donation-page views reported as donations. Always anchor to payment completion.
- Double counting. Pixel and CAPI both firing without a shared event ID, or a recurring gift event firing every month against the original ad click.
- Dropped parameters. UTMs and click IDs stripped during the redirect to the donation platform. Test the full journey, not just your own pages.
- No values. Donations tracked as a count, so a £3 gift and a £300 gift look identical to the bidding algorithm, and to your board.
- Consent blind spots. If your consent banner blocks analytics until opt-in, a chunk of donations will never be tracked client-side. Know your opt-in rate, and consider Consent Mode or server-side tracking to model the gap.
- Gift Aid ignored. Reporting £5,510 raised when the real figure with Gift Aid is £6,270 understates your own success by 12%.
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.