尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Follow The Money IL aggregates, normalizes, and analyzes Illinois campaign-finance data from both state and federal sources, making the flow of political money searchable and explorable in one place. It ingests Illinois State Board of Elections bulk filings alongside federal Schedule A/B/E data from the OpenFEC API, then layers on entity resolution, network analysis, and donor intelligence across election cycles. The platform tracks 6.4M+ itemized receipt rows, 530K+ D-2 filing totals, and 1.3M+ donor-analytics rows, and is deployed in production at followthemoneyil.com with scheduled syncs that keep federal and analytics data current.
/candidates/<id>: all of a candidate's committees, most recently active first); full donor and payee lists per committee (/committees/<id>/donors, /committees/<id>/payees) and contributor / recipient lists per 527 organization (/527/<ein>/contributors, /527/<ein>/recipients), linked from each profile's top-N tables; every state race of a cycle (/analytics/state-races/); and an opt-in roll-up of serial committee re-registrations (/committees/?by=family) driven by admin-reviewed committee families (/admin/committee-families). Ingest Parse / normalize Store Serve
────── ───────────────── ───── ─────
ISBE bulk filings ┐ ┌── PostgreSQL ──┐
OpenFEC API ├─► chunked ETL + async ───┤ normalized ├─► Flask web UI
IL SOS lobbying │ Playwright scraping, │ tables + │ + JSON/CSV API
IRS 527 filings │ entity resolution, │ analytics │ (Redis-cached
Chicago open data │ cross-matching │ rollups │ heavy views)
OpenBook contracts ┘ └────────────────┘
Scheduled jobs keep the data fresh: a recurring sync refreshes federal (FEC) contributions, rebuilds donor identities, and rebuilds analytics rollups.
git clone https://github.com/Doommen3/Illinois_campaign_finance.git
cd Illinois_campaign_finance
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env
# Set DATABASE_URL, FEC_API_KEY, and FLASK_SECRET_KEY in .env
createdb ilcf
export DATABASE_URL=postgresql://$(whoami)@localhost/ilcf
DATABASE_URL is required in all environments. (A legacy DATABASE_PATH SQLite setting exists for backward compatibility but is deprecated and unused for new setups.)
# Create the database schema
python run.py init-db
# Sync federal (FEC) data for Illinois candidates
python run.py sync-fec-il-federal
python run.py rebuild-fec-donor-identities
# Build analytics rollups
python run.py refresh-analytics
# Start the development web server
python run.py runserver --port 5000
In production the app is served via Gunicorn against the WSGI entry point (wsgi.py). Run python run.py --help to see the full set of ingestion, scraping, and maintenance commands. Table shapes, join keys, and data quirks are documented in .claude/data-dictionary.md.
Contributor addresses come from public ISBE filings. Removal requests under the
Illinois Judicial Privacy Act (705 ILCS 90) and similar laws are honored by
scrubbing the address to ISBE's own Redaction Requested format while keeping
the contribution record. The public policy is at /privacy.
python run.py add-privacy-redaction --first Jane --last Doe --zip 60601 \
--requested-by "Requester" --request-date 2026-07-16 --statute "705 ILCS 90"
python run.py apply-privacy-redactions # re-apply after sync-prod-db; sunshine-import does this automatically
Runbook: docs/runbooks/privacy_takedown_response.md.
Serial re-registrations of one political actor are grouped (never merged) into reviewable families; only accepted families appear on public pages.
python3 scripts/committee_families.py report --limit 30 # read-only dry run: proposed families and weak pairs
python3 scripts/committee_families.py seed # store new proposals as pending (idempotent); review at /admin/committee-families
Design: docs/committee_families_design.md.
pytest -q
A new windowed widget needs a row in tests/scope_widgets_registry.py and a probe in tests/test_scope_widgets.py; CI runs both.
Devin Oommen — devinoommen.com · Oommen & Company
Released under the MIT License.