← work
Nonprofit · Online giving · [CHECK] · GA4, GTM, Donor-management platform embeds

Closing a Donation Tracking Gap for a Nonprofit

3
donation forms with zero tracking
2
embed generations, tracked inconsistently
[CHECK]
GA4 vs. backend donation gap
problem:

The client is a nonprofit meal-service organization that relies heavily on online giving to fund its programs. Its marketing and donor-engagement director is deeply committed to the mission but isn't an analytics specialist — which meant a serious measurement gap had gone unnoticed for some time.

  • A massive, invisible reporting gap. A side-by-side comparison of GA4 against the organization's donor management backend showed GA4 capturing only a small fraction of actual donations for the same time window — a gap large enough to be quietly skewing every budget and campaign decision built on that data.
  • Donation forms split across two integration methods. The organization's donation forms were served through two different generations of the same donor-management platform's embed technology — a newer iframe-based form type and an older legacy widget — each behaving differently from a tracking standpoint.
  • Specific forms tracking nothing at all. A tribute-gift form, a named sponsorship form, and event-ticket forms tied to fundraising events had no tracking on them whatsoever, meaning any donor completing a gift through those paths left zero trace in analytics.
  • No internal analytics expertise to catch it. Without an analytics-literate team member reviewing the numbers regularly, the gap had persisted unnoticed, growing more costly the longer it went undetected.
what i built:

We started by reconciling GA4's reported donation totals against the organization's donor management system for an identical date range, which is what surfaced the scale of the gap in the first place. That comparison became the case for prioritizing a full tracking audit rather than a routine check-in.

From there, we traced every donation form on the site back to how it was actually being served to visitors. That meant identifying which forms used the platform's newer iframe-based embed and which still ran on an older legacy widget technology — because each type interacts differently with a parent page's tag manager, and a single "master" GTM tag that appeared to be installed site-wide was not actually reaching every embed type consistently.

We then went form by form rather than relying on a single container-level check, confirming exactly which donation paths were capturing events correctly and which weren't. That process identified a tribute-gift form, a sponsorship form, and multiple event-ticket forms as having no tracking at all — donors could complete a gift through any of these and it would never appear in GA4.

Rather than just handing over a technical diagnosis, we packaged the findings as a plain-language, form-by-form inventory the director could act on without needing to interpret raw GTM configuration himself. We're now working directly with the organization's internal platform administrator, who manages the master integration, to identify why it isn't propagating to every embed type and to get consistent tracking wired to every donation path on the site.

Donor visits site
  |
  +-- Newer iframe donor form --- master GTM tag reaches it ------> GA4
  |
  +-- Legacy embed widget ------- tag doesn't propagate ---------> no tracking

GA4 + no tracking => fraction of true donations visible

# The same "master" GTM tag reached one form type but not the other — so
# donations through the legacy widget vanished from GA4 entirely.
outcome:
  • Quantified, for the first time, just how large the gap was between what GA4 showed and what donors actually gave — turning a vague suspicion into a specific, actionable finding.
  • Delivered a form-by-form tracking inventory identifying exactly which donation paths (tribute gifts, sponsorships, event tickets) were reporting nothing at all.
  • Diagnosed the root cause as an inconsistent iframe/widget integration rather than a simple missing-tag problem, pointing the fix at the right layer instead of a surface-level patch.

[CHECK] Still to confirm: whether the propagation issue has been resolved on the organization's end, and updated GA4-vs-backend reconciliation numbers once the fix is live, so this section can show the gap closing.

A tracking gap this size can hide in plain sight for years without the right eyes on it. If your donation or lead-gen funnel hasn't had a reconciliation check like this, it's worth one.

[CHECK] [screenshot] the server container