Open Data

How vatnode's EU VAT Rate Data Is Verified

The rates dataset vatnode maintains covers 45 European VAT jurisdictions: the EU-27 plus 18 non-EU or special jurisdictions, including Northern Ireland (XI). EU-27 rates are fetched from the European Commission TEDB every morning at 07:00 UTC and updated on any change; non-EU entries use national sources. It is MIT-licensed, and the commit log is public.

Source: European Commission TEDB for EU-27; national sources for non-EU · Coverage: 45 VAT jurisdictions · Licence: MIT · Distribution: 5 language packages + direct JSON/CDN
EU data last fetched from TEDB: 16 September 2026. This timestamp records a source fetch, not necessarily a rate change.

Most VAT Rate Data Is Right Until One Day It Is Not

Finland raised its standard rate from 24% to 25.5% in September 2024. Rate tables that were hardcoded the year before were still shipping 24% long afterwards, and nothing in the code said so – a wrong number looks exactly like a right one.

The fix is not a bigger table, it is a check that runs whether or not anyone is watching. A scheduled job queries the Commission's TEDB service every morning, compares the answer with what is published, and commits the difference. When nothing changed, that is recorded too – so the useful question, “when was this last confirmed against the source”, has an answer you can read.

How It Stays Current

  1. A scheduled workflow runs daily at 07:00 UTC and calls the European Commission TEDB SOAP service for the EU-27. Non-EU entries are maintained separately against national sources because TEDB does not cover them.
  2. Country codes, numeric rate types, currencies, local tax names, and VAT-number formats are normalized into one published JSON Schema. CI rejects malformed or incomplete records before publication.
  3. The normalized result is diffed against the published dataset. A rate change produces a reviewable commit; current and historical JSON remain auditable in git.
  4. When actual rate values change, the same canonical JSON is propagated to all five language packages and a meaningful GitHub Release is published. A daily check with no data change does not create a release.

Distribution and Limitations

For direct JSON, jsDelivr is the recommended production-facing URL because it provides CDN caching and distribution. CDN caching means @main is not a real-time freshness guarantee. Use a tagged URL for reproducible builds, or Raw GitHub when you specifically need the latest branch content as a fallback.

The dataset provides reference rates and VAT-number syntax. It does not model place-of-supply rules, product-specific eligibility for reduced rates, exemptions, or whether a VAT number is currently registered. Non-EU rate history is not published where no comparable official series is available.

Found incorrect VAT data? Report a data issue through the canonical repository's structured templates.

Install It

LanguageRegistryInstall
JavaScript / TypeScriptnpmnpm install eu-vat-rates-data
PythonPyPIpip install eu-vat-rates-data
PHPPackagistcomposer require vatnode/eu-vat-rates-data
Gopkg.go.devgo get github.com/vatnode/eu-vat-rates-data-go
RubyRubyGemsgem install eu_vat_rates_data

There is also a WooCommerce plugin and an n8n node built on the same data, and a keyless rates endpoint if you would rather not take a dependency at all.

What Is in a Record

standardStandard rate, as a percentage
reducedReduced rates, as an array — a country can have more than one
super_reducedSuper-reduced rate where the country has one, otherwise null
parkingParking rate where the country has one, otherwise null
currencyISO 4217 currency code
eu_memberWhether the country is an EU member state
vat_nameLocal name of the tax, e.g. Impost General Indirecte
vat_abbrLocal abbreviation, e.g. IGI
formatVAT number format in words
patternRegex for that format

Rates Are Half the Question

A rate tells you what to charge. It does not tell you whether the business you are about to zero-rate exists. That answer lives with the tax authority of the member state, reachable through the EU VIES register, and it is the part vatnode charges for.

The two are held to the same standard: official EU sources, and a response that says which path answered rather than a bare yes. Once you’ve set your own EU VAT as requester in dashboard Account details, a valid check comes back with the official VIES consultation number attached – which is what an auditor asks for, months later.

Questions

How often does the data actually change?

The check runs every day; the numbers themselves move a few times a year. That is the point of publishing the history — you can see the date of the last confirmation as well as the last change, instead of guessing whether a package has quietly gone stale.

Where does the data come from?

EU-27 rates come from the TEDB service run by the European Commission. Non-EU entries are maintained separately against national sources. The fetch script and workflow are public in the canonical repository.

Can I use it commercially?

Yes. MIT licence, no attribution required in your product, no key, no rate limit, no account. Copy the JSON into your own build if you prefer not to take a dependency.

Do I need this if I use the vatnode API?

No — the API serves the same rates from GET /v1/rates without a key. The packages exist for the case where you would rather ship the data inside your build than call anything at runtime.

Is this the same thing as VAT number validation?

No, and the distinction matters. Rates answer how much VAT to charge. Validation answers whether a customer VAT number is real and currently registered, which is a live lookup against VIES and the part of vatnode that is paid.

Which jurisdictions are covered?

The 27 EU member states plus 18 non-EU or special VAT jurisdictions, 45 in total. XI represents Northern Ireland for VAT purposes rather than a sovereign country. The rates dataset uses ISO code GR for Greece; VAT numbers use the VIES prefix EL.

Using the dataset in your project?

A star on the canonical GitHub repository helps other developers discover it.

Star vatnode/eu-vat-rates-data on GitHub →

The dataset stays free. Validating a customer VAT number against VIES needs a key, and the free plan comes with a monthly quota and no card.

Get a free API key