Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
Salaries, boards and spending of the largest US non-profits, from public IRS Form 990 filings.
FinancePython · JinjaGitHub @whopemanOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Who runs the largest US non-profits, and who gets paid, from the public returns they file with the IRS. Planned home: https://hopemanhorde.com/nonprofit-spending/.
The site is static HTML with one small search script:
| Phase | What | Flag |
|---|---|---|
| 1 | Searchable site, top 100 and organization pages (this release) | always on |
| 2 | Charitable (program) spending versus internal costs | phase2_spending |
| 3 | Public-source review of possible violations of exempt status | phase3_violations |
All bulk downloads from the IRS; no API calls or scraping.
| Source | What it gives | Link |
|---|---|---|
| Form 990 series e-file XML (TEOS) | Every e-filed Form 990, 990-EZ, 990-PF and 990-T, monthly zips by processing year (2019 on), with an index CSV per year | https://www.irs.gov/charities-non-profits/form-990-series-downloads |
| EO Business Master File | Every recognized exempt organization: NTEE category, subsection, ruling date | https://www.irs.gov/charities-non-profits/exempt-organizations-business-master-file-extract-eo-bmf |
| SOI annual extracts (not used yet) | Selected financial fields from 990, 990-EZ, 990-PF as flat files | https://www.irs.gov/statistics/soi-tax-stats-annual-extract-of-tax-exempt-organization-financial-data |
Notes on the sources:
| Step | Where | What |
|---|---|---|
| Fetch | WSL, scripts/ | Download XML zips and BMF to ~/np-data (about 15 GB) |
| Extract | WSL, Python | Parse every return in parallel into TSV files |
| Load | WSL, PostgreSQL | COPY into raw, build the site schema (sql/) |
| Render | WSL, Python | Jinja2 templates to static HTML in site/ |
| Deploy | Windows, PowerShell | Framework deploy script uploads site/ over SFTP |
| Path | What it holds |
|---|---|
config/flags.toml | Feature flags |
src/nppipe/ | Python package: parser, extract, names, renderer, CLI |
templates/ | Jinja2 page templates |
static/ | CSS, search script and .htaccess (security headers) |
sql/ | Database tables and site schema SQL |
scripts/ | Fetch and load scripts (bash, run in WSL) |
tests/ | pytest suite and made-up XML fixtures |
# WSL, in the repo folder
export UV_PROJECT_ENVIRONMENT=~/venvs/np # keep the venv off the Windows drive
uv sync
scripts/fetch.sh all # about 15 GB
scripts/load.sh all # extract, load, build the site schema
uv run nppipe demo # layout check with made-up data
uv run nppipe build # the real site, from PostgreSQL
uv run pytest
uv run ruff check . && uv run ruff format --check .
uv run pip-audit
npm install && npm run lint:html
Set in config/flags.toml, or override per run with NP_<NAME>, for example
NP_TOP_N=250 uv run nppipe build.
| Flag | Default | Effect |
|---|---|---|
use_gpu | true | GPU fuzzy person matching (Phase 2; unused in 0.1) |
filing_years | 2023 to 2026 | IRS processing years of XML to load |
rank_by | revenue | revenue, expenses or assets |
top_n | 100 | Organizations in the home page list |
org_page_min_usd | 10000000 | Organizations below this get no page of their own |
page_by | assets | Measure for the page cut: revenue, expenses, assets |
page_top_pct | 10 | Only this top percent (by page_by) of those get pages |
phase2_spending | false | Show program spending versus internal costs |
phase3_violations | false | Show the violations review |
Copy deploy.example.json to deploy.local.json (gitignored) and set user
and keyPath. Then, from the Framework_Website_HopemanHorde repo:
npm run deploy -- -ConfigPath ../nonprofit-spending-reports/deploy.local.json # dry run
npm run deploy -- -ConfigPath ../nonprofit-spending-reports/deploy.local.json -Execute # upload
Issues and comments are limited to collaborators.
Code: MIT. IRS data is public domain.