How we verify New York City data
Every number on our New York City pages comes from Checkbook NYC (checkbooknyc.com), the city's own transparency portal. This page is the standing verification report: what we hold, the quality gates every load must pass, and the reconciliation math against the city's own published totals, including the part that doesn't match.
The chain of custody
Each record travels the same six steps, and every step leaves evidence:
- The city records a payment in its accounting system.
- The city publishes it in bulk on Checkbook NYC (checkbooknyc.com).
- We fetch the official bulk file; every fetch is logged with a timestamp, and failures are recorded too.
- The city's row is archived exactly as received and fingerprinted. The archive is append-only: records are never edited or deleted, even when the city overwrites its own history.
- Names are normalized with deterministic rules (see methodology); the original name is kept alongside, and quality gates run on every load.
- Pages are published from a versioned release; the version appears at the foot of every page.
Quality gates
No New York City release goes live unless all four gates pass. Current status:
| Gate | Result |
|---|---|
| Extraction integrity | Published payment facts re-derived from the raw archive match to the penny across 38,060,921 payments, fiscal years 2010 through 2025. |
| No orphan payments | Every payment resolves to a vendor and an agency record. Zero orphans. |
| Duplicate rate | 0.0000% duplicates on the natural-key fingerprint. |
| Portal reconciliation | Our loaded row count matches the Checkbook NYC API's published record count exactly, for every one of the 16 published fiscal years (details below). |
The reconciliation math, all 16 published fiscal years
New York City's Checkbook NYC API publishes an exact record count for every fiscal year it serves. Instead of comparing one period's dollars, we compare our loaded row count against the city's published count for every year, every time we fetch.
Here is the comparison against the city's own published figures, to the exact row:
| Checkbook NYC API, published record counts across all 16 published fiscal years (2010 through 2025) (captured Jul 14, 2026) | 38,060,921 |
| SpendLedger all 16 published fiscal years record count | 38,060,921 |
| Difference: 0.000%, within the documented 0% tolerance | PASS |
Every one of the 16 published fiscal years matches the API's published record count to the exact row, and the dollar sums re-derived from our archive are penny-exact against extraction. A portal-side dollar anchor (the city's own published spending total for a closed year) is pending capture and will be added to this page when recorded; we publish that gap honestly rather than implying a comparison we have not yet made.
Known limitations
- Payroll is excluded by design: New York City publishes payroll through a separate system, and this site covers vendor payments.
- The most recent fiscal year is loaded in our archive but not yet published on this site pending source verification.
- Payees the city masks for privacy or security stay masked here: about 6.2 million payments totaling $51.9 billion carry no payee name. Their dollars remain in agency totals.
- City pool and imprest-fund accounts (for example the Administration for Children's Services foster-care payment pool) are accounting constructs, not vendors, and are suppressed from vendor listings; their dollars remain in agency totals.
- A dollar-level comparison against the city's own published spending totals is pending capture and will appear on this page once recorded.
Check us yourself
Beyond the automated gates, we verify random individual payments against Checkbook NYC's own search by vendor name, date, and amount. A single mismatch is treated as a stop-the-line event for the source. You can do the same: pick any payment on this site and look it up on the city's own portal by vendor name and date. If the portal disagrees with us, we want to know.
Machine-readable version of this report: /trust/nyc/provenance.json. Report content last reviewed Jul 14, 2026.