By the numbers
What I built
Three trackers and two sets of profiles, refreshed every month
- Fiscal Impacts: the annual cost of each bill once fully in effect, by agency, sponsor and year, from the Council Finance Division's fiscal impact statements.
- Obligations: every report, rule, program and deadline a law requires of an agency, with a checklist per law and each report's filing status from the city's public records portal (DORIS).
- Powers: every power a law grants an agency, such as rulemaking, permits and enforcement, kept apart from the duties.
- Agency profiles: the three trackers for each agency next to its budget, headcount, payroll and capital projects from NYC Open Data.
- Council member profiles: the laws each member wrote, how they voted, their committees and attendance, and their district's 311 requests.
Members of the site get a monthly email when a new law, fiscal estimate, deadline or overdue report touches what they follow. Explore the trackers.
How it works
Every number traces back to a quoted line of law
A pipeline pulls each enacted law and its fiscal impact statement from the Council's Legistar system. A language model (Claude Haiku) reads each document and returns structured data, and code does everything after that: totals, sorting, joins and checks.
- Every duty and power carries the exact sentence it came from; 98.6% of duty quotes match the law text word for word.
- Code rules and the model's own label decide whether a provision is a duty, a power or neither; on a blind check of 90 provisions neither method was tuned on, the sort was right 86 times.
- Validators reject totals that break accounting rules, and every change goes through a blind re-check against the source documents before it ships.
- A monthly automated job adds new laws, re-reads statements that changed, and refreshes the agency and member data.
What a commission like this looks like
The same build works on any stack of public records
If your organization tracks legislation, contracts, permits or rulings by hand, this is the pattern: pull the records, extract what matters with a checked model, and publish or share a tool that stays current on its own. A first version takes 3 to 5 weeks, followed by a monthly refresh.
More case studies
All NYCuriosity Studio services → A knowledge base for community boards → State Capacity Ecosystem →