How we verify Chicago data
Every number on our Chicago pages comes from Chicago Checkbook (data.cityofchicago.org), 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 Chicago Checkbook (data.cityofchicago.org).
- 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 Chicago 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: identical row counts and dollar sums. |
| No orphan payments | Every payment resolves to a vendor and an agency record. Zero orphans. |
| Duplicate handling | Identical rows in the city's data are real duplicate payments (for example pension-cap check batches) and are preserved, not deduplicated. |
| Portal reconciliation | Our raw read matches the portal's own published row count exactly at snapshot time (details below). |
The reconciliation math, full payment-detail dataset
Chicago's open data portal reports a live row count for its payment dataset. At every fetch we compare the rows we read against the portal's own count; the release snapshot matched exactly.
Here is the comparison against the city's own published figures, to the exact row:
| City of Chicago data portal, payment dataset row count at snapshot (captured Jul 18, 2026) | 446,146 |
| SpendLedger full payment-detail dataset record count | 446,146 |
| Difference: 0.000%, within the documented 0% tolerance | PASS |
The row count we read matches the portal's own count to the exact row, and the dollar sums re-derived from our archive are penny-exact against extraction. We publish 266,585 of those payments (fiscal years 2022 through 2025) after the documented exclusions below. A dollar-level comparison against a city-published spending total 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
- Chicago's fiscal year is the calendar year, unlike the July-through-June fiscal years of our state sources; fiscal year 2025 here means January through December 2025.
- Payment-level detail begins in 2022: the city's portal progressively replaces older payment detail with summary rollups, so earlier years cannot be published at payment grain. Our archive preserves the detail from 2022 onward even after the city's portal thins it.
- Row counts reflect the detail the city's portal still carried at snapshot time; the city removes detail over time, so the portal's own count can shrink between our fetches while our archive does not.
- Fiscal year 2026 records are loaded in our archive but not yet published on this site until the city's year closes.
- Payments to 15,553 individual people are withheld by name for privacy, because Chicago publishes personal names unmasked; their dollars remain in agency totals.
- Some payments carry no department in the city's data; they are grouped under an unknown-department bucket so their dollars stay visible in 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 the city portal's own dataset views 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/chi/provenance.json. Report content last reviewed Jul 19, 2026.
Disclaimer required by the source's terms of use: This site provides applications using data that has been modified for use from its original source, www.cityofchicago.org, the official website of the City of Chicago. The City of Chicago makes no claims as to the content, accuracy, timeliness, or completeness of any of the data provided at this site. The data provided at this site is subject to change at any time. It is understood that the data provided at this site is being used at one’s own risk.