Our method, explained.
The City of Paris accounts are public, but scattered across several portals and written in technical language. This site brings them together and presents them in plain French.
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 the City, by the State (national public procurement, business register) and by the regional decentralised services (social housing). When a budget item doesn't appear in those files (often the case for the detail of investments localised by arrondissement), we go read it directly in the administrative account 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. When an investment project's address is ambiguous or a contract has too technical a label, a language model proposes a category or location, which can always be traced back in 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. All of the site's financial aggregates come from reproducible calculations, run directly on raw data.
Where the figures come from
Six public portals. And for each tool on the site, the full path from source to screen.
From the City, and only from the City: no data published here has been reconstructed or estimated from elsewhere. For the few qualitative financial ratios the City does not publish as open data (weighted average rate, debt maturity for example), values are explicitly marked as "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.
opendata.paris.frM57 budget, public contracts, grants, social housing, AP, balance sheet, guaranteed debt — 8 datasetsDaily to annual depending on datasetdata.gouv.fr / decpConsolidated Essential Public Procurement Data (SIRET 217500* Paris filter)Yearly files 2019-2026data.gouv.fr / sireneBusiness register (SIRET, activity codes, headcount, sites) · free tier2 enrichmentMonthlyapi-adresse.data.gouv.frAddress geocoding for investment projectsReal timecdn.paris.frCA appendices (localised investments), Budget Orientation Report, management accountAnnual (June N+1)drihl.ile-de-france…gouv.frSRU inventory, social housing stock at January 1st, Socle of applications/allocationsAnnualTracing 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.
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
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 on this page 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 and will be published here (script and samples ↗).
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.
AGPL pipeline, traceable corrections
The code that produces these figures is published in open access, under the AGPL-3.0 licence. Anyone can download it and re-run the calculations from the public sources to obtain exactly the same results. When an error is reported, it is fixed in the code and recorded in the project's public history with its date and source. We never rewrite history: any old screenshot or citation can still be linked to the state of the calculation at the time.