A framework for tracing public dollars across three levels of government without double-counting.
If you've ever tried to answer "where do my tax dollars go?" using public data, you've hit the wall: the city, state, and federal government all publish spending data, and the numbers don't add up. They overlap. They double-count. They hide billions in off-budget entities that appear nowhere in the city's expense budget.
This framework documents the structural architecture of how money flows through New York City's public finance system — which sources to trust, which to ignore, where the traps are, and how to build a transparent tax receipt without producing nonsense.
The methodology applies to any multi-level government finance system. NYC is the worked example.
Status: This is the framework only. A future release will apply these rules to real budget data with current dollar amounts, interactive tax receipt calculations, and agency-level breakdowns. The structure comes first because getting the structure wrong means every number you publish is misleading.
Never sum across funding levels.
The NYC city expense budget already tags every line item by funding source: city, state, federal, or other. If you also pull federal numbers from USAspending.gov and state numbers from data.ny.gov, you will double- or triple-count the same dollars.
The city budget is the single source of truth for spending. Federal and state datasets are validation layers — they confirm money arrived. They never add new dollars.
This one rule prevents the most common mistake in civic finance projects.
Not all government data is created equal. These sources have a strict pecking order:
| Level | Source | Authoritative For | Use For |
|---|---|---|---|
| Primary | City expense budget (NYC Open Data) | What the city spends, by agency, by funding source | All spending allocation |
| Validation | City Comptroller CAFR | Actual expenditures vs. adopted budget | Adopted-vs-actual gap |
| Context | NYS budget (data.ny.gov) | State-originated spending | State flow-back context |
| Context | USAspending.gov | Federal awards to NYC recipients | Federal flow-back context |
The primary source is the city expense budget. Everything else derives from it or validates against it.
Each spending area has a different risk of being double-counted. Understanding why is the key to getting the numbers right.
Police, fire, and corrections are 90%+ city-funded. Federal grants (COPS, FEMA, homeland security) are small and episodic. The city budget captures nearly the full picture. No meaningful overlap with federal or state datasets.
Homelessness and human services funding flows through multiple channels — federal TANF block grants flow through the state before reaching the city. The city budget tags these correctly by funding source, but summary figures from the Comptroller's office may include all funding sources without distinguishing. Always use the line-item-level funding source tags, not summary totals.
This is the hardest one. Three levels of government all claim "spending" on Medicaid:
- Federal: ~50% via CMS (the FMAP rate for New York is at the statutory minimum of 50%)
- State: ~25%, administers the entire program
- City: ~25% "local Medicaid share"
New York is essentially the only state in America that requires counties to contribute to Medicaid at this scale. The city budget's funding source tags capture the city's actual share — use those, not the headline number.
Federal HUD dollars flow directly to NYCHA — the city's public housing authority — which operates its own independent budget. NYCHA's budget is not part of the city's budget. It doesn't appear in the city expense dataset. If you only look at the city budget, you see effectively zero for public housing.
The MTA is a New York State public-benefit corporation. Its operating budget appears nowhere in the city expense budget. The city funds NYC DOT (roads, bridges, some MTA capital contributions), but the transit system that millions of residents depend on is invisible in city spending data.
These entities spend billions of public dollars but don't appear in the city's expense budget. Any honest picture of "where my taxes go" must source them separately:
| Entity | Why Off-Budget | Where to Find It |
|---|---|---|
| NYCHA | Federal public housing authority, own fiscal year (calendar year) | NYCHA annual report, HUD data |
| MTA | State authority, not a city agency | MTA financial statements, NTD |
| NYC Health + Hospitals | Partially on-budget (city subsidy) but generates own billing revenue | H+H annual report |
| CUNY | State university system, partially city-funded | CUNY budget |
| School Construction Authority | Capital projects only | Capital budget dataset |
| Housing Development Corporation | Bond-financed | HDC annual report |
The MTA alone has an operating budget comparable to many state governments. Leaving it out of a "where your taxes go" calculator would be like calculating your household expenses but forgetting rent.
A New York City resident pays taxes at three levels. Each funds different slices of public services:
| Tax | Rate | Notes |
|---|---|---|
| NYC income tax | 3.078% – 3.876% | Progressive brackets |
| NYC property tax | Varies by class | ~0.88% effective rate for Class 1 residential |
| NYC sales tax | 4.5% of 8.875% total | State gets 4%, MCTD gets 0.375% |
All city taxes flow into the same general fund. Attribution to specific agencies is proportional:
your_agency_share = your_total_city_taxes * (agency_city_funds / total_city_funds)
This is the same approach used by the White House federal tax receipt calculator and similar municipal transparency tools. It assumes fungibility of general fund dollars — which is true for general fund, less true for earmarked revenues.
New York State sends approximately $19–21B annually to NYC in categorical aid. NYC generates roughly 46–55% of total state tax revenue — making the city a significant net donor to the state. Foundation Aid (school funding) is the single largest category, accounting for ~71% of all state school aid.
Similar proportional calculation using the federal funding source column in the city budget. Federal dollars arrive through dozens of programs (Title I, Medicaid, TANF, Section 8, FEMA) and are tagged at the line-item level.
The three levels of government operate on different fiscal years:
- Federal: October 1 – September 30
- New York State: April 1 – March 31
- New York City: July 1 – June 30
Don't try to align them. Accept the overlap, disclose it, and use each level's data for its own fiscal year. Attempting cross-level reconciliation produces misleading precision.
For anyone building a database to support this framework, the core tables:
budget_lines— the atomic unit, one row per line item with afunding_sourcecolumn. This is the single ledger.funding_flows— cross-level claims (e.g., "federal TANF flows to NYS then to NYC HRA"). For validation and context, never summed into spending totals.programs— human-readable program mapping for a two-sided ledger (what residents think of as "education" or "policing" vs. how agencies are organized).program_funding— precomputed per-program funding breakdown across sources.recon_runs— audit trail for reconciliation runs against Comptroller and other validation sources.
Key principle: budget_lines is the single ledger. Everything else derives from it or validates against it.
Transparency about what this framework can and can't do:
- City budget totals vs. Comptroller figures: Expect 5–8% variance. Mid-year modifications, supplemental appropriations, and intra-city transfers explain the gap. This is normal.
- Funding source attribution: Reliable within 10–15% from the city's open data. Some line items have ambiguous funding source coding.
- Tax receipt calculations: Exact on tax brackets, but proportional allocation to agencies inherits the budget imprecision above.
- Cross-level reconciliation: Don't attempt it. Show each level's own data and disclose methodology. Attempting false precision is worse than honest approximation.
- Off-budget entities: Sourced from annual reports with varying publication schedules. Numbers may lag the city budget by 6–12 months.
This framework will be applied to real data in a future release:
- Current-year budget numbers with fiscal year citations
- Interactive tax receipt calculator (enter your income, see where it goes)
- Agency-level breakdowns with funding source decomposition
- Off-budget entity integration (NYCHA, MTA, H+H)
- Historical trend data (how spending shifts year over year)
- Comparison views (adopted vs. actual, year over year, per capita)
The structure comes first because every civic finance project that starts with the numbers and ignores the structure ends up publishing something misleading. We're doing it in the right order.
If you work in public finance, urban policy, civic tech, or government transparency and see something wrong here — please open an issue. This framework benefits from scrutiny.
Particularly valuable:
- Corrections to the source-of-truth hierarchy
- Additional off-budget entities we've missed
- How this framework does or doesn't apply to other cities
- Edge cases in funding source attribution
This framework was developed while building a civic data engine that connects taxes to agencies to outcomes. The fiscal flow architecture turned out to be the hardest and most interesting part — hard enough to be worth publishing on its own.
New York City's budget is one of the largest and most complex municipal budgets in the world. If you can get NYC right, you can get anywhere right.
Author: Paul Jump Date: March 2026 License: MIT