You can pull a Spanish company's registry profile, its officers, its corporate-event history and its insolvency proceedings from official sources with a few REST calls. No PDF parsing, no scraping, no Spanish-language gazette wrangling. This article shows the exact requests, the JSON as returned today, and how to turn it into a daily KYB risk watchlist.
By Matías Maquieira, Founder of Prometiam.
What is BORME, and where do insolvencies live?
BORME (Boletín Oficial del Registro Mercantil) is Spain's official company-registry gazette. Every registrable corporate act, incorporation, director appointments and removals, share-capital changes, dissolutions and liquidations, is published there on working days. Insolvency proceedings themselves (the concurso de acreedores) are court matters published through the Registro Público Concursal, with their milestones: the filing, the appointment of the insolvency administrator, liquidation, conclusion.
A serious watchlist reads both. The Prometiam API serves BORME acts as corporate events and the concursal notices as an insolvency index, keyed on the same NIF.
Look up a company in one call
You need a key: the free plan is a 14-day trial with 1,000 calls and no card, and a key takes about a minute at prometiam.com/signup.
curl -s "https://api.prometiam.com/functions/v1/risk-api/companies/search?country=ES&name=glovoapp" \
-H "Authorization: Bearer $PROMETIAM_API_KEY"
The first match, as returned on 25 September 2026:
{
"data": [
{
"id": 3189007,
"match_score": 67,
"company_name": "GLOVOAPP25 SL",
"company_number": "B24997728",
"legal_form": "SL",
"province": "MADRID",
"address": "C/ ORENSE 4 (MADRID)",
"postal_code": "28020",
"status": "active",
"capital_euros": 3000,
"founding_date": "2025-12-05",
"country": "ES"
}
],
"pagination": { "count": 1, "has_more": true, "next_cursor": null }
}
Then request the full profile by id. It carries the registry coordinates, the current officers under appointments, and the latest acts under recent_events:
curl -s "https://api.prometiam.com/functions/v1/risk-api/companies/3189007?country=ES&include=insolvency,risk_flags" \
-H "Authorization: Bearer $PROMETIAM_API_KEY"
{
"data": {
"id": 3189007,
"nif": "B24997728",
"company_name": "GLOVOAPP25 SL",
"legal_form": "SL",
"status": "active",
"capital_euros": 3000,
"founding_date": "2025-12-05",
"registro_seccion": "8",
"registro_hoja": "M 871839",
"appointments": [
{ "role_type": "ADM_UNICO", "action": "appointed", "event_date": "2025-12-23",
"person": { "id": 1920708, "full_name": "<the sole director's name>", "is_legal_entity": false } }
],
"recent_events": [
{ "event_type": "status_change", "event_date": "2025-12-23", "new_value": "DECLARACION_UNIPERSONALIDAD" }
],
"insolvency_proceedings": [],
"risk_flags": []
}
}
include=insolvency,risk_flags attaches the concursal notices and any published risk flag (today, the tax authority's large-debtor list) to the same record. Both are empty here, which is what you want to see on a new counterparty. You can also search by NIF directly with ?nif=B24997728 instead of ?name=.
Read the corporate events
Every BORME act about a company is an event with a type, a date, and the link to the gazette PDF it came from. The event stream is on the Starter plan and up (€9.99); the free trial covers the company profile with its officers and the concursal index:
curl -s "https://api.prometiam.com/functions/v1/risk-api/company-events/search?country=ES&company_number=B24997728" \
-H "Authorization: Bearer $PROMETIAM_API_KEY"
{
"data": [
{
"id": 17978361,
"company_id": 3189007,
"company_name": "GLOVOAPP25 SL",
"company_number": "B24997728",
"event_type": "status_change",
"signal_category": "neutral",
"event_date": "2025-12-23",
"new_value": "NOMBRAMIENTOS",
"event_detail": "GLOVOAPP25 SL. Constitución. Comienzo de operaciones: 5.12.25. [...] Capital: 3.000,00 Euros. Declaración de unipersonalidad. Socio único: GLOVOAPP 23 SA. Nombramientos. Adm. Unico: <the sole director's name>.",
"notice_url": "https://www.boe.es/borme/dias/2025/12/23/pdfs/BORME-A-2025-244-28.pdf"
}
]
}
Filter with event_type= (director_change, capital_change, dissolution, liquidation, insolvency, name_change, address_change, merger) and a date range. notice_url points at the official PDF, so every event is verifiable at the source.
Catch insolvency proceedings
The concursal index is GET /search. Here is a company in proceedings right now, queried by NIF:
curl -s "https://api.prometiam.com/functions/v1/risk-api/search?vat=B90335910" \
-H "Authorization: Bearer $PROMETIAM_API_KEY"
{
"data": [
{
"company_name": "RESEARCH TO SOLVE SOCIEDAD LIMITADA",
"company_number": "B90335910",
"status": "insolvency-proceedings",
"status_detail": "Cese de Administrador concursal",
"event_type": "insolvency",
"filing_date": "2026-09-09",
"source": "Registro Publico Concursal (Spain)"
},
{
"company_name": "RESEARCH TO SOLVE SOCIEDAD LIMITADA",
"company_number": "B90335910",
"status": "insolvency-proceedings",
"status_detail": "Cese de las limitaciones de las facultades de administración",
"event_type": "insolvency",
"filing_date": "2024-09-09",
"source": "Registro Publico Concursal (Spain)"
}
]
}
Each row is one milestone of the proceeding, newest first, with the court's own wording in status_detail. The company's BORME events tell the same story from the registry side: on 2024-09-20 its status changed to CONCURSO_ACREEDORES, then LIQUIDACION, then CIERRE_PROVISIONAL, all on /company-events/search.
The daily watchlist
Run a check each morning over your customers and suppliers, and alert on any new concursal milestone or dissolution:
import os, requests
BASE = "https://api.prometiam.com/functions/v1/risk-api"
HEAD = {"Authorization": f"Bearer {os.environ['PROMETIAM_API_KEY']}"}
WATCHLIST = ["B24997728", "B90335910"] # counterparty NIFs
for nif in WATCHLIST:
notices = requests.get(f"{BASE}/search", params={"vat": nif}, headers=HEAD).json()["data"]
events = requests.get(f"{BASE}/company-events/search",
params={"country": "ES", "company_number": nif, "event_type": "dissolution"},
headers=HEAD).json()["data"]
for n in notices:
print(f"CONCURSAL {nif}: {n['status_detail']} ({n['filing_date']})")
for e in events:
print(f"DISSOLUTION {nif}: {e['event_date']} {e['notice_url']}")
If you would rather not poll, POST /monitor with the company's id subscribes it and sends a signed webhook when a corporate event, a status change or a sanctions match is published. A complete version on Cloudflare Workers with Slack alerts is in the BORME watchlist guide.
Scope, stated plainly
- Corporate insolvency only. Personal insolvencies are excluded and never returned.
- Spain's concursal data is on
/search. The separate/insolvency/searchindex covers nine other markets (FR, DE, GB, AT, CH, NO, FI, US, NL). - Monitoring is available for Spain, Ireland and Poland.
- The API reflects what the gazettes and the register publish, on the day they publish it. It is a signal to act on, not a court record.
FAQ
What is a NIF and how do I search by it?
The NIF is Spain's tax identifier for companies: a letter for the legal form, seven digits and a control character. Search with ?nif= on /companies/search or ?vat= on /search. Both are exact lookups.
Does it include directors and capital changes?
Yes. The company record returns current officers under appointments, and the event stream carries appointments, removals and capital increases or reductions, each linked to its BORME act.
How much does it cost?
A free 14-day trial with 1,000 calls and no card. Paid plans are Starter at €9.99 (10,000 calls), Professional at €29.99 (100,000, adds full sanctions screening), Scale at €99.99 (1,000,000) and Enterprise. Data is EU-resident. Sanctions and US export-control screening run on the same key.
Wrapping up
Spanish company data and the insolvency signals most providers miss are a few REST calls away. Start with the free trial, or read the background on what BORME is and how it works.
Top comments (1)
Cross-checking the BORME registry events against the separate concursal proceedings index for the same NIF is a good design, insolvency status alone doesn't tell you which registry act triggered it. "A signal to act on, not a court record" is an honest scope line more data APIs should include.