Data API reference
The Alpine Market public Data API (v1) exposes property facts, comparables, and the recorded transaction registry, read-only, over HTTPS. Every response is wrapped in the same envelope so you always know how fresh, confident, and licensed a value is, not just what it is.
The envelope
Every endpoint below returns this shape. data holds the payload (an object, an array, or null when nothing was found or the API is unavailable). The metadata fields sit alongside it.
{
"data": /* endpoint-specific payload, or null */,
"as_of": "2026-07-09T08:00:00.000Z", // ISO timestamp the data was current as of
"source_summary": "Plain-English data source",
"confidence": 0.82, // 0-1, or null if not applicable
"licence": "Terms governing reuse of this response",
"visibility": "public", // the tier this response was filtered to
"data_quality_notes": null // caveats, or null
}Licence and confidence model
Every material fact in Alpine Market carries a source, a confidence score, and a licence, all the way down to the individual field (see property_facts in our data model). The public API surfaces a response-level roll-up of that provenance today; per-field provenance is on the roadmap for professional-tier API access. A missing or null confidence means the value is a directly-observed fact rather than a modeled estimate, not that it is untrustworthy.
What is not in this API
Owner and transaction-party identity (buyer, seller, notary, broker names) is excluded from every public endpoint, by construction: the routes below never query the parties or transaction_parties tables. That data is available to verified professional accounts only, through the Alpine Professional terminal, not this API.
Access and rate limits
All endpoints are read-only GET requests and require no authentication during this preview. Browsing APIs share limits of 240 requests per minute and 3,000 per hour per client network address; past that the API answers 429 with a Retry-After header, in the same response envelope as every other endpoint. These limits hold across server instances and include listing search, maps and address lookup. An unavailable quota service returns 503 with Retry-After. Pages and page sizes must be integers from 1 to 100; narrow your filters for deeper results. Bulk export and commercial licensing are handled through Alpine Professional.
Endpoints
/api/v1/search/addressSearch properties by free-text address. Ranked by match exactness then data completeness.
Query params: q (required): search text matched against street, postal code, city.
Example request
GET /api/v1/search/address?q=Bahnhofstrasse%20ZurichExample response
{
"data": [
{
"property_id": "6a1c...e2f0",
"address": "Bahnhofstrasse 1, 8001 Zurich",
"canton": "ZH",
"property_type": "office"
}
],
"as_of": "2026-07-09T08:00:00.000Z",
"source_summary": "Alpine Market property index: aggregated Swiss listing portals plus enrichment from official registries.",
"confidence": null,
"licence": "Alpine Market Public Data API v1: evaluation and non-commercial use...",
"visibility": "public",
"data_quality_notes": null
}/api/v1/properties/{id}Core physical and cadastral facts for one property: address, geo, rooms, areas, year built, energy label, EGID/EDID/EWID. Public fields only.
Example request
GET /api/v1/properties/6a1c1e2f-0000-0000-0000-000000000000Example response
{
"data": {
"property_id": "6a1c...e2f0",
"category": "residential",
"property_type": "apartment",
"city": "Zurich",
"canton": "ZH",
"postal_code": "8001",
"rooms": 3.5,
"living_area_sqm": 82,
"year_built": 1998,
"data_completeness_score": 74,
"...": "..."
},
"as_of": "2026-07-09T08:00:00.000Z",
"source_summary": "Alpine Market property index (Swiss listing portals, enriched from official registries).",
"confidence": 0.74,
"licence": "Alpine Market Public Data API v1: evaluation and non-commercial use...",
"visibility": "public",
"data_quality_notes": null
}/api/v1/properties/{id}/transactionsRecorded sale/transfer history for the property: registered prices and dates. Never includes buyer, seller, notary, or broker names.
Example request
GET /api/v1/properties/6a1c1e2f-0000-0000-0000-000000000000/transactionsExample response
{
"data": [
{
"transaction_id": "9f2b...",
"transaction_type": "open_market",
"registration_date": "2021-03-15",
"gross_consideration": 1250000,
"currency": "CHF",
"normalized_chf": 1250000,
"arm_length": "arm_length",
"status": "active",
"confidence": 0.9,
"object_role": "primary",
"allocated_price": 1250000,
"allocation_method": "source_provided",
"source_document_url": null
}
],
"as_of": "2026-07-09T08:00:00.000Z",
"source_summary": "Alpine Market transaction registry (recorded transfers, where available).",
"confidence": 0.9,
"licence": "Alpine Market Public Data API v1: evaluation and non-commercial use...",
"visibility": "public",
"data_quality_notes": null
}/api/v1/properties/{id}/valuationLatest Alpine Estimate for the property: the AVM output, method, and confidence band.
Example request
GET /api/v1/properties/6a1c1e2f-0000-0000-0000-000000000000/valuationExample response
{
"data": {
"channel": "sale",
"estimate": 1180000,
"low": 1080000,
"high": 1280000,
"confidence": 0.72,
"method": "comps_v0",
"comp_count": 6,
"model_version": null,
"as_of": "2026-07-01T00:00:00.000Z"
},
"as_of": "2026-07-01T00:00:00.000Z",
"source_summary": "Alpine Estimate (comparable-sales AVM).",
"confidence": 0.72,
"licence": "Alpine Market Public Data API v1: evaluation and non-commercial use...",
"visibility": "public",
"data_quality_notes": null
}/api/v1/properties/{id}/comparablesUp to 10 comparable active listings: same canton, same property type, rooms within +/-1.
Example request
GET /api/v1/properties/6a1c1e2f-0000-0000-0000-000000000000/comparablesExample response
{
"data": [
{
"property_id": "b0e4...",
"listing_id": "22f1...",
"slug": "apartment-8001-zurich-b0e4",
"channel": "sale",
"city": "Zurich",
"canton": "ZH",
"property_type": "apartment",
"rooms": 3.5,
"living_area_sqm": 78,
"price": 1150000,
"currency": "CHF",
"price_unit": "total"
}
],
"as_of": "2026-07-09T08:00:00.000Z",
"source_summary": "Alpine Market active listing index, matched by canton, property type, and rooms band (+/-1).",
"confidence": null,
"licence": "Alpine Market Public Data API v1: evaluation and non-commercial use...",
"visibility": "public",
"data_quality_notes": null
}/api/v1/market-statsWeekly median ASKING price per square metre of active listings, by canton and Switzerland-wide, with the number of priced listings behind each median. Asking prices, not sale prices. Add format=csv for a CSV download.
Query params: format (optional): csv.
Example request
GET /api/v1/market-statsExample response
{
"data": {
"capturedAt": "2026-09-06T07:00:00.000Z",
"national": { "sale": { "median": 10500, "sampleSize": 4000, "published": true }, "rent": { "median": 30, "sampleSize": 2800, "published": true } },
"cantons": [
{ "canton": "ZH", "label": "Zurich", "sale": { "median": 12000, "sampleSize": 4600, "published": true }, "rent": { "median": 32, "sampleSize": 2823, "published": true } }
],
"minSample": 30,
"measure": "median_asking_price_chf_per_sqm"
},
"as_of": "2026-09-06T07:00:00.000Z",
"source_summary": "Alpine Market weekly market snapshot: median asking price per square metre of active listings by canton, with sample sizes. Asking prices, not sale prices.",
"confidence": null,
"licence": "Alpine Market Public Data API v1: evaluation and non-commercial use...",
"visibility": "public",
"data_quality_notes": "A median is published only from 30 or more priced listings; sample_size is always carried."
}/api/v1/transactions/communesRecorded property sales by commune over the last twelve months: sales count and median RECORDED sale price in CHF (market-type transfers only, published from 30 priced sales). Recorded sale prices, not asking prices. Geneva only today. Add format=csv for a CSV download.
Query params: jurisdiction (optional, default CH-GE): the only supported value today. format (optional): csv.
Example request
GET /api/v1/transactions/communes?jurisdiction=CH-GEExample response
{
"data": {
"rows": [
{ "commune": "Vernier", "salesCount": 276, "medianPrice": 1250000, "medianSampleSize": 223 },
{ "commune": "Troinex", "salesCount": 34, "medianPrice": null, "medianSampleSize": 26 }
],
"periodFrom": "2025-09-10",
"periodTo": "2026-09-10",
"sources": ["Feuille d'avis officielle"],
"minSample": 30,
"measure": "median_recorded_sale_price_chf",
"failed": []
},
"as_of": "2026-09-10",
"source_summary": "Alpine Market transaction registry, Feuille d'avis officielle du canton de Geneve: recorded sale prices by commune, twelve months. Recorded sale prices, not asking prices.",
"confidence": null,
"licence": "Alpine Market Public Data API v1: evaluation and non-commercial use...",
"visibility": "public",
"data_quality_notes": "Period 2025-09-10 to 2026-09-10. A median is published only from 30 priced market-type sales; counts are always published. No party is named."
}Need more than the public API?
Owner lookups, transaction-party data, bulk export, and higher rate limits are available to verified professionals.
Explore Alpine Professional