Business Verification (KYB) — VAT, LEI & Registered Address in One Call | Acuris Geo
This product is temporarily unavailable. We’re not taking new activity on it right now — check back soon, or email sales@acuris-geo.com with questions.

Verify a company is real — from official registers, in one call.

One POST /business checks a company against the VIES VAT register, the GLEIF LEI register and (optionally) Companies House, then validates its registered address on our own engine. You get a single 0–100 business score, a clear verdict, and the register evidence behind it. Official, free-to-use sources — no credit bureau, no black box.

Temporarily unavailable API reference

Business Verification is available on request

This product is not sold self-serve. Tell us which registers you need to reach and the volume you expect, and we’ll follow up by email. The full response — register evidence, score and verdict — is documented in the API reference.

Temporarily unavailable API reference

What each result means

Every field the /business response includes, and what it tells you about a company.

business_score
A single 0–100 composite, weighted only over the checks that actually ran (VAT 40 · LEI 30 · address 20 · name 10, re-normalised over what we could verify). Lets your code branch simply: if business_score < 80: review.
verdict
Our overall read. verified (≥80) — the identifiers are valid and the details cohere. partial (50–79) — some registers confirm the company, others were unavailable or didn’t line up. unverified (<50) — the company doesn’t hold together against the registers we reached. insufficient_input (business_score: null) — a name alone could only be checked against the LEI register and found nothing, or no register could be reached at all; that’s thin input, not evidence against the company — add a VAT number or address and re-check.
register.vat
The VIES result for the VAT number you sent: checked, valid, plus the register’s own name, address and country where the member state returns them. This is the EU’s official VAT-validity service — a valid here means the VAT number is live and registered today.
register.lei
The GLEIF result: found, the lei itself, the register’s legal_name, status (e.g. ISSUED, LAPSED) and country. GLEIF is the open, CC0 global register of legal entities — an active LEI is strong evidence the entity is a real, identified legal person.
register.companies_house
Present when a UK company is checked. Resolved against a built-in local copy of the official Companies House register — no API key, fully offline — returning found, company_number, name, status, category, incorporation_date and registered address. Omitted (not failed) when not applicable.
register.beneficial_owners
Present for UK companies: the people with significant control as filed in the public PSC register — a count and an owners list of name, kind, natures_of_control, notified_on, nationality and country_registered. This is the register as recorded, not an investigative or verified ownership trace, and UK only. PSC entries for individuals are personal data, served under OGL v3.0; we honour a data-subject removal request and suppress the entry on request.
register.sirene
Present when a French company is checked. Resolved against a built-in local copy of the official INSEE SIRENE register (~15.9M companies) — no API key, fully offline — returning found, siren, name, status, active (etatAdministratif: A=active / C=ceased), legal_category, creation_date and diffusible. Scored into the composite like Companies House — an active SIREN counts as a full register confirmation. The returned name is the register’s name as filed, not a verified trade name. For non-diffusible (INSEE-protected) entities we keep the siren and status but suppress the name — we don’t redistribute INSEE-protected names. Register existence and status, the French equivalent of the UK Companies House leg.
jurisdiction_risk
A country-level risk signal for the company’s jurisdiction (where it is based): iso2, cpi_score and cpi_rank (Transparency International’s CPI 2024, 0–100, higher = cleaner), the official eu_tax_blacklist and eu_aml_high_risk flags, a risk_band (low/medium/elevated/high/severe) and a risk_score (0–100, higher = riskier). 187 countries. This is a jurisdiction reference, not a per-entity determination — CPI is a perceptions index, the EU flags are official country designations; neither says anything about this specific company. Available standalone and free at GET/POST /jurisdiction-risk?country=deu.
iban
Present when you send an iban. Offline structure + check-digit validation (ISO 13616 / mod-97, 80 countries) plus a bank-exists lookup of the IBAN’s bank code against official directories for 8 countries: Germany (Deutsche Bundesbank Bankleitzahlen) and FR / ES / PT / GR / NL / IE / MT (ECB List of MFIs) — returning the bank’s name, bic and city, and flagging iban_country_differs_from_company_country. Honest scope: this validates the IBAN is structurally real and its bank exists — it does not confirm the account exists or belongs to this company (that needs a bank-side check). Other countries get structure + check-digit only. Also available standalone at POST /iban-validate.
attribution
The mandatory licence credit returned whenever register data is present — e.g. Companies House / PSC: “Contains public sector information licensed under the Open Government Licence v3.0. Source: Companies House.”; SIRENE: “Contains INSEE SIRENE data, licensed under the Open Licence / Licence Ouverte 2.0 (Etalab). Source: INSEE.”; jurisdiction risk: “Corruption Perceptions Index 2024 by Transparency International, licensed under CC BY 4.0. EU tax and AML high-risk jurisdiction lists: © European Union, via EUR-Lex.”; bank directories: “Source: Deutsche Bundesbank (Bankleitzahlendatei, non-binding, for payment processing). Source: European Central Bank (List of MFIs).”
address
Present only when you sent an address. The full Acuris validation of the registered addressmatch_type up to rooftop, accuracy_type, the standardized form. Same engine as /validate, 240+ countries.
consistency.name_match_score
Does the name you submitted match the name the register holds? “Stahlwerk Becker GmbH” against the VIES/GLEIF registered name scores high; a different trading name scores low. Informational — it nuances the score, it doesn’t gate the verdict.
register_name
The authoritative legal name as the registers return it — useful when the name on your order or contract is a brand or abbreviation and you want the entity’s real legal name.
checks_run / check_scores
checks_run lists which legs actually executed (a register that was down or not applicable simply isn’t in here); check_scores gives the per-check component score behind the composite, so you can see which register carried the verdict.
reasons
Machine-readable codes behind the verdict (e.g. vat_invalid, lei_not_found, claimed_name_differs_from_register, registered_address_not_validated) — for your code to act on programmatically.

What this checks — and what it doesn’t

Honesty first: this confirms a legal entity exists in an official register — VIES, GLEIF, Companies House for the UK and INSEE SIRENE for France — and that its identifiers and details cohere. For UK companies it also surfaces the public PSC register as filed — who is recorded as having significant control. We add a country-level jurisdiction-risk signal for where the company is based, but that rates the jurisdiction, not the company. It is not an ownership investigation, not verified or unwound layered ownership, not a credit decision, and not a certified compliance artefact. Every register fails soft — one being down lowers confidence, it never hard-fails the call.

What you get todayWhat it is not
✅ VAT number is live and registered now (VIES, the EU’s official service) 🔎 Investigative or verified UBO tracing, layered-ownership unwinding, or ownership in countries outside the UK
✅ Legal entity is identified in the open GLEIF LEI register 💳 A credit decision, credit limit or solvency rating
✅ Registered address is real, deliverable-grade, to point-coordinate level ⚖️ A certified AML/KYB compliance artefact, BaFin approval or EBA-RTS conformance
✅ The name you hold matches the register’s legal name 🔍 Financial accounts, filings analysis or adverse-media screening
UK beneficial owners from the public PSC register — who is recorded as having significant control
✅ French company exists in the official INSEE SIRENE register, with active/ceased status — the French equivalent of the Companies House leg 🔍 An investigation of the specific company, or redistributing INSEE-protected (non-public) company names
✅ Country-level risk context for the company’s jurisdiction (CPI 2024 + the EU tax-blacklist and AML high-risk lists) 🚫 A determination that this company is risky or corrupt — it scores the jurisdiction, not the entity

Screening a name against sanctions lists? That’s a separate capability — /sanctions-screen fuzzy-matches a name against the EU Consolidated, OFAC SDN & Consolidated, UN, UK OFSI, Swiss SECO, French Trésor and Australian DFAT lists (sanctions only — not PEP, not adverse media). A hit is a name match for human adjudication, never a determination that an entity is sanctioned; name collisions are common. It runs free inside our Business Verification and standalone via /sanctions-screen. Verifying a person, not a company? See the Identity Check; for government-grade proof, the EUDI Wallet Verifier.

Real registers, one score

🎯

One 0–100 score

VAT, LEI, registered address and name checks collapse into a single number plus a verified / partial / unverified verdict your code can branch on (insufficient_input when there’s too little to check — score null).

🧾

VIES VAT validity

The VAT number is checked against the EU’s official VIES service — live registration status, plus the registered name and address where the member state returns them.

🔗

GLEIF LEI lookup

The open, CC0 global register of legal entities — confirm an active LEI, pull the authoritative legal name, status and country.

🇬🇧

Companies House, built in

UK companies resolve against a local copy of the official Companies House register — company number, status, registered office. No API key, fully offline, on-prem-ready.

🇫🇷

France SIRENE, built in

French companies resolve against a local copy of the official INSEE SIRENE register — ~15.9M companies, fully offline, on-prem-ready. Confirm a SIREN exists and is active (etatAdministratif), with legal category and creation date. Licensed under the Open Licence / Licence Ouverte 2.0 (Etalab).

👥

UK beneficial owners

For UK companies we return the people with significant control exactly as filed in the public PSC register — name, nature of control and nationality — under the Open Government Licence. The register as recorded, UK only, not an ownership investigation.

🏠

Registered-address validation

The address leg is full Acuris validation — standardisation, corrections and point-coordinate matching across 240+ countries.

🪂

Every register fails soft

If VIES is down or GLEIF times out, the score is computed over the checks that did run. One register down lowers confidence — it never hard-fails your call.

🌍

Jurisdiction risk signal

A country-level read on where the company is based: Transparency International’s CPI 2024 score plus the EU’s official tax-blacklist and AML high-risk lists, rolled into a risk_band. It rates the jurisdiction, not the company — CPI is a perceptions index, the EU flags are official country designations. Also a free standalone /jurisdiction-risk endpoint.

🇪🇺

EU data residency

Runs on the same EU-hosted stack as our address validation. US data residency optional.

Where teams put it to work

🏪

Marketplace seller onboarding

Before a new seller goes live, confirm the business behind the storefront actually exists: valid VAT, an identified legal entity, a real registered address. Route weak scores to manual review instead of letting a phantom company list.

🧾

B2B invoice-payment risk

Offering net-30 or invoice terms? Check the buyer is a registered company with a live VAT number before you extend credit terms — and price the risk on businesses you can’t verify.

🏦

Fintech KYB intake

First-pass business verification for merchant and SMB onboarding: registers confirm the entity exists and its identifiers cohere before a human — or your full KYB provider — picks it up.

🚚

Supplier & vendor vetting

Procurement and AP: validate a new supplier’s VAT and registered address before the first PO, and catch typo’d or recycled VAT numbers before they hit your ledger.

📊

VAT-number cleanup

Audit existing customer or vendor records: re-validate stored VAT numbers against VIES in bulk and flag the ones that have lapsed, changed or never matched.

⚖️

Pre-KYB triage

Full UBO/KYB checks are expensive and slow. Run this first, pass only entities that already verify into the heavy flow, and send the obvious non-companies straight to rejection.

Three lines, any language

A one-line curl, or the same call straight from Node and Python — clean JSON, identical on every tier. (Response below is illustrative.)

curl -X POST 'https://api.acuris-geo.com/business' \
  -H 'X-Acuris-Key: YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "name":    "Stahlwerk Becker GmbH",
    "vat":     "DE123456789",
    "country": "deu",
    "address": "Hohenzollernring 72, 50672 Köln"
  }'

# → illustrative response:
# {
#     "business_score": 100,
#     "verdict": "verified",
#     "checks_run": ["vat", "lei", "address", "name"],
#     "register": {
#       "vat": { "checked": true, "valid": true, "name": "Stahlwerk Becker GmbH", "country": "DE" },
#       "lei": { "found": true, "legal_name": "Stahlwerk Becker GmbH", "status": "ISSUED" }
#     },
#     "address": { "match_type": "rooftop", "accuracy_type": "rooftop" },
#     "register_name": "Stahlwerk Becker GmbH",
#     "validation_credits_remaining": 4988
#   }
const res = await fetch("https://api.acuris-geo.com/business", {
  method: "POST",
  headers: { "X-Acuris-Key": process.env.ACURIS_API_KEY, "Content-Type": "application/json" },
  body: JSON.stringify({
    name: "Stahlwerk Becker GmbH",
    vat: "DE123456789",
    country: "deu",
    address: "Hohenzollernring 72, 50672 Köln",
  }),
});
const r = await res.json();

console.log(r.business_score, r.verdict, r.register.vat.valid);
// → 100 "verified" true
import os, requests

r = requests.post(
    "https://api.acuris-geo.com/business",
    headers={"X-Acuris-Key": os.environ["ACURIS_API_KEY"]},
    json={
        "name": "Stahlwerk Becker GmbH",
        "vat": "DE123456789",
        "country": "deu",
        "address": "Hohenzollernring 72, 50672 Köln",
    },
).json()

print(r["business_score"], r["verdict"], r["checks_run"])
# → 100 verified ['vat', 'lei', 'address', 'name']

At least one of name / vat is required; lei, address and country are optional and each adds a leg to the score.

Priced individually, on request

Business Verification is priced individually, like our other identity and risk checks — volumes and the registers you need differ too much for a one-size price. Sanctions screening runs free inside every Business Verification and Identity Check call, or standalone via /sanctions-screen.

Temporarily unavailable Verifying a person? Identity Check
Companies House and UK PSC data: contains public sector information licensed under the Open Government Licence v3.0. Source: Companies House. France company data: contains INSEE SIRENE data, licensed under the Open Licence / Licence Ouverte 2.0 (Etalab). Source: INSEE. Jurisdiction risk: Corruption Perceptions Index 2024 by Transparency International, licensed under CC BY 4.0. EU tax and AML high-risk jurisdiction lists: © European Union, via EUR-Lex.