sfoln/kyb-company-check · Automation, Developer tools, AI On request
Know-your-business check in one call: national business register (France, Norway, Finland, Czechia, Poland), GLEIF LEI with parent companies, live EU VAT validation (VIES) and a sanctions screen on OFAC, UN, EU and UK lists, with risk flags and a summary. $12 per 1,000 companies.
KYB Company Check – Registry, LEI, VAT runs a know-your-business check on each company in one call: the national business register (France, Norway, Finland, Czech Republic, Poland), the GLEIF LEI record with its parent companies, a live EU VAT validation in VIES and a sanctions screen of the company and its parents against the OFAC, UN, EU and UK lists. Each company becomes one record with its legal identity, riskFlags, a riskLevel and a plain-language summary. Built for customer and supplier onboarding, payment and procurement checks, compliance tools and AI agents. $0.012 per company checked; companies that cannot be found are free.
Price
Price per delivered record
Event
Price
Per 1,000
Charged for
KYB company check kyb-check
$0.012
$12 / 1,000
One company checked: national register, GLEIF LEI and parents, VIES VAT validation and a sanctions screen, with risk flags and a summary.
Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.
Run
Call it from code, an agent or the Console
This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com
POST https://api.apify.com/v2/actors/sfoln~kyb-company-check/runs?maxTotalChargeUsd=1
GET https://api.apify.com/v2/actor-runs/{runId} # until status is SUCCEEDED
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json
Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Run a KYB check on Equinor ASA in Norway: is it active, what is its LEI and parent company, and is it on any sanctions list?
Input
Input fields
Companies to check, by name and country, LEI, VAT number or national registry id. Each company produces one dataset record with risk flags and a summary.
Field
Type
Default
Meaning
companies
array
—
Companies One object per company with any of name, country, lei, vatNumber, registryId, e.g. [{"name": "Equinor ASA", "country": "NO"}, {"lei": "969500KMUQ2B6CBAF162"}, {"vatNumber": "FR27552032534"}, {"country": "CZ", "registryId": "00177041"}]. A plain string is read as an LEI, a VAT number or a company name. Accounts on the Apify free plan can process up to 10 companies per run.
companyNames
array
—
Company names Company names (or LEIs / VAT numbers), one per line; the country below applies to all of them.
country
string
—
Country Default country for companies given without one (ISO code like FR or a country name). Registers searched by name: FR, NO, FI, CZ (PL by KRS number).
screenSanctions
boolean
true
Screen against sanctions lists Screen the company's legal name (and the searched name and parent companies) against OFAC SDN and Consolidated, UN, EU and UK sanctions lists.
sanctionsLists
array
["ofac-sdn","ofac-cons","un","eu","uk"]
Sanctions lists Lists to screen against (default: all five).
sanctionsThreshold
number
0.85
Sanctions match threshold Minimum name score (0.5–1) for a sanctions list entry to count as a potential match. Range 0.5–1.
checkVat
boolean
true
Validate VAT numbers (VIES) Validate the given VAT number, or the one the register shows (FR, FI, CZ, PL), live against VIES.
requesterVatNumber
string
—
Your VAT number (for consultation numbers) Optional: your own EU VAT number, so that VIES returns a consultation number for each check.
includeParents
boolean
true
Include parent companies Add the direct and ultimate parents from GLEIF and screen their names too.
minNameScore
number
0.8
Minimum name score How close (0.5–1) a register or GLEIF name must be to the searched name to be taken as the company. Range 0.5–1.
cacheMaxAgeHours
integer
24
Sanctions list cache age (hours) Reuse sanctions lists your account downloaded within this many hours (kept in the key-value store "kyb-company-check-cache"); 0 downloads fresh copies. Range 0–24.
maxItems
integer
1000
Max companies Safety cap on companies per run; further companies are ignored and counted in the OUTPUT record. Range 1–10000.
concurrency
integer
3
Concurrency Companies checked in parallel (GLEIF allows about 60 requests per minute). Range 1–5.
includeRaw
boolean
false
Include raw source records Attach the unmodified register record and GLEIF records under raw.
Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.
Field
Type
Meaning
input
string | object
Input The company as given: { name?, country?, lei?, vatNumber?, registryId? }.
status
string
Status ok | not_found | error | skipped_budget | skipped_free_plan | skipped_unmetered e.g. "ok"
charged
boolean
Charged Whether this record incurred a pay-per-event charge.
chargedEvent
string
Charged event Pay-per-event event charged for this record (present only when charged).
chargedCount
integer
Events charged Events actually charged when the charge came back short of the requested count (present only then; a warning explains it).
source
string
Source Upstream data source.
fetchedAt
string
Fetched at ISO timestamp.
error
object
Error { code, message, provider?, status? } when status is not ok. Codes set by the runtime: budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed; this Actor: not_found, sources_failed, name_required (known only from a valid VAT number without a name: not screened, not charged).
warnings
array
Warnings Notes about this record, e.g. a sanctions list that was unavailable in this run.
resolved
boolean
Resolved The company was found in a register, in GLEIF or as a valid VAT number.
legalName
string | null
Legal name Legal name: register first, then GLEIF, then VIES, then the input.
country
string | null
Country Country of registration (ISO 3166-1 alpha-2).
entityStatus
string
Entity status active | inactive | unknown (register first, else GLEIF).
registrationNumber
string | null
Registration number Id in the national register (SIREN, organisasjonsnummer, Y-tunnus, IČO, KRS) or the register id GLEIF holds.
register
string | null
Register Name of the register.
legalForm
string | null
Legal form Legal form name.
incorporatedAt
string | null
Incorporated Incorporation or registration date.
address
string | null
Address Registered address.
website
string | null
Website Website as registered (NO, FI, PL).
lei
string | null
LEI Legal Entity Identifier, when the company has one.
vatNumber
string | null
VAT number VAT number given, published by the register or confirmed by VIES (null for a number built from the register id that VIES does not know).
vatValid
boolean | null
VAT valid VIES answer for the VAT number (null: not checked, no answer, or no VAT registration for a number built from the register id).
sanctionsMatchStatus
string | null
Sanctions potential_match or no_match for the company's names (null when not screened: no company name, or the lists could not be loaded).
riskLevel
string
Risk level high, medium or low, from the risk flags.
LEI record GLEIF record: lei, legalName, entityStatus, registrationStatus, legalForm, addresses, registrationAuthority, nextRenewalDate, directParent, ultimateParent, exceptions …
vat
object | null
VAT check vatNumber, source (input, register, or derived: built from the register id), formatValid, valid, name, address, requestDate, consultationNumber, nameMatchScore, note.
sanctions
object | null
Sanctions screen screened, matchStatus (null when not screened), bestScore, matches, parents (screens of the parent companies), listsComplete, listsStale, listsScreened, listsVersion.
checks
object
Checks Per source (registry, lei, vat, sanctions): status ok | not_found | unsupported | skipped | invalid | unavailable | error, with source and message.
checkedAt
string
Checked at ISO timestamp.
raw
object
Raw records Unmodified register and GLEIF records (only with includeRaw).
France (Sirene / RNE by SIREN or name), Norway (Brønnøysund by organisation number or name), Finland (PRH YTJ by Y-tunnus or name), the Czech Republic (ARES by IČO or name) and Poland (KRS by KRS number). Companies elsewhere are checked through GLEIF, VIES and the sanctions lists; their records say registry: unsupported.
What do the risk flags mean?
High: sanctions_potential_match, parent_sanctions_potential_match, entity_inactive, insolvency_proceedings, vat_invalid. Medium: vat_name_mismatch, lei_lapsed, name_mismatch, not_found_in_registry, recently_incorporated, registry_unavailable, lei_unavailable, vat_unverified, sanctions_not_screened, sanctions_partial, company_not_found. riskLevel is high, medium or low accordingly.
Is a company I cannot find charged?
No. When no register, GLEIF record or valid VAT number matches and its name is not a potential sanctions match, the record has status not_found and is free. A company known only from a valid VAT number whose name VIES withholds (e.g. Germany) cannot be screened: it is returned free with error.code name_required; add the company name.