Skip to main content

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.

01Construction

From raw data to a readable figure

All sources go through the same four steps, on every update.

01

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.

→
02

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.

→
03

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.

→
04

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.

02Sources & provenance

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

PortalURLContent usedFreshness
OpenData Parisopendata.paris.fr ↗M57 budget, public contracts, grants, social housing, AP, balance sheet, guaranteed debt — 8 datasetsDaily to annual depending on dataset
data.gouv.fr — DECPdata.gouv.fr / decp ↗Consolidated Essential Public Procurement Data, consolidated by Colin Maudry (colibre.fr); SIRET 217500* filter for ParisYearly files 2019-2026
INSEE — SIRENEdata.gouv.fr / sirene ↗Business register (SIRET, activity codes, headcount, sites) · free tier2 enrichmentMonthly
Base Adresse Nationaleapi-adresse.data.gouv.fr ↗Address geocoding for investment projectsReal time
cdn.paris.fr (PDFs)cdn.paris.frCA appendices (localised investments), Budget Orientation Report, management accountAnnual (June N+1)
data.gouv.fr — SRU inventorydata.gouv.fr / communes-et-inventaire-sru ↗Ministry for the Ecological Transition: social housing and SRU rate of each town on 1 JanuaryAnnual
DRIHL Île-de-Francedrihl.ile-de-france…gouv.fr ↗Socle of applications/allocationsAnnual

Every French town

PortalURLContent usedFreshness
DGFiP — accounting balancesdata.economie.gouv.fr ↗Each town's accounts: spending and revenue by type, and by function for some of themAnnual
OFGLdata.ofgl.fr ↗Towns' financial aggregates, over several yearsAnnual
data.gouv.fr — DECPdata.gouv.fr / decp ↗Each town's public contracts, and the companies that won themAs the DECP publishes
DGFiP — REIdata.gouv.fr / rei ↗Property tax rates voted by each townAnnual
National register of elected officialsdata.gouv.fr / rne ↗Current mayor and previous mayorsAs the Ministry of the Interior updates it
INSEE — Sirenedata.gouv.fr / sirene ↗Identity of the companies and bodies that receive public moneyMonthly
Fonds vertdata.gouv.fr ↗Towns' projects funded by the Fonds vertAs the ministry publishes
Towns' budget documents (PDF)each 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 found
National register of associationsdata.gouv.fr / rna ↗Declared purpose of the associations that receive a grantMonthly

Brazil, United States, Canada

PortalURLContent usedFreshness
Brazil — SICONFI (Tesouro Nacional)tesourotransparente.gov.br ↗Municípios' accounts, read through Base dos Dados; population (IBGE), mayors (TSE), contracts (PNCP); Recife: the City's Dados Abertos portalAnnual
United States — DataSF and statesdatasf.org · state websites ↗San Francisco: the DataSF portal; other towns: public records of Massachusetts, Indiana, Iowa, Florida and California, Census Bureau populationAnnual
Canada — Vancouveropendata.vancouver.ca ↗The City's open data portal, Statements of Financial Information, council minutesDepends on the dataset

Tracing 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.

03Freshness & audit

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

Tool
'1314'1516'1718'1920'2122'2324'2526
Executed budget (CA)
Up to date
2019-2025
Voted budget (BP)
Up to date
2019-2026
Grants
Up to date
2013-2025
Public contractsCity + national DECP
Up to date
2013-2026
Competition (DECP offresRecues)field not historised before 2024
Partial
2024-2026
Investments (AP dataset)dataset frozen
Frozen
2018-2022 · frozen
Investments (IL PDFs)PDF appendices of the administrative account and the voted budget
Partial
2019-2025 (CA)2026 (BP)
Project–contract matchingseed, stable hash object + awardee
Up to date
2019-2025
Funded social housing
Up to date
2018-2025
Social housing applications (DRIHL)20 districts · 205,216 applications / 9,375 allocations
Latest year
2025
Balance sheet1 balance sheet a year
Up to date
20162018-2025
Off-balance-sheet (guaranteed debt)10,347 loans · €13.0bn outstanding in 2025
Up to date
2013-2025

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.

Raw JSON ↗
04Commitments

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.

Report an errorCorrections page