Our method, explained.
The accounts of Paris, of every French town, and of cities in Brazil, the United States and Canada are public, but scattered across several portals and written in technical language. This site brings them together and presents them in plain language.
From raw data to a readable figure
All sources go through the same four steps, on every update.
We fetch
We start by downloading the open datasets published by cities, by the State (towns' accounts, public procurement, business register, register of elected officials) and by other administrations. When a piece of information only exists in a PDF (the detail of Paris investments by district, a town's list of grants in the annex of its budget documents), we read it in the PDF. No transformation at this stage: the source is archived as it was published.
We stitch & translate
The official accounting labels (chapters, functions, M57 codes) are first translated into plain language. Then sources are connected to each other. We identify the company receiving a grant by its SIRET number. For an investment project, the precise address is what locates it. And for a public contract, its number lets us trace back to the project it funds.
We enrich
Some useful information is missing from the published files. For each grant recipient, we complete its record from the national business register kept by INSEE (legal form, main activity, registered office) or, for an association, from the purpose it declared to the national register of associations. When an investment project's address is ambiguous or a contract has too technical a label, a language model proposes a category, a location or a readable title, which can always be checked against the source of origin.
We publish
Once everything is computed, the figures are saved in stable files. The site displays them as-is, without any live recalculation, so two successive visits show exactly the same values. A page's content only changes when the pipeline is re-run and a new version of the site is published.
Hard rule. A language model is never used to produce an amount. Its role is limited to text: categorising, describing, finding an address, writing a title. All of the site's financial aggregates come from reproducible calculations, run directly on raw data. The texts it writes are: the assistant's answers; the plain-language descriptions of Paris contracts, projects and grants (the “In practice” paragraphs); some of the readable titles of towns' public contracts (the others are rewritten by rules, without a model); the “What it does” sentences of associations, drawn from the purpose they declared; the titles of the Council of Paris moments on place pages; the plain-language descriptions of San Francisco and Recife contracts, and the titles of Brazilian municípios' contracts.
Where the figures come from
The public portals the figures come from: for Paris, for every French town, and for the other countries. And for the Paris tools, the full path from source to screen.
Public sources, credited: every figure comes from a file or a document published by an administration, and the page that shows it says which. For the few Paris debt ratios the City does not publish as open data (weighted average rate, maturity for example), values are marked “indicative” on the relevant panel.
Individuals: aggregated, never by name. The administrative-account annex also lists aid paid to individuals — a few hundred euros each, labelled “Personnes physiques” by the City itself. The source dataset publishes them by name; this site makes a different choice: amounts remain visible as a per-year aggregate, but no individual's name is indexed or searchable. A name attached to an aid payment reveals a person's social situation, with no public-scrutiny value at the individual level — these rows carry neither purpose nor department. Some years (2020-2021) already arrive aggregated as a single line in the source. The name-level detail remains available in the City's dataset. The grant lists of the other towns do not show any private individual either.
Paris
opendata.paris.fr ↗M57 budget, public contracts, grants, social housing, AP, balance sheet, guaranteed debt — 8 datasetsDaily to annual depending on datasetdata.gouv.fr / decp ↗Consolidated Essential Public Procurement Data, consolidated by Colin Maudry (colibre.fr); SIRET 217500* filter for ParisYearly files 2019-2026data.gouv.fr / sirene ↗Business register (SIRET, activity codes, headcount, sites) · free tier2 enrichmentMonthlycdn.paris.frCA appendices (localised investments), Budget Orientation Report, management accountAnnual (June N+1)data.gouv.fr / communes-et-inventaire-sru ↗Ministry for the Ecological Transition: social housing and SRU rate of each town on 1 JanuaryAnnualEvery French town
data.economie.gouv.fr ↗Each town's accounts: spending and revenue by type, and by function for some of themAnnualdata.gouv.fr / decp ↗Each town's public contracts, and the companies that won themAs the DECP publishesdata.gouv.fr / rne ↗Current mayor and previous mayorsAs the Ministry of the Interior updates itdata.gouv.fr / sirene ↗Identity of the companies and bodies that receive public moneyMonthlyeach town's websiteOfficial list of the grants awarded (list of contributions to third parties, annex B8 of the single financial account, the administrative account or the budget), for 528 townsThe latest document founddata.gouv.fr / rna ↗Declared purpose of the associations that receive a grantMonthlyBrazil, United States, Canada
tesourotransparente.gov.br ↗Municípios' accounts, read through Base dos Dados; population (IBGE), mayors (TSE), contracts (PNCP); Recife: the City's Dados Abertos portalAnnualdatasf.org · state websites ↗San Francisco: the DataSF portal; other towns: public records of Massachusetts, Indiana, Iowa, Florida and California, Census Bureau populationAnnualopendata.vancouver.ca ↗The City's open data portal, Statements of Financial Information, council minutesDepends on the datasetTracing a figure, tool by tool
Click a tool to see where its figures come from: each step of processing, all the way back to the public dataset they are drawn from.
What is up to date, what is verified
Not all sources are maintained at the same pace. And an automated audit replays the figures on every update.
Freshness by source
Coverage by tool
Rule: the current year is always provisional until the final administrative account is published (~June N+1). Figures for an unclosed year are based on the voted budget.
Automated checks
For Paris, on every update, automated checks replay the calculations and match the displayed totals against the raw sources, to the cent. Model-enriched information (categories, locations) must stay above documented reliability thresholds. And any gaps in the public sources are flagged as such on the relevant page. No figure is typed by hand.
Loading audit…
Known limitations
The model rates itself. When the language model proposes a category for a grant or a location for a project, it attaches a confidence score to its answer. That score is self-declared. To make it reliable beyond this self-evaluation, it will need to be compared against a hand-labelled sample. That work is underway.
When our figures differ from the City's. On a given dataset, our totals are strictly identical to the City's: we never alter an amount. When a gap shows up, it usually comes from one of three reasons. Either the scope differs: we publish the main budget alone, while the City may communicate a "City group" that includes its satellite entities. Or our figure comes from the latest published dataset, itself sometimes lagging an official communication. Or we have translated a label without the underlying aggregate changing. If a gap persists without an obvious explanation, it's probably a bug. Report it.
Public pipeline, traceable corrections
The code of the pipeline that computes these figures is published under the MIT licence: you can read in it how each figure is obtained from the public sources. The code of the website and of the enrichment steps is not published. When an error is reported and confirmed, it is fixed in the calculation. Significant corrections are published on the Corrections page, with their date and where the report came from.