Intro
New Yorkers have wanted to see where their tax dollars go for a very long time. In 1907, reformers founded the New York Bureau of Municipal Research, and the following year it staged a “Budget Exhibit” that laid the city’s spending out for ordinary residents to walk through and question. The idea behind it, by the Bureau’s own account, was the “efficient citizen”: government behaves better when the people it serves can actually see and understand how it spends public money. By the accounts of the city’s municipal archivists, the exhibits that followed drew enormous crowds, on the order of a million visitors across the 1910 and 1911 events. More than a century later, the principle has not changed. What has changed is the medium. The budget is no longer posted on the wall of an exhibit hall. It lives in PDFs.
Every year the New York City Council decides where hundreds of millions of dollars go. It funds a senior center in one district, an arts program in another, a park reconstruction, a legal-aid hotline. Two documents carry the most specific and consequential of these choices: the discretionary Schedule C, and the Section 254 capital schedule. Both are public. Both are voted on openly. And both are published as hundreds of pages of PDF tables that resist analysis.
“Public” and “usable” are not the same thing. This is not just a civic-tech complaint; it is how the City’s own budget experts describe the documents. At NYC Open Data Week 2026, Logan Clark of the nonpartisan Independent Budget Office put it plainly:
“That is the primary focus of the city’s budget. Its transparency is a secondary goal.”
Logan Clark, NYC Independent Budget Office, “Making Cents of It All,” Open Data Week 2026
Transparency is only real if people can find the record. Accountability, in turn, depends on the ability to compare what was promised with what was spent. And there is a longer horizon at stake than today’s news cycle. Discoverability is not just about the journalist or community board member working this week. It is about whether a researcher in 2040 can reconstruct, cleanly and without guesswork, the financial decisions the City made at the moment they were made, at the start of the legislative process rather than through the fog of later summaries. That is the same efficient-citizen idea the Bureau put on display, carried into the age of open data.
So we did something about the data. And we have a specific ask for the Council about how it should be published going forward.
TL;DR:
Get the city’s budget data into your analytical engine of choice. We turned up to nineteen years of the NYC Council’s discretionary Schedule C, along with recent years of its Section 254 capital changes, into clean, open data you can query in plain language. Grab it on GitHub. And we’re asking the Council to publish it right at the source, within 24 hours of a vote.
What we built
New-York-City-Budget is a public, open-source repository that turns the Council’s adopted budget documents into clean, structured, machine-readable data. It covers Fiscal Years 2009 through 2027, nineteen budget cycles.
The method is deliberate and boring on purpose. Python parsers read the text layer of the Council’s own PDFs and emit structured rows using pattern matching. There is no hand transcription and no language model reading the numbers. Every Schedule C category total is reconciled against the document’s own printed TOTAL line, so any figure can be trusted or challenged against the source. The FY2027 discretionary schedule, for example, reconciles to the exact dollar: $655,764,999.
Where a document could not be parsed cleanly, we said so rather than guessing. A handful of the oldest files are scanned images with no text layer, and we left them flagged as open work rather than inventing numbers for them. The repository ships with a data dictionary, a per-year processing manifest, a data-quality report, and an honest catalog of every known gap and caveat.
What’s in the repository
Four kinds of budget record, plus a bridge to the legislative record:
- Schedule C (discretionary funding). Who got what: the organization, the sponsoring council member, the amount, the implementing agency, and the recipient’s EIN. Organization-level detail with EINs is available from FY2015 onward.
- Terms and Conditions. The reporting mandates the Council attaches to appropriations.
- Section 254 capital changes. The Council’s changes to the adopted capital budget, by agency, project, borough, and sponsor.
- Transparency Resolutions. The post-adoption designations, rescissions, and purpose changes are where the money the adopted budget left “to be designated later” is actually assigned.
- A Legistar crosswalk. Every source document is linked to its NYC Council Legistar legislative record: matter number, adoption date, and detail-page URL, for the full FY2008 to FY2027 range.
- An MCP server, a small connector that lets AI assistants pull directly from this dataset. That means you can ask, in plain language, what a council member funded or which awards tie to a given nonprofit’s EIN, and get answers from the same reconciled records, no code required.
The EIN is the key that makes this useful beyond a single spreadsheet. Because each award carries the recipient’s tax ID, the data can be joined directly to IRS Form 990 nonprofit filings, city contract records, and across fiscal years.
How to use it
Two ways in.
Work with the files directly. The data lives in plain CSVs organized by fiscal year, documented column by column in the repository’s DATA-DICTIONARY.md. Load them into a spreadsheet, a notebook, or a database and go.
Ask questions in plain language. We also built a Model Context Protocol (MCP) server that enables an AI assistant to query data in a conversational manner. It exposes the awards, capital, terms, transparency resolutions, and the Legistar crosswalk as structured tools, so you can ask a question and get a grounded answer with the underlying rows.
Sample prompts
These are real questions the data answers today:
- “Which organizations did Council Member [name] fund in FY2026, and how much did each receive?”
- “Show every discretionary award sponsored by Council Member [name] from FY2020 to FY2024.” (Awards key on the sponsoring member’s name; pair with a Council roster to roll up by district.)
- “Was [organization]’s FY2026 funding later rescinded or moved to a different group by a Transparency Resolution?”
- “List every capital project [council member] sponsored since FY2020, with the adopted amount and the agency.”
- “Find the full legislative trail for the [initiative name] initiative: the resolution that adopted it and its Legistar record.”
- “How much discretionary funding has [organization]’s EIN received across every year with award-level data (FY2015 forward)?”
Cross-reference it with the rest of the city’s record
The budget data becomes far more powerful when you combine it with other public sources. BetaNYC maintains a family of open MCP connectors and a few third-party tools that let an AI assistant walk from a budget designation out into the rest of the city’s record using the EIN and the Legistar matter number as keys:
- nyc-checkbook-mcp: NYC Checkbook (Comptroller) spending and contracts. Ask whether a Schedule C designation actually became a paid contract.
- nyc-council-mcp: NYC Council legislation via Legistar. Pull the resolution that enacted the designation, along with its sponsors and the vote.
- nyc-record-mcp: the City Record. Check whether an award was issued under a competitive solicitation or made through a direct designation.
- nyc-charter-laws-rules: the Charter, Administrative Code, and Rules. Look up the legal authority behind a capital change or a post-adoption designation.
- socrata-mcp-server (by Nathan Storey): query the NYC Open Data portal itself, to cross-check against the City’s own published datasets.
Because every award carries an EIN, you can also use that same tax ID in nonprofit 990 data to see the recipient organization’s broader finances. One designation, traced from the vote that made it to the contract that paid it to the organization that received it.
How this relates to other NYC budget data sources
This repository is one component of a larger NYC budget data ecosystem. It is deliberately narrow: designation-level, who-got-what data from the Council’s adopted budget — the organization, the sponsoring Council member, the amount, the implementing agency, and the recipient’s EIN. It is not a source of citywide fiscal totals, revenue, or long-run spending trends. Here is where the neighbors fit.
| Source | What it’s best for | Overlap with this repo |
|---|---|---|
| This repo | Council discretionary (Schedule C) awards, Terms & Conditions, §254 capital changes, Transparency Resolutions, and a Legistar crosswalk, at the organization/EIN level | You are here. 😉 |
| NYC Independent Budget Office — Data Center | The aggregate fiscal picture: citywide and agency-level expenditures and revenue (FY1980+), capital expenditures (since 1985), debt, headcount, education spending, tax data; plus IBO’s fiscal analyses and budget-option reports | None at the award level. IBO has no discretionary/Schedule C/member-item data. It is the fiscal context this repo’s who-got-what data sits inside. Most of the Data Center is also on NYC Open Data under agency “NYC Independent Budget Office (IBO).” |
NYC Open Data — City Council Discretionary Funding (4d7f-74pe) | Award-level Council discretionary funding, FY2009–FY2021, Council-published | Directly overlaps FY2015–FY2021. It stopped updating April 2021, so this repo is the machine-readable source for FY2022–FY2027 and adds source-reconciled totals plus Terms, Capital, Transparency, and Legistar provenance. |
| NYC Checkbook (Comptroller) | Actual spending and registered contracts | Complements this repo: join on EIN to ask whether a designation became a paid contract. |
| NYC Council Finance Division / OMB | The primary source documents this repo parses | This repo is the structured, reconciled extraction of those documents. |
In short: IBO tells you what the City spends, raises, and owes in aggregate over decades; this repo tells you which organizations the Council funded, and how much, in the adopted budget. Neither IBO nor NYC Open Data (after FY2021) publishes the second thing as machine-readable data. That is the gap this repository fills.
The ask: publish it right at the source
We built this because the data was not published in a usable form. It should not take a civic-tech nonprofit, using AI to parse PDFs, to make the City’s own spending decisions queryable. So here is our call to action for the New York City Council.
Publish Schedule C and the Section 254 capital schedule to the NYC Open Data portal within 24 hours of the legislation’s passage.
The details matter, so we are being specific about the form:
- Publish as a structured fiscal-year data file, not a PDF. One machine-readable file per fiscal year for Schedule C, and one for capital, with the fields already present in the adopted documents, including the recipient EIN.
- Post within 24 hours of adoption. The record should be available as open data at the moment the decision is made, not months later and not only as a printed schedule. This is what preserves an accurate picture of the decision as it was made, for the public today and for the historical record tomorrow.
- Let amendments append to the same file. Post-adoption changes — the designations, rescissions, and purpose changes that today live in separate Transparency Resolutions — should be appended to that fiscal year’s data file, with a clear action and date on every row. The full arc of a fiscal year’s spending, from adoption through every later amendment, should be readable in one place rather than reconstructed from scattered documents.
None of this requires new law about what the Council funds. It is a change in how the existing record is published: the same decisions, released as open data, on time, in a form people can actually use.
And if the Council wanted to make this permanent, there is already a natural home for it in law. New York City’s Open Data Law, Local Law 11 of 2012, codified at Title 23, Chapter 5 of the Administrative Code, already requires city agencies to publish their public data sets to a single open data portal. The Council could amend that law to designate the adopted Schedule C and the Section 254 capital schedule as required public data sets, so that all budget data is published per the Open Data Law: on the portal, within 24 hours of adoption, with post-adoption changes appended. (We are also not lawyers and highly recommend that the City Council investigate the appropriate location of this. Hopefully we do not have to vote on this as part of a charter amendment.)
Get involved
The repository is open source and free to use. Explore it on GitHub.
There is real, well-scoped work open right now for anyone who wants to help:
- Issue #4, recover the oldest records. A few FY2009 to FY2013 documents are scanned images or legacy file formats with no usable text layer. They need an OCR and conversion pass, reconciled against the printed totals.
- Issue #5, backfill organization-level detail for FY2009 to FY2014. Those years currently have only initiative-level totals. Reconstructing the per-organization awards from the Transparency Resolutions and NYC Open Data would extend the EIN-level record back another six years.
- Help make the case to the Council. If you are a New Yorker, a journalist, a community board member, or a council staffer who thinks the budget belongs in the open data portal on the day it passes, tell your council member. Share this post. The ask above is written to be adopted more or less as-is.
BetaNYC builds tools like this and trains New Yorkers to use public data. Take a class or join an upcoming event with us, come to CityCamp NYC on September 19, and support the work.
Thank you
This project stands on work by others, and we want to name it.
- Jehiah Czebotar, whose open
nyc_legislationarchive and long-running intro.nyc legislation tracker are foundational civic-data infrastructure for New York City. BetaNYC’snyc-council-mcpis built directly on that legislation archive. - Nathan Storey, author of the open-source socrata-mcp-server that lets AI tools query Socrata open data portals, including NYC Open Data.
- The NYC Open Data team, who maintain the portal this data belongs on.
- The NYC Council Finance Division, whose adopted budget documents are the source of everything here. Our ask is not a criticism of that work. It is a request to release it in one more format.
And the open-source software that made the extraction possible: pypdf and pdfplumber for reading the PDFs, and the Model Context Protocol SDK, better-sqlite3, zod, and csv-parse for the query layer, all released by their maintainers under open licenses.
A note on how this was made: the parsers, the query tools, and this post were built with the help of AI, with the analysis, verification against the source documents, and every editorial decision made by the BetaNYC team. That reflects our AI Policy, which keeps a human accountable for what we publish.
