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.

38,060,921payments on record
Dec 22, 2009 – Jun 30, 2025coverage window
Jul 15, 2026last refreshed
0.000%reconciliation gap, all 16 published fiscal years

The chain of custody

Each record travels the same six steps, and every step leaves evidence:

  1. The city records a payment in its accounting system.
  2. The city publishes it in bulk on Checkbook NYC (checkbooknyc.com).
  3. We fetch the official bulk file; every fetch is logged with a timestamp, and failures are recorded too.
  4. 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.
  5. Names are normalized with deterministic rules (see methodology); the original name is kept alongside, and quality gates run on every load.
  6. 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:

GateResult
Extraction integrityPublished payment facts re-derived from the raw archive match to the penny across 38,060,921 payments, fiscal years 2010 through 2025.
No orphan paymentsEvery payment resolves to a vendor and an agency record. Zero orphans.
Duplicate rate0.0000% duplicates on the natural-key fingerprint.
Portal reconciliationOur 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 count38,060,921
Difference: 0.000%, within the documented 0% tolerancePASS

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

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.