How it works
A plain-language guide to our pipeline: origination → collection → expenditure. This is about methodology, not how to submit data.
Public funds should be public knowledge. TaxTracker exists to honor sunlight laws, open-data mandates, and the simple belief that communities thrive when people can actually see how money moves. Transparency is not just good governance—it is the accountability mechanism that keeps public promises honest and empowers residents to push for better outcomes.
The pipeline
We aggregate public records, normalize them to a common schema, compile to JSON, and render pages.
- Sources: municipal/state codes, agency sites, ballot/ordinance records.
- Normalization: small JSON files under
_data/taxes/…validated & key-sorted. - Compilation: a build step produces
_data/compiled/taxes.json. - Rendering: the inventory lists all taxes; per-tax pages show details & sources.
- Visualization: the flows prototype illustrates cyclical movement of funds.
What’s in a tax record
name,slug,status,typejurisdiction(level, name, slug)agency(name, slug)rates[](percent/amount; applies_to; cap)revenue&revenue_year(latest annual USD)sources[](name + URL),updated_at,notes
Provenance & verification
- Every fact links to an official source.
- Edits via PR/Issues leave an auditable history.
- Automated validation catches schema drift.
How pages are generated
Inventory reads _data/compiled/taxes.json. Per-tax pages are generated from that dataset
(either via a build step or a Jekyll generator), ensuring the site reflects the latest data.
Roadmap
- Richer jurisdiction coverage (city, county, special districts).
- “Follow the Money” with account/vendor hops.
- APIs & bulk downloads.
Contribute a tax from your jurisdiction
Start small—add one accurate record with an official source. We validate JSON and key ordering automatically.