Non-Profit Donation Portal with Receipts
A donation platform for a registered charity that handles one-off and recurring gifts, fundraising campaigns and automatically issued tax-exemption receipts, with a donor self-service area.

Project overview
We built a donation portal for a registered non-profit running education and health programmes. Supporters give once or monthly, choose a cause or a time-bound campaign, and receive a compliant tax-exemption receipt by email straight away; staff manage campaigns, donors and receipts from one console.
The engagement covered discovery with the fundraising and accounts teams, UX, a React front end, a Node.js API, Stripe payments and subscriptions, the receipt engine and donor data migration. It draws on our web application development and payments work in fintech.
The client and the challenge
Donations arrived through a basic payment link, bank transfers and cheques. The accounts team typed receipts by hand from a spreadsheet, often weeks later, recurring donors had to repeat their gift each month, and campaign results could only be estimated.
The charity needed easy one-off and monthly giving, receipts that were correct and issued automatically with the registration details the tax rules require, donor privacy handled properly, and clear reporting by cause and campaign for trustees and funders.
Solution architecture & delivery
The React site offers a short donation form on every cause and campaign page: amount, frequency, cause and optional dedication. Donors who want a tax-exemption receipt add their tax identifier and address, which is validated for format before payment. Everything else is optional, and donors choose whether to appear on public supporter walls.
Payments run through Stripe. One-off gifts use a payment intent with cards and wallets; monthly gifts create a Stripe subscription tied to a donor record. Webhooks from Stripe drive the Node.js API: a successful payment creates a donation entry, failed renewals trigger retries and a polite email asking the donor to update their card, and cancellations are reflected immediately in the donor's account.
The receipt engine issues a receipt only from a confirmed payment event, never from a form submission. Each receipt gets the next number in a gap-free sequence per financial year, includes the charity's registration details, donor name, identifier, amount and mode of payment, and is generated as a PDF and emailed. Corrections produce a cancelled receipt and a new one rather than editing history, and an annual consolidated statement is available to monthly donors in their account. Donation data can be exported in the format the accounts team uses for statutory filings.
The admin console lets staff create campaigns with targets and deadlines, record offline cheque and bank transfer gifts so they receive the same receipts, and view totals by cause, campaign and channel. Donor identifiers are encrypted at rest and masked in the console for roles that do not need them, and every export is logged. Supporters can also run their own fundraising pages for a birthday or a sponsored event; gifts made through those pages are credited to the parent campaign, receipted to the actual donor rather than the fundraiser, and shown on the fundraiser's page as a running total. This pattern is close to the pledge and payout work in our crowdfunding portal with KYC and escrow.
Key features we built
- One-off and monthly donations with cards and digital wallets
- Cause and campaign pages with targets, progress bars and deadlines
- Automatic tax-exemption receipts with gap-free numbering
- Donor account to manage recurring gifts and download receipts
- Failed payment retries and card update reminders
- Offline gift entry for cheques and bank transfers with the same receipts
- Masked and encrypted donor identifiers with logged exports
- Reports and CSV exports by cause, campaign and channel for trustees
How we delivered it
- Discovery. Workshops with fundraising and accounts staff to map every donation channel, the receipt rules the charity must follow and the reports trustees ask for.
- UX and prototype. Donation form prototypes tested with existing supporters on mobile, keeping the path from campaign page to confirmation as short as possible.
- Build. Two-week sprints delivering payments and the receipt engine first, with automated tests on receipt numbering, corrections and webhook replays, following our CI/CD and testing pipeline.
- Migration and launch. Existing donor records and active recurring gifts moved across with consent preferences preserved, then the old payment link retired.
- Support. Ongoing maintenance, seasonal appeal campaigns and receipt format updates when rules change, under a support agreement.
Technology choices
- React β fast, accessible donation forms and campaign pages, plus a donor account area built from the same components.
- Node.js β webhook handling, receipt generation, email delivery and reporting APIs in one lightweight service layer.
- Stripe β one-off payments and subscriptions for monthly giving, automatic retries and tokenised cards, so the charity never stores card data.
Outcomes
- Donors receive their tax-exemption receipt by email as soon as a payment succeeds, instead of weeks later
- Monthly supporters give automatically and manage their own gifts
- The accounts team no longer types receipts by hand, and numbering has no gaps or duplicates
- Offline and online donations are recorded and receipted in one system
- Trustees see results by cause and campaign from live reports rather than estimates
FAQ
How are tax-exemption receipts generated?
A receipt is issued only after a confirmed payment. It takes the next number in a gap-free sequence for the financial year, includes the charity's registration details and the donor's identifier, and is emailed as a PDF. Corrections cancel and reissue rather than edit.
How does recurring giving handle failed card payments?
Monthly gifts are subscriptions. If a renewal fails, payment is retried automatically and the donor receives an email with a secure link to update their card; nothing is lost from their giving history.
Is donor data kept private?
Donors choose whether their name appears publicly, tax identifiers are encrypted and masked for staff who do not need them, card details stay with the payment provider, and every data export is logged.
How much does a donation portal cost to build?
It depends on payment channels, receipt rules, campaign features and data migration. Our app development cost calculator gives an indicative range and timeline, which we refine after a short discovery.
Non-Profit Donation Portal with Receipts screens
Build your next fintech product with Next Olive
Share your requirements β we will propose scope, timeline and stack within one business day.