gazetteer

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 10, 2026 License: MIT

README

gazetteer

A Go library that, given a French address, brings back rich, typed, well-extracted data across dimension that matters when evaluating a property as an investment: price, rents, rental demand, tenant solvency, taxes, safety, transport, hazards, building quality, the social and regulatory context, and more. Each dimension comes from a dedicated Source as a fully-typed Result with documented, unit-bearing fields; a Client.Collect runs them in parallel and returns a typed Dossier.

An optional, thin convenience layer (appraisal + appraisal/zonescore) consolidates a few dimensions and composites them into an high-level score .

AI coding agents: read AGENTS.md first (also linked as CLAUDE.md), then run gazetteer sources catalog --json. Run make hooks once to install the pre-commit gate (make precommit).

Status & stability

Pre-v1: tagged releases (v0.x), consumed by real applications that pin tags. Stability tiers, most stable first:

  1. Core contract (gazetteer, factory): the Source/Result/Dossier shapes, error sentinels and factory entry points evolve additively; breaking changes are deliberate, called out in release notes, and coordinated with downstream consumers.
  2. helpers/*, dataset, appraisal, overview: supported public API (see docs/helpers.md); additive evolution strongly preferred.
  3. Per-source Result fields: shaped by the upstream data; fields are added freely and renamed only with a Version bump. Treat field lists as data schemas, not frozen Go API.

Quick start

The factory package wires every stable in-tree source with sensible defaults so most callers need fewer than 10 lines:

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/bpineau/gazetteer/factory"
	"github.com/bpineau/gazetteer/gazetteer"
	"github.com/bpineau/gazetteer/sources/carteloyers"
	"github.com/bpineau/gazetteer/sources/dvf"
)

func main() {
	ctx := context.Background()

	// One-shot setup: builds httpx + BAN + every stable Source and
	// installs the BAN-backed Normalizer on the Client.
	client, err := factory.NewDefault(ctx)
	if err != nil {
		log.Fatalf("factory: %v", err)
	}

	// Canonicalise the user's free-text address into a Listing.
	listing, err := client.Normalize(ctx, "1 rue de Rivoli, 75001 Paris")
	if err != nil {
		log.Fatalf("normalize: %v", err)
	}

	// Run every configured source in parallel; aggregate the typed
	// payloads into a Dossier.
	dossier := client.Collect(ctx, listing)

	// Pull out exactly the typed data you care about. The unit always
	// lives in the field name (see docs/sources.md): DVF prices are
	// integer *centimes*, so divide by 100 for €/m².
	if r, ok := gazetteer.Get[*dvf.Result](dossier, dvf.Name); ok && r.ValueEURPerM2Cents != nil {
		fmt.Printf("Sale price: %d €/m² over %d sales (%s confidence)\n",
			*r.ValueEURPerM2Cents/100, r.SampleSize, r.Confidence)
	}

	// A second dimension, a second Result shape: carteloyers exposes the
	// reference rent as a float in €/m²/month, charges comprises (CC).
	if r, ok := gazetteer.Get[*carteloyers.Result](dossier, carteloyers.Name); ok && !r.IsEmpty() {
		fmt.Printf("Reference rent: %.1f €/m²/month CC (%.1f–%.1f)\n",
			r.LoyerMedEURPerM2CC, r.LoyerLowEURPerM2CC, r.LoyerHighEURPerM2CC)
	}
}

Callers that need to add an out-of-tree Source or override a default should use factory.BuilderDefault, chain .With(plugin), then call .Build():

b, err := factory.BuilderDefault(ctx, factory.Options{})
if err != nil { log.Fatal(err) }
client, _ := b.With(myPlugin).Build()

factory.NewDefault wires every stable Source, including osm_transit (an embedded station catalog with a live Overpass fallback, so no setup is needed) and bdnb (a live building API with a per-key rolling quota). To prune Sources you never consume — cutting their latency and failure surface — pass a deny-list:

client, _ := factory.NewDefaultWith(ctx, factory.Options{Exclude: []string{"bdnb"}})

Exclude is applied to the full default roster, so in-tree Sources added later still flow in automatically. (The gazetteer CLI omits bdnb from its default query/appraise set for the same quota reason; pass --source bdnb to include it.) Two finer-grained controls:

  • builder.Without(names…) drops Sources from a pre-populated Builder (e.g. factory.BuilderDefault) before .Build().
  • client.CollectSome(ctx, listing, names…) collects only a named subset on an existing Client — e.g. fetch the cheap embedded Sources first, before paying for the slow live APIs.

Sources shipped

Building / energy / risk:

Source What it provides
ademe DPE (energy performance certificates) at the address
bdnb Base de Données Nationale des Bâtiments — building age, type
cadastre Cadastral parcel id, contenance, viewer link (+ opt-in bâti)
iris INSEE IRIS code/name/type at the address (also resolves Listing.IRIS)
dpedist DPE class distribution per commune (passoire share F+G)
georisques Natural and technological hazards (flood, soil, industrial)
catnat Per-commune history of recognised natural-disaster decrees
cdsr Nearby region-flagged distressed condominiums (IDF copro risk)
rnc Copropriété context from the Registre National d'Immatriculation (syndic, lots, QPV; triage hint, no distress verdict)
nuisances IDF environmental-nuisance grid (noise + air, 500 m cells)

Market data:

Source What it provides
dvf Demandes de Valeurs Foncières — historical transaction prices
dvfagg Per-commune DVF price aggregate (median €/m² + dispersion, offline) — the batch complement to dvf
locservice Rental market reference data (tension, médiane €/m²)
carteloyers National rent observatory tiers
oll Observed market rents by zone (Observatoires Locaux des Loyers)
encadrement Rent control caps (Paris, Plaine Commune + Est Ensemble 93, Lyon)
lovac Vacancy rate per commune from the LOVAC fiscal file
sitadel New-housing pipeline per commune — permits authorised + housing starts (SDES Sitadel)
taxefonciere Property tax ratios by commune

Commune-level signals for the investor:

Source What it provides
filosofi INSEE Filosofi income / poverty statistics by commune
filoiris INSEE Filosofi income / poverty at IRIS (sub-commune) level
logiris INSEE census housing at IRIS: renter / social-housing / vacancy
chomage INSEE local unemployment rate by zone d'emploi (quarterly)
delinquance SSMSI État 4001 — per-commune crime indicators
zonageabc Official A bis / A / B1 / B2 / C tension classification
zonetendue "Zone tendue" + TLV-2013 + tendue-touristique flags
anct Action Cœur de Ville / Petites Villes de Demain / ORT membership
qpv Quartiers Prioritaires de la politique de la Ville — point-in-polygon (is the address inside a QPV?), commune fallback
cartofriches Cerema brownfield inventory aggregated per commune
education Count of open schools per commune (live API)
bpe INSEE BPE — curated commerce / health / services counts
rpls % social housing (loi SRU) per commune
vacance INSEE census demographic vacancy rate (per arrondissement)
ips_ecoles DEPP median IPS over écoles primaires (per arrondissement)

Transport:

Source What it provides
osm_transit Walking distance to nearest métro / RER / tram / train station
gpe Nearest future Grand Paris Express station + line + distance

External links:

Source What it provides
links Deep links to useful third-party tools for the address — maps, prices/DVF, Géorisques, PLU, INSEE fiche (built from coordinates / INSEE / address, no HTTP)
Optional convenience layer

On top of the typed Dossier (the main product) sits a thin, optional high-level API — skip it if you just want the data. appraisal/ consolidates a few dimensions into rent and price estimates with confidence bands, and appraisal/zonescore composites them into a 0–100 score with an explainable per-axis breakdown (rendement, tension, solvabilité, sécurité, fiscalité, accès) and selectable weight presets (yield / balanced / patrimoine / transport, via the CLI --profile). The IRIS-level income (filoiris) and housing (logiris) sources sharpen the solvabilité and tension axes where neighbourhoods diverge within a commune.

Reusable building blocks

The packages the sources are made of are usable standalone — a polite rate-limited HTTP client with disk cache (helpers/httpx), circuit breakers (helpers/circuit), BAN geocoding with caching and coherence guards (helpers/banx), the embedded commune table with offline INSEE resolution (helpers/communes), French text/number/address parsing (helpers/frnorm, helpers/fraddr, helpers/proptype), geometry kernels (helpers/geodist, geopoly, geoindex), scraping + anti-bot detection (helpers/scrape), a pluggable KV cache (helpers/kvcache), and the embed-and-refresh dataset pipeline (dataset) — even for apps that never build a Dossier. docs/helpers.md is the map.

Batch / commune-level data

The per-address flow above (NormalizeCollectDossier) answers "tell me everything about this address". For the inverse — screening every commune at once — the overview package joins the embedded, commune-keyed Sources offline into one row per commune:

import "github.com/bpineau/gazetteer/overview"

rows, _ := overview.Build(overview.Options{Depts: []string{"75", "93", "94"}})
for _, c := range rows {
    fmt.Printf("%s %s: %.0f €/m², loyer %.1f €/m² HC, délinquance %s\n",
        c.INSEE, c.Name, c.PriceMedianEURM2, c.RentMarketEURM2HC, c.DelinquanceLevel)
}

overview.Build does no network I/O. It is keyed off the communes that have DVF price data (dvfagg) and merges price, market rent, the encadrement cap, income, vacancy, taxe foncière, QPV, zonage and nearby transit lines per commune (Depts empty = all communes nationally).

The same commune-keyed shortcut is available per Source via batch-read helpers that skip the full Query/Listing path — load an index once, then read many communes:

idx, _ := dvfagg.Load("")               // "" = embedded dataset
for _, insee := range idx.Codes() {     // every commune with price data
    r, _ := idx.Lookup(insee)
    _ = r.PriceMedianEURM2
}

Companion helpers: qpv.Index.HasQPV(insee), delinquance.Index.Level(insee), communes.Table.All().

CLI

Install:

go install github.com/bpineau/gazetteer/cmd/gazetteer@latest

Sub-commands:

gazetteer sources list                  # list every registered Source + version
gazetteer sources doc <name>            # print a Source's typed Result skeleton
gazetteer query     [flags] <addr>      # run every Source against an address
gazetteer appraise  [flags] <addr>      # query + consolidated price/rent/hazard + zone score
gazetteer compare   [flags] <a1> <a2>…  # rank addresses best-first by yield-first zone score
gazetteer normalize [--json] <addr>     # resolve a free-text address to a Listing
gazetteer refresh   [sources|all]       # download/rebuild datasets into the datadir
gazetteer version                       # build version

query and appraise honour the listing's property attributes when supplied — DVF, encadrement, taxe-foncière and the rental Sources need them to produce a useful answer:

--property-type apartment|house|land|commercial   (default: apartment)
--surface <m²>
--rooms <N>
--source <comma-separated names>                  (default: every Source the CLI knows)
--json                                            (emit the full Dossier)
--verbose                                         (debug)

See docs/cli.md for the full reference.

Datasets & cache

The offline Sources (rents, taxe foncière, vacancy, crime, schools, …) ship a pre-indexed dataset embedded in the binary, so they work out of the box with no setup. A flat data directory (default ~/.cache/gazetteer, overridable with --data-dir or $GAZETTEER_DATA_DIR) lets you override or refresh those datasets from upstream without rebuilding the library: when a refreshed copy is present there it takes precedence over the embedded one; otherwise the embedded copy is used.

gazetteer refresh downloads each Source's real upstream file(s) and rebuilds its dataset into the datadir:

gazetteer refresh --list        # show each artifact: where it loads from, size, refreshable
gazetteer refresh               # download + (re)build every dataset into the datadir
gazetteer refresh delinquance   # just one source

refresh is idempotent: a dataset already present and current in the datadir is skipped untouched — no download, no rebuild. Only the first run does work, so you can safely call it on every start (e.g. a one-time warm-up on boot); pass --force to rebuild regardless. Library callers use the same contract via dataset.Refresh:

sets := /* collect dataset.Set from your sources (DatasetProvider) */
_, err := dataset.Refresh(ctx, httpClient, sets, dataset.RefreshOptions{}) // idempotent; Force to rebuild

Maintainers re-embed a refreshed dataset with gazetteer refresh --go-embed-update (rebuilds into the datadir, then copies the artifact back into sources/<name>/data/ for re-commit). See docs/datasets.md for the full model and how to make an out-of-tree Source refreshable.

Concepts

  • Listing — the universal input (address + coords + property attrs)
  • Source — a named, versioned data origin: Query(ctx, listing) → (payload, error)
  • Result — the framework envelope around a Source's typed payload
  • Dossier — the aggregated output of one Client.Collect call
  • Builder / Client — configure sources, then run them in parallel
  • Cache — pluggable backend for intermediate state (in-memory default)
  • Normalizer — canonicalises a free-text address into a Listing

Plugins

Out-of-tree source packages implement the same Source interface and register their typed payload via gazetteer.Register in init(). Callers wire them with builder.With(...) like any official source — the framework itself has no compile-time knowledge of which sources are available.

License

MIT. See LICENSE.

Directories

Path Synopsis
Package appraisal synthesises consolidated views over a gazetteer.Dossier by combining the contributions of every Source whose typed Result satisfies one of the three contribution interfaces.
Package appraisal synthesises consolidated views over a gazetteer.Dossier by combining the contributions of every Source whose typed Result satisfies one of the three contribution interfaces.
zonescore
Package zonescore turns a gazetteer.Dossier into a single, explainable rental-investment score for a zone, tuned for a YIELD-first investor.
Package zonescore turns a gazetteer.Dossier into a single, explainable rental-investment score for a zone, tuned for a YIELD-first investor.
cmd
gazetteer command
Command gazetteer is a CLI front-end over the gazetteer library.
Command gazetteer is a CLI front-end over the gazetteer library.
Package dataset manages the raw and processed data files that back block-dataset Sources — the ones that ship a pre-indexed CSV/JSON artifact rather than querying a live API per address.
Package dataset manages the raw and processed data files that back block-dataset Sources — the ones that ship a pre-indexed CSV/JSON artifact rather than querying a live API per address.
Package factory wires every in-tree gazetteer Source with sensible defaults so callers can obtain a working *gazetteer.Client in a single function call.
Package factory wires every in-tree gazetteer Source with sensible defaults so callers can obtain a working *gazetteer.Client in a single function call.
Package gazetteer brings back rich, typed, well-extracted data about a French address across every dimension that matters when evaluating a property as an investment (price, rents, demand, solvency, taxes, safety, transport, hazards, building quality, social/regulatory context, …).
Package gazetteer brings back rich, typed, well-extracted data about a French address across every dimension that matters when evaluating a property as an investment (price, rents, demand, solvency, taxes, safety, transport, hazards, building quality, social/regulatory context, …).
gazettestest
Package gazettestest provides reusable test doubles for code that consumes the gazetteer API.
Package gazettestest provides reusable test doubles for code that consumes the gazetteer API.
helpers
atomicfs
Package atomicfs is a tiny set of helpers for atomic file writes and cheap stat-based pre-validation.
Package atomicfs is a tiny set of helpers for atomic file writes and cheap stat-based pre-validation.
banx
Package banx is a small, opinionated BAN (Base Adresse Nationale) client.
Package banx is a small, opinionated BAN (Base Adresse Nationale) client.
banx/maaddr
Package maaddr provides the small, generic address-normalization helpers an autocomplete-shaped consumer layers on top of `banx`'s raw BAN client.
Package maaddr provides the small, generic address-normalization helpers an autocomplete-shaped consumer layers on top of `banx`'s raw BAN client.
circuit
Package circuit consolidates the per-source circuit-breaker pattern used by every HTTP-backed scraper/enricher: trip on N consecutive transport errors, trip on a sliding-window error rate (RateWindow, catches slow-burn failures the consecutive-streak counter misses), trip on observed quota exhaustion (HTTP 429 or response header x-quota-remaining=0), trip on N consecutive HTTP-200 responses with no signal-bearing content (ContentStreakBreaker, the "paywall stub" / "anti-bot interstitial" failure mode that the transport breakers cannot see), and expose process-local gauge + monotonic counter for metrics.
Package circuit consolidates the per-source circuit-breaker pattern used by every HTTP-backed scraper/enricher: trip on N consecutive transport errors, trip on a sliding-window error rate (RateWindow, catches slow-burn failures the consecutive-streak counter misses), trip on observed quota exhaustion (HTTP 429 or response header x-quota-remaining=0), trip on N consecutive HTTP-200 responses with no signal-bearing content (ContentStreakBreaker, the "paywall stub" / "anti-bot interstitial" failure mode that the transport breakers cannot see), and expose process-local gauge + monotonic counter for metrics.
communes
Package communes exposes a lookup table over the ~35 000 French communes (including the Paris/Lyon/Marseille arrondissements).
Package communes exposes a lookup table over the ~35 000 French communes (including the Paris/Lyon/Marseille arrondissements).
fallback
Package fallback formalises the "ladder of fallback tiers" pattern that turns up every time a consumer fetches a derived value from an upstream with multiple plausible strategies.
Package fallback formalises the "ladder of fallback tiers" pattern that turns up every time a consumer fetches a derived value from an upstream with multiple plausible strategies.
fraddr
Package fraddr is the canonical home for the small French street-address parser used by any project that has to deconstruct free-form prose into a leading street number, a list of discriminating street-name tokens, and a postcode boundary.
Package fraddr is the canonical home for the small French street-address parser used by any project that has to deconstruct free-form prose into a leading street number, a list of discriminating street-name tokens, and a postcode boundary.
frnorm
Package frnorm hosts side-effect-free, allocation-bounded helpers for parsing French free-form text shapes: prices, dates, postal codes, accents, whitespace and hearing-times.
Package frnorm hosts side-effect-free, allocation-bounded helpers for parsing French free-form text shapes: prices, dates, postal codes, accents, whitespace and hearing-times.
geodist
Package geodist computes great-circle (haversine) distances between (lat, lon) points on Earth.
Package geodist computes great-circle (haversine) distances between (lat, lon) points on Earth.
geoindex
Package geoindex factors out the "embedded gzipped polygon index + point-in-polygon resolve" scaffolding shared by the contour-backed sources (iris, qpv, encadrement).
Package geoindex factors out the "embedded gzipped polygon index + point-in-polygon resolve" scaffolding shared by the contour-backed sources (iris, qpv, encadrement).
geopoly
Package geopoly is a small, dependency-free geometry kernel for GeoJSON-style geometries in (lon, lat) decimal degrees.
Package geopoly is a small, dependency-free geometry kernel for GeoJSON-style geometries in (lon, lat) decimal degrees.
httpx
Package httpx is the project's single shared HTTP client.
Package httpx is the project's single shared HTTP client.
kvcache
Package kvcache defines a backend-agnostic persistent key/value cache contract used across the project: the BAN geocoder cache, the DVF per-commune section cache, and any caller that needs a memo with optional TTL.
Package kvcache defines a backend-agnostic persistent key/value cache contract used across the project: the BAN geocoder cache, the DVF per-commune section cache, and any caller that needs a memo with optional TTL.
kvcache/kvcachetest
Package kvcachetest is a conformance suite for kvcache.Cache implementations.
Package kvcachetest is a conformance suite for kvcache.Cache implementations.
kvcache/memcache
Package memcache provides an in-memory kvcache.Cache implementation suitable for tests and short-lived processes that don't need persistence.
Package memcache provides an in-memory kvcache.Cache implementation suitable for tests and short-lived processes that don't need persistence.
proptype
Package proptype owns the single source of truth that maps raw property-type strings (any case, any language, possibly with trailing whitespace) onto the canonical enum used by Sources to gate eligibility.
Package proptype owns the single source of truth that maps raw property-type strings (any case, any language, possibly with trailing whitespace) onto the canonical enum used by Sources to gate eligibility.
safejson
Package safejson ships tiny wrappers around encoding/json's Marshal for callers that operate on data they have already established is marshalable — plain maps, slices and structs with `json:` tags only.
Package safejson ships tiny wrappers around encoding/json's Marshal for callers that operate on data they have already established is marshalable — plain maps, slices and structs with `json:` tags only.
scrape
Package scrape composes helpers/httpx with goquery to give a 5-line "fetch + parse + decode" recipe for HTML scrapers.
Package scrape composes helpers/httpx with goquery to give a 5-line "fetch + parse + decode" recipe for HTML scrapers.
scrape/antibot
Package antibot consolidates Cloudflare / DataDome / Captcha interstitial detection into one place.
Package antibot consolidates Cloudflare / DataDome / Captcha interstitial detection into one place.
stats
Package stats provides the small numeric utilities shared across source transforms, the appraisal synthesis kernel and the overview join: median, percentile, decimal rounding and MAD-based outlier flagging.
Package stats provides the small numeric utilities shared across source transforms, the appraisal synthesis kernel and the overview join: median, percentile, decimal rounding and MAD-based outlier flagging.
Package internal hosts private helpers that should not be importable outside this module.
Package internal hosts private helpers that should not be importable outside this module.
roster
Package roster is the single enumeration of every in-tree Source and of how to construct it from the shared dependency bundle.
Package roster is the single enumeration of every in-tree Source and of how to construct it from the shared dependency bundle.
Package overview is the batch / commune-level counterpart to the per-address gazetteer flow.
Package overview is the batch / commune-level counterpart to the per-address gazetteer flow.
sources
ademe
Package ademe is a gazetteer.Source for the ADEME `dpe03existant` dataset (energy-performance certificates) published via data.gouv.fr's data-fair API.
Package ademe is a gazetteer.Source for the ADEME `dpe03existant` dataset (energy-performance certificates) published via data.gouv.fr's data-fair API.
anct
Package anct is a gazetteer.Source that flags whether a commune participates in one of France's territorial revitalization programmes run by the ANCT (Agence Nationale de la Cohésion des Territoires):
Package anct is a gazetteer.Source that flags whether a commune participates in one of France's territorial revitalization programmes run by the ANCT (Agence Nationale de la Cohésion des Territoires):
bdnb
Package bdnb is a gazetteer.Source for the Base de Données Nationale des Bâtiments (BDNB) `batiment_groupe_complet` PostgREST endpoint.
Package bdnb is a gazetteer.Source for the Base de Données Nationale des Bâtiments (BDNB) `batiment_groupe_complet` PostgREST endpoint.
bpe
Package bpe is a gazetteer.Source that returns a curated subset of INSEE's Base Permanente des Équipements (BPE) 2024 counts for the commune of a Listing.
Package bpe is a gazetteer.Source that returns a curated subset of INSEE's Base Permanente des Équipements (BPE) 2024 counts for the commune of a Listing.
cadastre
Package cadastre is a gazetteer.Source for the French cadastre.
Package cadastre is a gazetteer.Source for the French cadastre.
carteloyers
Package carteloyers is a gazetteer.Source for the ANIL / DHUP "carte des loyers" offline dataset — a per-commune × typology reference rent in EUR/m²/month.
Package carteloyers is a gazetteer.Source for the ANIL / DHUP "carte des loyers" offline dataset — a per-commune × typology reference rent in EUR/m²/month.
cartofriches
Package cartofriches is a gazetteer.Source that aggregates the Cerema "Cartofriches" national inventory of friches (industrial, commercial and habitation brownfields) per commune.
Package cartofriches is a gazetteer.Source that aggregates the Cerema "Cartofriches" national inventory of friches (industrial, commercial and habitation brownfields) per commune.
catnat
Package catnat is a gazetteer.Source for the per-commune history of recognised natural disasters ("arrêtés de catastrophe naturelle", GASPAR).
Package catnat is a gazetteer.Source for the per-commune history of recognised natural disasters ("arrêtés de catastrophe naturelle", GASPAR).
cdsr
Package cdsr is a gazetteer.Source for the Île-de-France region's "Copropriétés en Difficulté Soutenues par la Région" (CDSR) — condominiums labelled severely distressed and granted a regional subsidy for thermal renovation.
Package cdsr is a gazetteer.Source for the Île-de-France region's "Copropriétés en Difficulté Soutenues par la Région" (CDSR) — condominiums labelled severely distressed and granted a regional subsidy for thermal renovation.
chomage
Package chomage is a gazetteer.Source that returns the latest INSEE estimate of the local unemployment rate (taux de chômage localisé) for the zone d'emploi a commune belongs to, plus a short trend window.
Package chomage is a gazetteer.Source that returns the latest INSEE estimate of the local unemployment rate (taux de chômage localisé) for the zone d'emploi a commune belongs to, plus a short trend window.
delinquance
Package delinquance is a gazetteer.Source exposing per-commune crime and security indicators recorded by police and gendarmerie.
Package delinquance is a gazetteer.Source exposing per-commune crime and security indicators recorded by police and gendarmerie.
dpedist
Package dpedist is a gazetteer.Source that returns the distribution of energy-performance labels (étiquettes DPE A..G) across every DPE observed in the commune of a Listing.
Package dpedist is a gazetteer.Source that returns the distribution of energy-performance labels (étiquettes DPE A..G) across every DPE observed in the commune of a Listing.
dvf
Package dvf is a gazetteer.Source that compiles a price-per-m² signal for an auction's commune from DVF Etalab open data.
Package dvf is a gazetteer.Source that compiles a price-per-m² signal for an auction's commune from DVF Etalab open data.
dvfagg
Package dvfagg is an offline, per-commune aggregate of DVF apartment sale prices (median €/m² + dispersion), embedded as a CSV and refreshed from the geo-dvf bulk files.
Package dvfagg is an offline, per-commune aggregate of DVF apartment sale prices (median €/m² + dispersion), embedded as a CSV and refreshed from the geo-dvf bulk files.
education
Package education provides a gazetteer Source that counts open public + private schools in the commune of a Listing, broken down by school type (école / collège / lycée / médico-social / autre).
Package education provides a gazetteer Source that counts open public + private schools in the commune of a Listing, broken down by school type (école / collège / lycée / médico-social / autre).
encadrement
Package encadrement is a gazetteer.Source for the French zoned rent caps ("encadrement des loyers") in force in Paris, the two Seine-Saint-Denis EPTs (Plaine Commune, Est Ensemble) and Lyon / Villeurbanne.
Package encadrement is a gazetteer.Source for the French zoned rent caps ("encadrement des loyers") in force in Paris, the two Seine-Saint-Denis EPTs (Plaine Commune, Est Ensemble) and Lyon / Villeurbanne.
filoiris
Package filoiris is a gazetteer.Source that returns INSEE Filosofi income indicators at the IRIS (sub-commune) level, keyed by the listing's resolved IRIS code.
Package filoiris is a gazetteer.Source that returns INSEE Filosofi income indicators at the IRIS (sub-commune) level, keyed by the listing's resolved IRIS code.
filosofi
Package filosofi is a gazetteer.Source for the INSEE Filosofi 2021 per-commune income and minima-sociaux statistics, served from an embedded JSON snapshot.
Package filosofi is a gazetteer.Source for the INSEE Filosofi 2021 per-commune income and minima-sociaux statistics, served from an embedded JSON snapshot.
georisques
Package georisques is a gazetteer.Source for the BRGM rapport-risque endpoint hosted at georisques.gouv.fr — natural and technological hazards at the (lat, lon) granularity.
Package georisques is a gazetteer.Source for the BRGM rapport-risque endpoint hosted at georisques.gouv.fr — natural and technological hazards at the (lat, lon) granularity.
gpe
Package gpe is a gazetteer.Source that locates the nearest future Grand Paris Express station to a listing — the new metro network (lines 14 extensions, 15, 16, 17, 18; ~68 new stations) opening across Île-de-France.
Package gpe is a gazetteer.Source that locates the nearest future Grand Paris Express station to a listing — the new metro network (lines 14 extensions, 15, 16, 17, 18; ~68 new stations) opening across Île-de-France.
ips_ecoles
Package ips_ecoles is a gazetteer.Source that returns the median Indice de Position Sociale (IPS) over the écoles primaires of a commune.
Package ips_ecoles is a gazetteer.Source that returns the median Indice de Position Sociale (IPS) over the écoles primaires of a commune.
iris
Package iris resolves a coordinate to its INSEE IRIS — the sub-commune statistical zone (≈ 2 000 inhabitants) that is the finest official mesh for census, income and many other datasets.
Package iris resolves a coordinate to its INSEE IRIS — the sub-commune statistical zone (≈ 2 000 inhabitants) that is the finest official mesh for census, income and many other datasets.
links
Package links surfaces deep-link URLs to useful third-party tools and datasets for the listing's address.
Package links surfaces deep-link URLs to useful third-party tools and datasets for the listing's address.
locservice
Package locservice is a gazetteer.Source for the LocService Tensiomètre Locatif HTML page — a per-INSEE × typology rental market tension label (`tendu` / `équilibré` / `détendu`) plus a median rent reading.
Package locservice is a gazetteer.Source for the LocService Tensiomètre Locatif HTML page — a per-INSEE × typology rental market tension label (`tendu` / `équilibré` / `détendu`) plus a median rent reading.
logiris
Package logiris is a gazetteer.Source that returns INSEE census housing-structure indicators at the IRIS (sub-commune) level, keyed by the listing's resolved IRIS code: the share of renters, the share of social housing, and the vacancy rate of the neighbourhood.
Package logiris is a gazetteer.Source that returns INSEE census housing-structure indicators at the IRIS (sub-commune) level, keyed by the listing's resolved IRIS code: the share of renters, the share of social housing, and the vacancy rate of the neighbourhood.
lovac
Package lovac is a gazetteer.Source for the LOVAC 2025 per-commune housing vacancy dataset, served from an embedded CSV.
Package lovac is a gazetteer.Source for the LOVAC 2025 per-commune housing vacancy dataset, served from an embedded CSV.
nuisances
Package nuisances is a gazetteer.Source for the Île-de-France cumulative environmental-nuisance grid (Institut Paris Région, combining Bruitparif noise and Airparif air-quality layers, 500 m cells).
Package nuisances is a gazetteer.Source for the Île-de-France cumulative environmental-nuisance grid (Institut Paris Région, combining Bruitparif noise and Airparif air-quality layers, 500 m cells).
oll
Package oll is a gazetteer.Source for observed market rents from the Observatoires Locaux des Loyers (OLL) — the network of approved local rent observatories.
Package oll is a gazetteer.Source for observed market rents from the Observatoires Locaux des Loyers (OLL) — the network of approved local rent observatories.
osm
Package osm is a gazetteer.Source that computes the walking distance from a listing to the nearest métro / RER / tram / Transilien / train station, against an OpenStreetMap station catalog.
Package osm is a gazetteer.Source that computes the walking distance from a listing to the nearest métro / RER / tram / Transilien / train station, against an OpenStreetMap station catalog.
qpv
Package qpv is a gazetteer.Source that answers whether a listing sits inside a Quartier Prioritaire de la Politique de la Ville (QPV) — by point-in-polygon when the listing has coordinates, falling back to commune-level membership otherwise.
Package qpv is a gazetteer.Source that answers whether a listing sits inside a Quartier Prioritaire de la Politique de la Ville (QPV) — by point-in-polygon when the listing has coordinates, falling back to commune-level membership otherwise.
rnc
Package rnc is a gazetteer.Source that returns the copropriété CONTEXT recorded in the Registre National d'Immatriculation des Copropriétés (RNC, published by the ANAH on data.gouv.fr) for a building address.
Package rnc is a gazetteer.Source that returns the copropriété CONTEXT recorded in the Registre National d'Immatriculation des Copropriétés (RNC, published by the ANAH on data.gouv.fr) for a building address.
rpls
Package rpls is a gazetteer.Source that returns the per-commune share of social housing (logement locatif social), expressed as a percentage of résidences principales, computed under the loi SRU article 55 framework.
Package rpls is a gazetteer.Source that returns the per-commune share of social housing (logement locatif social), expressed as a percentage of résidences principales, computed under the loi SRU article 55 framework.
sitadel
Package sitadel is a gazetteer.Source that returns per-commune housing-construction dynamics from the SDES Sitadel annual file: building permits AUTHORISED (LOG_AUT) and housing STARTS (LOG_COM, "logements commencés"), counted in dwellings.
Package sitadel is a gazetteer.Source that returns per-commune housing-construction dynamics from the SDES Sitadel annual file: building permits AUTHORISED (LOG_AUT) and housing STARTS (LOG_COM, "logements commencés"), counted in dwellings.
taxefonciere
Package taxefonciere is a gazetteer.Source that estimates the annual taxe foncière (FR property tax) from offline DGFiP datasets.
Package taxefonciere is a gazetteer.Source that estimates the annual taxe foncière (FR property tax) from offline DGFiP datasets.
vacance
Package vacance is a gazetteer.Source that returns the per-commune DEMOGRAPHIC vacancy rate from INSEE's Recensement de la Population 2021 ("base communale logement").
Package vacance is a gazetteer.Source that returns the per-commune DEMOGRAPHIC vacancy rate from INSEE's Recensement de la Population 2021 ("base communale logement").
zonageabc
Package zonageabc provides a gazetteer Source that classifies any French commune into the official A bis / A / B1 / B2 / C zonage.
Package zonageabc provides a gazetteer Source that classifies any French commune into the official A bis / A / B1 / B2 / C zonage.
zonetendue
Package zonetendue provides a gazetteer Source that flags any French commune as "zone tendue" / "zone touristique et tendue" / non tendue, per the décret 2013-392 of 10 May 2013 as revised by décret 2025-1267 of 22 December 2025.
Package zonetendue provides a gazetteer Source that flags any French commune as "zone tendue" / "zone touristique et tendue" / non tendue, per the décret 2013-392 of 10 May 2013 as revised by décret 2025-1267 of 22 December 2025.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL