Simple, transparent pricing

Start free with a production-ready VAT validation API. Validate VAT and GST numbers across 32 countries via VIES, HMRC, and more. Upgrade when you need higher limits, batch processing, or webhooks.

Free

Start here
€0forever

Includes

  • 500 validations/month
  • 20 req/min burst rate
  • 2 API keys
  • EU, UK, CH, LI, NO + AU VAT/GST validation
  • Consultation numbers
  • Test mode
  • VAT rates (unlimited)
  • Cached responses on outages
  • Email support

Pro

When you scale
€39/month

or €29/mo billed annually (€348/yr)

Everything in Free, plus

Business

High volume + Slack support
€129/month

or €99/mo billed annually (€1,188/yr)

Everything in Pro, plus

  • 50,000 validations/month
  • 120 req/min burst rate
  • 100 API keys
  • Async validation (up to 1,000/batch)
  • Priority email support + Slack support

Enterprise

CUSTOM

Custom validation volume, a 99.99% uptime SLA, SSO/SAML, a DPA with EU data residency, dedicated support, and invoicing with procurement support.

response within 1 business day

Prices exclude VAT. VAT is added at checkout based on your billing location. See terms.

How it works

Go from zero to production-ready VAT validation in minutes, not days.

STEP 1

Start free

Sign up and get your API key in under a minute. The free tier includes everything you need to integrate VAT validation into your app: all 32 countries, test mode, typed SDKs, cached responses on outages, and 500 validations per month. No credit card required.

STEP 2

Ship to production

The free tier is production-ready. Use it for real VAT validation in your billing flow, onboarding, or checkout. 500 validations per month covers most early-stage B2B SaaS products.

STEP 3

Upgrade when you grow

When you need more than 500 validations, batch processing, or webhook notifications, upgrade to Pro or Business. No migration needed. Same API, same SDK, higher limits.

Everything included

Every tier includes production-ready VAT validation, company data lookup, typed SDKs, and cached results when a registry is down. Pro and Business add the national register fallback. Here is what you get.

Core features (all tiers)

VAT/GST number validation

Validate VAT and GST numbers against official government databases. Covers EU (VIES), UK (HMRC), Switzerland, Liechtenstein (BFS), Norway (Bronnoysund), and Australia (ABR). Returns validity status, company name, and address.

FreeProBusiness

32 countries supported

Single API endpoint for EU 27 member states, UK, Switzerland, Liechtenstein, Norway, and Australia. No need to integrate with multiple government APIs.

FreeProBusiness

Company data lookup

Get the registered company name and address associated with any valid VAT number. Useful for autofilling billing forms and verifying business customers during onboarding.

FreeProBusiness

Consultation numbers

Request a VIES consultation number with a genuine requester VAT number and store it when returned. Requester checks disable cache reads and national register fallback by default; explicit cache=true or fallback=true opts back in. A consultation number is not guaranteed and supports registration evidence, not a transaction tax decision.

FreeProBusiness

VAT rates endpoint

Look up current VAT/GST rates for all 32 supported countries. Unlimited requests, no quota usage. Useful for tax calculations, invoicing, and checkout flows.

FreeProBusiness

Cached responses on outages

During a registry outage, Avatcado can serve an eligible stored result with cache and freshness metadata. Requester checks disable stored responses by default unless cache=true is supplied. If no eligible source can answer, it returns a refunded 503 for your application to handle.

FreeProBusiness

Test mode

Use test API keys with magic VAT numbers to simulate valid, invalid, and error responses without hitting live government services. Build and test your integration without worrying about rate limits or upstream availability.

FreeProBusiness

Structured error responses

Every error includes a machine-readable error code, human-readable message, and a docs_url linking to the specific error documentation. No guessing what went wrong.

FreeProBusiness

Typed SDKs

Official SDKs for TypeScript (@avatcado/node) and Python (avatcado) with full type safety, { data, error } return pattern, and typed error classes. Install from npm or PyPI and start validating in minutes.

FreeProBusiness

Per-country format validation

VAT numbers are validated against country-specific format rules before hitting upstream APIs. Malformed numbers are rejected instantly, saving quota and reducing latency.

FreeProBusiness

Scaling features (Pro and Business)

National register fallback

When VIES cannot answer for one of the 10 EU member states with an open national register, Avatcado can use a live register lookup or a sufficiently fresh snapshot to confirm registration. If the register cannot confirm it, the request proceeds to eligible cache or a refunded 503. Requester checks skip the register by default because it cannot issue a VIES consultation number. Use fallback=true to opt into an eligible register answer, or fallback=false to disable it on any request.

FreeProBusiness

Batch validation

Validate up to 50 VAT numbers in a single API request. Ideal for bulk customer verification, CRM cleanup, or importing partner lists.

FreeProBusiness

Async validation

Submit large batches for background processing. Pro supports up to 200 numbers per async batch, Business supports up to 1,000. Get results via polling or webhooks.

FreeProBusiness

Webhooks

Receive real-time notifications when async validations complete. Webhooks are signed with HMAC-SHA256 so you can verify authenticity. Configure webhook URLs from the dashboard.

FreeProBusiness

Limits by tier

FreeProBusiness
Monthly validations50010,00050,000
Burst rate20 req/min60 req/min120 req/min
API keys210100
Async batch size-2001,000
97.6%
30-day VIES uptime
32
Countries supported
5
Official registries
< 2 min
To first request

Two problems, one API

VAT validation matters at checkout and at account creation. Avatcado handles both.

Billing

Validate at checkout, get reverse-charge right

Determine whether to charge VAT or apply the reverse charge before you generate an invoice. A valid cross-border VAT number means zero-rate. An invalid or missing one means you charge VAT.

  • SaaS checkout flows
  • Subscription billing
  • Stripe and Mollie integrations
CRM & Onboarding

Clean account data from the first record

Mainstream CRMs like Salesforce and HubSpot do not validate VAT numbers out of the box. Validate when an account is created and write the registered company name back to the record. Catch bad data before it reaches invoices or ERP syncs.

  • Salesforce account creation
  • HubSpot contact enrichment
  • Partner and vendor onboarding

Pricing questions

Answers about limits, billing, and test mode.

Yes. The free tier includes 500 validations per month, up to 2 API keys, and a burst limit of 20 requests per minute, with no credit card required. It uses the same API, the same response format, the same caching, and the same 32-country registry coverage as paid plans, so nothing about your integration changes when you upgrade. Test mode is included too: requests made with an avat_test_ key never reach the registries and never consume quota, so integration tests are effectively free and unmetered. VAT rate lookups via /v1/rates are also free and unlimited on every tier and do not count against the 500. When you need more volume, Pro offers 10,000 validations per month with 10 keys for EUR 39 per month (EUR 29 per month billed annually), and Business offers 50,000 per month with 100 keys for EUR 129 per month (EUR 99 per month billed annually).
Use a test-mode API key (prefixed avat_test_) and every request runs in test mode: nothing reaches VIES, HMRC, BFS, Bronnoysund, or ABR, nothing counts against your monthly quota, and every response carries meta.mode: "test" so you can tell environments apart. Magic VAT numbers trigger predictable scenarios: DE111111111 returns a valid company, DE000000000 returns valid: false, DE999999999 simulates a 503 upstream error, DE777777777 simulates a 429 rate limit response, and DE555555555 simulates the stale cache fallback. Magic numbers also exist for the UK, France, Switzerland, Liechtenstein, and Norway. Any other correctly formatted number returns a generic valid result, while malformed input still returns invalid_vat_format exactly as in live mode, so your error handling gets exercised too. The result is fast, deterministic integration tests with no flaky upstream dependencies. One exception: async endpoints require a live key. See the docs for the full list of magic numbers.
Yes. GET /v1/rates returns current rates for all 32 supported countries in a single response: the standard rate plus reduced, super-reduced, and zero rates where a country has them, together with the country name, currency, and a per-country updated_at timestamp. GET /v1/rates/NL (or any supported country code) returns one country. Rates endpoints are free and unlimited on every tier, including Free, and never count against your monthly validation quota; only the standard per-minute burst limit applies. That makes them practical for high-frequency use, such as computing checkout prices on the fly or refreshing a pricing table on a daily schedule. Responses use the same { data, meta } envelope as validation responses, so your existing client code and error handling carry over unchanged. Deciding which rate applies to a specific product category remains your tax logic; the API reports the official current rates per country.
Yes. The /v1/validate/batch endpoint accepts up to 50 VAT/GST numbers in a single request and is available on Pro and Business plans. Each number is validated independently against the appropriate registry (VIES, HMRC, BFS, Bronnoysund, or ABR), and results come back in the same order as the input array. The response is always HTTP 200: individual failures such as an upstream timeout or an invalid format appear inline as per-item error objects instead of failing the whole request, so one bad number never costs you the other 49 results. Per-item meta shows cache state, since one item may be a fresh lookup while another comes from the cache. Duplicates in the input are deduplicated: only unique numbers are validated and counted against your monthly quota, while the response still returns one result per input item. Pass a genuine requester_vat_number once to request consultation numbers for supported EU items; retain them only when returned. Requester batches disable cache reads and national register fallback by default, with explicit cache=true or fallback=true opting back into the corresponding path. For larger batches, use async batch validation.