# Madrid BOCM Scraper — Official Gazette Monitor & Alerts (`xamto1987/spain-bocm-gazette`) Actor

Scrape the official gazette of the Region of Madrid (BOCM) by keyword and section. Stateful delta mode: every run returns only what is new since the last one, ideal for daily alerts. Monitor incremental del Boletín Oficial de la Comunidad de Madrid por palabra clave.

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

## Pricing

from $4.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

**BOCM scraper** and daily monitor: scrape the **BOCM (Boletín Oficial de la Comunidad de Madrid)**,
the **Madrid official gazette**, by keyword and section — and get **only what is new** since the
previous run. Not a bulk dump: an incremental, stateful monitor built for a daily Apify Schedule.

Vigila el **Boletín Oficial de la Comunidad de Madrid (BOCM)** por **palabra clave** y **sección**, y
en cada ejecución entrega **solo lo publicado desde la ejecución anterior**. Ideal para **alertas
BOCM** diarias sobre subvenciones, licitaciones, procesos selectivos o anuncios de tu ayuntamiento.

> Actor hermano con el **mismo esquema de salida**:
> [`spain-boja-gazette`](https://apify.com/xamto1987/spain-boja-gazette) (Andalucía). Puedes volcar
> los dos al mismo dataset y tratarlos como una sola tabla. · Sister Actor with the **same output
> schema**: `spain-boja-gazette`.

### Madrid BOCM Scraper: why a monitor, not a dump / Por qué un monitor y no un volcado

Los boletines autonómicos españoles no tenían **ningún** actor en el Store, y los que existen sobre
boletines estatales son volcados: no recuerdan qué te enseñaron ayer. Este sí. Guarda en un Key-Value
Store **con nombre** (los que persisten entre ejecuciones en la plataforma) la fecha hasta la que ha
procesado y los identificadores ya entregados, así que puedes dejarlo en un Schedule diario y solo
verás **disposiciones que no habías visto**.

Spanish regional gazettes had **no** Actor on the Store at all, and the existing national-gazette
Actors are bulk dumps that don't remember what they showed you yesterday. This one does: it stores
the last fully processed date and the identifiers already delivered in a **named** Key-Value Store
(the only kind that survives between runs on the platform), so a daily Schedule shows you **only
entries you haven't seen**.

### BOCM gazette data extracted / Qué datos extrae: disposiciones del boletín

Un ítem por disposición del BOCM que coincide con tus filtros / one item per matching BOCM entry:

| Campo / Field | Qué es / What it is |
|---|---|
| `identificador` | Identificador oficial (`BOCM-20260822-1`) |
| `boletin` / `boletinNombre` | `"BOCM"` / `"Boletín Oficial de la Comunidad de Madrid"` |
| `comunidadAutonoma` | `"Comunidad de Madrid"` |
| `fechaPublicacion` | Fecha de publicación, ISO `AAAA-MM-DD` |
| `numeroBoletin` | Número del boletín dentro del año (p. ej. `200`) |
| `seccion` / `seccionCodigo` | Sección (`I. COMUNIDAD DE MADRID` / `I`) |
| `subseccion` | Apartado dentro de la sección (`D) Anuncios`), cuando lo hay |
| `organo` | Consejería, ayuntamiento o juzgado que publica |
| `titulo` | Título oficial completo |
| `urlHtml` / `urlPdf` / `urlXml` | Enlaces oficiales al texto |
| `keywordsCoincidentes` | Qué palabras clave de tu input dispararon la coincidencia |
| `textoCompleto` | Texto íntegro — **solo si activas `incluirTextoCompleto`** |
| `fuente` / `atribucion` / `extraidoEn` | Procedencia y marca de tiempo |

### BOCM keyword monitor input / Parámetros de entrada y secciones

| Parámetro / Parameter | Tipo / Type | Por defecto / Default | Descripción / Notes |
|---|---|---|---|
| `keywords` | lista de textos / string list | `[]` | Términos a buscar en el título (sin distinguir mayúsculas ni acentos) |
| `secciones` | lista / list | `[]` | `I`, `II`, `III`, `IV`, `V`. Vacío = todas |
| `diasHaciaAtras` | entero / integer | `1` | Solo importa en la **primera ejecución** o con `soloNuevos: false`. Máximo 30 |
| `soloNuevos` | booleano / boolean | `true` | Modo delta: no repite identificadores ya entregados |
| `incluirTextoCompleto` | booleano / boolean | `false` | Añade el texto íntegro (1 petición extra por disposición) |
| `maxItems` | entero / integer | `500` | Tope por ejecución; la siguiente continúa donde se quedó |

**Secciones del BOCM** (vocabulario completo, verificado en boletines de enero a agosto de 2026) /
BOCM sections:

| Código / Code | Sección / Section |
|---|---|
| `I` | COMUNIDAD DE MADRID — con apartados `A) Disposiciones Generales`, `B) Autoridades y Personal`, `C) Otras Disposiciones`, `D) Anuncios` · Region of Madrid |
| `II` | DISPOSICIONES Y ANUNCIOS DEL ESTADO · State provisions and notices |
| `III` | ADMINISTRACIÓN LOCAL AYUNTAMIENTOS · Local government (town councils) |
| `IV` | ADMINISTRACIÓN DE JUSTICIA · Courts |
| `V` | OTROS ANUNCIOS · Other notices |

Si dejas `keywords` vacío, el actor entrega **todo** lo publicado en las secciones elegidas. El BOCM
publica entre **20 y 110 disposiciones por día** (de lunes a sábado), así que usa `maxItems` para
acotar. · Leave `keywords` empty and you get everything published in the chosen sections; the BOCM
publishes 20-110 entries a day, Monday to Saturday.

Ejemplo: vigilar licitaciones y subvenciones de ayuntamientos madrileños, a diario / example input:

```json
{
  "keywords": ["licitación", "contrato", "subvención", "convenio"],
  "secciones": ["III"],
  "diasHaciaAtras": 7,
  "soloNuevos": true,
  "maxItems": 500
}
```

### BOCM delta mode: only what is new / Cómo funciona el modo delta

1. **Primera ejecución**: la ventana es `[hoy − diasHaciaAtras + 1, hoy]`.
2. **Ejecuciones siguientes** con `soloNuevos: true`: arranca en el día siguiente al último
   **cerrado**, así que `diasHaciaAtras` deja de importar.
3. El día de **hoy nunca se da por cerrado** (el boletín puede no estar aún publicado a la hora del
   Schedule) y un corte por `maxItems` tampoco cierra el día: se releen y el registro de
   identificadores evita duplicados.
4. Con `soloNuevos: false` vuelve a volcar toda la ventana, ignorando el historial. Es lo que hace el
   input de ejemplo del actor.

El estado vive en el store **`bocm-gazette-state-<hash>`**, donde el hash depende de tus filtros: dos
configuraciones distintas no se pisan.

**In English**: the first run scans `[today − diasHaciaAtras + 1, today]`. Later runs with
`soloNuevos: true` resume from the day after the last **closed** day — `diasHaciaAtras` stops
mattering. Today is never closed (the gazette may not be out yet when the Schedule fires), and a
`maxItems` cut-off leaves the day open; the identifier ledger prevents duplicates on re-read. Set
`soloNuevos: false` to re-dump the whole window. State lives in the named store
`bocm-gazette-state-<hash>`, hashed from your filters, so two configurations never collide.

### BOCM output example / Ejemplo de output real

Dos ítems reales de una ejecución del actor con `diasHaciaAtras: 7`, `soloNuevos: false` y las
keywords `["resolución", "contrato", "subvención", "convocatoria", "proceso selectivo",
"ayuntamiento"]` (23-ago-2026), elegidos para mostrar dos secciones distintas: I-B (Autoridades y
Personal) y III (Administración Local Ayuntamientos). · Two real items from a run with those
keywords, showing two different sections.

```json
{
  "identificador": "BOCM-20260817-1",
  "boletin": "BOCM",
  "boletinNombre": "Boletín Oficial de la Comunidad de Madrid",
  "comunidadAutonoma": "Comunidad de Madrid",
  "fechaPublicacion": "2026-08-17",
  "numeroBoletin": "195",
  "seccion": "I. COMUNIDAD DE MADRID",
  "seccionCodigo": "I",
  "subseccion": "B) Autoridades y Personal",
  "organo": "CONSEJERÍA DE PRESIDENCIA, JUSTICIA Y ADMINISTRACIÓN LOCAL",
  "titulo": "Destinos funcionarios – Resolución de 31 de julio de 2026, de la Dirección General de Recursos Humanos y Relaciones con la Administración de Justicia de la Consejería de Presidencia, Justicia y Administración Local, por la que se otorgan destinos a los funcionarios del Cuerpo de Tramitación Procesal y Administrativa (turno promoción interna), que superaron las pruebas selectivas convocadas por Orden PJC/150/2024, de 31 de enero, en el ámbito de la Comunidad de Madrid",
  "urlHtml": "https://www.bocm.es/bocm-20260817-1",
  "urlPdf": "https://www.bocm.es/boletin/CM_Orden_BOCM/2026/08/17/BOCM-20260817-1.PDF",
  "urlXml": "https://www.bocm.es/boletin/CM_Orden_BOCM/2026/08/17/BOCM-20260817-1.xml",
  "keywordsCoincidentes": ["resolución"],
  "fuente": "Boletín Oficial de la Comunidad de Madrid",
  "atribucion": "Basado en datos del Boletín Oficial de la Comunidad de Madrid (https://www.bocm.es)",
  "extraidoEn": "2026-08-23T18:07:13.034Z"
}
```

```json
{
  "identificador": "BOCM-20260817-34",
  "boletin": "BOCM",
  "boletinNombre": "Boletín Oficial de la Comunidad de Madrid",
  "comunidadAutonoma": "Comunidad de Madrid",
  "fechaPublicacion": "2026-08-17",
  "numeroBoletin": "195",
  "seccion": "III. ADMINISTRACIÓN LOCAL AYUNTAMIENTOS",
  "seccionCodigo": "III",
  "subseccion": null,
  "organo": "ALCALÁ DE HENARES",
  "titulo": "Alcalá de Henares. Ofertas de empleo. Ente Público Empresarial Alcalá Desarrollo. Convocatoria proceso selectivo",
  "urlHtml": "https://www.bocm.es/bocm-20260817-34",
  "urlPdf": "https://www.bocm.es/boletin/CM_Orden_BOCM/2026/08/17/BOCM-20260817-34.PDF",
  "urlXml": "https://www.bocm.es/boletin/CM_Orden_BOCM/2026/08/17/BOCM-20260817-34.xml",
  "keywordsCoincidentes": ["convocatoria", "proceso selectivo"],
  "fuente": "Boletín Oficial de la Comunidad de Madrid",
  "atribucion": "Basado en datos del Boletín Oficial de la Comunidad de Madrid (https://www.bocm.es)",
  "extraidoEn": "2026-08-23T18:07:13.080Z"
}
```

### Madrid gazette monitoring use cases / Casos de uso

#### Despachos y asesorías — vigilancia normativa de la Comunidad de Madrid

Programa el actor a diario sobre las secciones `I` (Comunidad de Madrid) y `II` (Estado) con las
palabras clave de tu materia: recibes solo las disposiciones nuevas, con enlace al PDF oficial. ·
Daily regulatory monitoring of the Region of Madrid, with a link to the official PDF.

#### Empresas y consultoras — alertas de subvenciones y licitaciones BOCM

Palabras clave como `subvención`, `convocatoria`, `licitación` o `contrato` sobre la sección `III`
(ayuntamientos) convierten el boletín en un canal de oportunidades municipales. · Grant and tender
alerts from Madrid town councils.

#### Opositores y RR. HH. — convocatorias y procesos selectivos

El apartado `B) Autoridades y Personal` de la sección `I` y las ofertas de empleo de la `III`
concentran las convocatorias de empleo público madrileño, como se ve en el ejemplo de output. ·
Public-employment calls and selection processes.

#### Periodismo y transparencia — seguimiento de un ayuntamiento concreto

Usa el nombre del municipio como palabra clave para seguir todo lo que publica un ayuntamiento
madrileño en el boletín, día a día. · Follow everything one Madrid town council publishes.

### BOCM data source, coverage and limits / Fuente oficial, cobertura y comportamiento

- **Fuente oficial**: datos públicos del BOCM (`https://www.bocm.es`), reutilizables conforme a la
  **Ley 37/2007** de reutilización de la información del sector público. · Public BOCM data, reusable
  under Spanish **Act 37/2007**.
- **Cobertura y ritmo**: el BOCM publica de lunes a sábado, entre **20 y 110 disposiciones por día**.
  `diasHaciaAtras` admite un máximo de **30** días.
- **Comportamiento del actor**: hace **1 petición por segundo** con un User-Agent identificado
  (`spain-bocm-gazette/0.1 (Apify actor)`), reintentos con backoff exponencial y detección de páginas
  de error servidas con HTTP 200. Un día completo cuesta **una sola petición** (el sumario XML
  oficial). · One request per second, identified User-Agent, exponential backoff, and detection of
  error pages served with HTTP 200. A full day costs a **single request** (the official XML summary).
- **Qué NO trae**: el texto íntegro solo se descarga si activas `incluirTextoCompleto`, y cuesta una
  petición extra por disposición.

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

| Actor | Qué extrae / What it scrapes |
|---|---|
| [spain-boja-gazette](https://apify.com/xamto1987/spain-boja-gazette) | Boletín Oficial de la Junta de Andalucía (BOJA) — **mismo esquema de salida** |
| [spain-boe-monitor](https://apify.com/xamto1987/spain-boe-monitor) | Boletín Oficial del Estado (BOE) por palabra clave, sección y NIF |
| [spain-borme-companies](https://apify.com/xamto1987/spain-borme-companies) | Actos societarios del BORME: constituciones, cargos, concursos |
| [spain-grants-bdns](https://apify.com/xamto1987/spain-grants-bdns) | Subvenciones y ayudas públicas de España (BDNS/SNPSAP) |
| [spain-de-minimis-aid](https://apify.com/xamto1987/spain-de-minimis-aid) | Ayudas de minimis y ayudas de Estado por NIF de beneficiario |
| [spain-grants-registries](https://apify.com/xamto1987/spain-grants-registries) | Grandes beneficiarios, sanciones por fraude y ayudas a partidos |
| [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 (Open Data Euskadi) |
| [aragon-tenders](https://apify.com/xamto1987/aragon-tenders) | Registro de contratos públicos de Aragón, mayores y menores (CKAN) |
| [spain-cadastre-bulk](https://apify.com/xamto1987/spain-cadastre-bulk) | Enriquecimiento catastral masivo (Catastro OVC) |

### Is it legal to scrape the BOCM? / Datos personales, derecho al olvido y aviso legal

- **Reutilización**: los datos del BOCM son información del sector público reutilizable conforme a la
  **Ley 37/2007**, citando la fuente. Cada ítem incluye ya el campo `atribucion`.
- Se respeta la **lista de derecho al olvido** que el propio BOCM publica en su `robots.txt` (**790
  identificadores** retirados a petición del interesado): esas disposiciones nunca entran en el
  dataset.
- Todo ítem pasa por un punto único de **redacción**: cualquier DNI/NIE en claro se sustituye por
  `[NIF-PERSONA-FISICA-OMITIDO]`. Los CIF de persona jurídica se conservan (son dato mercantil).
- **No existe modo "por persona"**: no hay input de nombre ni de DNI, ni campo de identificador
  personal en el dataset. El pivote es siempre la disposición publicada.
- Este actor **solo lee datos públicos**, sin login y sin saltarse ninguna medida técnica.
  **No es un producto oficial** ni está afiliado, respaldado ni verificado por la Comunidad de Madrid.
  · This Actor is **not an official product** and is not affiliated with or endorsed by the Comunidad
  de Madrid.

**Personal data, in English**: the Actor honours the **right-to-be-forgotten list** the BOCM publishes
in its own `robots.txt` (790 withdrawn identifiers), redacts any clear-text Spanish national ID
(DNI/NIE) found in text as `[NIF-PERSONA-FISICA-OMITIDO]`, and offers **no person-centric mode**:
there is no name or ID input and no personal identifier field in the dataset. Company tax IDs (CIF)
are kept — they are commercial data. Onward processing of the output remains your responsibility
under **GDPR** and the Spanish **LOPDGDD**.

### FAQ — BOCM monitoring / Preguntas frecuentes

#### ¿Cómo recibo alertas diarias del BOCM? / How do I get daily BOCM alerts?

Deja `soloNuevos: true` y programa el actor en un Schedule diario de Apify. Cada ejecución te
devolverá únicamente las disposiciones publicadas desde la anterior.

#### ¿Puedo buscar por palabra clave en el BOCM? / Can I search the BOCM by keyword?

Sí: `keywords` busca en el **título** de cada disposición, sin distinguir mayúsculas ni acentos, y el
ítem te dice en `keywordsCoincidentes` qué término disparó la coincidencia.

#### ¿Trae el texto completo de la disposición? / Does it include the full text?

Solo si activas `incluirTextoCompleto`. Cuesta una petición extra por disposición, así que déjalo
desactivado si te basta con el título y los enlaces al HTML, PDF y XML oficiales.

#### ¿Cuánto histórico puedo recuperar? / How far back can I go?

`diasHaciaAtras` admite hasta **30** días en la primera ejecución (o con `soloNuevos: false`). A
partir de ahí, el modo delta avanza solo hacia delante.

#### ¿Se puede combinar con el BOJA de Andalucía? / Can I combine it with the Andalusian BOJA?

Sí. [`spain-boja-gazette`](https://apify.com/xamto1987/spain-boja-gazette) produce **el mismo esquema
de salida**, así que los dos boletines pueden alimentar la misma tabla.

#### ¿Qué pasa si el actor se corta a mitad de un día? / What if a run is cut off mid-day?

Nada se pierde: un corte por `maxItems` no cierra el día, así que la siguiente ejecución lo relee y
el registro de identificadores impide duplicados.

#### ¿Aparecen DNI de particulares en el dataset? / Are personal ID numbers exposed?

No. Cualquier DNI/NIE en claro se sustituye por `[NIF-PERSONA-FISICA-OMITIDO]` antes de llegar al
dataset, y las disposiciones de la lista de derecho al olvido del BOCM nunca se recogen.

#### ¿Necesito credenciales? / Do I need credentials?

No. Todo sale del sumario XML público del BOCM, sin login ni cookies.

### Support & feedback / Soporte

¿Falta una sección, quieres otro filtro o una versión a medida para tu flujo de vigilancia normativa?
Abre una incidencia desde la pestaña **Issues** de la ficha del actor en Apify: se leen todas. ·
Missing a section or need a custom version? Open an issue from the **Issues** tab of this Actor's
page.

**Palabras clave / Keywords**: BOCM scraper, Boletín Oficial de la Comunidad de Madrid, Madrid
official gazette API, alertas BOCM, monitor BOCM palabra clave, Madrid regional gazette monitor,
boletín oficial Madrid API, regulatory monitoring Madrid, subvenciones BOCM, anuncios BOCM, Spain
regional gazette scraper, vigilancia normativa Madrid.

# Actor input Schema

## `keywords` (type: `array`):

Terminos a vigilar en el titulo de cada disposicion del BOCM (busqueda por substring, sin distinguir mayusculas ni acentos). Vacio = se entrega TODO lo publicado en las secciones seleccionadas. / Terms to watch for in each BOCM entry's title; empty = everything in the selected sections.

## `secciones` (type: `array`):

Ambito por seccion del BOCM. Vacio = todas. I = COMUNIDAD DE MADRID (incluye A Disposiciones Generales, B Autoridades y Personal, C Otras Disposiciones y D Anuncios); II = DISPOSICIONES Y ANUNCIOS DEL ESTADO; III = ADMINISTRACION LOCAL AYUNTAMIENTOS; IV = ADMINISTRACION DE JUSTICIA; V = OTROS ANUNCIOS. / BOCM section scope; empty = all sections.

## `diasHaciaAtras` (type: `integer`):

Solo se usa en la PRIMERA ejecucion (define la ventana inicial) o cuando `soloNuevos` esta desactivado. Con `soloNuevos: true`, las ejecuciones posteriores continuan solas desde la ultima fecha procesada. Maximo 30. / Only used on the first run or when delta mode is off; later runs resume automatically.

## `soloNuevos` (type: `boolean`):

ACTIVADO POR DEFECTO. El actor recuerda en un key-value store CON NOMBRE que identificadores ya entrego y no los repite: cada ejecucion trae solo lo publicado desde la anterior. Desactivalo para volcar de nuevo toda la ventana de `diasHaciaAtras`. / ON by default: the actor remembers what it already delivered and only emits new entries each run.

## `incluirTextoCompleto` (type: `boolean`):

DESACTIVADO POR DEFECTO. Anade el texto integro de cada disposicion (XML oficial del BOCM). Cuesta 1 peticion adicional por disposicion entregada, a 1 peticion/segundo. / OFF by default: adds each entry's full text (one extra request per entry).

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

Tope de disposiciones a entregar en una ejecucion. El BOCM publica entre 20 y 110 disposiciones por dia. Si se alcanza el tope, la ejecucion siguiente continua donde se quedo. / Cap on entries per run; the next run resumes where this one stopped.

## Actor input object example

```json
{
  "keywords": [
    "resolución",
    "contrato",
    "subvención",
    "convocatoria",
    "proceso selectivo",
    "ayuntamiento"
  ],
  "secciones": [],
  "diasHaciaAtras": 7,
  "soloNuevos": true,
  "incluirTextoCompleto": false,
  "maxItems": 50
}
```

# Actor output Schema

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

Disposiciones del BOCM nuevas que coinciden con la vigilancia configurada. 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 = {
    "keywords": [
        "resolución",
        "contrato",
        "subvención",
        "convocatoria",
        "proceso selectivo",
        "ayuntamiento"
    ],
    "diasHaciaAtras": 7,
    "soloNuevos": false,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("xamto1987/spain-bocm-gazette").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 = {
    "keywords": [
        "resolución",
        "contrato",
        "subvención",
        "convocatoria",
        "proceso selectivo",
        "ayuntamiento",
    ],
    "diasHaciaAtras": 7,
    "soloNuevos": False,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("xamto1987/spain-bocm-gazette").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 '{
  "keywords": [
    "resolución",
    "contrato",
    "subvención",
    "convocatoria",
    "proceso selectivo",
    "ayuntamiento"
  ],
  "diasHaciaAtras": 7,
  "soloNuevos": false,
  "maxItems": 50
}' |
apify call xamto1987/spain-bocm-gazette --silent --output-dataset

```

## MCP server setup

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

```

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/6h4GlklCW79rIY4r9/builds/8CUklRkjRTDUuE7MK/openapi.json
