LEI Lookup - VAT Number Checker & Company Identity
Pricing
$6.00 / 1,000 identity row delivereds
LEI Lookup - VAT Number Checker & Company Identity
One row per company: LEI lookup result, ownership chain, EU VAT check with the VIES answer, national registry number and annual accounts where a free register has them. Built for KYB onboarding, supplier vetting and counterparty checks.
Pricing
$6.00 / 1,000 identity row delivereds
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
LEI Lookup — VAT Number Checker and Company Identity Extractor
A LEI lookup that answers the whole KYB question. Give a Legal Entity Identifier, an EU VAT number, a national registry number, a company name or a website domain, and get back the legal entity with its LEI, its registry number, its parent chain, its VAT finding and whatever annual accounts a free public register will hand over. This is the identity check that turns "who is behind this counterparty" into one canonical record you can approve or reject against.
LEI lookup: what comes back
- The GLEIF Level 1 identity: legal name, jurisdiction, national registry
number (
entity.registeredAs), legal form, entity status, creation date and both address blocks (legal seat and headquarters). - GLEIF registration trust flags:
registration.status(ISSUED, LAPSED, MERGED, RETIRED),nextRenewalDate,managingLou,corroborationLevel(FULLY_CORROBORATED versus ENTITY_SUPPLIED_ONLY) and the validation reference on the record. - The joins: BIC codes, ISIN instruments, conformity flag and the
registeredAtregistry authority. - GLEIF Level 2 parent chain: the direct parent and the ultimate parent, each as a full mini-record, or the reporting-exception reason when no parent is being reported (NATURAL_PERSONS, NO_KNOWN_PERSON, NON_CONSOLIDATING and the rest). Plus a count of direct children.
- EU VIES VAT validation: the
validflag, theuserErrorcode, and — when you send your own requester member state and number — therequestIdentifierconsultation number that is the proof-of-check token your compliance file needs. Where the member state returns them, the row also carries the trader name and address, plus the approximate-match codes (matchName,matchCity,matchStreet,matchPostalCode,matchCompanyType) when you send candidate trader fields. - Annual accounts from a free public register where one exists, with the source named on the row and honest nulls where it does not. UK Companies House filing history when you bring a Companies House API key. Nothing is invented and nothing is interpolated: a missing year stays missing.
- For a domain input: RDAP registration facts (registrar, registrant where published, creation and expiry dates, nameservers, status codes) plus the site's own title and a couple of trivial technology hints.
Why scrape company identity
Compliance teams onboard sellers and suppliers from a webshop domain or a marketplace handle. The registers that answer the question are split: GLEIF holds the legal entity and its ownership chain, the EU VIES service holds the VAT finding, the national registries hold the accounts, and RDAP holds the domain. Nobody joins them for you. A VAT number on its own says a seller is registered; it does not say who owns them or whether the LEI on their invoice is still ISSUED.
The decision this changes is binary. A marketplace that checks a seller
puts the VIES answer on the file — valid: true, with the trader name and
address where the member state returns them — while the same row shows
GLEIF with no parent chain and a registration that has lapsed, so the
account goes to enhanced due diligence instead of straight through. A
comparative score ("97% of sellers validated") changes nothing in that
moment. The joined row does.
Input
| Field | Required | What it does |
|---|---|---|
lei | one of these | 20-character Legal Entity Identifier, exact record lookup |
vat_number | one of these | EU VAT number with a two-letter member state prefix (LU26375245). The prefix is stripped before the VIES call; the prefix is required — bare national digits such as 26375245 are refused, and jurisdiction is not used as a fallback member state |
registered_as | one of these | National registry number: Dutch KvK, German HRB, UK company number |
company_name | one of these | Legal name for the GLEIF name search when you have no identifier |
domain | one of these | Website domain. Adds RDAP and the site title, and can seed the name search |
jurisdiction | optional | Two-letter country code that narrows fuzzy name search and decides which accounts register to consult |
company_number | optional | Companies House number for the UK accounts door |
fiscal_year | optional | Fiscal year to look for in the accounts register |
requester_member_state_code | optional | Your own member state code |
requester_number | optional | Your own VAT number. With the requester member state this is what makes VIES return a consultation number |
Give at least one of the five identifiers. The actor resolves whichever you gave and enriches the row with whatever else it can reach.
Output
One row per entity. This is a real run: the input was one LEI,
H1FJE8H61JGM1JSGM897. Trimmed to the fields that matter here:
{"lei": "H1FJE8H61JGM1JSGM897","legal_name": "Koninklijke Philips N.V.","jurisdiction": "NL","registered_as": "17001910","legal_form_id": "B5PM","entity_status": "ACTIVE","creation_date": "1912-09-10T22:00:00Z","registration_status": "ISSUED","next_renewal_date": "2027-06-26T09:11:11Z","managing_lou": "724500A93Z8V1MJK5349","corroboration_level": "FULLY_CORROBORATED","bic": ["KOPLNL2EXXX"],"isins": ["US718448AD51", "NL0000009538", "NL0014275422", "US500472AE51","US500472AC95", "NL0015073VN5", "US5004723038"],"direct_parent": null,"direct_parent_reporting_exception": {"category": "DIRECT_ACCOUNTING_CONSOLIDATION_PARENT","reason": "NO_KNOWN_PERSON"},"direct_children_count": 15,"vat_number": "017001910B01","vies": {"valid": false,"request_identifier": null,"name": null,"address": null,"vat_derived_from_registry_id": true,"trader_match_codes": {"match_name": "NOT_PROCESSED"}},"jaarcijfers": {"source": "nl_public_registers","available": false,"reason": "no free machine-readable per-company figure door in NL; KVK extracts are a paid product. registry id returned so the caller can purchase the extract","registry_id": "17001910","filings": []},"sources": ["gleif", "vies"],"completeness": {"gleif": true, "vies": true, "jaarcijfers": false, "domain": false}}
Fields that no register could supply come back null or with an explicit
reason, never with a plausible-looking guess. The valid: false above is
an honest answer, not a broken run: no VAT number was supplied, so the
actor built the standard Dutch form from the registry id, VIES refused
that construction, and the row says so — vat_derived_from_registry_id
is true and user_error is INVALID. Send a real VAT number instead and
the block carries what the member state answered for it. From a run with
LU26375245 supplied:
"vies": {"member_state": "LU","vat_number": "26375245","valid": true,"user_error": "VALID","name": "AMAZON EUROPE CORE S.A R.L.","address": "38, AVENUE JOHN F. KENNEDY\nL-1855 LUXEMBOURG","request_identifier": null,"vat_derived_from_registry_id": false}
VAT number checker: what the VIES answer contains
A VAT number checker has one question — is this number registered, and with
whom — and the row answers it with the evidence around it rather than a bare
flag. Send the number and the block carries member_state, vat_number as
the service saw it, valid, user_error, and the consultation number when
you asked for one. Where the member state publishes them it also returns the
trader name and address, which is how you catch a number that is valid for a
company with a different name than the one on the invoice. The approximate
match codes (matchName, matchCity, matchStreet, matchPostalCode,
matchCompanyType) say which of those fields were compared and what came
back, so an empty name reads as "not disclosed", not as "no match".
What a VAT number checker cannot do on its own, this row does next to it: the same record carries the LEI, the registry number and the parent chain, so the validity flag and the identity it belongs to can never drift apart in your file.
What to expect from the check itself:
LU26375245is accepted and normalised to the bare national digits; the two-letter prefix is required. Bare national digits without it, and sending the country prefix twice, are the forms the service refuses.- The consultation number only appears when you also send
requester_member_state_codeandrequester_number. Without them VIES still validates, it just does not issue a proof-of-check token. - Member states differ on what they disclose. Some return trader name and address; some strip both; Spain answers through approximate matching only. The row reports what came back and leaves the rest null.
- VIES rate-limits concurrency per member state and signals it inside the
response body rather than with an HTTP status. The actor reads that, treats
it as a retry and never records it as an INVALID result. If a member state
stays busy you get a
user_errorofMS_MAX_CONCURRENT_REQwithvalid: null— re-run it. - No VAT number given? The actor builds the standard Dutch form from a KvK
number (
17001910→NL017001910B01), checks it and reports what came back, includingvalid: false, withvat_derived_from_registry_id: trueso you can tell a derived check from one you asked for. When you hold the real VAT number, send it.
Use cases
Marketplaces and B2B payment platforms onboarding sellers. A seller signs up with a webshop domain. The actor resolves the domain to a legal entity, returns the LEI and the registry number, checks the VAT number and stamps the consultation number into the onboarding file, and shows the parent chain so the compliance officer can see whether the seller is a subsidiary of a group you already know. One call replaces five register lookups and a spreadsheet.
Distributors and PE/M&A teams resolving counterparties before money moves. Give the target's legal name and jurisdiction, get the LEI, the registration status, the renewal date and the ownership chain. A lapsed LEI or a FULLY_CORROBORATED absence of parents is a finding you can act on, not a metric.
Credit teams sizing a counterparty from its last filed year. Start from the business registration lookup: point the actor at a UK company number and bring a Companies House key; the filing history comes back attached to the right legal entity rather than to a name string. Where no free register publishes figures, the row says so and hands you the registry id so you can buy the extract.
Brand and grey-import checks. A listing claims to be an authorised distributor of brand B. The LEI record either sits inside brand B's ownership chain or it does not. The direct-children count and the parent links are what settle it.
How it compares
| This actor | LEI-only lookup actors | Standalone VAT checkers | |
|---|---|---|---|
| GLEIF L1 + L2 identity | yes | yes | no |
| Parent chain + reporting exceptions | yes | sometimes | no |
| VIES validation + consultation number | yes | no | yes |
| Trader name and address where returned | yes | no | sometimes |
| Annual accounts where free | yes | no | no |
| Domain / RDAP resolution | yes | no | no |
| One joined row instead of two exports | yes | no | no |
| Price per 1k rows | $6.00 | from $2.00 | from $5.00 |
The price row quotes pay-per-event Store rates measured on 24 September 2026: a LEI record from $0.002, a VAT check from $0.005 at the entry tier, this actor $0.006 for the joined row. Several free actors in both columns charge only for compute and hand back a single-register answer, which is a different product, not a cheaper version of this one.
The LEI-only lookups on the Store are cheaper per record and should be your pick if all you want is a single LEI. The standalone VAT checkers are cheaper per check and should be your pick if all you want is a validity flag. This actor exists for the join: one row that carries the VAT finding and the legal identity and the ownership chain together, so the two answers can never drift apart in your file.
Pricing
$0.006 per identity row. All pricing is pay-per-event — you only pay for results you receive. No actor-start fee, no per-compute-unit charges.
Limits and gotchas
- Give at least one identifier. A run with nothing to resolve fails fast
with
bad_inputrather than returning an empty row. - The VAT checks are the finicky half: see the section above for normalised prefixes, consultation numbers, per-member-state disclosure and the concurrency signal you may have to re-run.
- Annual accounts coverage is uneven by design. The UK door needs a Companies House API key in the environment. The NL door reports honestly that no free machine-readable per-company figure source exists rather than filling the gap with an estimate.
- Name search is fuzzy. When you have an LEI, a registry number or a VAT
number, use it; a name alone can land on a similarly named entity, so
check
registered_asandjurisdictionon the row before trusting it. - Cold start is a few seconds. The registers are queried live; there is no stale cache standing between you and the current record.
FAQ
Can I look up a company by LEI and get its VAT number in one call? Yes. Give the LEI. The actor fetches the GLEIF record, derives the Dutch VAT form from the registry number where the jurisdiction allows it, checks it against VIES and puts the identifier and the VIES answer on the same row. Add your own requester member state and number if you also want the consultation number.
Does a GLEIF record contain a VAT number?
No. The LEI record has no tax-number field at all. The join from
entity.registeredAs to a VAT identifier is the part this actor does for
you, and the VIES result is what proves the join landed on a real
registration.
What is a VIES consultation number and why do I need one?
requestIdentifier, the consultation number, is the token the EU service
issues to the requester as proof a specific check happened at a specific
time. Your compliance file wants that token next to the finding. You only
get one by sending your own requester member state and number.
How do I find the ultimate owner of a company from its LEI?
The row carries ultimate_parent as a mini-record. When there is no
ultimate parent being reported, ultimate_parent_reporting_exception
gives the category and reason instead of a silent null, so you can tell
"not disclosed" apart from "not looked up".
Can this actor give me annual accounts for a Dutch BV? Not the figures. No free public register publishes per-company Dutch annual accounts as machine-readable data. The row returns the registry id and an explicit reason so you can buy the extract. The UK door does return filing history when you bring a Companies House key.