Fundraising Intelligence is a local analytics dashboard for NationBuilder transaction exports used by political campaigns and EDAs.
It helps teams understand donor behaviour, revenue sources, outreach opportunities, and configurable annual planning benchmarks without sending donor data to third-party services when run locally.
Given a NationBuilder transactions export, the app can:
- Break down revenue by source, including local, national, and event donations
- Identify core local donors
- Prioritize national donors for local outreach using a transparent heuristic engagement score (0–100) based on observed recency, frequency, and giving depth (without uncalibrated ML probability claims)
- Detect recurring national donors across calendar months
- Generate outreach and call-list targets (including year-specific $400+ relationship lists)
- Track configurable annual planning benchmarks by category across user-selected reporting years
- Audit transaction data with robust multi-format date parsing (US 12-hr, 24-hr, ISO-8601 with timezone handling) and unlinked transaction isolation
All analysis runs locally on the user's machine.
If you want the fastest setup, download the packaged desktop release from the repo's Releases page.
The desktop release includes a synthetic sample CSV that you can upload to explore the dashboard.
Clone the repository:
git clone https://github.com/ThomasRoyProjects/Fundraising_Intelligence
cd Fundraising_Intelligence
python3 -m venv .venv
. .venv/bin/activate
pip install -r app/requirements.txtGenerate demo data:
python app/generate_demo_data.pyRun the dashboard:
streamlit run app/fundraising_dashboard.pyThen upload the generated demo CSV inside the app.
The desktop version uses an Electron wrapper with a bundled Pyodide/WebAssembly runtime for the dashboard; it does not require host Python.
Build steps:
npm install
npm run dump
npm run distBuild output is written to dist/.
The macOS build is ad-hoc signed without certificate discovery or Keychain access. It is not notarized; verify the release checksum before approving it locally. To build universal DMG and ZIP artifacts for both Intel and Apple silicon, run npm run dist -- --mac --universal --publish never. During a universal build, the packaging hook removes bundled per-architecture signatures before merging and applies one final ad-hoc signature to the merged app.
This project combines:
- A Python analytics app for data loading, transformation, and dashboard logic (run by Pyodide/WebAssembly in the packaged desktop app)
- A local-only workflow so campaign data stays on the user's machine
- An Electron packaging layer for desktop distribution
- Demo data generation for fast testing and portfolio review
If you do not have a NationBuilder export, generate sample data with:
python app/generate_demo_data.pyThis creates:
app/fake_nationbuilder_transactions.csv
- Python
- Streamlit
- pandas
- numpy
- Pyodide/WebAssembly for the packaged Python runtime
- Electron
- stlite desktop tooling
Fundraising Intelligence is designed for local-only processing.
The application:
- does not upload donor data
- does not require an external backend
- does not send campaign records to third-party APIs during analysis
app/
data_processing.py
fundraising_dashboard.py
generate_demo_data.py
requirements.txt
tests/
test_data_processing.py
docs/
dashboard_preview.png
Political and advocacy teams often work with messy fundraising exports but still need quick answers about donor concentration, conversion opportunities, and outreach priorities.
This project turns raw transaction exports into a usable local analysis tool with a deployable desktop build.
- Support additional CRM import formats
- Add more filtering and segmentation workflows
- Expand dashboard summaries and export options
- Add direct integrations where local-only workflows remain appropriate
Run the focused regression suite with:
python -m pip install pytest
pytest tests/This project assists campaigns in analyzing fundraising activity. Configurable planning limits and engagement scores are operational heuristics and internal planning benchmarks, not statutory legal compliance determinations or predictive machine learning models. Contribution limits and reporting rules vary across federal, provincial, and municipal jurisdictions. Users remain responsible for complying with campaign finance and privacy requirements in their jurisdiction.
