Legal Entity Resolver Domain to Company Number VAT Clay avatar

Legal Entity Resolver Domain to Company Number VAT Clay

Pricing

from $5.95 / 1,000 domain resolveds

Go to Apify Store
Legal Entity Resolver Domain to Company Number VAT Clay

Legal Entity Resolver Domain to Company Number VAT Clay

Company domain in, the registered legal entity out: legal name, company number, jurisdiction, status, LEI and VAT number. Only returns a match when the legal names are identical after normalization, so an unresolved domain comes back null instead of a confidently wrong company number.

Pricing

from $5.95 / 1,000 domain resolveds

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 minutes ago

Last modified

Share

Give it a company domain and it returns the registered legal entity behind it: legal name, company number, jurisdiction, status, LEI and VAT number. One flat row per domain, 24 fields, ready for Clay or a CRM.

๐Ÿ“ฆ What you getโš™๏ธ Features and integrations
๐Ÿ›๏ธ Legal name and company number, as the register spells them
๐ŸŒ Jurisdiction and status, active or dissolved, straight from the register
๐Ÿ”‘ LEI, the 20 character global identifier
๐Ÿงพ VAT number, validated live against EU VIES
๐Ÿงพ A full audit trail of what was rejected and why
๐Ÿ” Three registers queried: UK Companies House, GLEIF and SEC EDGAR
๐ŸŽฏ Exact name matching only, so a null is trustworthy
๐Ÿงฉ Domain keyed, no need to know the legal name first
โšก Cached 90 days for a resolved company, 7 days for a null
โฌ‡๏ธ Export to JSON, CSV, Excel, HTML or XML

Built for anyone who has a domain and needs the company behind it: KYB and onboarding, contracting and invoicing, sanctions screening, or just telling apart five similarly named companies before a deal.

โš ๏ธ A null is the product, not a gap. Register search endpoints are fuzzy and they always return something. On our five company test sample, taking the top search result would have returned a confidently wrong company number on three of them, plus a UK subsidiary in place of its US parent and a holding group in place of the operating bank. This actor only accepts a match when the legal names are identical after normalization. That is why about 6 domains in 10 resolve instead of 10 in 10, and why the 6 are worth acting on.

๐Ÿšซ This is not a company database and not a credit or risk product. It does not score companies, rate them, or tell you whether to trade with them. It answers one question: which registered legal entity sits behind this domain. Nothing here is an assessment of a company's health, size or standing.

If you need toRead these fields
Verify who you are actually contracting withlegal_name, company_number, jurisdiction
Check the company still legally existsentity_status, entity_type
Screen against sanctions or counterparty listslei, legal_name, company_number
Invoice a European customer correctlyvat_number, vat_valid, vat_registered_name
Prove the match was not a guessmatch_method, match_confidence, rejected_candidates
Tell "not found" from "not looked for"registers_queried, register_source, fetch_status

๐Ÿ” Why exact matching beats a best guess

Every register search endpoint here is fuzzy. Ask Companies House for Stripe, LLC and it returns 4,061 results with an unrelated company at the top. Ask GLEIF for the same string and it returns 189,994 records, with the right one ranked first purely by luck of relevance scoring.

Measured on the build sample, taking each register's top hit:

QueryTop hit returnedCorrect?
Stripe, LLCAALG, LLC.No, unrelated
Swish Data CorporationAZTEC DATA CORPORATION LTDNo, unrelated
AACON General ContractorsAACONNECTED LTDNo, unrelated
GitLab Inc.GITLAB UK LIMITEDNo, the UK subsidiary
Monzo Bank LimitedMONZO BANK HOLDING GROUP LIMITEDNo, the parent

Five for five wrong. This actor scans the whole first page of results and accepts only an identical normalized name, so all five are rejected and recorded in rejected_candidates where you can see them.

24 fields per domain. The ones buyers actually use:

FieldWhat it holds
legal_nameThe registered legal name, spelled as the register spells it
company_numberThe register's identifier, for example 09446231
company_number_schemeGB-COH, LEI-REGISTEREDAS, US-SEC-CIK or US-STATE-FILE
jurisdictionISO-2 country code
entity_statusactive, dissolved, closed, as the register words it
entity_typeThe register's own type string, for example ltd
lei20 character Legal Entity Identifier
lei_statusWhether that LEI is current
vat_numberThe VAT number the company publishes on its own pages
vat_validEU VIES confirmation, true, false or null
vat_registered_nameThe name VIES holds, as a cross-check on legal_name
register_sourceWhich register matched
registers_queriedWhich registers were asked
match_methodexact_normalized, input_hint_exact, fuzzy_scored or none
match_confidence100 for exact, 40 to 90 for fuzzy, null for no match
legal_name_candidatesEvery name read off the site, with its source
rejected_candidatesEvery near miss thrown away, and why
pages_attempted, pages_reachedHow much of the site was readable
fetch_status, fetch_errorWhat happened

โš ๏ธ legal_name populated with company_number null is a real answer, not a failure. It means the legal name was read off the company's own site but no register we can query for free holds it. Small US corporations are the common case: most have no LEI and are registered at state level, which has no free national search. fetch_status will read no_register_match. Throwing that row away loses the half that worked.

๐Ÿš€ How to find the registered company behind a domain

  1. Open the Input tab and put a single domain in domain, for example monzo.com. Protocol and path are stripped.
  2. Leave match_strictness on exact. This is the setting that makes a null trustworthy.
  3. Leave validate_vat on to check any VAT number found against EU VIES.
  4. Run it. One flat row comes back per domain.
  5. Read fetch_status first, then company_number. If fetch_status is no_register_match, legal_name is still populated and still useful.

๐Ÿงฉ How to use it in Clay

Add it as an enrichment on a company table, map your domain column to domain, and pull legal_name, company_number, jurisdiction and entity_status into columns. Every field is flat snake_case with null rather than a missing key, so no unnesting is needed.

If you already have the legal name and only want the register record, put it in legal_name_hint. That skips the page fetch entirely and goes straight to the registers.

๐ŸŒ How to narrow it to one country

Set jurisdiction_hint to an ISO-2 code. GB asks Companies House and GLEIF. US asks GLEIF and SEC EDGAR. Anything else asks GLEIF. It cuts latency, and registers_queried records which registers were actually asked so a null is never ambiguous.

๐Ÿ’ฐ How much does it cost to resolve a domain?

PlanPer domain
Free$0.007
Bronze$0.00665
Silver$0.0063
Gold$0.00595

๐Ÿ’ณ Every domain is billed, including the ones that come back null. The two hop lookup runs either way. Charging only for matches would push this actor toward guessing, which is the exact failure it is built to avoid. The one thing never billed is a domain that could not be reached at all.

โŒจ๏ธ Input

Set everything on the Input tab. Only domain is required.

FieldDefaultWhat it does
domainrequiredOne company domain, for example monzo.com
legal_name_hintemptySkips the page fetch and queries the registers with this name
jurisdiction_hintemptyISO-2 code. Narrows which registers are asked
match_strictnessexactexact or fuzzy. See the warning below
validate_vattrueChecks any VAT number found against EU VIES
skipCachefalsetrue forces a fresh lookup

โš ๏ธ fuzzy will hand you the wrong company on most domains. It exists because some buyers deliberately want the near miss. It caps match_confidence at 90 and writes a warning into rejected_candidates naming what exact matching would have returned instead, which on our sample was usually nothing. Leave it on exact.

๐Ÿ“ค Output

Export to JSON, CSV, Excel, HTML or XML, or pull it straight from the API. One row per domain.

{
"domain": "monzo.com",
"legal_name": "MONZO BANK LIMITED",
"company_number": "09446231",
"company_number_scheme": "GB-COH",
"jurisdiction": "GB",
"entity_status": "active",
"entity_type": "ltd",
"lei": "213800PLUYXGZ8LU7T61",
"lei_status": "ISSUED",
"vat_number": null,
"vat_valid": null,
"vat_registered_name": null,
"register_source": "companies_house,gleif",
"registers_queried": "companies_house,gleif,sec_edgar",
"match_method": "exact_normalized",
"match_confidence": 100,
"legal_name_source": "legal_page",
"rejected_candidates": "[{\"name\":\"MONZO BANK HOLDING GROUP LIMITED\",\"register\":\"gleif\",\"reason\":\"name mismatch under exact normalized matching\"}]",
"pages_attempted": 9,
"pages_reached": 4,
"fetch_status": "ok",
"fetch_error": null,
"run_date": "2026-08-10T09:12:04.118Z"
}

๐Ÿ’ก Tips

  • Read fetch_status before you read company_number. It tells you whether a null means "not in the register" or "we could not look".
  • rejected_candidates is worth reading on any row that surprises you. It shows the answer a less careful tool would have given.
  • A company's own legal pages name other companies. Its subsidiaries, its parent, its credit reference agencies. Those are found, matched and then rejected as a different company, and they appear in rejected_candidates.
  • Batch through Clay one domain per row. The cache holds a resolved company for 90 days and a null for only 7, so re-running a batch is cheap and newly registered companies are picked up quickly.
  • German, Austrian and Dutch companies almost always have a VAT number. US companies never do, because there is no equivalent.

โš ๏ธ Known limits

  • About 6 domains in 10 resolve to a register record. Measured on real companies spanning US enterprise, UK regulated, mid-market and a small contractor.
  • The US SEC register is currently unreachable. sec.gov returns HTTP 403 to automated requests from our infrastructure, measured at 7 of 7 runs on 2026-08-10. SEC EDGAR is only ever a corroborator here and can never be the sole source of a company number, so US companies still resolve through GLEIF when they hold an LEI. What it means for you: a US company with no LEI that would have been corroborated by an SEC filing comes back null instead. It is still queried on every row, and registers_queried and fetch_error record the outcome.
  • Coverage is UK, US and LEI holders. Companies House covers all UK registered companies. GLEIF covers any entity worldwide holding an LEI, which skews to financial counterparties and larger firms. There is no free national register API for most countries, and no US federal company register at all.
  • A subsidiary is not the parent and we will not swap one for the other. Both were returned by register searches on the build sample and both were rejected. rejected_candidates shows what was set aside.
  • company_number_scheme of LEI-REGISTEREDAS is not always a company registration number. It is the identifier the entity's home register holds, and for a regulated firm that can be the financial regulator's reference. Measured: GLEIF returns 730427 for one UK bank, which is its FCA firm reference, not its Companies House number. When Companies House answers, GB-COH is used and that ambiguity does not arise.
  • VAT numbers only come from what the company publishes. There is no way to search for a company's VAT number by name. The EU service can only validate a number you already have, so we read it from terms, legal and Impressum pages.
  • UK lookups are rate limited to 600 requests every five minutes. On a large batch some rows come back with fetch_status: register_error rather than a match. Re-run those rows; the cache skips the ones that already resolved.
  • Some sites block a plain fetch. Requests carry full browser headers and robots.txt is honored. When a site blocks us anyway, pages_reached is lower than pages_attempted and the row says so.
  • fetch_status: partial means it resolved and something that could have improved the answer failed. Read fetch_error. A row can be ok and still carry a fetch_error when the thing that failed could not have changed the answer.

โ“ FAQ

Why does it return null so often? Because the alternative is worse. Every register search is fuzzy and always returns something, so a tool that always answers is a tool that is often wrong. See the table above: five for five wrong on top hits.

Can I use it if I already know the legal name? Yes. Put it in legal_name_hint and it skips straight to the registers.

Does it return company directors or owners? No, and it never will. This actor names companies, not people. There are no directors, no officers and no persons of significant control anywhere in the output.

Which registers does it query? UK Companies House, GLEIF and SEC EDGAR. registers_queried tells you which were asked on each row and register_source tells you which answered.

Is the data licensed for commercial use? Yes. See the sourcing note at the bottom.

How fresh is a cached row? A resolved company is cached for 90 days, a null for 7. Pass skipCache: "true" to force a fresh lookup.

๐Ÿงฉ Want other GTM data?

Mamba Labs builds custom actors for B2B go-to-market teams. The public versions of that work live here on the Store, so our users get the same tooling we build under contract.

๐Ÿง‘โ€๐Ÿ’ผ GTM Hiring Signal Scraper๐Ÿงฑ Tech Stack Detector
๐Ÿ“ก B2B Buying Signals Aggregator๐Ÿ”‘ Job Board Keyword Scanner
๐Ÿ”— Domain to LinkedIn URL Resolver๐ŸŽฏ ICP Fit Scorer
๐Ÿ“‹ Job Posting Monitor๐Ÿ“ฌ Domain Deliverability Checker
๐Ÿข Company Firmographic Enricher๐ŸŒ Company Social Presence Mapper
๐Ÿชช Company Identity Resolver๐Ÿ’ฐ Funding and Press Signal Scanner
๐Ÿ”„ Company Change-Event Feed๐Ÿ‘ค People Finder and Email Verifier
๐Ÿš€ Prospect Engine๐Ÿค– AI Tooling Detector
๐Ÿ“ฎ Outbound Stack Detector๐Ÿ“ Publishing Frequency Tracker
โœ‰๏ธ Work Email Waterfall Finderโฉ Sequencer Lead Push
๐Ÿ… Workplace Program Detector๐Ÿ‘ฅ Team Page People Extractor
๐Ÿงญ Company Discovery List Builder

Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.

๐Ÿ› ๏ธ Need something custom built for you or your team? Tell us what you are trying to find and we will build it. Talk to Mamba Labs.

๐Ÿ›Ÿ Support

Something wrong, or a domain that should resolve and does not? Open an issue on the Issues tab with the domain and the row you got back. rejected_candidates and registers_queried are the two fields that make a report easy to act on.

Sourcing and licensing. Contains public sector information licensed under the Open Government Licence v3.0. Company data comes from UK Companies House, GLEIF (published under CC0), SEC EDGAR, the EU VIES VAT validation service, and the companies' own public web pages. This actor returns registered company information only. It contains no personal data, no directors and no beneficial owners, and it is not an assessment of any company's creditworthiness, risk or standing.

Built by Mamba Labs.