Bosco Labs

Tools › Companies

Counterparty Check API: KYB checklist from official registers

On Apify Store

Can I do business with this company? One call checks a supplier, customer or partner against official sources and returns a checklist: pass, fail, review or unverified per check, each with its source link and time. Built for AI agents doing KYB, vendor onboarding or "may I pay this party?" checks, and for people who want a fast, sourced first screen. To screen a vendor list, pass up to 10 companies in companies: one checklist per company, same price each.

Price$0.05 per company checked
DomainCompanies

Pricing (pay per event): $0.05 per company checked, on Apify and on the HTTP API, MCP and x402. An ambiguous name returns the candidates to pick from and costs nothing; so does a company no source knows.

How it compares with a model that uses web search, on 25 companies: benchmark.

Where to get it

The same data and the same rows on every channel; pick the one your agent or code already uses.

ChannelHowPay
Apify Storeapify.com/bosco_labs/counterparty-check: run it in the Apify Console, by the Apify API or from Apify's MCP server (https://mcp.apify.com?tools=bosco_labs/counterparty-check)$0.05 per company checked, billed to your Apify account
HTTP APIPOST https://api.boscolabs.dev/v1/counterparty-check with your key (get a key, $5.00 free trial)$0.05 per company checked; an ambiguous name (candidates) is free, prepaid credits
MCPhttps://api.boscolabs.dev/mcp (remote, same key) or https://api.boscolabs.dev/mcp/free (no key: find and plan) · setup$0.05 per company checked; an ambiguous name (candidates) is free, prepaid credits
x402POST https://api.boscolabs.dev/v1/counterparty-check without a key: pay per call, no account (how)$0.05 per company checked; an ambiguous name (candidates) is free, in USDC on Base

Questions agents ask

Example

Input

{ "query": "24256790", "country": "DK", "vatNumber": "DK24256790", "iban": "DK5000400440116243" }

Output

{
  "schema_version": "1",
  "query": "24256790",
  "status": "checked",
  "company": {
    "legal_name": "NOVO NORDISK A/S",
    "country": "DK",
    "registration_number": "24256790",
    "register": "Erhvervsstyrelsen (CVR)",
    "lei": "549300DAQ1CVT6CXN342",
    "lei_status": "ISSUED",
    "status": "active",
    "legal_form": "Aktieselskab",
    "registered_address": "Novo Alle 1, 2880 Bagsværd, DK"
  },
  "checks": [
    {
      "check": "register_status",
      "status": "pass",
      "detail": "Register status: active.",
      "source": "GLEIF",
      "source_url": "https://api.gleif.org/api/v1/lei-records/549300DAQ1CVT6CXN342",
      "checked_at": "2026-11-08T04:12:24+00:00"
    },
    {
      "check": "lei_status",
      "status": "pass",
      "detail": "LEI 549300DAQ1CVT6CXN342 is ISSUED.",
      "source": "GLEIF",
      "source_url": "https://search.gleif.org/#/record/549300DAQ1CVT6CXN342",
      "checked_at": "2026-11-08T04:12:24+00:00"
    },
    {
      "check": "insolvency",
      "status": "unverified",
      "detail": "Insolvency covers the UK, Poland, France, Germany and the Netherlands (insolvency registers) and Norway, Finland and Estonia (register status).",
      "source": null,
      "source_url": null,
      "checked_at": "2026-11-08T04:12:24+00:00"
    },
    {
      "check": "accounts_recent",
      "status": "pass",
      "detail": "Newest annual accounts: year ending 2025-12-31 (11 months ago).",
      "source": "filings.xbrl.org",
      "source_url": "https://filings.xbrl.org/549300DAQ1CVT6CXN342/2025-12-31/ESEF/DK/0/NOVO-2025-12-31-1-en.json",
      "checked_at": "2026-11-08T04:12:24+00:00"
    },
    {
      "check": "sanctions_entity",
      "status": "pass",
      "detail": "No match. Checked: OFAC Consolidated (non-SDN) List 2026-11-04, UN Security Council Consolidated List 2026-11-08, UK Sanctions List 2026-11-03, EU Consolidated Financial Sanctions List 2026-10-23, US Consolidated Screening List (Commerce, State) 2026-11-08, OFAC SDN List 2026-11-06.",
      "source": "OFAC, UN, UK, EU and US export lists",
      "source_url": null,
      "checked_at": "2026-11-08T04:12:24+00:00"
    },
    {
      "check": "sanctions_people",
      "status": "unverified",
      "detail": "No officer or owner names known (UK and Polish registers list them; Polish names are masked).",
      "source": null,
      "source_url": null,
      "checked_at": "2026-11-08T04:12:24+00:00"
    },
    {
      "check": "vat_number",
      "status": "unverified",
      "detail": "VIES is not answering (SERVICE_UNAVAILABLE); try again later",
      "source": "VIES (European Commission), answered by the national tax administration",
      "source_url": "https://ec.europa.eu/taxation_customs/vies/#/vat-validation",
      "checked_at": "2026-11-08T04:12:24+00:00"
    },
    {
      "check": "iban",
      "status": "pass",
      "detail": "DK5000400440116243: structure and check digits valid. Bank code 0040; no bank was contacted.",
      "source": "ISO 13616 check digits (mod 97) and the SWIFT IBAN Registry formats",
      "source_url": "https://www.swift.com/standards/data-standards/iban-international-bank-account-number",
      "checked_at": "2026-11-08T04:12:24+00:00"
    },
    {
      "check": "iban_country_match",
      "status": "pass",
      "detail": "expected DK, number is DK",
      "source": "ISO 13616 check digits (mod 97) and the SWIFT IBAN Registry formats",
      "source_url": "https://www.swift.com/standards/data-standards/iban-international-bank-account-number",
      "checked_at": "2026-11-08T04:12:24+00:00"
    }
  ],
  "summary": {
    "pass": 6,
    "fail": 0,
    "review": 0,
    "unverified": 3,
    "needs_attention": [],
    "unverified_checks": [
      "insolvency",
      "sanctions_people",
      "vat_number"
    ]
  },
  "notice": "Screening aid built from official sources, not a compliance, credit or legal determination. 'unverified' means not checked, never 'safe'. Review every 'fail' and 'review' against the linked source before acting.",
  "latest_financials": {
    "basis": "Consolidated annual report of a listed company (ESEF, IFRS figures).",
    "source": "filings.xbrl.org",
    "period_end": "2025-12-31",
    "currency": "DKK",
    "revenue": 309064000000,
    "net_income": 102434000000,
    "total_assets": 542902000000,
    "source_url": "https://filings.xbrl.org/549300DAQ1CVT6CXN342/2025-12-31/ESEF/DK/0/NOVO-2025-12-31-1-en.json"
  },
  "sanctions": {
    "entity": {
      "query": "NOVO NORDISK A/S",
      "match_found": false,
      "best_score": null,
      "complete": true,
      "summary": "No match >= 85 for 'NOVO NORDISK A/S'. Checked: OFAC Consolidated (non-SDN) List 2026-11-04, UN Security Council Consolidated List 2026-11-08, UK Sanctions List 2026-11-03, EU Consolidated Financial Sanctions List 2026-10-23, US Consolidated Screening List (Commerce, State) 2026-11-08, OFAC SDN List 2026-11-06."
    },
    "people_with_matches": [],
    "people_screened": 0
  },
  "vat": {
    "number": "DK24256790",
    "status": "unverified",
    "valid": null,
    "registered_name": null,
    "name_match": null,
    "country_match": null,
    "source_url": "https://ec.europa.eu/taxation_customs/vies/#/vat-validation"
  },
  "iban": {
    "number": "DK5000400440116243",
    "status": "pass",
    "valid": true,
    "bank_code": "0040",
    "country_match": true,
    "source": "ISO 13616 check digits (mod 97) and the SWIFT IBAN Registry formats"
  },
  "wallets": [],
  "warnings": [
    "EU Consolidated Financial Sanctions List: download failed (HTTP 500); used the copy fetched 2026-11-07T01:57 UTC (list dated 2026-10-23)."
  ],
  "source_url": "https://api.gleif.org/api/v1/lei-records/549300DAQ1CVT6CXN342",
  "retrieved_at": "2026-11-08T04:12:24+00:00",
  "duration_seconds": 28.5
}

What you get

FieldTypeMeaning
querystringThe input as given.
statusstringchecked, or ambiguous (candidates returned, nothing charged).
companyobject | nullIdentity from the register and GLEIF, with a source URL per value.
checksarrayThe checklist: check, status (pass, fail, review, unverified), detail, source, source_url, checked_at.
summaryobjectCounts per status, needs_attention (fail and review checks) and unverified_checks.
noticestringScreening aid, not a compliance, credit or legal determination.
latest_financialsobject | nullNewest fiscal year's key figures with basis and source.
peopleobject | nullUK officers and PSCs, or Polish board, proxies and shareholders.
insolvencyobject | nullUK Gazette notices or Polish KRS proceedings.
us_listingobject | nullSEC registrant data when the company files with the SEC.
sanctionsobjectentity (the company's screening row; identifier_matches: listings that carry the company's own registration number or LEI), people_with_matches, people_screened.
vatobject | nullVIES result for the VAT number.
ibanobject | nullIBAN structure and country result.
walletsarrayWallet address screening rows.
candidatesarrayOnly when status is ambiguous: companies that fit the name.
warningsarraySources that failed or were partly read.
source_urlstring | nullThe main identity source.
retrieved_atstringWhen the check ran (UTC).

Use with AI agents (MCP)

Add this URL to your MCP client (Claude, Cursor, VS Code, ...) to load the Actor as a tool through the Apify hosted MCP server. It signs you in with OAuth or accepts Authorization: Bearer <APIFY_TOKEN>.

https://mcp.apify.com?tools=bosco_labs/counterparty-check

For “Before we pay them: check supplier Novo Nordisk A/S (CVR 24256790), their VAT number DK24256790 and IBAN DK5000400440116243.” the agent passes:

{"query": "24256790", "country": "DK", "vatNumber": "DK24256790", "iban": "DK5000400440116243"}

one row (typically 10-20 KB) with stable snake_case fields; read summary.needs_attention and checks first. Usually 5-30 seconds (VIES and UK officer lookups are the slow parts). Cost: $0.05 per company checked, billed to the Apify account the MCP server is signed in with.

Or call the Apify API: POST https://api.apify.com/v2/acts/bosco_labs~counterparty-check/run-sync-get-dataset-items with the input as JSON body. Cost: $0.05 per company checked.

HTTP API

Also on the Bosco Labs HTTP API (beta): same input and same rows as the Actor, $0.05 per company checked; an ambiguous name (candidates) is free from prepaid credits (max 10 companies (companies) per call). Get a key with a $5.00 free trial; see prices and limits.

curl https://api.boscolabs.dev/v1/counterparty-check \
  -H "Authorization: Bearer $BOSCO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "24256790", "country": "DK", "vatNumber": "DK24256790", "iban": "DK5000400440116243"}'

Input fields

FieldTypeMeaning
querystringThe counterparty to check: a name (e.g. "Novo Nordisk") or an identifier: LEI (20 characters, e.g. "724500Y6DUVHQD6OXN27"), UK company number ("00445790", "SC123456"), Danish CVR ("24256790"), Norwegian org number ("923609016"), French SIREN (9 digits, "552032534") or SIRET (14 digits, "55203253400703"), Finnish Business ID with its dash ("0112038-9"), Estonian registry code (8 digits, "12417834"), US ticker in capitals or with $ ("AAPL", "$brk.b"; foreign companies listed in the US resolve to their home country), SEC CIK ("320193"). The type is detected from format and check digits; an 8-digit number valid in several registers (UK, Danish CVR, Estonian) is settled by asking them, and country decides when given. Required, unless you give a companies list instead.
countrystringISO 3166 alpha-2 country code to disambiguate, e.g. "DK", "GB", "NO", "FR", "FI", "EE", "NL", "US". With a name it limits the search to that country and, for NO, FR, FI and EE, also searches the national register (most companies there have no LEI); with a number it says which register the number belongs to (e.g. "GB" for a UK number without a leading zero, "EE" for an Estonian registry code, "FI" for a Business ID typed without its dash). Empty = detect from the query.
vatNumberstringThe VAT number the counterparty gave you, with its country prefix, e.g. "DK24256790". Checked live in VIES (valid or not, registered name) and matched against the register's name and country. Empty = the VAT number the register lists, if any (Estonia, Poland); otherwise the VAT check is unverified.
ibanstringThe bank account the counterparty wants to be paid on, e.g. "DK5000400440116243". Checked offline: length, layout and ISO 13616 check digits, bank code, and whether its country matches the company's. No bank is contacted, so it does not prove who holds the account.
walletAddressesarrayWallet addresses the counterparty wants to be paid on, e.g. ["0x7FF9cFad3877F21d41Da833E2F775dB0569eE3D9"]. Each is matched exactly against the addresses OFAC lists. At most 10.
companiesarrayCheck a list of companies in one run instead of query: up to 10 companies, each a name or number ("Tesco PLC") or an object with the fields above, e.g. ["Tesco PLC", {"query": "Novo Nordisk A/S", "country": "DK", "vatNumber": "DK24256790"}, {"query": "00445790", "country": "GB"}]. One row per company, priced like a single check ($0.05 per company checked); an ambiguous name, or a company no source knows or that does not answer in time, is a row that costs nothing. Leave query empty when you use this.

Sources, licence and limits

Is this a compliance decision? No. It is a screening aid built from official sources. Fuzzy name matching gives false positives (namesakes) and can miss a name written another way. Review every fail and review against the linked source, and use your own judgement or counsel for decisions.

Why is a check unverified? The source does not cover that country (see the coverage table), the source did not answer in time, or the input to check is missing (no VAT number). The detail says which.

Does the IBAN check prove who holds the account? No. It checks that the number is well formed and in the expected country; no bank is contacted.

How fresh is it? Registers, GLEIF and VIES are read live. Sanctions lists are at most about an hour old (each list's own date is in the detail). UK insolvency notices come from a nightly copy of The Gazette.

Personal data? Officer and owner names come from the public registers and are screened only against sanctions lists, for this check. Nothing about the people is stored. See LEGAL.md.