# Spain New Companies – BORME Alerts, Officers & Dissolutions (`gazidev/spain-borme-alerts`) Actor

Spanish company events from the official BORME as clean JSON: new companies (objeto social, capital, address), officer appointments and resignations, capital changes, dissolutions, mergers, insolvency. Filter by province, act type, date, keyword; only-new monitoring.

- **URL**: https://apify.com/gazidev/spain-borme-alerts.md
- **Developed by:** [Cemal Atakli](https://apify.com/gazidev) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 company acts

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Spain New Companies & BORME Alerts – Officers, Capital, Dissolutions

Get every **new Spanish company**, **director appointment and resignation**, **capital increase**, **change of
registered office**, **dissolution**, **merger** and **insolvency note** published in the official **BORME**
(Boletín Oficial del Registro Mercantil) as clean, structured JSON. Filter by **province**, **act type**, **date**
and **keyword**, and switch on **only-new mode** to turn it into a daily alert feed for Spain's Mercantile Registry.

The BORME is published every weekday by the Agencia Estatal Boletín Oficial del Estado (BOE). This Actor reads the
BOE open-data summary API and the official HTML documents. No login, no proxies, no browser.

### What you get

- **New companies (Constitución)** with start of operations, **objeto social** (business purpose), **CNAE codes**
  when stated, **registered address (domicilio)**, **share capital**, first directors and sole shareholder.
- **Officer changes**: appointments (Nombramientos), dismissals/resignations (Ceses/Dimisiones), revocations,
  re-elections, as `[{role, name}]` (e.g. `Adm. Unico`, `Consejero`, `Apoderado`, `Liquidador`).
- **Capital changes** (increase/reduction with resulting capital), **address**, **name** and **purpose** changes,
  bylaws amendments, sole-shareholder changes.
- **Risk events**: dissolution, extinction, insolvency (Situación concursal and court insolvency notes), mergers,
  demergers, transformations, branches.
- **Registry data**: sheet number (hoja), inscription and registration date, link to the official page and signed PDF.
- Optional **Section C** legal notices: shareholder meeting calls, merger/demerger announcements, capital reductions...

### Use cases

- **B2B sales prospecting**: a fresh list of companies incorporated yesterday in Madrid, Barcelona or anywhere in
  Spain, with business purpose and address (gestorías, banks, insurers, SaaS for SL/SA, office suppliers).
- **KYB / credit risk**: watch for dismissals, dissolutions, insolvency and capital reductions in your portfolio.
- **M\&A and legal monitoring**: mergers, demergers and meeting calls in Section C.
- **Market research**: new-company counts by province, sector (CNAE / keywords) and capital.

### Input example

```json
{
  "provinces": ["Madrid", "Barcelona"],
  "actTypes": ["constitution"],
  "keywords": ["software", "CNAE 6201"],
  "daysBack": 0,
  "onlyNew": true,
  "maxItems": 500
}
```

| Field | Meaning |
|---|---|
| `provinces` | Province names (`Madrid`, `Valencia`, `Bizkaia`, `Málaga`...) or INE codes (`28`, `46`). Empty = all Spain. |
| `actTypes` | `constitution`, `appointments`, `dismissals`, `revocations`, `reelections`, `capital_increase`, `capital_reduction`, `address_change`, `purpose_change`, `name_change`, `bylaws_change`, `sole_shareholder`, `dissolution`, `extinction`, `insolvency`, `merger`, `split`, `transformation`, `branch`, `reactivation`, `registry_closure`, `correction`, `other`. Empty = all. |
| `keywords` | Accent/case-insensitive match on company name and full act text. |
| `daysBack` / `dateFrom` / `dateTo` | `daysBack: 0` (default) = latest BORME issue only. Or any range up to 366 days. |
| `includeSectionA` / `includeSectionC` | Registered acts (default on) / legal notices (default off). |
| `includeOfficers` | Officer and sole-shareholder names (default on). Off = roles only, no raw text. |
| `onlyNew` + `stateKey` | Skip items already returned by earlier runs: schedule it every weekday for alerts. |
| `maxItems` | Cap per run (0 = no limit). |

### Output example

```json
{
  "recordId": "A-2026-487159",
  "section": "A",
  "bormeId": "BORME-A-2026-210-28",
  "publicationDate": "2026-10-30",
  "province": "Madrid",
  "entryNumber": 487159,
  "companyName": "NOVUM AEVORA SL",
  "legalForm": "SL",
  "isNewCompany": true,
  "actTypes": ["constitution", "sole_shareholder", "appointments"],
  "startDate": "2026-09-25",
  "objetoSocial": "a) Cultivo de frutos oleaginosos (CNAE 0126). b) Hoteles y alojamientos similares (CNAE 5510)...",
  "cnaeCodes": ["0126", "5510"],
  "domicilio": "PASEO DE LA DIRECCION 161 (MADRID)",
  "capital": 32400.0,
  "capitalCurrency": "EUR",
  "appointments": [{"role": "Adm. Unico", "name": "MARTIN MARTINEZ FAUSTO"}],
  "dismissals": [],
  "registrySheet": "M 897218",
  "registrationDate": "2026-10-23",
  "sourceUrl": "https://www.boe.es/diario_borme/txt.php?id=BORME-A-2026-210-28",
  "pdfUrl": "https://www.boe.es/borme/dias/2026/10/30/pdfs/BORME-A-2026-210-28.pdf"
}
```

Each item also has `acts` (every act with its original text), `capitalChange`, `resultingCapital`, `newAddress`,
`newName`, `newPurpose`, `soleShareholder`, `revocations`, `reelections`, `otherDetails`, `inLiquidation`,
`registryData` and `text`. Section C items have `noticeType` (e.g. `CONVOCATORIAS DE JUNTAS`), `companyName` and `text`.
A run summary is stored in the key-value store as `OUTPUT`.

### Pricing

Pay only for what you get (pay-per-event):

| Event | Price |
|---|---|
| Registry entry (any act except new company) | $0.0008 |
| New company (Constitución) with purpose, address, capital | $0.0015 |
| Section C legal notice (with full text) | $0.001 |
| Actor start | $0.00005 |

The prefill (20 new Madrid companies) costs about $0.03. All ~2,500 entries of a full BORME day cost about $2.2.

| Actor (Nov 2026) | Price |
|---|---|
| **This Actor** | $0.0008 per act, $0.0015 per new company, $0.00005 per start |
| jdepablos/borme-company-feed | $0.0008 per act + $0.005 per start |
| regdata/borme-corporate-acts-scraper | $0.0015 per act + $0.005 per start |
| regdata/spain-company-directory-scraper | $0.005 per record + $0.025 per search session |

### FAQ

**How fresh is the data?** The BORME is published Monday to Friday (around 07:30 Madrid time) with acts registered a
few days earlier. Schedule the Actor on weekdays after 09:00 with `onlyNew: true` to get each item once.

**Which provinces are covered?** All 52 Mercantile Registry provinces (including Ceuta and Melilla). Section C notices
are national and are not filtered by province.

**Is this legal / allowed?** The BOE reuse conditions allow commercial and non-commercial reuse of its documents with
attribution. The Actor only uses pages allowed by www.boe.es/robots.txt (re-checked on every run, including the
per-document exclusions), never the robots-disallowed XML view, sends about one request per second and identifies
itself with a contact User-Agent. Each item carries a `source` line.

**Personal data (GDPR).** Officer and shareholder names are personal data published by law. Process them only for a
legitimate purpose (e.g. KYB, credit risk, B2B contact with the company) under GDPR and the Spanish LOPDGDD, and honour
erasure requests. Set `includeOfficers: false` to get roles only and drop the raw text of Section A entries.
Section C texts are returned as published.

**Why are some fields empty?** BORME entries are semi-structured Spanish text. Fields such as `objetoSocial`,
`capital` or `cnaeCodes` are only filled when the entry states them; the full original text is always in `acts`/`text`.

**Can I get company financials or tax IDs (NIF/CIF)?** No. The BORME does not publish them.

### Use with AI agents / Apify MCP

Add this Actor as a tool in the [Apify MCP server](https://mcp.apify.com) and ask your agent things like *"List
companies incorporated in Valencia this week whose purpose mentions solar energy"* or *"Did any of these companies
publish a dissolution in the BORME last month?"*. The structured output (act types, officers, capital, address) is
easy for LLMs to filter and summarise. You can also call it from the Apify API, Make, Zapier or n8n.

Source: BORME – Agencia Estatal Boletín Oficial del Estado (www.boe.es). This Actor is not affiliated with the BOE.

# Actor input Schema

## `provinces` (type: `array`):

Spanish provinces of the Mercantile Registry, by name (`Madrid`, `Barcelona`, `Valencia`, `Málaga`, `Bizkaia`...) or INE code (`28`, `08`). Empty = all of Spain. Applies to Section A (registered acts).

## `actTypes` (type: `array`):

Return only registry entries containing at least one of these acts. Empty = all acts.

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

Accent- and case-insensitive match on company name and the full act text (objeto social, address, officers...), e.g. `software`, `restaurante`, `inmobiliaria`, `CNAE 6201`, `Málaga`.

## `daysBack` (type: `integer`):

0 = only the latest BORME issue (yesterday's registrations are published each weekday morning). N = today minus N days to today. Ignored when *From date* is set.

## `dateFrom` (type: `string`):

YYYY-MM-DD. Overrides *Last N days*. Max 366 days per run.

## `dateTo` (type: `string`):

YYYY-MM-DD. Default: today.

## `includeSectionA` (type: `boolean`):

New companies, appointments, resignations, capital, address, dissolutions, mergers... one item per registry entry.

## `includeSectionC` (type: `boolean`):

Also return Section C announcements (shareholder meeting calls, mergers, demergers, capital reductions, dissolutions, transformations...), one item per notice with its full text. Not filtered by province or act type; use keywords to narrow them.

## `includeOfficers` (type: `boolean`):

Names of appointed/dismissed officers and sole shareholders (personal data under GDPR - use only for a legitimate purpose). Off = roles only and no raw text.

## `includeRawText` (type: `boolean`):

Add the original Spanish text of each entry/notice in `text`.

## `onlyNew` (type: `boolean`):

Skip items returned by earlier runs with the same *State key*. Schedule daily (weekdays ~10:00 Madrid time) for an alert feed.

## `stateKey` (type: `string`):

Separate 'already seen' lists for different monitors.

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

Stop after this many items (0 = no limit). You pay per item saved.

## Actor input object example

```json
{
  "provinces": [
    "Madrid"
  ],
  "actTypes": [
    "constitution"
  ],
  "daysBack": 0,
  "includeSectionA": true,
  "includeSectionC": false,
  "includeOfficers": true,
  "includeRawText": true,
  "onlyNew": false,
  "stateKey": "default",
  "maxItems": 20
}
```

# Actor output Schema

## `companyEvents` (type: `string`):

No description

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

No description

## `summary` (type: `string`):

No description

# 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 = {
    "provinces": [
        "Madrid"
    ],
    "actTypes": [
        "constitution"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("gazidev/spain-borme-alerts").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 = {
    "provinces": ["Madrid"],
    "actTypes": ["constitution"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("gazidev/spain-borme-alerts").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 '{
  "provinces": [
    "Madrid"
  ],
  "actTypes": [
    "constitution"
  ],
  "maxItems": 20
}' |
apify call gazidev/spain-borme-alerts --silent --output-dataset

```

## MCP server setup

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

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/VrcqC8FmwO7BdJL78/builds/AdSn1bTQWtNiiEfMn/openapi.json
