{"name":"vat-number-validator","id":"sfoln/vat-number-validator","title":"EU VAT Number Validator (VIES)","description":"Validate EU VAT numbers live against the European Commission's VIES service: valid or invalid, the registered company name and address where the member state shares them, and an official consultation number when you add your own VAT number. $2 per 1,000 checks; outages are free.","version":"0.1","status":"ready","family":{"id":"compliance-public-records","name":"Compliance & public records","description":"Sanctions screening, KYB company checks, LEI and VAT validation, SEC EDGAR filings, Form D offerings, insider trades and CVE records.","actors":8},"categories":["AUTOMATION","DEVELOPER_TOOLS","AI"],"availability":"public","seoTitle":"EU VAT Number Validator API – Bulk VIES Check","seoDescription":"Validate EU VAT numbers in bulk against VIES: valid or invalid, company name and address, and consultation numbers. Format checks for all 27 EU states.","summary":"EU VAT Number Validator (VIES) checks EU VAT numbers live against the European Commission's VIES service and returns one record per number: valid or invalid, the registered company name and address where the member state shares them, and an official consultation number when you add your own VAT number. Every number is first checked against its country's format, so typos are caught without a request. Built for invoicing and checkout flows, supplier and customer onboarding, CRM clean-up and AI agents. $0.002 per checked number; member-state outages are reported as errors and never charged.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":10,"events":[{"name":"vat-check","title":"VAT number check","description":"One VAT number checked against VIES with a definitive answer (valid or invalid).","priceUsd":0.002}]},"input":{"description":"EU VAT numbers to validate against VIES. Each number produces one dataset record.","required":[],"fields":[{"name":"vatNumbers","title":"VAT numbers","type":"array","required":false,"description":"EU VAT numbers with their country prefix, one per line (e.g. NL004495445B01, FR27552032534, DE123456789); spaces, dots and dashes are ignored. Accounts on the Apify free plan can process up to 10 VAT numbers per run.","prefill":["NL004495445B01"],"editor":"stringList"},{"name":"requesterVatNumber","title":"Your VAT number (for consultation numbers)","type":"string","required":false,"description":"Optional: your own EU VAT number. VIES then returns a consultation number for each check, which tax authorities accept as proof that you verified the number.","editor":"textfield"},{"name":"defaultCountry","title":"Default country prefix","type":"string","required":false,"description":"Optional: the prefix (e.g. DE) for numbers given without one. Greece is EL, Northern Ireland XI.","editor":"textfield"},{"name":"maxItems","title":"Max VAT numbers","type":"integer","required":false,"description":"Safety cap on VAT numbers per run; further numbers are ignored and counted in the OUTPUT record.","default":10000,"minimum":1,"maximum":100000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"Checks in parallel. VIES limits concurrent requests per member state; busy answers are retried.","default":2,"minimum":1,"maximum":4},{"name":"includeRaw","title":"Include raw VIES response","type":"boolean","required":false,"description":"Attach the unmodified VIES answer under raw.","default":false}]},"exampleInput":{"vatNumbers":["NL004495445B01"]},"outputFields":[{"name":"input","type":"string | object","title":"Input","description":"The VAT number as given."},{"name":"status","type":"string","title":"Status","description":"ok | error | skipped_invalid | skipped_budget | skipped_free_plan | skipped_unmetered","example":"ok"},{"name":"charged","type":"boolean","title":"Charged","description":"Whether this record incurred a pay-per-event charge."},{"name":"chargedEvent","type":"string","title":"Charged event","description":"Pay-per-event event charged for this record (present only when charged)."},{"name":"chargedCount","type":"integer","title":"Events charged","description":"Events actually charged when the charge came back short of the requested count (present only then; a warning explains it)."},{"name":"source","type":"string","title":"Source","description":"Upstream data source."},{"name":"fetchedAt","type":"string","title":"Fetched at","description":"ISO timestamp."},{"name":"error","type":"object","title":"Error","description":"{ 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: invalid_format, vies_ms_unavailable, vies_timeout, vies_service_unavailable, vies_ms_max_concurrent_req, vies_global_max_concurrent_req, vies_invalid_input, vies_vat_blocked, vies_ip_blocked; upstream: rate_limit, timeout, network, server, client, invalid_response."},{"name":"warnings","type":"array","title":"Warnings","description":"Notes about this record, e.g. a requester VAT number VIES rejected."},{"name":"vatNumber","type":"string","title":"VAT number","description":"Normalised VAT number: prefix + number, no separators (Greece EL)."},{"name":"countryCode","type":"string | null","title":"Country prefix","description":"VIES member-state prefix."},{"name":"countryName","type":"string | null","title":"Country","description":"Member state name."},{"name":"number","type":"string","title":"National number","description":"The number without its prefix."},{"name":"formatValid","type":"boolean","title":"Format valid","description":"The number has the member state's VAT format."},{"name":"valid","type":"boolean | null","title":"Valid","description":"VIES answer: true (registered for intra-EU trade), false (not valid), null (no answer: see error)."},{"name":"name","type":"string | null","title":"Registered name","description":"Trader name from VIES (null when the member state does not share it)."},{"name":"address","type":"string | null","title":"Registered address","description":"Trader address from VIES, lines joined with commas (null when not shared)."},{"name":"requestDate","type":"string | null","title":"Request date","description":"When VIES answered (ISO)."},{"name":"consultationNumber","type":"string | null","title":"Consultation number","description":"VIES consultation number (requestIdentifier), issued when requesterVatNumber is set."},{"name":"requesterVatNumber","type":"string | null","title":"Requester VAT number","description":"Your VAT number as sent to VIES."},{"name":"raw","type":"object","title":"Raw VIES answer","description":"Unmodified VIES response (only with includeRaw)."}],"outputExample":[{"input":"NL004495445B01","status":"ok","charged":true,"chargedEvent":"vat-check","source":"vies","fetchedAt":"2026-10-14T23:17:03.404Z","vatNumber":"NL004495445B01","countryCode":"NL","countryName":"Netherlands","number":"004495445B01","formatValid":true,"valid":true,"name":"OPENJONGERENVERENIGING DE KOORNBEURS","address":"VOLDERSGRACHT 00001, 2611ET DELFT","requestDate":"2026-10-14T23:17:03.575Z","consultationNumber":null,"requesterVatNumber":null},{"input":"DE123456789","status":"ok","charged":true,"chargedEvent":"vat-check","source":"vies","fetchedAt":"2026-10-14T23:17:03.249Z","vatNumber":"DE123456789","countryCode":"DE","countryName":"Germany","number":"123456789","formatValid":true,"valid":false,"name":null,"address":null,"requestDate":"2026-10-14T23:17:03.411Z","consultationNumber":null,"requesterVatNumber":null},{"input":"DE12345","status":"skipped_invalid","charged":false,"source":"vies","fetchedAt":"2026-10-14T23:17:03.406Z","vatNumber":"DE12345","countryCode":"DE","countryName":"Germany","number":"12345","formatValid":false,"valid":false,"error":{"code":"invalid_format","message":"Germany VAT numbers look like DE123456789; \"DE12345\" does not."}}],"faq":[{"question":"What happens when a member state's VIES service is down?","answer":"VIES answers MS_UNAVAILABLE (often during night-time maintenance). The Actor retries, then returns the number with status error and code vies_ms_unavailable. It is never reported as invalid and never charged; run it again later."},{"question":"Why are name and address empty for some valid numbers?","answer":"Some member states (Germany, for example) do not share trader details through VIES; the number is still confirmed valid."},{"question":"What is a consultation number?","answer":"When you set your own VAT number as the requester, VIES issues a consultation number (requestIdentifier) per check that proves when you verified your customer's number."}],"mcpExamplePrompt":"Check whether the EU VAT numbers NL004495445B01 and FR27552032534 are valid and return the registered company names.","related":["kyb-company-check","lei-lookup","sanctions-screening","company-contacts-finder","domain-intelligence"],"urls":{"site":"https://www.sfoln.com/actors/vat-number-validator/","siteJson":"https://www.sfoln.com/actors/vat-number-validator.json","siteMarkdown":"https://www.sfoln.com/actors/vat-number-validator.md","store":"https://apify.com/sfoln/vat-number-validator","storeMarkdown":"https://apify.com/sfoln/vat-number-validator.md","runSync":"https://api.apify.com/v2/actors/sfoln~vat-number-validator/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~vat-number-validator/runs","mcp":"https://mcp.apify.com?tools=sfoln/vat-number-validator"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}