Engineering notes · KYB
Your Spanish KYB lookup says "exists". Here's how to answer "who runs it and is it in trouble"
Every Spanish KYB integration starts the same way: a CIF/NIF lookup that returns
the legal name, an address, a CNAE code. Necessary — and nowhere near enough for
onboarding decisions. The provider we'll use as the example, Verifik, documents
exactly these fields for its /v2/es/company endpoint.
What's missing is everything that changes: who the current directors are, what happened to the company across its life, and whether it's in an insolvency process right now. All of that is published in Spain's official gazette (BORME) — and we've parsed all of it since 2009 into a typed API.
The pattern: two calls after your primary lookup
primary = verifik(cif) # name, address, CNAE
slug = borme.events(name_contains=primary.businessName)[0].company_slug
card = borme.companies(slug) # ← the interesting part
Full working script (60 lines, requests only): gist.github.com/george-kozlitin/enrich_spanish_kyb.py
Run against Verifik's own docs example
Verifik's documentation demonstrates the endpoint with SERESCO SA (CIF 33011826, an Asturias software firm). Their response: name, address, CNAE 6209, phone. Piping that name through the enrichment:
PRIMARY : SERESCO SA. | SOCIEDAD ANONIMA | CNAE 6209
STATUS : active
OFFICERS : 11 current roles (board, CEO, auditors — with names)
HISTORY : 53 registry events since 2009
2026-XX-XX APPOINTMENTS+TERMINATIONS → boe.es/borme/.../BORME-A-....pdf
Same lookup, one order of magnitude more decision-relevant data — each event carrying a link to the official BOE PDF for the audit file.
No tax id in the gazette — and why that's fine
The part your users will actually feel: monitoring
Onboarding is a snapshot; risk is a stream. The same API exposes HMAC-signed webhooks per watched company — director exits, capital operations, insolvency filings land in your system the morning the gazette publishes them. That's the layer Spanish registry incumbents don't sell.