Method, checks and limits
How this was built
This explorer combines the city's agency performance dataset with the fiscal 2026 Mayor's Management Report (MMR). The open-data extract ends in March 2026; the completed year's values therefore come from the printed report where a row can be verified.
Sources and publication dates
- Agency performance indicators: 768,409 rows in the September 2026 extract, covering 6,153 citywide and geographic series.
- Fiscal 2026 report: 544 PDF pages. Links use the PDF page index, which differs from the printed page number.
- MMR agency resources and PMMR agency resources: spending and staffing. Final prior-year actuals in the following Preliminary Mayor's Management Report (PMMR) replace provisional MMR actuals. Current-year plans are not used as actuals. These series currently stop at FY2025; FY2026 resources printed in the PDF have not been extracted.
The footer gives the data build date, not the date you opened the page. The JSON records the source PDF's SHA-256 checksum, source information and the build timestamp. The city's Dynamic MMR is linked for reference and is not scraped.
Annual figures and time units
The June row supplies each fiscal-year slot from Open Data's year-to-date values. A fiscal-year slot is not a guarantee that the underlying observation covers July through June: school-year and calendar-year measures retain their reporting-period label in the indicator record.
Times named as minutes:seconds or hours:minutes are decoded from the portal's clock encoding: 9.42 becomes 9:42, not 9.42 decimal minutes. Fire Department (FDNY) response times use that encoding based on their PDF labels. Titles naming only minutes, hours or days retain decimal units. Original clock encodings remain visible in the detail table. Invalid clock fractions are flagged, not silently converted.
How PDF rows are matched
The first pass requires agreement with at least three available FY2022–2025 values, within the report's displayed precision. Names help resolve clear ties. A second pass accepts small revisions only when histories are within 1.5%, names agree sufficiently and the candidate is unambiguous. Five Department of Buildings (DOB) complaint series use explicitly reviewed revisions: both the old and revised histories must match the values documented on PDF page 375. That review restores their FY2026 values without relaxing matching for unrelated rows.
The build now carries 2,042 matched records, including 2,006 FY2026 values and additional targets. A missing match is an extraction gap, not evidence that an indicator is absent from the report. New indicators without three years of history and larger revisions may remain unmatched. The tool is not a complete transcription of every printed table.
Matching numbers does not prove identical definitions. The report's explanations, changed methodologies and footnotes still matter. For example, the four library six-day opening measures include branches closed for long-term renovations starting in FY2026. Those values remain visible, but comparisons across that documented break are excluded from scoring.
Revisions and source precedence
While FY2026 is unavailable as a completed year in Open Data, matched series use the printed report's available FY2022–2026 history. This avoids joining an old FY2025 denominator to a revised FY2026 figure. Open circles identify report-derived values. Original Open Data values that differ are retained in a separate comparison table; differences can be revisions or rounding. Older years remain from Open Data, so a boundary between publications remains and should be considered when interpreting long trends.
The report's desired direction governs FY2026 scoring and numeric target judgments. Historical year comparisons use the direction recorded for the compared year in Open Data. Eighteen conflicting direction labels were found in the audit, including unfilled early-childhood seats incorrectly labeled “higher is better” in the old metadata. Numeric targets, directional arrows and unknown or unextracted targets are represented separately.
If Open Data later supplies a completed year, its available annual values take precedence over the PDF fallback. Matching, revisions and coverage should still be reviewed after an upstream update; the build is not a general parser for future report layouts.
What the scoreboard measures
The scoreboard counts indicators moving toward or away from the city's desired direction. It is not an overall agency performance grade. Indicators are not independent, equally important or equally representative of residents' experiences. A larger number of indicators does not by itself make an agency's score more reliable.
Percentage change uses the selected baseline. Exact equality is always unchanged, including at the “any change” setting. Changes smaller than the selected relative threshold are unchanged. Missing values, a zero baseline, flagged values, documented definition breaks and no desired direction can prevent scoring. Zero-baseline values remain visible even though percentage change is undefined.
The minimum of ten scorable indicators for the agency table is a display rule, not a statistical confidence threshold. The annual overview uses that year's available indicators, so its composition can change over time. The current live/retired classification is applied throughout.
Outliers and comparability
- Selected-year change follows the comparison controls. Other measures explicitly use the latest available readings or the whole comparable series.
- Latest two readings can span a gap; the two years are labeled. They are not automatically described as a one-year change.
- Percentage-point change ranks percentage indicators only. Raw dollars, counts and time units cannot be meaningfully ranked together.
- Compounded annual change uses endpoints and elapsed years and requires positive values throughout. It does not establish that improvement was steady.
- Fitted trend is a least-squares slope divided by the series mean. The fit indicates how well a straight line describes the data; low fit does not establish a particular cause.
- Streaks and biggest one-year steps require adjacent years. Missing or flagged years break a streak.
- Historical variability and unusual readings are descriptive, not significance tests or evidence of causation.
Flagged values remain in charts and tables but are excluded from derived statistics and scoring. A separate filter holds back near-zero baselines and changes of 100% or more. For the selected-year ranking it uses the selected baseline; for other rankings it uses the latest step. This is a sensitivity filter, not a finding that the city changed its counting rules. Geographic bars use one selected year and omit areas missing that year's observation.
Following a question through the report
Explore topics provides six curated starting points and twelve questions spanning housing, homelessness, schools, child care, streets and pests, and public safety. These are routes into the report, not comprehensive assessments. Search recognizes a small reviewed set of synonyms, including daycare/child care and PreK/pre-kindergarten spellings.
Compare collects up to four indicators, with shared report-year axes and separate units and vertical scales. A warning identifies different reporting periods. Comparing charts does not establish a common population or causal relationship. Related indicators are either curated companions or explicitly labeled measures under the same agency goal.
Reading notes use the city's definition and distinguish improvement over the selected interval from meeting the FY2026 target. Selected chapter explanations are attributed and linked to exact PDF pages. Where no explanation has been curated, the tool says so. A missing definition-break note is not proof that a series is comparable over its full history. Known breaks are marked on charts and connecting lines stop at them.
Comparison CSV exports include definitions, periods, units, sources, missing years, flags and differing original Open Data values. Formatted values accompany raw numeric values; clock values use decimal minutes or hours in the numeric column. The URL preserves the chosen indicators and comparison controls.
What the ratios mean
The ratio page contains eight subset shares: subsidized housing exits for single adults and families with children, homeless applicants’ public-housing placements, Office of Administrative Trials and Hearings (OATH) default decisions, taxi inspections passed and overtime expenditure shares for the Department of Correction (DOC), the Police Department (NYPD) and FDNY. Each shows its numerator divided by its matching total, multiplied by 100, as a percentage.
Every card shows five consecutive reviewed years. Indicator shares use the FY2022–2026 columns from the same FY2026 report; resource shares use final FY2021–2025 actuals from successive PMMR releases. Definitions and relevant chapter change notes were reviewed for these spans. The page does not extend a history merely because older figures exist. The scoreboard’s year controls do not crop the ratio charts.
The build requires the full reviewed span, matching reporting periods, positive denominators, shares between 0 and 100%, no flagged observations or known definition breaks, and reconciliation of the component categories where available. Overtime figures must be final prior-year actuals. Extending a reviewed span requires another source review.
Library-card ratios were removed because historical comparability was not established. Cross-flow comparisons, broad spending/output quotients, arrests/crimes and the Civilian Complaint Review Board’s (CCRB) incompatible closure counts were also removed from this page. Taxi inspections include retests; OATH default decisions include inquest decisions; overtime is a share of total expenditures, not payroll. Each card explains its scope and links to the source.
Audit and checks
A September 18, 2026 audit compared all 49,219 nonempty historical cells in the original build with the current June source rows and found no disagreements after time conversion. It independently located 1,992 of the original 2,029 PDF matches using column coordinates; 36 had multiple numerical candidates, and one table without year headers was inspected visually. Those checks do not certify the identity of every ambiguous row. All 238 original plotted ratio calculations reproduced.
The audit nevertheless found consequential interpretation and software errors: reversed desired directions, unchanged values classified as deterioration at the zero threshold, mislabeled taxi and CCRB ratios, ignored final resource actuals, gaps counted as consecutive years and displayed comparison years that disagreed with the calculation. These were corrected, with regression checks added. See the repository for the build scripts, tests and audit notes.
This project was initially built with Claude and subsequently audited and corrected with Codex under human direction. Automated checks reduce mistakes; they do not establish that every source figure, definition or interpretation is correct. Check the linked report and notes before quoting a consequential finding.
Rebuilding
See the README for the complete command sequence. Python 3 and pypdf build the data; Node runs the browser-logic regression assertions. The PDF is cached unless --refresh is requested. Extracted text is reused only when its source checksum matches. Source tables are downloaded to temporary files and replace prior snapshots only after the expected row count is reached.