catastro.minhap.es APIcatastro.minhap.es ↗
Access Spanish cadastral property data via 10 endpoints covering provinces, municipalities, streets, parcels, coordinates, and cadastral references from catastro.minhap.es.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/1318ad15-a565-4322-835b-10630ef5af75/get_provinces' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns a list of all 48 Spanish provinces with their INE codes and names.
No input parameters required.
{
"type": "object",
"fields": {
"consulta_provinciero": "object containing provinciero with array of provinces (cpine, np)"
},
"sample": {
"data": {
"consulta_provinciero": {
"control": {
"cuprov": "48"
},
"provinciero": {
"prov": [
{
"np": "A CORUÑA",
"cpine": "15"
},
{
"np": "ALACANT",
"cpine": "03"
},
{
"np": "MADRID",
"cpine": "28"
}
]
}
}
},
"status": "success"
}
}About the catastro.minhap.es API
The Catastro Spain API exposes 10 endpoints covering the full hierarchy of Spanish cadastral data — from provinces and municipalities down to individual property records. Use get_cadastral_data_by_reference to retrieve construction details and plot data for a specific 20-character cadastral reference, or get_cadastral_reference_by_coordinates to resolve a longitude/latitude pair to a parcel identity. All 48 Spanish provinces and their municipalities are addressable.
Geographic hierarchy
get_provinces returns all 48 Spanish provinces with their INE codes (cpine) and names. From there, get_municipalities accepts a provincia name and an optional municipio filter to narrow results, returning each municipality's name (nm), locat, and loine fields. get_streets then drills into a municipality using tipo_via (e.g. CL for calle, AV for avenida, PZ for plaza) and an optional nom_via name fragment, returning street records with tv (type) and nv (name) inside each dir object. get_street_numbers completes the address resolution by returning cadastral reference parts (pc) for a specific house number on a named street.
Property lookup
Three endpoints return full unprotected cadastral records (bico) depending on what identifier you have. get_cadastral_data_by_address accepts street address components — numero, nom_via, and optional planta, puerta, escalera, bloque — and may return multiple records for multi-unit buildings via the rcdnp array. get_cadastral_data_by_reference takes the full 20-character refcat and returns property identification (bi), plot data (finca), and construction details (lcons). get_cadastral_data_by_parcel targets rural land using poligono and parcela numbers within a named province and municipality, returning subparcel data in lspr.
Coordinate lookups
get_cadastral_reference_by_coordinates accepts coor_x (longitude) and coor_y (latitude) with an optional srs parameter (EPSG:4258 or EPSG:4326) and returns the parcel's cadastral reference parts (pc), geographic position (geo), and a human-readable address description (ldt). The reverse — get_coordinates_by_cadastral_reference — takes a 14-character refcat and returns the centroid coordinates (xcen, ycen) of the parcel. get_nearby_cadastral_references returns a list of parcels close to a given coordinate pair, including distances (dis) for each result in the lpcd array.
Data scope and limitations
All data reflects the public, unprotected layer of the Spanish Catastro. Protected data — such as ownership names, tax valuations, and certain protected-use classifications — is not returned by any endpoint. The get_cadastral_data_by_parcel endpoint returns an upstream_error when the polygon/parcel combination does not exist in the registry. Coordinate lookups similarly return an error when no parcel exists at the specified location.
- Resolve a Spanish street address to its 20-character cadastral reference for property due diligence.
- Geocode a cadastral reference to centroid coordinates using
get_coordinates_by_cadastral_referencefor map plotting. - Build a municipality browser that lists all streets in a town using
get_streetswithtipo_viafilters. - Identify all cadastral units in a multi-unit building via the
rcdnparray fromget_cadastral_data_by_address. - Find nearby parcels around a GPS point using
get_nearby_cadastral_referenceswith distance values fromdis. - Validate rural land parcel identifiers by querying
get_cadastral_data_by_parcelwith polygon and parcel numbers. - Enumerate all municipalities in a Spanish province by looping through results from
get_municipalitiesfiltered byprovincia.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does catastro.minhap.es have an official developer API?+
What does `get_cadastral_data_by_reference` return compared to `get_cadastral_data_by_address`?+
get_cadastral_data_by_reference takes the full 20-character refcat and returns structured bico data including property identification (bi), plot data (finca), and construction records (lcons) with counts in cucons and cucul. get_cadastral_data_by_address resolves from street components and may return multiple records (one per unit) in the rcdnp array when the building has several cadastral units — each with its own rc reference.Does the API return property ownership names or tax valuations?+
Does the coordinate lookup support arbitrary projection systems beyond EPSG:4258 and EPSG:4326?+
srs parameter on get_cadastral_reference_by_coordinates, get_coordinates_by_cadastral_reference, and get_nearby_cadastral_references accepts EPSG:4258 and EPSG:4326 only. Other CRS codes such as UTM projections are not supported by these endpoints. You can fork the API on Parse and revise it to add coordinate transformation logic for other projections before or after the lookup.How specific can the street search be in `get_streets`?+
get_streets requires provincia and municipio in uppercase and accepts optional tipo_via (e.g. CL, AV, PZ, PJ) and nom_via as a name fragment. It returns a callejero object with a calle array, each entry containing a dir object with tv (type) and nv (name), plus a dirine field. The control.cuca field tells you how many streets matched. There is no pagination parameter — large municipalities may return many records in a single response.