Every business day, Spain's Boletin Oficial del Registro Mercantil (BORME) publishes hundreds of corporate acts: company incorporations, officer appointments and dismissals, capital changes, dissolutions, mergers, and insolvency proceedings. For compliance teams monitoring Spanish counterparties or B2B sales teams prospecting new incorporations, this data is essential.
The problem: BORME publishes as PDFs. The official BOE API gives you PDF URLs but not the parsed content inside them.
This article compares three options for getting structured BORME data, with code examples.
Option 1: LibreBOR (formerly LibreBORME)
URL: librebor.me
Model: Free web interface, limited API behind Cloudflare
Status: Active — last confirmed updates February/March 2026
LibreBOR is the spiritual successor to the original LibreBORME open-source project. It provides a searchable web interface for BORME data at librebor.me, where you can look up any company and see its historical BORME acts. It's free and well-structured.
However, it comes with practical limitations:
- Rate limiting and Cloudflare protection make bulk programmatic access unreliable
- No official API documentation — the original LibreBORME had a documented API, but LibreBOR's API access is restricted
- Dependency on a single maintainer — the original LibreBORME went offline in April 2025; while LibreBOR has been stable, there's no service-level guarantee
- No Apify integration — you can't schedule runs, set up webhooks, or pipe results into your existing data pipeline on Apify
LibreBOR is excellent for ad-hoc lookups. If you need to check one company's BORME history, use it. If you need to process 500 acts daily in a production pipeline, the rate limiting becomes a blocker.
Option 2: BORME Scraper Pro (spain-data-solutions on Apify)
URL: apify.com/spain-data-solutions/borme-scraper-pro
Model: $8/month platform fee + usage charges
Status: Active — 8 total users, 2 monthly active
BORME Scraper Pro is a competing Apify actor that also parses BORME PDFs. It includes proxy rotation, province filtering, and claims 99.9% success rate. The developer renamed from startquicklabs and has been actively maintaining it.
Pricing structure: a fixed $8/month platform fee plus per-usage charges. This makes economic sense if you're running daily BORME extractions at scale. For occasional use — say, pulling one week's BORME data for a due diligence project — the monthly commitment may not justify the cost.
Option 3: BORME Corporate Acts Parser (minute_contest on Apify)
URL: apify.com/minute_contest/borme-corporate-acts-scraper
Model: Pay-per-use — $0.003 per result, no monthly fee
Status: Active — free tier friendly, HTTP-only (no Puppeteer)
Our BORME actor takes a different approach: pure HTTP requests and PDF parsing with pdfjs-dist. No browser automation, no proxy required, no monthly fee. You pay $0.003 per corporate act extracted.
How it works:
- Fetches the BORME Section A index from boe.es for your specified date
- Downloads the PDF files listed in the index
- Parses each PDF to extract structured corporate acts
- Returns JSON with act type, company name, NIF, province, and full details
Input example:
{
"date": "2026-04-15",
"province": "Barcelona"
}
Output example:
{
"date": "2026-04-15",
"province": "Barcelona",
"bormeNumber": "89",
"actType": "Nombramientos",
"company": "EJEMPLO SOLUCIONES SL",
"nif": "B12345678",
"details": {
"appointee": "Garcia Lopez, Maria",
"role": "Administrador único"
}
}
Running it via API:
curl -X POST "https://api.apify.com/v2/acts/minute_contest~borme-corporate-acts-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"date": "2026-04-15"}'
Running it with the Python client:
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("minute_contest/borme-corporate-acts-scraper").call(
run_input={"date": "2026-04-15", "province": "Madrid"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['actType']}: {item['company']} ({item['nif']})")
Cost comparison for common use cases:
| Use Case | Acts/Run | BORME Scraper Pro | Our BORME Parser |
|---|---|---|---|
| Daily monitoring (1 province, 1 month) | ~1,500 | $8 + usage | ~$4.50 |
| One-off due diligence (1 day, all provinces) | ~500 | $8 + usage | ~$1.50 |
| Quarterly batch (3 months, 2 provinces) | ~9,000 | $8 + usage | ~$27.00 |
For the one-off and low-frequency use cases that most compliance teams and law firms run, pay-per-use is significantly cheaper. The break-even with BORME Scraper Pro's $8 monthly fee is around 2,600 acts per month — below that, pay-per-use wins.
What BORME Data Looks Like
BORME Section A publishes the following act types daily:
- Constituciones — new company incorporations (the goldmine for B2B prospecting)
- Nombramientos — officer appointments (directors, administrators, secretaries)
- Ceses/Dimisiones — officer dismissals and resignations
- Modificaciones — company statute changes
- Aumentos de capital / Reducciones de capital — capital increases and reductions
- Disoluciones — company dissolutions
- Fusiones / Escisiones — mergers and spin-offs
- Declaraciones de unicidad — single-member company declarations
- Revocaciones de poderes — revocations of powers of attorney
- Situaciones concursales — insolvency proceedings
Each act type is extracted with its specific fields. For example, a "Constitución" includes company name, NIF, registered address, initial capital, and appointed officers. A "Cese" includes the departing officer's name and role.
Practical Workflow: Monitoring New Spanish Incorporations
A common use case: your B2B sales team wants daily alerts when new companies are incorporated in your target provinces.
from apify_client import ApifyClient
import json
client = ApifyClient("YOUR_TOKEN")
# Run BORME parser for today
run = client.actor("minute_contest/borme-corporate-acts-scraper").call(
run_input={"date": "2026-04-15"}
)
# Filter for new incorporations only
new_companies = [
item for item in client.dataset(run["defaultDatasetId"]).iterate_items()
if item["actType"] == "Constituciones"
]
for company in new_companies:
print(f"NEW: {company['company']} (NIF: {company['nif']})")
# Push to your CRM, Slack, or email pipeline
Set this up as a scheduled run on Apify (daily at 10:00 CET, after BORME publishes), add a webhook to push results to your Slack or CRM, and you have a fully automated new-business monitoring system.
Summary
| LibreBOR | BORME Scraper Pro | Our BORME Parser | |
|---|---|---|---|
| Cost | Free | $8/month + usage | $0.003/act, no monthly fee |
| Bulk access | Rate limited | Yes (proxy rotation) | Yes (HTTP-only) |
| Apify integration | No | Yes | Yes |
| Free tier | N/A | No ($8 minimum) | Yes |
| Proxy required | N/A | Yes (included) | No |
| Maintenance risk | Single maintainer | Developer-supported | Developer-supported |
| Best for | Ad-hoc lookups | Daily high-volume pipelines | Occasional/batch processing |
Choose based on your volume and frequency. LibreBOR for quick manual lookups. BORME Scraper Pro if you're running thousands of acts daily and can justify the monthly commitment. Our parser for everything in between — project-based due diligence, periodic compliance checks, and batch processing without a recurring fee.
Top comments (0)