Croiser DVF, DPE et BDNB sur une adresse : relier une vente à son diagnostic énergétique et à son bâtiment

Les ventes DVF de la DGFiP, les diagnostics de performance énergétique de l'ADEME et la base nationale des bâtiments du CSTB ne partagent aucun identifiant. Normi les relie à la vente : chaque transaction DVF reçoit une identité durable, puis le diagnostic DPE le plus proche à moins de 200 mètres et le bâtiment BDNB le plus proche à moins de 200 mètres. Aujourd'hui, 13 578 762 ventes valorisées sur 18 102 579 (75 %) ont un DPE rattaché, et 17 813 826 lignes DVF ont un bâtiment BDNB, à 13,3 m en médiane. Le tout s'interroge par une API REST et par un serveur MCP.

Ce rattachement est un rattachement de proximité, pas une identité de logement : il est solide pour des statistiques par classe DPE ou par époque de construction, pas pour affirmer l'étiquette d'un appartement précis. Cette page explique pourquoi, avec un exemple réel.

Publié le 24 septembre 2026 · exemple capturé en production le même jour · chaque chiffre renvoie à sa source en bas de page · Read in English

Le problème : trois bases, aucune clé commune

Chacune des trois bases décrit un objet différent, et c'est précisément ce qui rend la jointure difficile.

  • DVF (DGFiP)

    Décrit une mutation : une date, un prix, une adresse, une ou plusieurs parcelles et locaux. Une même vente produit souvent plusieurs lignes (un appartement, sa cave, son parking), et l'identifiant de ligne est régénéré à chaque rechargement du fichier.

  • DPE (ADEME)

    Décrit un logement ou un bâtiment à la date d'un diagnostic. Un immeuble en porte des dizaines, un même logement en accumule plusieurs au fil des ventes et des locations, et la méthode a changé en juillet 2021.

  • BDNB (CSTB)

    Décrit un bâtiment, ou un groupe de bâtiments, avec son année de construction, ses matériaux, son nombre de logements et d'étages. Il ne connaît ni la vente ni le logement.

Les adresses ne sont pas normalisées de la même façon dans les trois fichiers, la référence cadastrale n'est renseignée que dans une partie des DPE et n'est unique qu'au sein d'une commune, et une vente peut correspondre à plusieurs diagnostics. Il n'existe donc pas de jointure exacte : il n'y a que des appariements, plus ou moins sûrs, qu'il faut documenter.

Comment Normi fait la jointure

  1. 1. Une identité durable pour chaque vente

    L'identifiant de ligne DVF change à chaque rechargement : l'utiliser comme clé de jointure, c'est perdre tous les appariements au rechargement suivant. Normi calcule donc un transaction_group_id stable, dérivé de la date, de l'adresse normalisée et du prix. Les appariements DPE et BDNB sont stockés sur cette clé, et une table de correspondance (18 119 513 lignes) fait le lien avec l'identifiant courant exposé par l'API.

  2. 2. Vente → DPE : le diagnostic le plus proche

    Pour chaque vente géocodée, hors ventes en bloc et prix aberrants, Normi retient le diagnostic ADEME le plus proche, dans le même département, à moins de 200 mètres, établi entre 10 ans avant et 1 an après la vente. Un seul diagnostic par vente, ce qui évite qu'une vente dans un grand immeuble pèse autant de fois qu'il y a de logements. La surface et le type de bien ne sont pas comparés : c'est un choix de couverture, et sa conséquence est détaillée plus bas.

  3. 3. Vente → BDNB : le bâtiment le plus proche

    Même principe, sans fenêtre de date : le bâtiment BDNB le plus proche à moins de 200 mètres, dans le même département. La distance est conservée et renvoyée par l'API dans match_distance_m. Sur les 17 813 826 rattachements, la distance médiane est de 13,3 m et 95 % sont à moins de 49,8 m. La table n'est publiée que si la couverture par département et la part de rattachements qui se résolvent vers une vente passent leurs seuils de contrôle.

Ce que l'appariement ne garantit pas
  • La proximité n'est pas une identité. En habitat collectif, le diagnostic le plus proche est souvent celui d'un autre logement de l'immeuble, voire d'un immeuble voisin. L'exemple ci-dessous en montre un cas réel.
  • Les DPE d'avant juillet 2021 suivent l'ancienne méthode, qui n'est pas comparable étiquette pour étiquette avec la méthode actuelle.
  • L'Alsace-Moselle et Mayotte n'ont aucune donnée : le DVF ne les couvre pas (0 commune DVF en Moselle, Bas-Rhin, Haut-Rhin et à Mayotte).
  • Le DPE d'une vente isolée par GET /v1/transactions/{id}/dpe fait l'objet d'un correctif : sa recherche par référence cadastrale ne filtre pas encore la commune. Tant qu'il n'est pas déployé, cette page ne s'appuie pas sur cet appel, et nous vous déconseillons de l'utiliser pour une vente précise.

Ce que le croisement permet

L'appariement sert d'abord à des statistiques de zone, où les erreurs individuelles se compensent. Quatre analyses en découlent directement, chacune disponible en REST et en outil MCP.

Valeur verte par classe DPE

Prix au m² médian et quartiles par étiquette A à G sur un code postal ou une commune, et l'écart à la médiane locale.

GET /v1/stats/dpe-premium

MCP : analyze_dpe_price_premium · 10 crédits

Documentation

Exposition aux passoires thermiques

Part des ventes classées F et G, par type de bien et par année, là où l'interdiction progressive de location pèse sur les prix.

GET /v1/dpe/passoires-thermiques

MCP : analyze_dpe_price_and_thermal_risk · 10 crédits

Documentation

Effet de l'époque de construction

Prix au m² médian par tranche d'année de construction BDNB, comparé à la médiane de la zone.

GET /v1/bdnb/age-stats

MCP : analyze_building_age_price_impact · 10 crédits

Documentation

Potentiel de rénovation

Volume de ventes dans le bâti ancien, leur décote par rapport à la zone et les matériaux dominants, résumés en un score.

GET /v1/bdnb/renovation-score

MCP : score_renovation_potential · 10 crédits

Documentation

Exemple réel : une vente à Rennes, en trois appels

Point de départ : la rue Gilles Languedoc à Rennes (35000). Les réponses ci-dessous ont été capturées en production le 24 septembre 2026, raccourcies mais non modifiées. L'exemple part d'une rue plutôt que d'un numéro, et le DVF ne contient aucun nom d'acheteur ni de vendeur.

# 1. Toutes les ventes de la rue → un identifiant de transaction (20 crédits)
curl -H "X-API-Key: $NORMI_API_KEY" \
  "https://mcp.normi.fr/v1/property-history?address=rue%20Gilles%20Languedoc&code_postal=35000"

# 2. Le bâtiment BDNB rattaché à cette vente (2 crédits)
curl -H "X-API-Key: $NORMI_API_KEY" \
  "https://mcp.normi.fr/v1/transactions/18109193/bdnb"

# 3. Le prix au m² par classe DPE dans le code postal (10 crédits)
curl -H "X-API-Key: $NORMI_API_KEY" \
  "https://mcp.normi.fr/v1/stats/dpe-premium?code_postal=35000&type_local=Appartement"

1. L'historique de la rue donne l'identifiant de la vente

Vingt-deux ventes depuis 2014. Celle qui nous intéresse : un appartement de 4 pièces, 86.59 m², vendu le 30 décembre 2025 à 6 045 €/m². Les ventes en VEFA de 2022 et 2024 dans la même rue signalent déjà un programme neuf.

{
  "address_normalized": "… RUE GILLES LANGUEDOC, 35000 RENNES",
  "transactions": [
    {
      "id": 18109193,
      "date": "2025-12-30",
      "price_per_m2": 6045,
      "surface": 86.59,
      "type": "Appartement",
      "rooms": 4,
      "nature": "Vente"
    },
    {
      "id": 16417807,
      "date": "2024-11-29",
      "price_per_m2": 5908,
      "surface": 76,
      "type": "Appartement",
      "rooms": 3,
      "nature": "Vente en l'état futur d'achèvement"
    },
    {
      "id": 16409675,
      "date": "2024-11-28",
      "price_per_m2": 6453,
      "surface": 86,
      "type": "Appartement",
      "rooms": 4,
      "nature": "Vente en l'état futur d'achèvement"
    }
  ],
  "note": "Found 22 transaction(s) at this address"
}

2. Le bâtiment BDNB confirme un immeuble de 2023

{
  "building": {
    "batiment_groupe_id": "bdnb-bg-7LTJ-8KUT-9D4U",
    "annee_construction": 2023,
    "nb_logements": 21,
    "nb_etages": 6,
    "materiaux_murs": "INDETERMINE",
    "materiaux_toit": "INDETERMINE",
    "usage_principal": "Résidentiel collectif",
    "usage_niveau_1": "Résidentiel collectif",
    "dvf_nb_mutations": 5,
    "dvf_prix_m2_median": 6453,
    "match_distance_m": 8
  },
  "transaction_id": "18109193",
  "_credits": {
    "used": 2,
    "remaining": "…"
  }
}

Rattaché à 8 mètres : un immeuble résidentiel collectif de 21 logements sur 6 niveaux, construit en 2023. C'est cohérent avec les ventes en VEFA de l'historique. Les matériaux sont indéterminés : la BDNB ne les renseigne pas encore pour ce bâtiment récent.

3. Le prix au m² par classe DPE situe la vente dans son marché

Appartements du 35000, ventes rattachées à un DPE, prix au m² médian par classe (réponse de /v1/stats/dpe-premium)
ClasseVentesMédiane €/m²Écart à la médiane
A3723 295+3,2 %
B1 3483 371+5,6 %
C3 0043 261+2,1 %
D4 7683 032-5 %
E3 3253 167-0,8 %
F1 1883 361+5,3 %
G4043 593+12,5 %

À 6 045 €/m², la vente se situe nettement au-dessus de toutes les médianes de classe du 35000, ce qu'on attend d'un appartement neuf. Le tableau montre aussi pourquoi une valeur verte ne se lit jamais brute : ici, les logements classés G se vendent plus cher au m² que la médiane. Une explication plausible, que ce tableau ne suffit pas à établir : dans ce code postal central, les passoires sont souvent de petites surfaces anciennes et bien placées, deux facteurs qui élèvent le prix au m². La classe DPE se confond alors avec la localisation et la surface ; il faut comparer à type, surface et quartier comparables avant de conclure.

Ce que l'appariement agrégé retient pour cette vente
Dans la table d'appariement qui alimente ces statistiques, le diagnostic le plus proche de cette vente est un DPE de 2016, classé G, pour un logement de 25,55 m² dans un bâtiment de 1932, situé à 17,2 mètres. Il ne peut pas s'agir de l'appartement vendu, dans un immeuble construit en 2023. C'est exactement la limite décrite plus haut : sur des milliers de ventes, ces erreurs se diluent dans les médianes par classe ; pour une vente précise, il faut le DPE du bien.

La même question en MCP

Depuis Claude, ChatGPT ou tout client MCP connecté à Normi, une seule demande suffit. L'assistant enchaîne lookup_property_history, get_building_characteristics puis analyze_dpe_price_premium, pour les mêmes 32 crédits.

Retrouve les ventes rue Gilles Languedoc à Rennes (35000). Pour l'appartement de 4 pièces vendu le 30 décembre 2025, donne-moi les caractéristiques du bâtiment, puis compare son prix au m² à la médiane par classe DPE des appartements du 35000.

Pour brancher le serveur : installer le serveur MCP Normi.

Chiffres du corpus

Ces chiffres sont lus dans un instantané du corpus recalculé après chaque chargement de données, jamais calculés à la volée. Le chiffre DPE compte des transactions distinctes, pas des paires d'appariement.

18 102 579
transactions DVF valorisées et typées, du 1 janvier 2014 au 31 décembre 2025
35 057
communes au catalogue de localisation DVF
13 578 762
transactions rattachées à un DPE ADEME, le plus proche à moins de 200 mètres
32 220 045
bâtiments de la base BDNB (CSTB) interrogeables

Méthodologie. Mesures effectuées le 9 septembre 2026 sur le corpus Normi lui-même. « Valorisées et typées » signifie : prix renseigné et type de bien résolu — c'est la population sur laquelle portent les statistiques de l'API, pas le nombre de lignes du fichier brut. Le chiffre DPE compte des transactions distinctes rattachées à un diagnostic, et non des paires d'appariement : chaque vente reçoit le diagnostic le plus proche à moins de 200 mètres, établi entre dix ans avant et un an après la mutation. C'est un rattachement de proximité, pas la preuve que le diagnostic porte sur le logement vendu.

Sources : DVF (DGFiP), DPE (ADEME), BDNB (CSTB), SIRENE (INSEE), sous licence ouverte. Aucune de ces valeurs n'est reprise d'un tiers : elles sont recalculées sur les données ingérées par Normi.

lignes DVF rattachées à un bâtiment BDNB
17 813 826
départements couverts par l'appariement BDNB
93 / 93
distance médiane entre la vente et le bâtiment retenu
13,3 m
95ᵉ centile de cette distance
49,8 m

FAQ

Questions fréquentes sur le croisement DVF, DPE et BDNB

Les questions qui reviennent avant de brancher les trois bases sur un outil ou un agent.

Existe-t-il un identifiant commun entre DVF, DPE et BDNB ?

Non. Le DVF décrit des mutations (une vente, une date, un prix, une ou plusieurs parcelles), le DPE décrit un logement ou un bâtiment à la date d'un diagnostic, et la BDNB décrit des bâtiments. Aucun des trois ne publie la clé des deux autres. Il faut donc apparier, soit par la référence cadastrale, soit par l'adresse, soit par la géographie, et chaque méthode a ses erreurs. Normi rattache chaque vente au diagnostic et au bâtiment les plus proches, et publie la distance de rattachement pour que l'utilisateur puisse juger.

Quelle part des ventes DVF a un DPE rattaché ?

Environ trois ventes valorisées sur quatre. Le chiffre exact est lu dans l'instantané du corpus affiché sur cette page : il compte des transactions distinctes (COUNT DISTINCT de l'identifiant de transaction), pas des paires d'appariement. Les autres ventes sont celles pour lesquelles aucun diagnostic ADEME n'a été déposé à moins de 200 mètres dans la fenêtre de dates, et celles que l'appariement écarte volontairement : ventes en bloc, prix aberrants, ventes non géocodées.

Le DPE rattaché à une vente est-il forcément celui du logement vendu ?

Non, et c'est la limite la plus importante. Le rattachement retient le diagnostic le plus proche à moins de 200 mètres, sans comparer la surface ni le type de bien. Dans un immeuble collectif, c'est souvent le diagnostic d'un autre logement de l'immeuble, ou d'un immeuble voisin. Ce rattachement est fiable pour des statistiques par classe sur un code postal ou une commune, où les erreurs individuelles se compensent ; il ne remplace pas le DPE du bien pour une vente précise.

Pourquoi n'y a-t-il aucune donnée en Alsace-Moselle ?

Parce que le DVF lui-même ne couvre pas la Moselle, le Bas-Rhin et le Haut-Rhin, qui relèvent du livre foncier et non du fichier des mutations de la DGFiP, ni Mayotte. Sans vente DVF, il n'y a rien à rattacher : aucune commune de ces départements ne figure dans le catalogue de localisation DVF de Normi.

Comment obtenir l'identifiant d'une transaction pour interroger la BDNB ?

Par l'historique d'une adresse : GET /v1/property-history, ou l'outil MCP lookup_property_history, renvoie toutes les ventes d'une adresse ou d'une rue, chacune avec son champ id. Cet identifiant se passe ensuite à GET /v1/transactions/{id}/bdnb ou à l'outil get_building_characteristics.

Combien coûte ce croisement en crédits ?

L'exemple complet de cette page coûte 32 crédits : 20 pour l'historique de la rue, 2 pour le bâtiment BDNB d'une vente, 10 pour le prix au m² par classe DPE du code postal. Le compte gratuit reçoit 500 crédits chaque mois, sans carte bancaire. Un appel qui ne trouve pas de bâtiment est remboursé.

Sources des chiffres

Les chiffres du bloc « Chiffres du corpus » proviennent de la table normi_corpus_stats, avec la date de mesure affichée. Les autres ont été mesurés en production par les requêtes ci-dessous. Sources des données : DVF (DGFiP), DPE (ADEME), BDNB (CSTB), sous licence ouverte.

  • 18 119 513 lignes DVF dotées d'une identité durable · mesuré le 2026-08-28
    SELECT count(*) FROM maintenance.dvf_transaction_identity;
  • 17 813 826 lignes DVF rattachées à un bâtiment BDNB · mesuré le 2026-08-28
    SELECT count(*) FROM public.bdnb_dvf_matches;
  • 93 / 93 départements couverts par l'appariement BDNB · mesuré le 2026-08-28
    SELECT count(DISTINCT code_departement) FROM public.bdnb_dvf_matches; -- publication gate: all DVF départements
  • 13,3 m distance médiane entre la vente et le bâtiment retenu · mesuré le 2026-08-28
    SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY match_distance_m) FROM public.bdnb_dvf_matches;
  • 49,8 m 95ᵉ centile de cette distance · mesuré le 2026-08-28
    SELECT percentile_cont(0.95) WITHIN GROUP (ORDER BY match_distance_m) FROM public.bdnb_dvf_matches;
  • 0 commune DVF en Moselle, Bas-Rhin, Haut-Rhin et à Mayotte · mesuré le 2026-09-24
    SELECT count(*) FROM public.dvf_locations WHERE code_departement IN ('57','67','68','976');

Aller plus loin