Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

vatnode/eu-vat-rates-data

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

234 Commits
234 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eu-vat-rates-data

Last updated License: MIT

Canonical data source — VAT rates for 45 European countries, including all EU-27 member states plus Norway, Switzerland, the United Kingdom, and more. Sourced from the European Commission TEDB (EU rates) and supplemented with non-EU European countries. Checked daily, committed automatically when rates change.

This repository contains only the data and the update script. Language-specific packages are published separately:

Language Package Install
JavaScript / TypeScript npm npm install eu-vat-rates-data
Python PyPI pip install eu-vat-rates-data
PHP Packagist composer require vatnode/eu-vat-rates-data
Go pkg.go.dev go get github.com/vatnode/eu-vat-rates-data-go
Ruby RubyGems gem install eu_vat_rates_data

Need live VIES validation?

This dataset gives you VAT rates for free, offline. The language packages also include offline format checks against country-specific regex patterns. None of this calls VIES — format checks only verify the shape of a VAT number, not whether it actually exists.

For live VIES validation — confirming a VAT ID is real, pulling the registered company name and address, and getting a VIES consultation number (audit-grade proof of validation) — there's vatnode:

  • Live VIES validation, with national-database fallback when VIES is down
  • Registered company name, address, registration date
  • VIES consultation number for compliance and audit trails
  • Webhooks for VAT status changes
  • Official MCP server so AI agents (Claude, Cursor, ChatGPT) can validate VAT IDs directly
  • Free tier — no credit card needed
curl https://api.vatnode.dev/v1/vat/IE6388047V \
  -H "Authorization: Bearer YOUR_API_KEY"

Get a free API key →


Direct JSON access

No package needed — use the JSON directly via CDN:

# jsDelivr CDN (cached):
https://cdn.jsdelivr.net/gh/vatnode/eu-vat-rates-data@main/data/eu-vat-rates-data.json

# Raw GitHub (always latest commit):
https://raw.githubusercontent.com/vatnode/eu-vat-rates-data/main/data/eu-vat-rates-data.json
const res = await fetch(
  'https://cdn.jsdelivr.net/gh/vatnode/eu-vat-rates-data@main/data/eu-vat-rates-data.json'
)
const { rates } = await res.json()
console.log(rates.DE.standard) // 19

Data structure

interface VatRate {
  country:       string        // "Finland"
  currency:      string        // "EUR" (or "DKK", "GBP", …)
  eu_member:     boolean       // true for EU-27, false for non-EU
  vat_name:      string        // "Arvonlisävero" — official name in primary local language
  vat_abbr:      string        // "ALV" — short abbreviation used locally
  standard:      number        // 25.5
  reduced:       number[]      // [10, 13.5] — sorted ascending
  super_reduced: number | null // null when not applicable
  parking:       number | null // null when not applicable
  format:        string        // "FI + 8 digits" — human-readable VAT number format
  pattern:       string        // "^FI\\d{8}$" — regex for format validation, always present
}

Example JSON entry

{
  "version": "2026-03-31",
  "source": "European Commission TEDB",
  "rates": {
    "FI": {
      "country": "Finland",
      "currency": "EUR",
      "eu_member": true,
      "vat_name": "Arvonlisävero",
      "vat_abbr": "ALV",
      "standard": 25.5,
      "reduced": [10, 13.5],
      "super_reduced": null,
      "parking": null,
      "format": "FI + 8 digits",
      "pattern": "^FI\\d{8}$"
    }
  }
}

Update frequency

  • Fetched from EC TEDB SOAP API: daily at 07:00 UTC
  • Committed on every run (version date always updated)
  • Full audit trail: git log -- data/eu-vat-rates-data.json

To run locally:

git clone https://github.com/vatnode/eu-vat-rates-data.git
pip install requests
python3 scripts/update.py

Keeping rates current

The JSON in this repository is updated automatically — use it directly via CDN if you need always-current data without any setup:

https://cdn.jsdelivr.net/gh/vatnode/eu-vat-rates-data@main/data/eu-vat-rates-data.json
https://raw.githubusercontent.com/vatnode/eu-vat-rates-data/main/data/eu-vat-rates-data.json

Language-specific packages bundle a snapshot of this data at publish time. A new package version is released automatically whenever rates change, but installed packages do not update themselves. If you use a package and need rates to stay current, set up Renovate or Dependabot — they will open a PR automatically when a new version is published.


Covered countries

EU-27 (daily auto-updates via EC TEDB):

AT BE BG CY CZ DE DK EE ES FI FR GR HR HU IE IT LT LU LV MT NL PL PT RO SE SI SK

Non-EU Europe (manually maintained):

AD AL BA CH GB GE IS LI MC MD ME MK NO RS TR UA XK

45 countries total.


Need to validate VAT numbers?

This repository provides VAT rates only. If you also need to validate EU VAT numbers against the official VIES database, check out vatnode.dev — a simple REST API with a free tier.


Changelog

2026-04-25

  • fix: Corrected Sweden (SE) VAT number regex — was ^SE\d{12}$, now correctly requires the mandatory 01 suffix: ^SE\d{10}01$.

License

MIT

If you find this useful, a ⭐ on GitHub is appreciated.

About

VAT rates for 45 European countries — EU-27 plus Norway, Switzerland, UK, and more. Updated daily from EC TEDB.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.