EU VAT rates for all 27 member states + UK. Updated daily from EC TEDB, published automatically when rates change.
Project description
eu-vat-rates-data · Python
EU VAT rates for all 27 EU member states plus the United Kingdom, sourced from the European Commission TEDB. Checked daily, published automatically when rates change.
- Standard, reduced, super-reduced, and parking rates
- Full type hints — works with mypy and pyright out of the box
- Data embedded in the package — works offline, no network calls
- Checked daily via GitHub Actions, new version published only when rates change
Also available in: JavaScript/TypeScript (npm) · PHP (Packagist) · Go · Ruby (RubyGems)
Installation
pip install eu-vat-rates-data
# or
uv add eu-vat-rates-data
# or
poetry add eu-vat-rates-data
Usage
from eu_vat_rates_data import get_rate, get_standard_rate, get_all_rates, is_eu_member, data_version
# Full rate object for a country
fi = get_rate("FI")
# {
# "country": "Finland",
# "currency": "EUR",
# "standard": 25.5,
# "reduced": [10.0, 13.5],
# "super_reduced": None,
# "parking": None
# }
# Just the standard rate
get_standard_rate("DE") # → 19.0
# Type guard
if is_eu_member(user_input):
rate = get_rate(user_input) # always returns a dict here
# All 28 countries at once
all_rates = get_all_rates()
for code, rate in all_rates.items():
print(f"{code}: {rate['standard']}%")
# When were these rates last fetched?
print(data_version) # e.g. "2026-02-25"
Type hints
from eu_vat_rates_data import VatRate
rate: VatRate = get_rate("FI") # type checker knows this is a TypedDict
class VatRate(TypedDict):
country: str
currency: str
standard: float
reduced: list[float]
super_reduced: float | None
parking: float | None
Data structure
reduced may contain rates for special territories (e.g. French DOM departments, Azores/Madeira for Portugal). All values come verbatim from EC TEDB.
Standard ISO 3166-1 alpha-2 country codes. Greece is GR (TEDB internally uses EL, which this package normalises).
Example
get_rate("PT")
# {
# "country": "Portugal",
# "currency": "EUR",
# "standard": 23.0,
# "reduced": [6.0, 13.0], # mainland + Azores/Madeira variants
# "super_reduced": None,
# "parking": None
# }
Data source & update frequency
Rates are fetched from the European Commission Taxes in Europe Database (TEDB):
- Canonical data repo: https://github.com/vatnode/eu-vat-rates-data
- Refreshed: daily at 08:00 UTC
- Published to PyPI only when actual rates change (not on date-only updates)
Covered countries
EU-27 member states + United Kingdom (28 countries total):
AT BE BG CY CZ DE DK EE ES FI FR GB GR HR HU IE IT LT LU LV MT NL PL PT RO SE SI SK
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eu_vat_rates_data-2026.2.25.tar.gz.
File metadata
- Download URL: eu_vat_rates_data-2026.2.25.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6e72253b1e871e6d2d6a72cb46b2e7af650868b03995a8befd17ad3e9324eca
|
|
| MD5 |
9f33d8c512a0d6c12e09c5fda24bb5e6
|
|
| BLAKE2b-256 |
6f2cf7d23b0a493df8c5a93ae8a9d8a26e34ca8bfa66f0bd70ba2f0022794e14
|
File details
Details for the file eu_vat_rates_data-2026.2.25-py3-none-any.whl.
File metadata
- Download URL: eu_vat_rates_data-2026.2.25-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67a03f92b9d66e91b3ec8cf86ef364fb136950ff12af505d2c6d5d079d29668a
|
|
| MD5 |
417bd1335ab4063125d8440a30c62b3b
|
|
| BLAKE2b-256 |
49ea07fbf44644801e189d6ed40aadc39ad5e446317ed0b20dee5a1368e2ba92
|