CFP Insyte — Donation Processing & OCR Platform
A back-office system that turns scanned donation forms into verified, banked, thanked income — at bureau scale

A fundraising bureau receives thousands of physical donation response forms — cheques, cards, CAF vouchers — that must be read, verified, charged, banked, reconciled and thanked, accurately and auditably. Doing that by hand does not scale and is error-prone in exactly the place errors matter most: people’s money.
- • Turn scanned paper forms into structured, accurate donation records
- • Keep a human in the loop for every record without slowing the line down
- • Process card payments securely and reconcile cheques, cash and vouchers
We built Insyte on Django with an HTMX/Alpine front end, a Document AI OCR pipeline, a claim-and-review QA workflow, Stripe payments, Celery-driven letter generation, and a multi-tenant client portal — all audit-logged and 2FA-protected.
- • Ingested scanned TIFFs via an HMAC-authenticated scanner webhook into donation batches
- • Ran Google Document AI extraction with QR decoding to pre-fill each donation
- • Built a claim-based QA dashboard with a 30-minute lock so reviewers never collide
A closer look
Inside the build
Real screens from CFP Lottery & Raffles's donation management system (dms).


Project Overview
A fundraising bureau lives or dies on accuracy at scale. CFP Lottery & Raffles processes thousands of physical donation response forms for the charities it serves — and every one represents real money and a real supporter who deserves a correct, timely thank-you. Insyte is the platform we built to run that entire pipeline: scan, extract, verify, charge, bank and thank — auditable from end to end.
The Strategic Challenge
The work is unglamorous and unforgiving. Forms arrive as paper. Amounts are handwritten. Payments come as cards, cheques, cash and CAF vouchers. Gift Aid has to be captured correctly for HMRC. And the charities whose donors these are expect transparency. The system had to be fast enough for bureau volumes and careful enough that a human signs off on every record.
How We Built It
OCR does the typing; people do the checking
Scanned forms arrive through an HMAC-authenticated scanner webhook and are extracted with Google Document AI (with QR decoding to pre-fill records). They land in batches on a claim-based QA dashboard that puts the scan beside the extracted donation. A 30-minute lock means two reviewers never touch the same batch, and every approval is audit-logged.
Money, handled carefully
Stripe powers card charging, refunds and SCA inside QA and in a dedicated phone-intake console. Cheques, cash and vouchers are grouped into daily paying-in slips and reconciled against the bank, with issue tracking for the inevitable bounced cheque. Sensitive bank details are encrypted at rest; no card data is stored on the platform.
Thanks at volume
Thank-you and issue letters generate from DOCX merge templates through Celery, with status tracking and PDF output — thousands per run, per-campaign control, fully asynchronous.
Transparency for clients
Each charity gets a read-only, row-secured portal to watch its own campaigns, donations and supporters in real time, with self-service exports — and an 11-report suite covers Gift Aid, banking, payment method and ROI.
Results & Impact
Insyte replaces manual keying with OCR plus human QA, runs a single scan → QA → bank → letter pipeline that is audit-logged throughout, and is sized for 100+ concurrent reviewers. Compliance is built in: mandatory 2FA, field-level audit logging, encrypted bank details and a GDPR erasure command.
Technology
Django 5.2 with HTMX/Alpine, Google Document AI OCR, Stripe payments, Celery + Redis for async work, PostgreSQL 18 with field-level encryption, Cloudflare R2 storage, containerised on Coolify.
Have a manual, high-volume process? This is exactly the kind of operational system we build — see software development and business automation, or read the related CFP Raffle case study. Talk to us.
Key Features
Scan Ingestion & OCR
Scanned donation forms arrive via an HMAC-authenticated webhook, are extracted with Document AI and grouped into reviewable batches.
- No manual data entry to start
- QR decoding pre-fills records
- Tamper-proof scanner integration
Human-in-the-Loop QA
A claim-based review dashboard shows the scan beside the extracted donation; reviewers approve, flag or reject with a 30-minute lock to avoid collisions.
- Accuracy where money is involved
- Reviewers never edit the same batch
- Full approval audit trail
Payments & Phone Intake
Stripe powers card charging, refunds and SCA in QA, plus a live phone-intake console for taking donations over the phone.
- Secure card processing
- Refunds with audit logging
- No card data stored on-platform
Letters at Volume
Thank-you and issue letters generate from DOCX merge templates via Celery, with status tracking and PDF output.
- Thousands of letters per run
- Per-campaign template control
- Async with error handling
Banking & Reconciliation
Daily takings group into paying-in slips by payment type and reconcile against bank statements with issue tracking.
- Cheque, cash and voucher handling
- Slip status workflow
- Reconciliation issue flags
Secure Client Portal
Each charity logs in to a read-only, row-secured view of its own campaigns, donations, supporters and reports.
- Real-time campaign visibility
- Strict per-client data isolation
- Self-service exports
"Insyte took our most manual, error-prone process — reading thousands of paper donation forms — and turned it into a controlled pipeline. The OCR does the typing, our reviewers check every record, and everything from the card payment to the bank reconciliation to the thank-you letter is in one auditable system."
Related Projects
CFP Lottery & Raffles
We built the CFP Raffle platform: a Django back-office for running charity raffles and lotteries end to end — campaign and ticket management, scanned-form OCR, QA, weekly banking reconciliation and a declarative export engine that produces each charity client’s exact file format.
Ofyse
We designed and built Ofyse, a multi-tenant SaaS platform that replaces the spreadsheet stack coworking operators rely on — unifying bookings, member CRM, recurring billing with regional tax, and multi-gateway payments behind one fast, modern workspace.
With Thanks
We built the With Thanks portal: a charity platform that automatically produces personalised thank-you videos for donors, delivers them by email, and measures opens, clicks, plays and watch-time — with a Blackbaud CRM sync that turns new gifts into thank-yous on autopilot.
Ready to Transform Your Business?
Let's discuss how we can help you achieve similar results