NGO Website Development in India: Measuring Your Donation Website With GA4, UTM Tags and a Simple Donor Funnel
An NGO can measure its donation website without a data analyst by doing four things well: tag each campaign link with consistent UTM parameters, fire one GA4 event for each step of a short donor funnel, fire the final "donation complete" event only after the server has confirmed the gift, and read the same six to eight numbers once a month on a single page. Everything else in Google Analytics 4 is optional. If you are scoping NGO website development India wide, or checking the work of a team you already hired, this measurement layer is worth asking for in writing, because a donation page that cannot say where its donors came from will be redesigned, re-advertised and re-printed on guesswork.
This article is for trustees, fundraising managers and the one volunteer who ends up "looking after the website". It covers the funnel, GA4 events, the thank-you page rule, a UTM convention, key events, data-quality traps, consent and DPDP, Search Console, a monthly report, a worked example with illustrative numbers, and what to ask your developer. Technical statements come from Google's Analytics Help and developer documentation and published summaries of India's DPDP Rules, read in October 2026; menu names may have changed when you open Analytics. This is not legal advice, and it does not cover payment charges or tax receipts.
Why a small NGO needs a funnel, not a dashboard
Most NGO setups either install only the default page-view tag, so the only number quoted is "visitors", or connect dashboards nobody opens. Visitors is a poor number for a charity: a thousand readers and no gifts looks better on a chart than two hundred visitors and twelve gifts.
A funnel gives you a short chain of questions you can actually act on:
- How many people reached the donation page?
- How many started giving, meaning they chose an amount or pressed the donate button?
- How many reached the payment step?
- How many gifts were confirmed?
Each gap points to a different fix: 1 to 2 usually means the ask is unclear, 2 to 3 can be form friction, and 3 to 4 is partly invisible because the visitor may be on another domain, which is why server confirmation matters. We cover the page itself in donation page design for Indian NGOs; this article is about measuring whether that page works.
The four-step donor funnel and the GA4 events behind it
Google Analytics 4 is event based: everything, including a page view, is an event with optional parameters. Google's help page on recommended events lists the events intended for online sales, among them view_item, add_to_cart, begin_checkout, add_payment_info and purchase, and says they suit retail, ecommerce, education, real estate and travel. It also lists generate_lead, described as triggered when a user submits a form or a request for information. Nonprofit giving is not on that list as a category, so you are borrowing the closest match or defining your own event names. Both are acceptable. What matters is being consistent and writing the choice down.
Here is the mapping I use as a starting point for an NGO donation site. It is a practice recommendation, not a Google rule.
Step 1: donation page viewed
Use a custom event, donation_page_view, or rely on the automatic page_view for the donation URL. A custom event is easier for a non-analyst to read; add a campaign_name parameter so you can compare appeals.
Step 2: donation started
Fire donation_started when the visitor chooses an amount or presses the donate button. Google's begin_checkout is the matching recommended event, documented with currency, value and an items array (each item needing an item_id or item_name), which is heavier than a simple giving form needs. A custom name is fine.
Step 3: payment step reached
Fire donation_payment_step when the visitor is sent to the payment screen (Google's nearest event is add_payment_info). It is the last moment your own site can observe the visitor.
Step 4: donation complete
This is the one that must be right. Google documents purchase as triggered when a user completes a purchase, and in the developer reference it carries transaction_id, value and currency. The reference says transaction_id helps prevent duplicate purchase events, that value is the sum of price times quantity for the items, and that currency is a three-letter ISO 4217 code, required when value is set. Two sensible options for an NGO:
- Use purchase. Revenue reports populate, but a gift is not a sale, and merchandise or ticket sales will mix in unless you add a parameter such as gift_type.
- Use a custom event named donation_complete with the same parameters, marked as a key event. Slightly more manual, but the name says what it is.
Either way, send transaction_id (your own donation reference, never a name or phone number), value in rupees as a number, currency "INR", and a campaign label. Do not use generate_lead for a gift; a lead is a form submission that may lead to a conversation, which fits volunteer sign-ups, newsletter forms or CSR enquiries.
Fire "donation complete" on the confirmation page, after the server says yes
The most common error on NGO sites is counting an attempted donation as a completed one.
The safer rule has three parts:
- The confirmation page is only shown after your server has received and recorded a confirmed result for that donation reference. A visitor who types the thank-you address by hand, or who refreshes, should not get the success tag.
- The event fires once per donation reference. If the page is reloaded, the developer's code should check that this transaction_id was already reported, and skip it.
- A failed or pending result shows a different page with its own event, such as donation_failed, so the funnel shows where people were lost rather than quietly inflating the total.
The GA4 total measures website activity, not your books. It will differ from your accounts because of failed pages, blocked scripts and visitors who decline consent. Use it as a trend and diagnostic, never as the figure you give donors or auditors.
A UTM naming convention your whole team can follow
UTM tags are the parameters added to a link, such as utm_source and utm_campaign, so GA4 can say where a visit came from. Google's help page on campaign data says GA4 collects utm_id, utm_source, utm_medium, utm_campaign, utm_source_platform, utm_term and utm_content, and advises always including utm_source, utm_medium and utm_campaign. It also says that if you set one parameter you should set all relevant ones, because missing values show as "(not set)", and that values are case sensitive: utm_source=google and utm_source=Google are different. Its example is that SpringSale and Spring_Sale are treated as distinct campaigns.
For a team without analysts, case sensitivity is the whole problem. Three people tag links in three styles, and your report splits one appeal into five rows. So write a one-page convention and keep it where the team can find it:
- All lowercase, hyphens for spaces, no spaces or capitals. "winter-blankets-2026", never "Winter Blankets".
- utm_source is the platform or list: whatsapp, instagram, facebook, newsletter, gmb (for your Google Business Profile), poster-qr, partner-name.
- utm_medium is the channel type, chosen from a short fixed list: social, email, messaging, qr, referral, cpc.
- utm_campaign is the appeal, using one agreed name per appeal across every channel.
- utm_content distinguishes versions: "story-a", "video-30s", "volunteer-photo". Use it only when you are testing.
A worked set for one appeal:
- WhatsApp broadcast: ?utm_source=whatsapp&utm_medium=messaging&utm_campaign=winter-blankets-2026
- Newsletter: ?utm_source=newsletter&utm_medium=email&utm_campaign=winter-blankets-2026
- Poster QR code: ?utm_source=poster-qr&utm_medium=qr&utm_campaign=winter-blankets-2026
Three more rules. Never put names, phone numbers or emails in any UTM value; Google's PII page lists campaign parameters among the places personal data can slip in. Keep a shared sheet of every tagged link. Do not tag links between pages of your own site, which is general practice rather than a Google statement, since it can overwrite the original source.
If your NGO runs WhatsApp campaigns, the link in the message is often the only place the source is recorded, so tagging it matters most there. A WhatsApp CRM can store who received which version, subject to the consent point below.
Key events: telling GA4 what counts
Mark the events that matter as key events: in Admin, under Events, use the "Mark as key event" toggle. Google's page also offers a default value and a counting method; I could not confirm what the options mean from it, so read the current documentation. For a gift, you want each confirmed donation counted separately. For most NGOs the list is short: donation_complete (or purchase), volunteer_signup, newsletter_signup, csr_enquiry if you take corporate enquiries, and optionally donation_started.
Resist marking page views or clicks as key events; a list of fifteen turns every report into noise. See our GA4 conversion tracking setup guide for a general walkthrough.
Three data-quality traps: internal traffic, payment-gateway referrals and double counting
Internal traffic
Staff, volunteers and your developer will test the donation page dozens of times. Without a filter, those visits and test gifts sit in your numbers. Google's guidance has two parts. First, define internal traffic on the web data stream (Configure tag settings, Define internal traffic) with a traffic_type value and IP addresses or ranges. Second, create an Internal Traffic data filter set to Exclude. Start the filter in Testing state, because an Active filter permanently discards data; it can take 24 to 36 hours to take effect, and it does not apply to app users. The limitation is practical: office and home IP addresses change, and people test on mobile data. Filters help but do not catch everything, so label every test donation with a recognisable parameter and keep test mode separate from live reporting.
Payment-gateway referrals
If the donor pays on a gateway's own page and is then sent back to your site, GA4 may treat the gateway's domain as the source of the returning visit, so your campaign credit disappears into "referral". Google's unwanted-referrals setting is the fix: in Admin open Data streams, choose the web stream, open Configure tag settings and use "List unwanted referrals" to add the gateway's domain (up to 50 per stream). Visits that began before you added it may still be credited to the domain for a while, and Google advises against adding ignore_referrer to all pages. Ask your developer which domains the donor passes through.
Double counting
Double counting comes from a duplicate tag (one in the page code and another through Google Tag Manager, or a plugin plus a manual snippet), from the event firing on refresh, or from purchase and donation_complete both being key events for the same gift. Make one test donation and check GA4 DebugView or real-time: you should see one event, not two.
Consent, DPDP and the rule about personal donor data
Google's policy. Google's help page on PII says that no data should be passed to Google that Google could use or recognise as personally identifiable information, and lists email addresses and personal mobile numbers among the examples, adding that the list is not limited to them. It warns that PII is often sent by accident in page URLs and titles, in text visitors type into search boxes and forms, and in features such as User-ID, custom dimensions, campaign parameters and site search terms. It also describes data redaction in Admin, which can remove email addresses on a best-effort basis and strip named URL query parameters for web streams. For a donation site, that translates into hard rules:
- Never send donor name, phone, email, PAN, address or Aadhaar details to GA4, in any event parameter, custom dimension or URL.
- Do not put a donor's name or email in the thank-you page address, for example /thank-you?name=Asha. Use an opaque reference.
- Check your site search and any "dedication" or "in memory of" fields, since free text can contain names.
- Use your own donation reference as the transaction_id, and keep the link between that reference and a person inside your own database, never in GA4.
Donor identity belongs in your own system. GA4 should only know that a gift of a certain value arrived from a certain campaign.
DPDP. India's Digital Personal Data Protection Act, 2023 and the DPDP Rules, 2025 are the main framework. Law-firm summaries I read in October 2026 say the Rules were notified in mid-November 2025 (sources differ by a day), with phased commencement: Data Protection Board provisions at once, consent-manager provisions at about twelve months, and the substantive obligations, including notice and consent standards, at about eighteen months, which they place in May 2027. They also say the Rules require a clear consent notice stating the purpose. I have not read the Gazette text, so ask a lawyer to confirm the dates and what they mean for your NGO. A sensible website approach is an analytics notice that says plainly what you measure and why, and not firing tags before the visitor's choice if your counsel says consent is needed.
Supporter lists. UTM tags do not identify people, but the lists you send to do. Record how each supporter agreed to hear from you, and do not paste lists into analytics or advertising tools without checking that agreement.
Search Console basics for an NGO
Google describes Search Console as a free service for monitoring and troubleshooting your presence in Google Search; it shows how often your site appears, for which queries, and how often people click. It also flags indexing and security problems.
For an NGO, three habits are enough:
- Verify the site once and add a second administrator from the organisation.
- Monthly, note total clicks, impressions and top queries in the Performance report; ignore small movements.
- Check messages and indexing problems on important appeal pages.
If search visibility is a priority, our SEO team can help, and the NGO website page describes how we approach non-profit sites more broadly.
The one-page monthly report: six to eight numbers
The report should fit on one page and be readable by someone who does not open GA4. Here is a set of eight. Drop any you cannot defend.
- Sessions to the donation page, from GA4.
- Donation started count, and its share of step 1.
- Payment step reached count, and its share of step 2.
- Donations confirmed, from the confirmed donation event, with the share of step 3.
- Total donation value recorded in GA4 in rupees, labelled as website-measured and not the accounts figure.
- Top three sources by confirmed donations, using your source and medium naming.
- Top three campaigns by confirmed donations, using utm_campaign.
- Search Console clicks for the month, and the top three queries.
Add one line of commentary: what improved, what dropped, and one action.
A worked example: a hypothetical winter appeal
This is an illustration with made-up figures, not a client case and not a benchmark. Imagine a small NGO that provides winter blankets and runs a four-week appeal. It tags a WhatsApp broadcast, an email newsletter, an Instagram bio link and a poster QR code using the convention above.
Illustrative funnel for the month (all numbers invented for demonstration):
- Donation page sessions: 2,000
- Donation started: 300 (15 percent of step 1)
- Payment step reached: 210 (70 percent of step 2)
- Donations confirmed: 150 (about 71 percent of step 3)
How to read it. The biggest drop, 2,000 to 300, is before anyone starts giving, so the fix is on the page: a clearer ask and an amount tied to a concrete outcome. The loss between payment step and confirmation (60 of 210) needs a developer check of how many were failed or abandoned results on the server. If the newsletter showed the highest confirmed donations per session and WhatsApp the most sessions, the NGO might put the longer story in the newsletter and a short single-image ask in WhatsApp. Without UTM tags, all four channels would have blended into "direct" or "referral".
Quality checks. Before presenting, the NGO makes one small real test donation and confirms a single donation event, confirms the gateway domain is listed, confirms staff IPs are covered, and confirms no donor details appear in parameters.
Common mistakes
The ones I see most: counting button clicks as donations, mixing UTM spellings, letting the gateway take the credit, testing in live data, sending names or phone numbers to GA4, marking everything as a key event, reporting the GA4 total as the accounts figure, keeping the login with one volunteer, and renaming events in the middle of an appeal so comparisons break. Most are covered above; the last two are organisational, not technical.
What to ask your developer
- Which events fire at each funnel step, with what parameters? Can you show them in DebugView?
- Does the donation-complete event fire only after server confirmation, once per transaction_id, and does that ID contain any personal data?
- Is the gateway domain in unwanted referrals, and are staff IPs in an internal-traffic rule?
- Is there a single GA4 tag, or have plugins and manual code created duplicates?
- Who owns the Analytics property and Search Console, and how is analytics consent handled?
- Can you give us a one-page document with our event list and UTM convention?
A developer who answers these with screens and a written list is doing the job properly. If the answers are vague, the setup is probably incomplete.
A short checklist
- Four funnel steps and event names written down; donation-complete fires once per transaction_id, only after server confirmation
- Five or fewer key events; one-page UTM convention and shared link sheet
- Gateway domain in unwanted referrals; internal traffic rule tested; no personal data in any parameter or URL
- Search Console verified with two administrators; monthly report template agreed
Working with Govindani Infotech
Govindani Infotech is a web design and development company at 2nd Floor, Landmark Plaza, 206 Satara Road, Parvati Paytha, Pune 411009. We have built a large number of non-profit sites, and the measurement layer described here is something we decide at build time, not bolt on after launch. If your site is already live, we can review your GA4 property, tags and thank-you flow with you and tell you what is sound and what needs fixing. See our website creation service. We do not promise donation volumes or conversion rates.
To start a conversation, use the contact page or message us on WhatsApp.
Frequently Asked Questions
What is the simplest way to measure donations on an NGO website?
Tag your campaign links with consistent UTM values, fire a GA4 event at four funnel steps, and send the final donation event only after the server confirms the gift. Review the same six to eight numbers monthly on one page.
Should I use purchase or a custom event for a donation in GA4?
Either works. Google documents purchase with transaction_id, value and currency, and it feeds ecommerce reports, but a gift is not a sale, so many NGOs use a custom event such as donation_complete and mark it as a key event. Pick one and keep it consistent.
Can I send donor names or phone numbers to Google Analytics?
No. Google's policy says no data should be passed that Google could use or recognise as personally identifiable information, including email addresses and personal mobile numbers. Use an opaque donation reference and keep donor identity in your own database.
Why do donations show as referrals from the payment domain?
When a donor returns from a payment page on another domain, GA4 may credit that domain as the source. Google's unwanted-referrals setting in the web data stream lets you add the domain so the original campaign keeps the credit.
Does the DPDP law change how an NGO uses analytics?
Published summaries say the DPDP Rules, notified in November 2025, bring notice and consent standards into force in stages, with the main obligations around May 2027. Ask a lawyer to confirm the dates and what a clear analytics notice should say for your NGO.
Sources:
- https://support.google.com/analytics/answer/9267735
- https://developers.google.com/analytics/devguides/collection/ga4/reference/events
- https://support.google.com/analytics/answer/6366371
- https://support.google.com/analytics/answer/12844695
- https://support.google.com/analytics/answer/10917952
- https://support.google.com/analytics/answer/10327750
- https://support.google.com/analytics/answer/10104470
- https://support.google.com/webmasters/answer/9128668
- https://www.azbpartners.com/bank/update-indias-digital-personal-data-protection-framework-comes-into-effect/ (secondary summary)
- https://anantamias.com/current-affairs/dpdp-rules-2025-notified/ (secondary summary)