# Spain Cadastre Scraper — Bulk Catastro Property Lookup (`xamto1987/spain-cadastre-bulk`) Actor

Bulk-enrich Spanish cadastral references or postal addresses with official Catastro data: land use, built surface, construction year, normalized address and rural crop breakdown. No ownership data. Enriquecimiento catastral masivo vía el servicio público OVC.

- **URL**: https://apify.com/xamto1987/spain-cadastre-bulk.md
- **Developed by:** [Santi Belloso Lopez](https://apify.com/xamto1987) (community)
- **Categories:** Real estate, Business, Automation
- **Stats:** 1 total users, 1 monthly users, 91.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Bulk-enrich Spanish properties with official **Catastro** data — the Spanish
cadastre — from a list of **referencias catastrales** (cadastral references) or
postal addresses. This **Catastro scraper** returns land use, built surface area
in m², construction year, normalized address and, for rural parcels, the
crop/land-use breakdown. Source: the public **OVC (Oficina Virtual del
Catastro)** service of the Dirección General del Catastro.

Enriquece **listas de referencias catastrales** (o de direcciones postales) con
la ficha oficial del **Catastro** español: **consulta catastral masiva** con
uso, **superficie construida y año de construcción**, dirección normalizada y,
en fincas rústicas, cultivo y aprovechamiento. **Sin titularidad**: el servicio
usado no publica nombre ni NIF del propietario.

### Catastro scraper: what this bulk property lookup does · Qué hace

Es un **enricher puro**: tú aportas la referencia catastral (o la dirección) y
recibes los atributos físicos del inmueble, uno por ítem. No es un buscador de
propiedades ni un listado del mercado: es la ficha oficial del Catastro en
JSON, a escala de miles de referencias por ejecución.

You provide the reference, you get the property's physical attributes back —
one item per reference, at a scale of thousands per run.

### Cadastral data extracted: fields per property · Qué datos extrae del Catastro

Un ítem por referencia catastral / one item per cadastral reference:

| Campo / Field | Qué es / What it is |
|---|---|
| `referenciaEntrada` / `referenciaCatastral` | Lo que escribiste vs. la referencia oficial de 20 posiciones · Input vs. official 20-char reference |
| `encontrado` | `true`/`false` — si la referencia se pudo resolver · Whether it resolved |
| `error` | Motivo descriptivo cuando `encontrado` es `false` (**nunca** un ítem vacío en silencio) · Descriptive error |
| `naturaleza` | `urbana` o `rustica` · Urban or rural |
| `usoPrincipal` | Residencial, Comercial, Oficinas, Industrial, Agrario… · Main land use |
| `superficieConstruidaM2` | Superficie construida, en m² · Built surface |
| `superficieSueloM2` | Superficie de suelo/parcela, en m² · Plot surface |
| `anoConstruccion` | Año de construcción (solo urbana) · Construction year (urban only) |
| `coeficienteParticipacion` | % de participación en la finca (solo urbana con división horizontal) · Ownership share |
| `divisionHorizontal` | `true` si el inmueble es una unidad dentro de un edificio con varios inmuebles registrales, `false` si es una parcela sin dividir, `null` si no aplica (rústica) |
| `direccion` / `direccionNormalizada` | Vía, número, planta, puerta, municipio, provincia, CP — o polígono/parcela/paraje en rústica · Normalized address |
| `construcciones` | Desglose de construcciones dentro del inmueble (vivienda, garaje, trastero…) con su superficie · Building breakdown |
| `subparcelasRusticas` | En rústica: cultivo/aprovechamiento y superficie de cada subparcela · Rural crop breakdown |
| `urlCartografia`, `urlSedeCatastro` | Enlaces oficiales a la cartografía y a la ficha pública · Official map and record links |

**Nunca se devuelve titularidad**: el endpoint de origen (`Consulta_DNPRC`,
"Datos No Protegidos") no incluye nombre ni NIF del propietario por diseño. Es
la fuente con menor riesgo legal de todo el lote (ver aviso legal más abajo).
**No ownership data is ever returned**: the endpoint used (`Consulta_DNPRC`,
"unprotected data") does not include the owner's name or tax ID by design.

### Catastro lookup input: references, addresses and errors · Parámetros de entrada

| Parámetro / Field | Tipo / Type | Por defecto / Default | Descripción / Notes |
|---|---|---|---|
| `modo` | `referencias` | `direccion` | `referencias` | Qué tipo de entrada se usa · Input type |
| `referencias` | lista de textos | `[]` | Referencias catastrales (modo `referencias`) · Cadastral references |
| `direcciones` | lista de objetos | `[]` | `{provincia, municipio, via, numero, tipoVia}` (modo `direccion`) · Address objects |
| `maxItems` | entero | `500` | Tope de ítems (incluidos los de error); el actor para limpiamente al alcanzarlo · Hard cap |

#### Modos de entrada · Input modes

- **`referencias`** (modo principal): lista de referencias catastrales de 20
  posiciones (p. ej. `6372226VK4767A0001GP`). Una petición por referencia.
- **`direccion`**: lista de direcciones `{provincia, municipio, via, numero,
  tipoVia}`. El actor resuelve primero qué referencia(s) hay en esa dirección
  (una si es una parcela sin dividir, varias si el edificio tiene **división
  horizontal** — p. ej. un portal con 18 pisos y locales) y luego enriquece cada
  una igual que en modo `referencias`. Cuesta una petición extra por dirección.

```json
{
  "modo": "referencias",
  "referencias": ["6372226VK4767A0001GP", "45203A001000010000LQ"],
  "maxItems": 500
}
```

```json
{
  "modo": "direccion",
  "direcciones": [
    { "provincia": "MADRID", "municipio": "MADRID", "tipoVia": "CL", "via": "GRAN VIA", "numero": "1" }
  ],
  "maxItems": 500
}
```

#### Referencias inválidas o no encontradas · Invalid or not-found references

El servicio del Catastro devuelve **HTTP 200 incluso en error** (verificado en
fase 0 y reconfirmado): el estado real va en un campo interno del JSON, no en el
código HTTP. Este actor comprueba siempre ese campo, nunca el código HTTP, y
**cada referencia que falla genera un ítem propio** con `encontrado: false` y un
`error` descriptivo tomado directamente del mensaje oficial del Catastro (p. ej.
*"LA REFERENCIA CATASTRAL NO ESTÁ CORRECTAMENTE FORMADA"* o *"EL MUNICIPIO NO
EXISTE."*). Si subes 10.000 referencias, sabrás exactamente cuáles fallaron y
por qué — nunca desaparecen en silencio.

Upload 10,000 references and you will know exactly which ones failed and why —
nothing is silently dropped.

### Catastro output example: real items from a real run · Ejemplo de output real

Dos ítems reales del dataset, copiados tal cual de una ejecución en modo
`referencias` (registros 1 y 2 de 24): uno **urbano** y uno **rústico**. Two
real dataset items, copied verbatim from a live run — one urban, one rural:

```json
{
  "tipoRegistro": "inmueble",
  "referenciaEntrada": "6372226VK4767A0001GP",
  "referenciaCatastral": "6372226VK4767A0001GP",
  "encontrado": true,
  "error": null,
  "naturaleza": "urbana",
  "tipoFinca": "Parcela construida sin división horizontal",
  "divisionHorizontal": false,
  "usoPrincipal": "Residencial",
  "superficieConstruidaM2": 260,
  "superficieSueloM2": 154,
  "coeficienteParticipacion": 100,
  "anoConstruccion": 1998,
  "direccion": {
    "via": "CL RIOBAMBA",
    "numero": "50",
    "planta": "OD",
    "puerta": "OS",
    "codigoPostal": "28027",
    "municipio": "MADRID",
    "provincia": "MADRID",
    "poligono": null,
    "parcela": null,
    "paraje": null
  },
  "direccionNormalizada": "CL RIOBAMBA 50 28027 MADRID (MADRID)",
  "construcciones": [
    { "uso": "APARCAMIENTO", "tipo": "ANEJOS DE VIVIENDA Y LOCALES EN ESTRUCTURA", "superficieM2": 3, "planta": "-1", "puerta": "01" },
    { "uso": "APARCAMIENTO", "tipo": "ANEJOS DE VIVIENDA Y LOCALES EN ESTRUCTURA", "superficieM2": 69, "planta": "-1", "puerta": "02" },
    { "uso": "ALMACEN", "tipo": "ANEJOS DE VIVIENDA Y LOCALES EN ESTRUCTURA", "superficieM2": 17, "planta": "-1", "puerta": "03" },
    { "uso": "VIVIENDA", "tipo": "VIVIENDA UNIFAMILIAR", "superficieM2": 71, "planta": "00", "puerta": "01" },
    { "uso": "PORCHE 100%", "tipo": "ANEJOS DE VIVIENDA Y LOCALES EN ESTRUCTURA", "superficieM2": 2, "planta": "00", "puerta": "02" },
    { "uso": "VIVIENDA", "tipo": "VIVIENDA UNIFAMILIAR", "superficieM2": 75, "planta": "01", "puerta": "01" },
    { "uso": "ALMACEN", "tipo": "ANEJOS DE VIVIENDA Y LOCALES EN ESTRUCTURA", "superficieM2": 23, "planta": "02", "puerta": "01" }
  ],
  "subparcelasRusticas": [],
  "urlCartografia": "https://www1.sedecatastro.gob.es/Cartografia/mapa.aspx?del=28&mun=900&refcat=6372226VK4767A",
  "urlSedeCatastro": "https://www1.sedecatastro.gob.es/CYCBienInmueble/OVCConCiud.aspx?RefC=6372226VK4767A0001GP",
  "fuente": "Catastro - Sede Electronica, Direccion General del Catastro (servicio OVC, datos no protegidos)",
  "extraidoEn": "2026-08-23T15:50:16.708Z"
}
```

```json
{
  "tipoRegistro": "inmueble",
  "referenciaEntrada": "45203A001000010000LQ",
  "referenciaCatastral": "45203A001000010000LQ",
  "encontrado": true,
  "error": null,
  "naturaleza": "rustica",
  "tipoFinca": null,
  "divisionHorizontal": null,
  "usoPrincipal": "Agrario",
  "superficieConstruidaM2": 0,
  "superficieSueloM2": 101654,
  "coeficienteParticipacion": null,
  "anoConstruccion": null,
  "direccion": {
    "via": null,
    "numero": null,
    "planta": null,
    "puerta": null,
    "codigoPostal": null,
    "municipio": "YEPES",
    "provincia": "TOLEDO",
    "poligono": "1",
    "parcela": "1",
    "paraje": "CUARTILLEJO"
  },
  "direccionNormalizada": "Polígono 1 Parcela 1 CUARTILLEJO. YEPES (TOLEDO)",
  "construcciones": [],
  "subparcelasRusticas": [
    { "id": "0", "cultivo": "LABOR O LABRADÍO SECANO", "codigoCultivo": "C-", "intensidadProductiva": "02", "superficieM2": 101654 }
  ],
  "urlCartografia": "https://www1.sedecatastro.gob.es/Cartografia/mapa.aspx?del=45&mun=203&refcat=45203A00100001",
  "urlSedeCatastro": "https://www1.sedecatastro.gob.es/CYCBienInmueble/OVCConCiud.aspx?RefC=45203A001000010000LQ",
  "fuente": "Catastro - Sede Electronica, Direccion General del Catastro (servicio OVC, datos no protegidos)",
  "extraidoEn": "2026-08-23T15:50:17.429Z"
}
```

### Spain property data use cases · Casos de uso

#### Proptech y valoración · Real estate data Spain

Enriquecer una cartera de inmuebles con superficie construida, año de
construcción y uso — los tres atributos que más pesan en una valoración
automatizada.

#### Due diligence inmobiliaria · Property due diligence

Verificar contra la fuente oficial la superficie y el uso declarados de cada
finca de una operación, con enlace directo a la ficha del Catastro.

#### Agro y fincas rústicas · Rural land data

Cultivo, aprovechamiento e intensidad productiva por subparcela, con la
superficie de cada una.

#### Enriquecimiento de bases de datos · Bulk address enrichment

Convertir **direcciones postales** en referencias catastrales y ficha completa,
resolviendo por el camino los edificios con división horizontal.

### Catastro coverage, limits and run time · Cobertura, limitaciones y cuánto tarda

- Cubre el **territorio de régimen común** (~78 millones de inmuebles). **No
  cubre País Vasco ni Navarra**, que tienen catastro foral propio y no responden
  por este servicio. Does not cover the Basque Country or Navarre.
- **No hay coordenadas geográficas** en esta versión: se investigó el servicio
  hermano de coordenadas por referencia catastral (`OVCCoordenadas.svc`,
  `Consulta_CPMRC`) y devuelve de forma consistente una página de error HTML con
  HTTP 200 para las combinaciones de parámetros probadas — no es una fuente
  fiable ni verificada, y añadirla duplicaría el número de peticiones por ítem.
  Si en el futuro se localiza la forma correcta de consultarlo, es candidato
  directo para v0.2. Sí se incluye `urlCartografia`, el enlace oficial al visor
  de mapas del Catastro para esa parcela.
- El campo `divisionHorizontal` se deriva del texto oficial `finca.ltp`
  ("Parcela con varios inmuebles (division horizontal)" vs. "Parcela construida
  sin división horizontal"); en fincas rústicas ese campo no existe en el origen
  y el valor queda en `null`.
- El actor respeta un máximo de **~1 petición por segundo** contra el servicio
  oficial: 1 petición por referencia en modo `referencias`, o 1 petición extra
  por dirección más 1 por cada referencia que resuelva en modo `direccion`.
  Rate-limited to **~1 request/second**, with exponential-backoff retries.

### Related Spanish public-data Actors · Actores relacionados

| Actor | Qué extrae / What it scrapes |
|---|---|
| [spain-borme-companies](https://apify.com/xamto1987/spain-borme-companies) | BORME: constituciones con domicilio social, nombramientos y concursos |
| [spain-boe-monitor](https://apify.com/xamto1987/spain-boe-monitor) | BOE: monitor incremental por palabra clave, sección y NIF |
| [spain-grants-bdns](https://apify.com/xamto1987/spain-grants-bdns) | BDNS: convocatorias y concesiones de subvenciones públicas |
| [spain-de-minimis-aid](https://apify.com/xamto1987/spain-de-minimis-aid) | BDNS: ayudas de minimis y ayudas de Estado por NIF |
| [spain-grants-registries](https://apify.com/xamto1987/spain-grants-registries) | BDNS: grandes beneficiarios, sanciones por fraude y partidos políticos |
| [spain-bocm-gazette](https://apify.com/xamto1987/spain-bocm-gazette) | BOCM: boletín oficial de la Comunidad de Madrid, en modo delta |
| [spain-boja-gazette](https://apify.com/xamto1987/spain-boja-gazette) | BOJA: boletín oficial de la Junta de Andalucía, en modo delta |
| [catalonia-tenders](https://apify.com/xamto1987/catalonia-tenders) | Licitaciones y adjudicaciones públicas de Cataluña (PSCP) |
| [euskadi-tenders](https://apify.com/xamto1987/euskadi-tenders) | Anuncios de contratación pública del País Vasco |
| [aragon-tenders](https://apify.com/xamto1987/aragon-tenders) | Registro de contratos públicos de Aragón (CKAN) |

### Is it legal? Catastro data, ownership and GDPR · Fuente y aviso legal

- **Fuente oficial**: servicio OVC (Oficina Virtual del Catastro) de la
  Dirección General del Catastro, Ministerio de Hacienda —
  `https://ovc.catastro.meh.es/`.
- Servicio anónimo, sin login, sin cookies, sin token. `robots.txt` no existe en
  este host (devuelve una página HTML genérica, sin `Disallow` alguno).
- El endpoint usado (`Consulta_DNPRC`, "Datos No Protegidos") **no incluye
  titularidad**: es información catastral no protegida, de consulta libre y
  gratuita, reutilizable conforme a la **Ley 37/2007** de reutilización de la
  información del sector público. La información protegida (titularidad, valor
  catastral) requiere autenticación y este actor **no la consulta ni la
  ofrece**. Reuse is subject to Spanish law on the re-use of
  public sector information (Law 37/2007).
- ⚠️ Aunque el servicio no devuelve nombre ni NIF, una referencia catastral
  puede llegar a ser un **dato personal indirecto** si se asocia a una persona
  identificada por otra vía. Este actor es un **enricher puro**: tú aportas la
  referencia y recibes atributos físicos del inmueble. No cruces el resultado
  con datos de personas sin una base legal (**RGPD** / **LOPDGDD**) para
  hacerlo.
- Este actor **solo lee datos públicos**, con un `User-Agent` identificado y un
  ritmo de ~1 petición/segundo, sin saltarse ninguna medida técnica. No es un
  producto oficial ni está afiliado, respaldado ni verificado por la Dirección
  General del Catastro. Not an official product and not affiliated with or
  endorsed by it.
- Los datos son dinámicos (altas y modificaciones catastrales continuas): para
  decisiones con efectos jurídicos, consulta siempre la ficha oficial
  (`urlSedeCatastro`). For legally binding decisions, always check the official
  record.

### Catastro scraper FAQ · Preguntas frecuentes

#### ¿Puedo consultar miles de referencias catastrales de golpe?

Sí: es el caso de uso principal. Sube la lista en `referencias` y ajusta
`maxItems`. El ritmo es de ~1 petición por segundo y por referencia.

#### ¿Devuelve el propietario o el valor catastral? · Does it return the owner?

No, y no es una limitación del actor: el endpoint de datos no protegidos no
incluye titularidad ni valor catastral por diseño. Esa información requiere
autenticación y este actor no la consulta.

#### ¿Puedo buscar por dirección en vez de por referencia?

Sí, con `modo: "direccion"`. Si el edificio tiene división horizontal, la
dirección devuelve varias referencias y el actor las enriquece todas.

#### ¿Qué pasa con una referencia mal formada o inexistente?

Genera su propio ítem con `encontrado: false` y el mensaje de error oficial del
Catastro. Nunca se descarta en silencio.

#### ¿Cubre el País Vasco y Navarra? · Does it cover the Basque Country?

No: ambos tienen catastro foral propio y no responden por este servicio. El
resto del territorio de régimen común sí, ~78 millones de inmuebles.

#### ¿Trae coordenadas geográficas? · Are coordinates included?

No en esta versión, por la razón explicada en las limitaciones. Sí se incluye
`urlCartografia`, el enlace al visor de mapas oficial de esa parcela.

#### ¿Cuánto cuesta ejecutarlo? · How much does it cost?

El modelo de precio aparece en la pestaña **Pricing** de esta misma ficha del
Store. En consumo, el modo `direccion` cuesta una petición más por dirección
que el modo `referencias`.

### Support and feedback · Soporte y sugerencias

¿Necesitas otro campo del Catastro, otro modo de entrada o una integración a
medida? Abre un *issue* desde la pestaña **Issues** de esta ficha.

Need another Catastro field, another input mode or a custom integration? Open
an issue from the **Issues** tab.

**Palabras clave / Keywords**: Catastro scraper, Spanish cadastre API,
referencia catastral consulta, Spain property data API, consulta catastral
masiva, superficie construida y año de construcción, real estate data Spain,
cadastral reference lookup, Catastro OVC, datos catastrales por dirección,
property enrichment Spain, fincas rústicas cultivo, Sede Electrónica del
Catastro, proptech, due diligence inmobiliaria.

# Actor input Schema

## `modo` (type: `string`):

`referencias` = enriquecer una lista de referencias catastrales (modo principal). `direccion` = resolver primero la(s) referencia(s) catastral(es) de una direccion postal (provincia + municipio + via + numero) y despues enriquecerlas igual que en modo `referencias`. / `referencias` = enrich a list of cadastral references (main mode). `direccion` = resolve the reference(s) at a postal address first.

## `referencias` (type: `array`):

Lista de referencias catastrales (20 caracteres, p.ej. `6372226VK4767A0001GP`). Obligatorio en modo `referencias`. Una referencia por linea; mayusculas/minusculas y espacios se normalizan solos. / One cadastral reference per line. Required in `referencias` mode.

## `direcciones` (type: `array`):

Solo modo `direccion`. Lista de objetos `{provincia, municipio, via, numero, tipoVia}`. `tipoVia` es la sigla del tipo de via (CL=calle, AV=avenida, PS=paseo, PZ/PL=plaza, GV=gran via...; por defecto CL si se omite). Cada direccion puede resolver mas de una referencia catastral si el edificio tiene division horizontal (varias unidades registrales). / Only `direccion` mode. One address object per entry; may resolve to several references when the building has horizontal division.

## `maxItems` (type: `integer`):

Numero maximo de items (inmuebles, incluyendo los que dan error) a guardar en el dataset. El actor para limpiamente al alcanzarlo. Respeta ~1 peticion/segundo con el servicio oficial. / Hard cap on dataset items (errors included).

## Actor input object example

```json
{
  "modo": "referencias",
  "referencias": [
    "6372226VK4767A0001GP",
    "45203A001000010000LQ"
  ],
  "direcciones": [
    {
      "provincia": "MADRID",
      "municipio": "MADRID",
      "tipoVia": "CL",
      "via": "GRAN VIA",
      "numero": "1"
    }
  ],
  "maxItems": 500
}
```

# Actor output Schema

## `results` (type: `string`):

Fichas catastrales normalizadas (una por referencia, con errores marcados). JSON, CSV o Excel.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "referencias": [
        "6372226VK4767A0001GP",
        "45203A001000010000LQ"
    ],
    "direcciones": [
        {
            "provincia": "MADRID",
            "municipio": "MADRID",
            "tipoVia": "CL",
            "via": "GRAN VIA",
            "numero": "1"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("xamto1987/spain-cadastre-bulk").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "referencias": [
        "6372226VK4767A0001GP",
        "45203A001000010000LQ",
    ],
    "direcciones": [{
            "provincia": "MADRID",
            "municipio": "MADRID",
            "tipoVia": "CL",
            "via": "GRAN VIA",
            "numero": "1",
        }],
}

# Run the Actor and wait for it to finish
run = client.actor("xamto1987/spain-cadastre-bulk").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "referencias": [
    "6372226VK4767A0001GP",
    "45203A001000010000LQ"
  ],
  "direcciones": [
    {
      "provincia": "MADRID",
      "municipio": "MADRID",
      "tipoVia": "CL",
      "via": "GRAN VIA",
      "numero": "1"
    }
  ]
}' |
apify call xamto1987/spain-cadastre-bulk --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,xamto1987/spain-cadastre-bulk"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/R1oV5V9gB8MweOeVB/builds/5gBE4M3xn3u6L3DLQ/openapi.json
