Is this listing too expensive? French property sales (DVF), crime, rents, risks, schools
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Schools (maternelle, primaire, collège/lycée), bakeries, night clubs, noisy bars and every bar or café within a radius (France), golf courses within 3 km (a point in a home's favour), and public transport (OpenStreetMap): train and RER stations, metro stations and tram stops within 1.5 km, and stations being built (the Grand Paris Express's) within 3 km: count per kind and the nearest ones.
Latitude (WGS84).
Longitude (WGS84).
City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given.
Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.
Radius in metres (default 500, at most 3000).
Schools (maternelle, primaire, collège/lycée), bakeries, night clubs, noisy bars and every bar or café within a radius (France), golf courses within 3 km (a point in a home's favour), and public transport (OpenStreetMap): train and RER stations, metro stations and tram stops within 1.5 km, and stations being built (the Grand Paris Express's) within 3 km: count per kind and the nearest ones.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| radius_m | integer | Radius in metres (default 500, at most 3000). |
{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"radius_m": {
"type": "integer",
"maximum": 3000,
"minimum": 50,
"description": "Radius in metres (default 500, at most 3000)."
}
}
}Compares a French listing's asking price with recent recorded sales (DVF) of the same type and a similar size around it (the smallest radius with enough of them): estimate with its interquartile range, gap and verdict, closest comparables (sales over 2.5 times off the median price per m² are left out as no market price), a headline such as "12 % au-dessus du marché", local price trend, the commune's main crime rates against France, its rent for the type (monthly rent for the floor area, gross yield at the asking price), its share of passoires thermiques (DPE F or G) for the type, its natural risks, its local tax rates (taxe foncière, waste tax, taxe d'habitation on second homes), its home internet (fibre and wired speeds), each mobile operator's 4G coverage level at the address (mobile_4g) and their antennas, amenities within 500 m, and the address's sea view when it has one. The estimate is the prix normal (resales without a view of the sea around) plus the premiums that apply (premiums): the energy label's discount or premium (décote/surcote DPE, resales only) when the label is known (energy, else its title and description say it: « DPE : F »), what the label fetches against the commune's mix of labels (ADEME) after the Notaires de France's « valeur verte » of 2024 resales per région and type (rates: each label's); the new-build premium (surcote neuf: what new homes sold off-plan fetch over resales in the commune, DVF 2023–2025; where it sold few, its département's read at the price of the resales around, the dearer they are the smaller) when the listing is new (new_build, else its title and description say so: VEFA, programme neuf, livraison prévue…), and the sun premium (surcote soleil) when the sun goes down into the sea (or the sea is seen) from its address, else when its description says so (unverified); the gap and verdict are against that total. It also gives what financing the asking price costs at France's current home-loan rates (financing: L'Observatoire Crédit Logement/CSA's latest month, per 15, 20 and 25 years: rate, monthly payment, total interest, and the commune's rent for the floor area minus the payment, borrowing the price and 8 % purchase costs less a 10 % down payment).
| Argument | Type | Description |
|---|
For a French commune (by name, INSEE code or position) or département: for a commune, its zone ABC (which sets the PTZ, Denormandie and LLI), whether it is a zone tendue, its rent control (encadrement des loyers, with its territory) and its social housing under the SRU law (homes, share, target, déficitaire, carencée), and its building plots' median price per m² of land (DVF, with its département's and France's); asking rents per m² (charges included) for flats, small and large flats and houses, with their range (ANIL/DHUP Carte des loyers); the energy ratings (DPE A–G) of its dwellings diagnosed since July 2021 and the share of passoires thermiques (F or G, which may no longer be let: G since 2025, F from 2028, and E from 2034), per flats and houses (ADEME); its natural risks: the risks listed by the state (DDRM), natural disaster (CatNat) decrees since 1982, prevention plans, radon potential (Géorisques); its local tax rates (DGFiP, in %): taxe foncière on buildings and on land, the household waste tax (TEOM; null where a fee pays for it), taxe d'habitation (on second homes and vacant dwellings only since 2023) with the commune's surcharge on second homes, the latest year's and the first's, the taxe foncière year by year, and for a commune how each rate splits between the commune, its syndicates, its intercommunality (named), special taxes and GEMAPI; its median price per m² of recorded sales (DVF) for flats, houses and both over the latest two years against the two before, and year by year; its home internet (ARCEP Ma connexion internet): the share of premises fibre, cable, copper DSL (copper_closed: no new subscribers), fixed 4G, radio and satellite reach, the share getting 8 and 30 Mbit/s and 1 Gbit/s by wire, and its premises by best technology; each mobile operator's 4G coverage of its homes (Orange, SFR, Bouygues Telecom, Free Mobile: the share of homes at each level of ARCEP's simulated maps, very good meaning indoors; metropolitan France), and their antennas in the commune (sites with 4G, 5G, 5G at 3.5 GHz). Each compared with its département and France.
| Argument | Type | Description |
|---|---|---|
| lat | number |
The copropriété(s) the Registre national d'immatriculation des copropriétés (RNIC, Anah, Licence Ouverte 2.0) registers at a street address, matched by cadastral parcel (BAN geocoding then IGN API Carto), else by normalised address, else within 50 m (marked probable, with the distance): name, immatriculation number, lots, construction period, syndic type and name, whether a mandate is running, any mandat ad hoc, administration provisoire or état de carence, any arrêté (insalubrité, péril, équipements communs), residence service, last update, and alerts. The register does not say which works were voted in general meetings: the answer lists the documents to demand from the seller (minutes of the last 3 AGs, pré-état daté, PPPT/DTG, next AG's convocation, fiche synthétique and carnet d'entretien). A principal and its secondary syndicates are all returned. Cite "Registre national des copropriétés — Anah".
| Argument | Type | Description |
|---|---|---|
| place | string | City or postcode the address is in, when the address does not say. |
| address* | string | Street address with its postcode or city (e.g. "138 boulevard de la Mer, 62152 Neufchâtel-Hardelot"). |
{
"type": "object",
"required": [
"address"
],
"properties": {
"place": {
"type": "string",
"description": "City or postcode the address is in, when the address does not say."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"138 boulevard de la Mer, 62152 Neufchâtel-Hardelot\")."
}
}
}Offences recorded by police and gendarmerie (SSMSI, latest year) for a French commune — by name, INSEE code or position — per indicator, as rates per 1,000 inhabitants (per 1,000 dwellings for burglaries), next to its département, région and France, with the yearly trend.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| commune | string | Commune name or INSEE code (e.g. "Carnac", "56034"), or a département code ("56"). |
{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"commune": {
"type": "string",
"description": "Commune name or INSEE code (e.g. \"Carnac\", \"56034\"), or a département code (\"56\")."
}
}
}Resolves a city name or postcode: its centre, extent and number of recorded sales, and the French communes of that name (INSEE codes) for crime_stats.
| Argument | Type | Description |
|---|---|---|
| query* | string | City, its start, a word of its name ("Hardelot" for Neufchâtel-Hardelot) or postcode. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "City, its start, a word of its name (\"Hardelot\" for Neufchâtel-Hardelot) or postcode."
}
}
}France's home-loan rates this month (L'Observatoire Crédit Logement/CSA, per 15, 20 and 25 years, excluding insurance) and, as asked: what a household can borrow (income_monthly: payments, insurance included, at most 35 % of net income less its other loans, the HCSF rule), and the budget it buys with its down payment once the purchase costs are paid; what a price (or a loan amount, loan) costs a month over each length, the income it needs at 35 % and the debt ratio it makes, with a PTZ beside the bank loan (ptz, at 0 %); a rate a bank offered (offered_rate, offered_years: a nominal rate excluding insurance, not a TAEG) against the market's for that length, its monthly payment and what the difference costs over the loan; a bridge loan on the home being sold (bridge_value): its amount and monthly interest. Purchase costs: notary, guarantee and fees, 8 % of the price for a resale, 3 % for a new home (new_build), unless purchase_costs is given (0 when the developer pays them; for a plot and a build contract, about 8 % of the plot only). Insurance: 0.30 % of the loan a year unless insurance_rate says otherwise.
| Argument | Type | Description |
|---|---|---|
| ptz | number | A zero-rate loan (PTZ) beside the bank's, in euros (the ptz tool works it out). |
| loan | number | The bank loan's amount, in euros, when known (instead of working it out from price). |
| price | number | A price to finance, in euros. |
| new_build | boolean | A new home (VEFA): reduced notary fees. |
| bridge_owed | number |
Median sale price and price per m² of recorded sales within a radius, overall, per property type, per year and per number of rooms (1, 2, 3, 4, 5+), over the last years of data.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| type | string | Property type as the source names it, e.g. "Appartement" or "Maison" in France. |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| years | integer | Years of sales counted back from the latest (default 5, at most 12). |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| radius_m | integer | Radius in metres (default 500, at most 3000). |
{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"type": {
"type": "string",
"description": "Property type as the source names it, e.g. \"Appartement\" or \"Maison\" in France."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"years": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Years of sales counted back from the latest (default 5, at most 12)."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"radius_m": {
"type": "integer",
"maximum": 3000,
"minimum": 50,
"description": "Radius in metres (default 500, at most 3000)."
}
}
}What a first-time buyer's PTZ may be, by the rules of offers issued from 1 April 2025 to 31 December 2027 (service-public.fr, checked 15 September 2026): the commune's zone ABC (place, address, lat/lng, or zone), the household's size (persons) and revenu fiscal de référence of year N-2 (income), the operation's cost (cost: price and works, TTC) and the home (kind: new flat in a collective building, new house, an old home with works of at least 25 % of the cost in zone B2 or C, or a social home sold to its tenant): whether the income is under the zone's ceiling, the income counted (the higher of the RFR and the cost divided by 9), the income tranche (1 to 4), the share financed, the cost ceiling, the PTZ's amount, its deferral and repayment (tranche 1: 10 years deferred then 15 years; 2: 8 then 12; 3: 2 then 13; 4: 10 years without deferral) and its monthly payments. The buyer must not have owned their main home in the last 2 years (exceptions: disability, disaster, a home made uninhabitable).
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| cost* | number | The operation's total cost, TTC: the price, and the works for an old home, in euros. |
| kind | string | new_flat (default: a new home in a building of more than 2 homes), new_house, old_with_works (zones B2 and C), social (a social home sold to its tenant). |
| zone | string | The zone ABC, instead of a place. |
France's communes in a département (departement, e.g. "93"), a région (region, INSEE code, e.g. "11" for Île-de-France) or within radius_km of a place, ranked by the median price per m² of their recorded sales of a type (DVF, the latest 24 months), cheapest first, dearest first, by how it moved against the 24 months before (falling, rising), or by gross rental yield: each with its sales, the change, ANIL's asking rent per m² for the type, the gross yield, its population and distance. max_price_per_m2, or budget with surface, keeps the communes where that home is affordable. Paris, Lyon and Marseille by arrondissement.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| type | string | "Appartement" or "Maison" (default every home). |
| limit | integer | Communes returned (default 20, at most 100). |
| order | string | price_asc (default), price_desc, falling (largest fall first), rising, yield (highest gross yield first). |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| budget | number |
The latest recorded sales within a radius (date, price, floor area, price per m², rooms, type, address, distance).
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| type | string | Property type as the source names it, e.g. "Appartement" or "Maison" in France. |
| limit | integer | Sales returned (default 20, at most 100). |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| radius_m | integer | Radius in metres (default 300, at most 2000). |
| max_price | integer | Maximum price. |
| min_surface | integer |
Every recorded sale at a street address (date, price, floor area, price per m², rooms, type), newest first, and a summary of its street with its latest other sales. Spellings are loose: "17 bis avenue de Saint-Mandé" finds "17 B AV DE ST MANDE". Without a number, the street's sales. When the street is not found, similar street names.
| Argument | Type | Description |
|---|---|---|
| type | string | Property type as the source names it, e.g. "Appartement" or "Maison" in France. |
| limit | integer | Sales returned (default 50, at most 200). |
| place | string | City or postcode the address is in, when the address does not say. |
| address* | string | Street address, with its postcode or city unless place gives it (e.g. "17 rue Gambey, 75011 Paris"). |
{
"type": "object",
"required": [
"address"
],
"properties": {
"type": {
"type": "string",
"description": "Property type as the source names it, e.g. \"Appartement\" or \"Maison\" in France."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Sales returned (default 50, at most 200)."
},
"place": {
"type": "string",
"description": "City or postcode the address is in, when the address does not say."
},
"address": {
"type": "string",
"description": "Street address, with its postcode or city unless place gives it (e.g. \"17 rue Gambey, 75011 Paris\")."
}
}
}The sale addresses around a place whose sun goes down (or comes up) into the sea, month by month, with how far the shore is and their latest sale. Worked out from OpenStreetMap for France's sale addresses within 300 m of the coast: the sun's direction must reach the shore past no building but the home's own, no wood, no dune but a narrow one at the door, no cliff upwards, then cross open water. A ground-level estimate: floors, trees and relief are not known. An address missing here may still see the sea from upstairs; say so rather than that it has no view. The same view shows as sea_view on the sales of sales_at_address, recent_sales and appraise_listing.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| sun | string | Only addresses that see the sun set (sunset) or rise (sunrise) into the sea; default any. |
| limit | integer | Addresses returned, nearest first (default 25, at most 100). |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
The streets around a place with their recorded sales (DVF) and median price per m² over the last 5 years, the most expensive first, or ranked by how their median moved: the latest 24 months against the 24 before (falling or rising first; only streets with at least 8 sales with a floor area in each period have a change). Each street with 5 sales or more has a page on the site (url).
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| limit | integer | Streets returned (default 25, at most 100). |
| order | string | price_desc (default), price_asc, falling (largest fall first), rising, or sales (the most sold first). |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| radius_m | integer | Radius in metres (default 1000, at most 3000). |
| lat | number | Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| sea | string | Its view of the sea, when known: the sun goes down into it, the sea is seen, or none; otherwise its address's view, then its description, decide. |
| type | string | "Appartement" or "Maison" (others compare with every sale). |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| price* | number | Asking price. |
| title | string | The listing's title. |
| energy | string | Its energy label (DPE), when the listing gives it; "none": unknown (with by_user, the words are then not read). |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| by_user | string | "new_build", "sea", "energy" or several joined by commas: what the user said themselves (it then beats the address's view and the words, and is shown as theirs). |
| surface | number | Floor area in m². |
| new_build | boolean | Whether the home is new (sold off-plan or never lived in), when the listing says; otherwise its title and description decide. |
| description | string | The listing's description: its words tell a new home, a view of the sea and the energy label. |
{
"type": "object",
"required": [
"price"
],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"sea": {
"enum": [
"sunset",
"sea",
"none"
],
"type": "string",
"description": "Its view of the sea, when known: the sun goes down into it, the sea is seen, or none; otherwise its address's view, then its description, decide."
},
"type": {
"type": "string",
"description": "\"Appartement\" or \"Maison\" (others compare with every sale)."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"price": {
"type": "number",
"description": "Asking price."
},
"title": {
"type": "string",
"description": "The listing's title."
},
"energy": {
"enum": [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"none"
],
"type": "string",
"description": "Its energy label (DPE), when the listing gives it; \"none\": unknown (with by_user, the words are then not read)."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"by_user": {
"type": "string",
"description": "\"new_build\", \"sea\", \"energy\" or several joined by commas: what the user said themselves (it then beats the address's view and the words, and is shown as theirs)."
},
"surface": {
"type": "number",
"description": "Floor area in m²."
},
"new_build": {
"type": "boolean",
"description": "Whether the home is new (sold off-plan or never lived in), when the listing says; otherwise its title and description decide."
},
"description": {
"type": "string",
"description": "The listing's description: its words tell a new home, a view of the sea and the energy label."
}
}
}| Latitude (WGS84). |
| lng | number | Longitude (WGS84). |
| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| commune | string | Commune name or INSEE code (e.g. "Carnac", "56034"), or a département code ("56"). |
{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"commune": {
"type": "string",
"description": "Commune name or INSEE code (e.g. \"Carnac\", \"56034\"), or a département code (\"56\")."
}
}
}| With bridge_value: what is still owed on that home. |
| bridge_rate | number | With bridge_value: the bank's rate for it (default the 15-year rate plus half a point). |
| ptz_tranche | integer | With ptz: its income tranche (1 to 4, from the ptz tool), for its deferral and repayment. |
| bridge_share | number | With bridge_value: the share of its value lent (default 0.7). |
| bridge_value | number | A bridge loan (prêt relais): the value of the home being sold, in euros. |
| down_payment | number | Cash put in (apport), in euros; default 0. |
| offered_rate | number | A rate a bank offered, nominal, excluding insurance (0.039 or 3.9 for 3.90 %); a TAEG is some 0.3 to 0.5 point above it. |
| bridge_months | integer | With bridge_value: months until the sale (default 12, at most 24). |
| debts_monthly | number | Monthly payments of the household's other loans (car, consumer), in euros; default 0. |
| offered_years | integer | The length of the offered loan in years (default 25). |
| income_monthly | number | The household's net monthly income (before income tax), in euros. |
| insurance_rate | number | Borrower insurance a year as a share of the loan (0.003 for 0.30 %). |
| purchase_costs | number | Purchase costs as a share of the price (0.08 for 8 %; 0 when the developer pays them), instead of the default. |
{
"type": "object",
"required": [],
"properties": {
"ptz": {
"type": "number",
"description": "A zero-rate loan (PTZ) beside the bank's, in euros (the ptz tool works it out)."
},
"loan": {
"type": "number",
"description": "The bank loan's amount, in euros, when known (instead of working it out from price)."
},
"price": {
"type": "number",
"description": "A price to finance, in euros."
},
"new_build": {
"type": "boolean",
"description": "A new home (VEFA): reduced notary fees."
},
"bridge_owed": {
"type": "number",
"description": "With bridge_value: what is still owed on that home."
},
"bridge_rate": {
"type": "number",
"description": "With bridge_value: the bank's rate for it (default the 15-year rate plus half a point)."
},
"ptz_tranche": {
"type": "integer",
"maximum": 4,
"minimum": 1,
"description": "With ptz: its income tranche (1 to 4, from the ptz tool), for its deferral and repayment."
},
"bridge_share": {
"type": "number",
"description": "With bridge_value: the share of its value lent (default 0.7)."
},
"bridge_value": {
"type": "number",
"description": "A bridge loan (prêt relais): the value of the home being sold, in euros."
},
"down_payment": {
"type": "number",
"description": "Cash put in (apport), in euros; default 0."
},
"offered_rate": {
"type": "number",
"description": "A rate a bank offered, nominal, excluding insurance (0.039 or 3.9 for 3.90 %); a TAEG is some 0.3 to 0.5 point above it."
},
"bridge_months": {
"type": "integer",
"description": "With bridge_value: months until the sale (default 12, at most 24)."
},
"debts_monthly": {
"type": "number",
"description": "Monthly payments of the household's other loans (car, consumer), in euros; default 0."
},
"offered_years": {
"type": "integer",
"description": "The length of the offered loan in years (default 25)."
},
"income_monthly": {
"type": "number",
"description": "The household's net monthly income (before income tax), in euros."
},
"insurance_rate": {
"type": "number",
"description": "Borrower insurance a year as a share of the loan (0.003 for 0.30 %)."
},
"purchase_costs": {
"type": "number",
"description": "Purchase costs as a share of the price (0.08 for 8 %; 0 when the developer pays them), instead of the default."
}
}
}| place | string | City, city start or postcode (e.g. "Carnac", "Paris 11e", "75011"); with address, the place it is in. Ignored when lat and lng are given. |
| income* | number | The household's revenu fiscal de référence of year N-2 (for an offer in 2026, the 2024 incomes), in euros. |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| persons | integer | Persons the home will house (default 1). |
{
"type": "object",
"required": [
"income",
"cost"
],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"cost": {
"type": "number",
"description": "The operation's total cost, TTC: the price, and the works for an old home, in euros."
},
"kind": {
"enum": [
"new_flat",
"new_house",
"old_with_works",
"social"
],
"type": "string",
"description": "new_flat (default: a new home in a building of more than 2 homes), new_house, old_with_works (zones B2 and C), social (a social home sold to its tenant)."
},
"zone": {
"enum": [
"Abis",
"A",
"B1",
"B2",
"C"
],
"type": "string",
"description": "The zone ABC, instead of a place."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"income": {
"type": "number",
"description": "The household's revenu fiscal de référence of year N-2 (for an offer in 2026, the 2024 incomes), in euros."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"persons": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Persons the home will house (default 1)."
}
}
}| With surface: the price that home may cost, purchase costs aside. |
| region | string | A région's INSEE code, e.g. "11" (Île-de-France), "84" (Auvergne-Rhône-Alpes), "93" (Provence-Alpes-Côte d'Azur). |
| address | string | Street address with its postcode or city (e.g. "17 rue Gambey, 75011 Paris"), located where its sales were recorded (else its street's). Ignored when lat and lng are given. |
| surface | number | With budget: the home's floor area in m². |
| min_sales | integer | The fewest sales a commune's median needs (default 10). |
| radius_km | number | Around place, address or lat/lng: the radius in km (default 15, at most 60). |
| departement | string | A département's code, e.g. "93" or "2A". |
| max_price_per_m2 | number | The dearest median price per m² kept. |
{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"type": {
"type": "string",
"description": "\"Appartement\" or \"Maison\" (default every home)."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Communes returned (default 20, at most 100)."
},
"order": {
"enum": [
"price_asc",
"price_desc",
"falling",
"rising",
"yield"
],
"type": "string",
"description": "price_asc (default), price_desc, falling (largest fall first), rising, yield (highest gross yield first)."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"budget": {
"type": "number",
"description": "With surface: the price that home may cost, purchase costs aside."
},
"region": {
"type": "string",
"description": "A région's INSEE code, e.g. \"11\" (Île-de-France), \"84\" (Auvergne-Rhône-Alpes), \"93\" (Provence-Alpes-Côte d'Azur)."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"surface": {
"type": "number",
"description": "With budget: the home's floor area in m²."
},
"min_sales": {
"type": "integer",
"description": "The fewest sales a commune's median needs (default 10)."
},
"radius_km": {
"type": "number",
"maximum": 60,
"minimum": 1,
"description": "Around place, address or lat/lng: the radius in km (default 15, at most 60)."
},
"departement": {
"type": "string",
"description": "A département's code, e.g. \"93\" or \"2A\"."
},
"max_price_per_m2": {
"type": "number",
"description": "The dearest median price per m² kept."
}
}
}| Minimum floor area in m². |
{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"type": {
"type": "string",
"description": "Property type as the source names it, e.g. \"Appartement\" or \"Maison\" in France."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Sales returned (default 20, at most 100)."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"radius_m": {
"type": "integer",
"maximum": 2000,
"minimum": 50,
"description": "Radius in metres (default 300, at most 2000)."
},
"max_price": {
"type": "integer",
"description": "Maximum price."
},
"min_surface": {
"type": "integer",
"description": "Minimum floor area in m²."
}
}
}| radius_m | integer | Radius in metres (default 1000, at most 5000). |
{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"sun": {
"enum": [
"any",
"sunset",
"sunrise"
],
"type": "string",
"description": "Only addresses that see the sun set (sunset) or rise (sunrise) into the sea; default any."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Addresses returned, nearest first (default 25, at most 100)."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"radius_m": {
"type": "integer",
"maximum": 5000,
"minimum": 50,
"description": "Radius in metres (default 1000, at most 5000)."
}
}
}{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84)."
},
"lng": {
"type": "number",
"description": "Longitude (WGS84)."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Streets returned (default 25, at most 100)."
},
"order": {
"enum": [
"price_desc",
"price_asc",
"falling",
"rising",
"sales"
],
"type": "string",
"description": "price_desc (default), price_asc, falling (largest fall first), rising, or sales (the most sold first)."
},
"place": {
"type": "string",
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given."
},
"address": {
"type": "string",
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given."
},
"radius_m": {
"type": "integer",
"maximum": 3000,
"minimum": 50,
"description": "Radius in metres (default 1000, at most 3000)."
}
}
}