尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Where charities' money goes: sourced Form 990 spending breakdowns of 25,000+ US charities. Program share, executive pay, revenue mix, trends. No ratings. Machine-run, CC0.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Live: https://theguysaccount.github.io/charity-impact-media/ · Data (CC0): latest release · Screens: desktop and phone
Sourced spending breakdowns of every US 501(c)(3) public charity with $10 million or more in revenue (about 25,000), built from each charity's own IRS Form 990 filings and refreshed as new filings post:
Every figure shows its filing year and links to the filing it came from. Every page has a public correction link and a right-of-reply for the charity. There are no ratings, ads, accounts or tracking cookies.
| What | Where | When |
|---|---|---|
| Fetch new filings, rebuild, test, guard, publish a data release | .github/workflows/refresh.yml | weekly; rebuilds only when an index, the BMF or the data code changed |
| Build the site from the latest release and deploy to GitHub Pages; IndexNow | .github/workflows/deploy.yml | after each refresh, on site changes, when new reply issues appear |
| Live site check, reply sync; weekly live source self-test | .github/workflows/health.yml | daily; self-test Sundays |
| Tests | .github/workflows/test.yml | every push |
Each job fails safe: nothing is published unless every step passes, and the live site keeps the last good build. Scheduled workflows keep themselves enabled (scripts/keepalive.sh). Details, alerting and the optional keys (custom domain, support link, analytics, Search Console): OPERATIONS.md.
pipeline/ Python 3.9+, standard library only (Pillow optional, for share cards)
sources.py fingerprint the public inputs, download them, guard a rebuild
select_filings.py covered charities (IRS BMF + data-lake indexes) and every Form 990 they filed since 2019
fetch_filings.py fetch + parse into the cache: data lake over S3, IRS-only filings by HTTP range request
irszip.py, inflate64.py read single members of the IRS monthly zips (incl. Deflate64) without downloading them
parse990.py Form 990 XML -> compact record; never reads personal names
build_data.py pick each year's return (amended wins), compute measures, medians, ranks
render.py, pages.py HTML templates (charity pages; home, causes, states, A-Z, guides, method, corrections)
build_site.py write dist/: pages, data.json, search index, sitemap, feed, CSV, IndexNow lists
og_cards.py 1200x630 share cards ("Of every $100 spent")
crosslinks.py WHOFUNDS cross-links; replies.py: right-of-reply and correction issues by EIN
indexnow.py, healthcheck.py
content/guides/ the guide backlog, with live-data placeholders
site/static/ app.css, app.js (search, share, compare, embed, chart tooltips, opt-in analytics), favicon
tests/ unit, privacy, content-rule and build tests; test_live.py checks the live sources
Inputs are public and anonymous; no keys.
python3 pipeline/sources.py check && python3 pipeline/sources.py download # indexes + BMF, ~2.5 GB
python3 pipeline/select_filings.py # ~25,000 charities, ~150,000 filings
python3 pipeline/fetch_filings.py --workers 48 # ~30 min cold, resumable
python3 pipeline/build_data.py
CIM_BASE_URL=http://localhost:8765/charity-impact-media python3 pipeline/build_site.py
mkdir -p /tmp/serve && ln -sfn "$PWD/dist" /tmp/serve/charity-impact-media && python3 -m http.server 8765 --directory /tmp/serve
python3 -m unittest discover -s tests -v # parser, privacy, measures, Deflate64, guard, full site build + content rules
CIM_LIVE=1 python3 -m unittest tests.test_live -v # parse the newest filing from each live source
node scripts/screens.mjs <site url> # screenshots at 1280px and a real 390px mobile viewport -> docs/screens/
IRS Form 990 e-file data from the GivingTuesday 990 Data Lake and the IRS Form 990 series downloads; the IRS Exempt Organizations Business Master File. Filings are public under 26 U.S.C. § 6104. Filing pages link to ProPublica Nonprofit Explorer.
CC0 1.0 for data and code. See LICENSE.