All fiscal data in this tracker comes from NYC Legistar, the New York City Council's official legislative management system at legistar.council.nyc.gov. Legistar is the public record of all legislation introduced in the Council, including attached documents.
For any bill that moves toward a vote, the Council's Finance Division prepares a Fiscal Impact Statement, a standardized document estimating the bill's effect on city revenues, operational expenditures, and capital costs. These statements are attached as .docx files to each bill's Legistar record and are publicly accessible.
This tracker reads those documents directly. No data is sourced from any secondary database or government API, every figure comes from the text of the Finance Division's own analysis.
The tracker covers Introductions (proposed local laws) and Resolutions that have a fiscal impact statement attachment on Legistar, where the Finance Division estimated a non-zero fiscal impact. Coverage spans 2014 through the present.
Included legislation types
- Introductions (Int.), proposed local laws. These become binding law if passed by the Council and signed by the Mayor.
- Resolutions (Res.), formal Council positions, requests, or ceremonial acts. Resolutions don't create law, but some carry real fiscal implications (e.g. approving a contract).
- Pre-Considered Resolutions, resolutions introduced and voted on in the same session, bypassing the normal committee referral.
Not included
- Bills with zero fiscal impact. Many bills are analyzed and found to have no net cost, these are excluded. Only bills where at least one of total expenditure, capital, revenue, or net impact is non-zero are tracked.
- Bills where costs can't be estimated. When the Finance Division determines that costs cannot be reasonably quantified (e.g. "depends on how many complaints are filed"), the statement says so and these bills are excluded.
- Proposed bills. Bills labeled "Proposed Int." or "Proposed Res." on Legistar are draft versions that have not yet been formally introduced. Only final, formally introduced bills are included.
- Budget modification resolutions (MN-#). These are administrative approvals of mayoral budget modifications under City Charter §107(e). They pass as a matter of course and do not represent independent legislative fiscal decisions.
Legistar doesn't provide a bulk download of fiscal impact statements. The tracker identifies relevant bills by searching Legistar's legislation index for attachments containing the phrase "Fiscal Impact Statement", the standard title the Finance Division uses for these documents.
Current bills (2024–present)
The tracker searches Legistar's web interface using the attachment text search, retrieving all bills across all years that have a matching attachment. Results are paginated and deduplicated. This search is run monthly via an automated job to pick up newly introduced bills.
Historical bills (2014–2023)
For older legislation, the tracker uses the Legistar REST API (webapi.legistar.com/v1/nyc) to enumerate all NYC Council matters and their attachment URLs. Each matter is checked for a fiscal impact statement attachment; if one is found, it's downloaded and processed using the same extraction logic as current bills.
Finding the right attachment
A single bill may have many attachments, committee reports, hearing transcripts, legal memos, and more. The tracker identifies the fiscal impact statement specifically by checking the filename of each attachment for the words "fiscal" or "impact." Only that attachment is downloaded; all others are ignored.
Once a fiscal impact statement is identified, the tracker downloads the .docx file and extracts its full text, including all table cells. That text is passed to a large language model, Claude Haiku (Anthropic), with a structured prompt that instructs it to return a JSON object containing all key fields: fiscal totals by year, agency breakdown, narratives, sponsor names, and administrative metadata.
Why AI extraction?
Fiscal impact statements don't follow a perfectly uniform format. While newer documents (post-2020) use a consistent three-column table, older bills used varied column structures, different terminology, or described costs entirely in prose paragraphs. A rule-based parser would break on edge cases. Claude reads the document's actual content and synthesizes the values regardless of layout.
Handling prose-only documents
Pre-2019 fiscal impact statements often have no structured table at all, costs are stated in sentences like "this legislation is estimated to increase expenditures by $1.6 million annually." For these documents, the model synthesizes the totals from the narrative text. When a range is given (e.g. "$1 million to $2 million"), the midpoint is used.
Pre-check before extraction
Before calling the AI, the tracker scans the raw document text for any non-zero dollar amounts. If every dollar figure in the document is literally $0 and there's no "See below" language indicating a cost described elsewhere, the document is skipped without an AI call. This avoids spending resources on bills that clearly have no fiscal impact.
Sponsor name normalization
Fiscal impact statements list sponsors inconsistently, sometimes as "Council Member Smith," sometimes as "By Council Members Smith and Jones," sometimes with "(s):" prefixes. The extraction prompt instructs the model to strip all prefixes and return last names only. "The Speaker (Council Member X)" is returned as "X (Speaker)".
Total expenditure, capital, and revenue
Most fiscal impact statements present costs across multiple fiscal years in side-by-side columns, typically "Effective FY," "FY Succeeding Effective," and "Full Fiscal Impact FY." The tracker sums all column values to produce a single total for each category:
- Total expenditure, sum of all operational expense amounts across all fiscal year columns. Always a positive number.
- Total capital, sum of all capital cost amounts across all fiscal year columns. Always a positive number, or
nullif the bill has no capital component. - Total revenue, sum of all revenue amounts across all fiscal year columns. Always a positive number.
Net fiscal impact
The net fiscal impact represents the overall cost or benefit to the city's budget:
A negative net fiscal impact means the bill is a net cost to the city (expenses exceed revenues). A positive net fiscal impact means the bill generates more revenue than it costs, unusual but possible (e.g. a bill that imposes a new fee).
This matches the sign convention used in the Finance Division's own documents, where net figures appear as negative numbers in parentheses when they represent a cost.
Revenue reductions (pre-2019 documents)
Older narrative-format documents sometimes describe a fiscal impact as a reduction in revenue rather than an increase in expenditure, e.g. "this legislation would reduce revenues by $204,000." A revenue reduction is a real cost to the city. When the document frames it this way, the tracker records it as an expenditure so the net figure is negative (a cost), rather than as a positive revenue figure that would make the bill appear to be a money-maker.
Balanced-budget bills
Some bills are designed to be cost-neutral: new expenditures are fully offset by new revenues, so the net impact is $0. These are included in the tracker because the total expenditure and revenue figures are both non-zero and represent real resource flows, even if they cancel out.
After extraction, each record passes through a series of filters before it appears in the tracker. Records are excluded if any of the following conditions are true:
- EXCLUDED All fiscal values are zero. If total expenditure, total capital, total revenue, and net fiscal impact are all zero or null, the bill has no real fiscal impact and is not tracked.
-
EXCLUDED
Costs cannot be estimated. The Finance Division sometimes states that a bill's costs "cannot be estimated" because they depend on future administrative decisions, litigation outcomes, or behavioral responses. These bills are labeled
cost_estimable: falseand excluded. A bill whose cost genuinely can't be quantified would misrepresent certainty if given a dollar figure. - EXCLUDED Proposed (not yet introduced) bills. Bills labeled "Proposed Int." or "Proposed Res." on Legistar are draft versions circulating before formal introduction. They may never be introduced, and the bill number may change. Only formally introduced legislation is tracked.
- EXCLUDED Budget modification resolutions (MN-#). These resolutions, labeled with a title like "MN-6", are routine Council approvals of mayoral budget modifications under City Charter §107(e). They are not independent legislative decisions. Including them would inflate the tracker with administrative paperwork rather than substantive Council action.
- INCLUDED Balanced-budget bills (net = $0). Bills where revenues exactly offset expenditures are kept because the gross figures (total spending, total revenues) still reflect real fiscal activity.
Each fiscal impact statement includes a program-by-program cost breakdown listing which city agencies bear which costs. The tracker reads these breakdowns and applies two cleanup rules.
Only agencies with actual cost line items
Fiscal impact statements often mention agencies in narrative text for reasons other than fiscal responsibility, the Office of Management and Budget may be cited as a reviewer, the Independent Budget Office as a reference source, and the City Council itself as the bill's introducer. None of these agencies are incurring costs.
The tracker assigns agencies only to bills where that agency appears in at least one line item in the cost breakdown table. Agencies mentioned only in narrative text are excluded from the agency list for that bill.
Street signs → DOT
Many bills require the installation or fabrication of new street signs, co-namings, street redesignations, or new regulatory signs. These costs are sometimes attributed in the document to whichever agency sponsored the request (parks, police, sanitation), but the actual work of fabricating and installing street signs in New York City is performed exclusively by the Department of Transportation (DOT).
The tracker reassigns any program breakdown line item involving street sign installation, fabrication, or co-naming to DOT, regardless of how the source document attributes it.
The Finance Division's fiscal impact statement template has changed over time. The tracker handles all three formats it has encountered:
New template (~2020–present)
Three standard columns: "Effective FY," "FY Succeeding Effective," and "Full Fiscal Impact." Rows for revenues, expenditures, and net. Includes a separate OMB estimate section and a hearing date field. This is the most consistent format and extracts cleanly.
Old template (~2015–2019)
Column structure varies by bill, custom labels based on the legislation's scope and effective date. May include a capital row. No OMB section. The tracker extracts whatever columns are present and sums them into totals.
Narrative format (pre-2019, common)
No structured table at all. Fiscal impact is described entirely in prose: "This legislation is estimated to increase expenditures by $1.6 million annually." The tracker synthesizes totals from these narrative figures. When ranges are given, the midpoint is used. A single-column fiscal table labeled "Total" is created from the narrative figures for display purposes.
These are estimates, not actual expenditures
Every figure in this tracker is a pre-passage estimate prepared by the City Council's Finance Division. They represent what the bill is expected to cost if enacted and implemented as written. Actual costs after a bill becomes law may differ significantly, appropriations may be lower, implementation may be phased, or agencies may absorb costs within existing budgets.
Totals are multi-year sums
The "total expenditure," "total capital," and "net fiscal impact" columns sum costs across all fiscal years in the document, typically two or three years. They are not annual figures. Two bills with the same total cost may have very different annual profiles depending on how costs are distributed over time.
AI extraction may contain errors
Numbers are extracted from document text by a large language model. While the model performs well on structured tables, it can occasionally misread a figure, misattribute a cost to the wrong category, or misparse a complex multi-agency breakdown. If you spot a discrepancy, compare against the original document linked in each bill's detail panel (via the Legistar link).
Older bills use narrative format
For pre-2019 legislation, fiscal impacts were often written as prose rather than structured tables. Synthesizing totals from narrative text introduces more uncertainty than reading from a table. Treat older figures as rough approximations.
Coverage depends on Legistar attachments
The tracker only includes bills where a fiscal impact statement was attached to the Legistar record as a .docx file. Some older bills may have statements in PDF format or attached under different filenames that the tracker doesn't recognize. Coverage of pre-2020 legislation may therefore be incomplete.
Source data
All original fiscal impact statement documents are publicly available on NYC Legistar. Each bill in the tracker includes a direct link to its Legistar record where the source document can be downloaded.