Demonstration

French Property Prices 2025: Pipeline, Audit and Dashboard

Public data, full method: 3.8 million property transfer lines turned into a controlled pipeline, an audited dataset documented to DDI standards and an interactive dashboard.

Role
Design and delivery, end to end
Period
Nov 2026
Status
Demonstration
Context
Public dataset: Demandes de valeurs foncières (DVF), DGFiP, 2025 · Licence Ouverte 2.0

Engineering figures

  • 3,793,113lines read and accounted for
  • 1,354,095transfers rebuilt without an identifier in the file
  • 732,164dwelling sales retained for prices
  • 10quality rules, each with its published count

Interactive dashboard

Dwelling prices in 2025, department by department.

Choose an area and a dwelling type: every figure, chart and table below follows. Aggregates only, computed by the pipeline described further down.

An interactive report built the way a Power BI report works: pages, a filter pane that applies to every page, cross-filtering by clicking a mark, drill-through to a detail page. It is a web reproduction written in code for this site, on the same aggregates.

Dwelling prices 2025

DVF · DGFiP · Open Licence 2.0

Dwelling sales retained
732,164
Flats, median price per m²
€3,370/m²
Houses, median price per m²
€2,200/m²
Transfers recorded in 2025
1,354,095

The interactive report needs JavaScript; here are the key figures and the table by department.

All departments: retained sales and median price per m²
DepartmentFlats: salesFlats: medianHouses: salesHouses: median
01 Ain3,042€2,760/m²4,229€2,520/m²
02 Aisne624€1,330/m²4,382€1,240/m²
03 Allier1,189€1,300/m²2,526€1,180/m²
04 Alpes-de-Haute-Provence1,371€2,160/m²1,385€2,550/m²
05 Hautes-Alpes2,136€2,960/m²856€2,850/m²
06 Alpes-Maritimes18,841€4,880/m²2,269€5,330/m²
07 Ardèche970€1,580/m²2,488€2,130/m²
08 Ardennes461€1,150/m²2,135€1,300/m²
09 Ariège340€1,570/m²1,757€1,470/m²
10 Aube1,258€1,520/m²2,142€1,530/m²
11 Aude2,130€2,370/m²4,585€1,790/m²
12 Aveyron988€1,930/m²2,075€1,490/m²
13 Bouches-du-Rhône16,969€3,370/m²7,377€4,060/m²
14 Calvados4,475€3,270/m²4,695€2,550/m²
15 Cantal466€1,370/m²1,155€1,270/m²
16 Charente389€1,610/m²3,476€1,360/m²
17 Charente-Maritime2,499€3,980/m²7,899€2,650/m²
18 Cher586€1,480/m²2,711€1,180/m²
19 Corrèze677€1,610/m²1,941€1,390/m²
2A Corse-du-Sud1,234€4,150/m²491€4,380/m²
2B Haute-Corse1,332€3,190/m²602€3,260/m²
21 Côte-d'Or3,740€2,610/m²3,340€2,230/m²
22 Côtes-d'Armor1,625€2,280/m²5,596€2,000/m²
23 Creuse85€910/m²1,424€800/m²
24 Dordogne721€1,670/m²3,454€1,540/m²
25 Doubs3,570€2,200/m²2,658€2,050/m²
26 Drôme2,642€1,920/m²3,274€2,470/m²
27 Eure1,026€1,950/m²3,918€1,930/m²
28 Eure-et-Loir1,075€2,150/m²3,308€1,860/m²
29 Finistère3,923€2,290/m²7,481€2,170/m²
30 Gard3,729€2,370/m²5,245€2,600/m²
31 Haute-Garonne9,969€2,970/m²7,131€2,770/m²
32 Gers343€1,600/m²1,683€1,560/m²
33 Gironde8,767€3,650/m²10,971€3,230/m²
34 Hérault11,075€3,480/m²7,891€3,010/m²
35 Ille-et-Vilaine5,730€3,400/m²6,843€2,500/m²
36 Indre231€1,210/m²2,203€1,050/m²
37 Indre-et-Loire2,618€2,660/m²3,970€2,240/m²
38 Isère8,961€2,580/m²5,947€2,780/m²
39 Jura1,066€1,640/m²1,696€1,730/m²
40 Landes2,081€3,290/m²3,817€2,640/m²
41 Loir-et-Cher562€1,770/m²2,531€1,500/m²
42 Loire4,578€1,320/m²3,517€2,050/m²
43 Haute-Loire564€1,510/m²1,693€1,430/m²
44 Loire-Atlantique7,436€3,310/m²10,106€2,940/m²
45 Loiret2,413€2,180/m²4,326€1,880/m²
46 Lot255€1,550/m²1,490€1,530/m²
47 Lot-et-Garonne665€1,530/m²2,668€1,480/m²
48 Lozère128€1,530/m²578€1,500/m²
49 Maine-et-Loire2,455€2,780/m²5,815€2,080/m²
50 Manche919€2,390/m²4,252€1,950/m²
51 Marne2,742€2,360/m²3,436€1,930/m²
52 Haute-Marne209€1,180/m²1,518€950/m²
53 Mayenne550€1,970/m²2,993€1,510/m²
54 Meurthe-et-Moselle3,823€1,960/m²4,707€1,890/m²
55 Meuse213€1,120/m²1,583€1,070/m²
56 Morbihan3,015€3,340/m²6,232€2,610/m²
58 Nièvre440€1,050/m²2,240€1,000/m²
59 Nord7,624€2,800/m²20,847€1,910/m²
60 Oise2,176€2,280/m²5,751€2,210/m²
61 Orne344€1,210/m²2,148€1,320/m²
62 Pas-de-Calais2,714€2,400/m²12,155€1,670/m²
63 Puy-de-Dôme3,145€2,140/m²4,547€1,820/m²
64 Pyrénées-Atlantiques5,626€3,500/m²3,124€2,500/m²
65 Hautes-Pyrénées1,672€1,820/m²1,725€1,750/m²
66 Pyrénées-Orientales4,530€2,400/m²5,054€2,540/m²
69 Rhône15,858€3,790/m²4,506€3,570/m²
70 Haute-Saône407€1,090/m²1,782€1,140/m²
71 Saône-et-Loire1,650€1,450/m²3,957€1,500/m²
72 Sarthe1,312€1,850/m²4,559€1,610/m²
73 Savoie5,751€3,880/m²1,972€3,250/m²
74 Haute-Savoie10,005€4,480/m²3,557€4,560/m²
75 Paris27,907€9,780/m²149€13,110/m²
76 Seine-Maritime5,966€2,270/m²7,448€2,110/m²
77 Seine-et-Marne6,335€3,380/m²7,565€2,950/m²
78 Yvelines8,292€3,990/m²5,778€3,790/m²
79 Deux-Sèvres450€1,780/m²3,930€1,370/m²
80 Somme1,200€2,550/m²4,734€1,650/m²
81 Tarn721€1,970/m²2,902€1,580/m²
82 Tarn-et-Garonne621€1,880/m²1,911€1,790/m²
83 Var12,871€3,810/m²5,699€4,180/m²
84 Vaucluse2,518€2,240/m²3,618€2,850/m²
85 Vendée1,897€3,330/m²7,969€2,400/m²
86 Vienne1,084€2,120/m²3,491€1,460/m²
87 Haute-Vienne1,391€1,520/m²2,676€1,410/m²
88 Vosges1,193€1,380/m²2,379€1,350/m²
89 Yonne660€1,480/m²2,972€1,380/m²
90 Territoire de Belfort848€1,280/m²657€1,670/m²
91 Essonne6,504€2,980/m²5,984€3,330/m²
92 Hauts-de-Seine16,447€6,480/m²2,126€7,280/m²
93 Seine-Saint-Denis9,069€4,100/m²3,515€3,840/m²
94 Val-de-Marne10,705€4,780/m²3,068€4,820/m²
95 Val-d'Oise5,974€3,300/m²5,328€3,510/m²
971 Guadeloupe854€3,510/m²832€2,850/m²
972 Martinique885€3,040/m²650€2,490/m²
973 Guyane319€2,830/m²401€2,700/m²
974 La Réunion2,090€2,880/m²2,451€2,830/m²

Open data and documentation

The published table, documented to DDI standards.

The indicators by department are an open table of their own, described by a DDI-Codebook 2.5 file (bilingual labels, summary statistics, derivations) that a NADA catalogue can import, and a Dublin Core record.

Source: Demandes de valeurs foncières (DVF), DGFiP, 2025, Licence Ouverte 2.0. Reuse conditions (article R112 A-3 of the Livre des procédures fiscales): no re-identification of persons, no indexing of the records. Only aggregates are shown; every price statistic rests on at least 11 sales.

From the DVF file to the dashboard

Each layer is checked before the next one is written. Only aggregates are published.

  1. 01 · Source

    • DVF 2025 archive3.8 M lines, 43 columns
  2. 02 · Bronze

    • Unchanged archiveSHA-256, column contract
  3. 03 · Silver

    • Line rulesQuarantine, duplicates
    • Typed linesTransfers rebuilt
  4. 04 · Gold

    • Sale rulesSurfaces, robust z-score
    • Star schemaKept local, Power BI ready
  5. 05 · Publication

    • Aggregates11 sales or more
    • Dashboard, open table, DDIDocumented, downloadable

01Executive summary

A complete mission, run on public data so that every step can be shown: the 2025 property transfer file of the French tax administration (DVF), 3.8 million lines, turned into a controlled pipeline, an audited dataset, a DDI documentation and the dashboard above.

The deliverables are those of a client engagement: a layered pipeline with a rule catalogue, a quality report that explains what it set aside, an open table documented to international standards, and a dashboard anyone can question. Every figure can be recomputed: the code, the hash of the source file and the run log are kept.

02Problem statement

  • No sale identifier: one sale spreads over several lines (one per property unit or parcel) that must be grouped back.
  • The declared value is repeated on every line of a sale: summing it inflates amounts.
  • 301,443 lines are strictly identical to another one, and no unit identifier tells a duplicate from a second, identical outbuilding.
  • Symbolic values, missing surfaces and outlying prices per m² distort any average.
  • The data concern people: reuse must allow neither re-identification nor indexing by search engines.

03Pipeline and processing

  • Bronze: the archive is kept unchanged, with its SHA-256 hash, size, row count and a check of the 43 expected columns. Address, parcel and lot columns are never parsed.
  • Silver: typed values, INSEE commune codes (overseas departments included), duplicate lines set aside, quarantine with the reason for each rejected line, transfers rebuilt from date, nature, value, commune and disposition.
  • Gold: a star schema ready for Power BI (sale facts, transfer facts, commune, department and date dimensions), kept on the processing machine.
  • Publication: aggregates only, each price statistic resting on at least 11 sales and a commune median on at least 30; an open table by department; a quality report and a run log. The full run takes about 50 seconds.

04Data quality and validation

Ten rules, each with an identifier, a level (file, line, transfer, sale) and an action: stop, quarantine, set aside, exclude from prices or flag for review. Their results are published with the dashboard: 301,443 duplicate lines set aside, 21,076 transfers without a usable value, 447 implausible or missing surfaces.

Outliers are detected with a robust z-score on the logarithm of the price per m², within each department and dwelling type: a flat at 9,000 €/m² is ordinary in Paris and exceptional in the Creuse. The median and the median absolute deviation resist the very outliers they look for. 14,727 sales (2.0 % of simple sales) are set aside this way; 4,614 more, three times above or below their commune median, are flagged for a person to review, not removed.

05Security and governance

  • Data minimisation: street address, cadastral parcel and lot numbers are never loaded into memory.
  • Record-level tables stay on the processing machine: nothing finer than an aggregate leaves the pipeline.
  • Statistical disclosure control: no price statistic under 11 sales, no commune median under 30 sales, values rounded to 10 euros.
  • No third-party request: the charts are drawn by the site's own code, under a strict content security policy.

06Technology stack

  • Python
  • pandas
  • NumPy
  • DDI-Codebook 2.5
  • Dublin Core
  • TypeScript
  • SVG

07Engineering decisions

  1. Median, not mean

    Choice
    Report the median price per m² and its quartiles.
    Why
    Prices are skewed: a few exceptional sales move a mean far more than a median.
  2. A local threshold for outliers

    Choice
    Robust z-score within department and type, with national parameters for groups under 30 sales.
    Why
    A single national threshold would flag much of Paris and miss the rural outliers.
  3. Aggregates only

    Choice
    Publish no individual sale and no price statistic under 11 sales.
    Why
    The reuse conditions of DVF forbid re-identification, and a median of two sales reveals a price.
  4. Charts without a library

    Choice
    Draw the charts with a small module shared by the server and the browser.
    Why
    No third-party script under the site's security policy, a first render without JavaScript, and the same figures in both renders.

08Limitations

  • A transfer is rebuilt from its values: two identical sales on the same day in the same commune are merged, and a transfer across several communes is split.
  • House prices include the land.
  • Off-plan sales often lack the description of the dwelling and are under-represented among simple sales.
  • Bas-Rhin, Haut-Rhin, Moselle and Mayotte are not covered by DVF.
  • The interactive view is built from aggregates: it never goes below the commune.