Company records in Spain
Your agent looks up companies in Spain through Spanish Company Data. The data comes from OpenMercantil.es — BORME-derived register (Agencia Estatal BOE primary source), Tier-2 vendor aggregation.
Spanish Company Data
Look up a Spanish company by CIF, NIF or name in BORME-derived records, returning identity, status, current officers and recent publication acts.
- Source
- OpenMercantil.es — BORME-derived register (Agencia Estatal BOE primary source), Tier-2 vendor aggregation
- Price per call
- €0.05 · x402 $0.054
- Returns
- Name and number, Status, Officers
- Last recorded test
- 5 Nov 2026, 100% of its tests passed on their latest run
- Method
- Computed by fixed rules and lookups; no AI model writes the answer.
What your agent sends
| Field | Type | Required | What it is |
|---|---|---|---|
cif | string | No | Alias for nif |
nif | string | No | Spanish CIF/NIF (letter + 7 digits + check char, e.g. A28015865); ES-prefixed VAT accepted |
name | string | No | Alias for company_name |
task | string | No | Free-text alias — CIF/NIF or company name |
query | string | No | Free-text alias — CIF/NIF or company name |
identifier | string | No | Alias for nif |
vat_number | string | No | Alias for nif — ES-prefix VAT format accepted (ESA28015865) |
company_name | string | No | Spanish company name (scored match — ambiguous names are refused, never guessed) |
Example answer
{
"nif": "A20072302",
"status": "active",
"address": null,
"province": "Gipuzkoa",
"status_raw": "Activa",
"vat_number": "ESA20072302",
"company_name": "CONSTRUCCIONES AMENABAR SA",
"company_type": "S.A.",
"jurisdiction": "ES",
"borme_acts_count": 79,
"tier_2_available": true,
"registration_date": null,
"last_borme_activity": "2026-01-15",
"first_borme_activity": "2009-04-16",
"total_legal_representatives": 22
} Fields that come back
| Field | Type | Appears |
|---|---|---|
nif | string or null | Usually (present for most inputs) |
status | one of active, inactive, unknown, null | Always (present in every successful answer) |
address | string or null | Sometimes (present only for some inputs) |
province | string or null | Usually (present for most inputs) |
legal_form | string or null | Usually (present for most inputs) |
legal_name | string | Always (present in every successful answer) |
status_raw | string or null | Usually (present for most inputs) |
vat_number | string or null | Usually (present for most inputs) |
company_name | string | Always (present in every successful answer) |
company_type | string or null | Usually (present for most inputs) |
jurisdiction | string | Always (present in every successful answer) |
borme_acts_count | integer or null | Usually (present for most inputs) |
tier_2_available | boolean | Always (present in every successful answer) |
ubo_availability | string | Always (present in every successful answer) |
date_incorporated | string or null | Usually (present for most inputs) |
recent_borme_acts | array | Usually (present for most inputs) |
registration_date | string or null | Sometimes (present only for some inputs) |
registered_address | string or null | Sometimes (present only for some inputs) |
last_borme_activity | string or null | Usually (present for most inputs) |
first_borme_activity | string or null | Usually (present for most inputs) |
legal_representatives | array or null | Usually (present for most inputs) |
primary_registration_id | string or null | Usually (present for most inputs) |
tier_2_available_reason | string | Always (present in every successful answer) |
ubo_availability_reason | string | Always (present in every successful answer) |
total_legal_representatives | integer or null | Usually (present for most inputs) |
How to call it
# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
-H "Authorization: Bearer $STRALE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"capability_slug": "spanish-company-data",
"inputs": {
"nif": "A20072302"
},
"max_price_cents": 5
}' {
"tool": "strale_execute",
"arguments": {
"slug": "spanish-company-data",
"inputs": {
"nif": "A20072302"
},
"max_price_cents": 5
}
} import { Strale } from "straleio";
const strale = new Strale({ apiKey: process.env.STRALE_API_KEY! });
const result = await strale.do({
capability_slug: "spanish-company-data",
inputs: {
"nif": "A20072302"
},
max_price_cents: 5,
}); import os
from straleio import Strale, DoRequest
strale = Strale(api_key=os.environ["STRALE_API_KEY"])
result = strale.do(DoRequest(
capability_slug="spanish-company-data",
inputs={
"nif": "A20072302",
},
max_price_cents=5,
)) # No account. The first request answers 402 with the price in USDC;
# an x402 client pays it from your wallet and repeats the request.
curl -i 'https://api.strale.io/x402/v2/spanish-company-data?nif=A20072302' Limitations
Companies without BORME activity since 2009 may be absent
Coverage comes from BORME acts published from about 2009 and includes about 2.8 million mainly small, medium and operating companies. Some major listed parent companies with no acts in that window are missing even when their subsidiaries are covered; absent companies return an error.
What to do instead: For listed parents, use lei-lookup (GLEIF) or the CNMV's public issuer registry
Records are normalised by a third-party provider
Records are derived from official BORME acts and retain references to those acts, but the normalised record is supplied by a third party rather than an official registry. Confirm critical facts against the cited act or a Registro Mercantil extract.
What to do instead: Confirm critical facts against the BORME act cited in the record or a Registro Mercantil extract
Officer records depend on published appointment acts
Officers are derived from BORME appointment, re-election and cessation acts, so missing cessation notices or appointments before coverage can leave an incorrect list. Dates of birth are not available.
Availability depends on a single provider
The source is operated by a single provider without a service agreement, uptime commitment or indemnification. Its availability and the accuracy of its normalisation can affect results.
Free-tier quota is 200 upstream requests/day (~100 lookups)
The source allows 200 requests per day, and each company lookup uses two requests, allowing about 100 lookups daily. Exhausted quota returns a retry-later error rather than a partial answer.
What to do instead: Retry after the daily quota resets and reuse existing results when their age suits the task.
Bundled checks for Spain
- Company check €1.50
- Full check €2.50
- Invoice-issuer check €2.50
Screen the company or its people
Results are matches for a person to review, not a verdict.
- Sanctions Check €0.20
- PEP Check €0.05
- Adverse Media Check €0.20