Bosco Labs

Tools › Companies

VAT Number & IBAN Check API: EU VIES + IBAN validation

On the HTTP API

Answers "is this EU VAT number registered, to whom, and is this IBAN real?" One row per VAT number, checked live against the European Commission's VIES service (valid, registered name and address, a name match against the company you expect), and one row per IBAN, checked against ISO 13616 (check digits, length and layout per country, bank code, country match). Built for AI agents doing supplier onboarding, invoice checks and KYB, and for finance teams who want one sourced answer per number.

Price$0.002 per definite check (VAT number answered by VIES, or a valid IBAN); malformed, failed and unverified are free (HTTP API)
DomainCompanies
Call itApify API, MCP or HTTP API

Pricing (pay per event): $0.002 per check with a definite answer (check): a VAT number VIES answered valid or not valid, or a valid IBAN. Malformed numbers and anything VIES could not answer ("unverified") cost nothing.

Questions agents ask

  • “Check that supplier VAT number IE6388047V belongs to Google Ireland and that IBAN NL91ABNA0417164300 is valid.”

Example

Input

{
  "vatNumbers": ["IE6388047V"],
  "ibans": ["NL91ABNA0417164300"],
  "expectedName": "Google Ireland Ltd",
  "expectedCountry": "IE",
  "requesterVatNumber": "NL123456789B01"
}

Output

[
  {
    "schema_version": "1",
    "query": "IE6388047V",
    "check_type": "vat",
    "number": "IE6388047V",
    "country_code": "IE",
    "status": "pass",
    "valid": true,
    "reason": null,
    "registered_name": "GOOGLE IRELAND LIMITED",
    "registered_address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
    "request_date": "2026-11-07T16:05:31.393Z",
    "consultation_number": null,
    "bank_code": null,
    "sepa_country": null,
    "expected_name": "Google Ireland Ltd",
    "name_match": true,
    "expected_country": "IE",
    "country_match": true,
    "checks": [
      {"check": "vat_format", "status": "pass", "detail": "IE VAT number format", "source": "VIES FAQ format table"},
      {"check": "vies_registration", "status": "pass", "detail": "valid", "source": "VIES (European Commission), answered by the national tax administration"},
      {"check": "name_match", "status": "pass", "detail": "expected 'Google Ireland Ltd', registered 'GOOGLE IRELAND LIMITED' (case, accents, punctuation and legal forms ignored)", "source": "VIES (European Commission), answered by the national tax administration"},
      {"check": "country_match", "status": "pass", "detail": "expected IE, number is IE", "source": "VIES (European Commission), answered by the national tax administration"}
    ],
    "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-07T16:05:31Z"
  },
  {
    "schema_version": "1",
    "query": "NL91 ABNA 0417 1643 00",
    "check_type": "iban",
    "number": "NL91ABNA0417164300",
    "country_code": "NL",
    "status": "pass",
    "valid": true,
    "reason": null,
    "registered_name": null,
    "registered_address": null,
    "request_date": null,
    "consultation_number": null,
    "bank_code": "ABNA",
    "sepa_country": true,
    "expected_name": null,
    "name_match": null,
    "expected_country": "IE",
    "country_match": false,
    "checks": [
      {"check": "iban_structure", "status": "pass", "detail": "NL length 18, layout and check digits", "source": "ISO 13616 check digits (mod 97) and the SWIFT IBAN Registry formats"},
      {"check": "country_match", "status": "fail", "detail": "expected IE, number is NL", "source": "ISO 13616 check digits (mod 97) and the SWIFT IBAN Registry formats"}
    ],
    "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-07T16:05:32Z"
  }
]

What you get

FieldTypeMeaning
schema_versionstringOutput schema version.
querystringThe VAT number or IBAN as given.
check_typestringvat or iban.
numberstring | nullNormalised number: upper case without spaces, e.g. IE6388047V or NL91ABNA0417164300 (Greek VAT numbers with EL).
country_codestring | nullCountry of the number: VAT prefix (EL = Greece, XI = Northern Ireland) or IBAN country (ISO 3166 alpha-2); null if unreadable.
statusstringpass = valid; fail = invalid (malformed, or VIES says not valid); unverified = VIES or the member state gave no answer (never means invalid; check again later).
validboolean | nulltrue, false, or null when unverified.
reasonstring | nullWhy the row failed or is unverified, in words an agent can act on; null on pass.
registered_namestring | nullName registered with the VAT number, as VIES returns it; null when the member state does not share it (e.g. DE) or the number is not valid.
registered_addressstring | nullRegistered address as VIES returns it (lines joined with commas); null when not shared.
request_datestring | nullVIES request date-time (ISO 8601, UTC) of the answer; null for IBANs and unanswered requests.
consultation_numberstring | nullVIES consultation number, only when requesterVatNumber was given; keep it as proof of the check.
bank_codestring | nullBank identifier taken from a valid IBAN at the SWIFT IBAN Registry position, e.g. ABNA (NL) or 37040044 (DE).
sepa_countryboolean | nullWhether the IBAN's country is in the SEPA scheme (SWIFT IBAN Registry).
expected_namestring | nullexpectedName from the input (VAT rows).
name_matchboolean | nullexpectedName equals the VIES name after removing case, accents, punctuation and legal forms; null when not asked or no name was shared.
expected_countrystring | nullexpectedCountry from the input.
country_matchboolean | nullThe number's country equals expectedCountry (GB IBANs cover JE, GG, IM); null when not asked or not checked.
checksarrayEvery check made: {check (vat_format, vies_registration, name_match, iban_structure, country_match), status (pass/fail/unverified), detail, source}.
sourcestringWhere the answer comes from: VIES (European Commission, answered by the national tax administration) or the ISO 13616 / SWIFT IBAN Registry rules.
source_urlstringVIES page or the SWIFT IBAN Registry page.
provided_bystringBosco Labs (boscolabs.dev).
checked_atstringISO 8601 UTC time of the check.

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>. It works once the Actor is listed on the Apify Store; until then use the HTTP API or the remote MCP server at https://api.boscolabs.dev/mcp.

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

For “Check that supplier VAT number IE6388047V belongs to Google Ireland and that IBAN NL91ABNA0417164300 is valid.” the agent passes:

{"vatNumbers": ["IE6388047V"], "ibans": ["NL91ABNA0417164300"], "expectedName": "Google Ireland"}

one small row per number (typically 1-3 KB), stable snake_case fields, a checks list with pass, fail or unverified per check and its source. VIES answers in about 1-3 seconds per VAT number (numbers are sent one at a time); IBANs are checked offline in milliseconds. Cost: $0.002 per check with a definite answer, 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~vat-iban-check/run-sync-get-dataset-items with the input as JSON body. Cost: $0.002 per definite check (VAT number answered by VIES, or a valid IBAN); malformed, failed and unverified are free (HTTP API).

HTTP API

Also on the Bosco Labs HTTP API (beta): same input and same rows as the Actor, $0.002 per definite check (VAT number answered by VIES, or a valid IBAN); malformed, failed and unverified are free from prepaid credits (max 10 VAT numbers and 50 IBANs per call). Get a key with a $0.50 free trial; see prices and limits.

curl https://api.boscolabs.dev/v1/vat-iban-check \
  -H "Authorization: Bearer $BOSCO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"vatNumbers": ["IE6388047V"], "ibans": ["NL91ABNA0417164300"], "expectedName": "Google Ireland"}'

VAT answers: EU VIES (European Commission); IBAN layouts: SWIFT IBAN Registry.

Input fields

FieldTypeMeaning
vatNumbersarrayEU VAT numbers to check live against VIES, each with its country prefix, e.g. ["IE6388047V", "NL004495445B01"]. Spaces, dots and dashes are ignored; GR is read as EL (Greece), XI is Northern Ireland. 0-10 numbers, checked one at a time (about 1-3 s each). Empty = no VAT check.
ibansarrayIBANs to validate (check digits, length and layout per country, bank code), in electronic or print format, e.g. ["NL91ABNA0417164300", "DE89 3704 0044 0532 0130 00"]. 0-50 IBANs; no bank or third-party service is called. Empty = no IBAN check.
expectedNamestringThe company name you expect behind the VAT numbers, e.g. "Google Ireland Ltd". Compared with the name VIES returns after removing case, accents, punctuation and legal forms (Ltd = Limited, B.V., GmbH ...): name_match true or false; null when the member state shares no name (e.g. Germany). Empty = no name check.
expectedCountrystringISO 3166 alpha-2 code of the country you expect, e.g. "NL". Compared with each IBAN's and VAT number's country (country_match; GB IBANs also match JE, GG and IM, FR IBANs the French overseas territories). Empty = no country check.
requesterVatNumberstringYour own EU VAT number, e.g. "NL123456789B01". VIES then returns a consultation number (consultation_number) that proves to a tax authority that you checked a number at a given time. Empty = no consultation number.

Sources, licence and limits

Where does the VAT answer come from? VIES, the European Commission's VAT Information Exchange System, which asks the tax administration of the member state in real time. The Commission accepts no responsibility for the data, which comes from national databases. A VIES answer is not legal or tax advice and does not by itself give a right to a VAT exemption.

What does "unverified" mean? VIES or that member state's database did not answer (maintenance, outage or a request limit). It is not "invalid" and costs nothing; check again later. The Actor never retries more than once and never sends numbers in parallel.

Why is a real VAT number "fail"? Some member states only list numbers registered for intra-EU trade in VIES. "Not valid" means not valid in VIES; the company can ask its tax administration to update VIES.

Does a valid IBAN mean the account exists? No. It means the number is well-formed for its country and the check digits are right, which catches typos and invented numbers. Whether the account is open and whose it is only the bank knows. bank_code is the bank identifier at the position the SWIFT IBAN Registry gives for that country.

Do you store the numbers or answers? No. VIES answers are returned to you only, not cached or reused, and numbers are not logged.

Which countries? VAT: the 27 EU member states and Northern Ireland (XI); not the UK (GB), Norway or Switzerland, which VIES does not cover. IBAN: all 89 countries in the SWIFT IBAN Registry.

Limits: 10 VAT numbers and 50 IBANs per run; about 1-3 seconds per VAT number.