PHPackages                             vatnode/eu-vat-rates-data - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. vatnode/eu-vat-rates-data

ActiveLibrary[Payment Processing](/categories/payments)

vatnode/eu-vat-rates-data
=========================

VAT rates for 44 European countries — EU-27 plus Norway, Switzerland, UK, and more. Updated daily, published automatically when rates change.

v2026.4.5(1mo ago)03MITPHPPHP &gt;=8.1CI passing

Since Feb 25Pushed 1mo agoCompare

[ Source](https://github.com/vatnode/eu-vat-rates-data-php)[ Packagist](https://packagist.org/packages/vatnode/eu-vat-rates-data)[ Docs](https://github.com/vatnode/eu-vat-rates-data-php)[ GitHub Sponsors](https://github.com/rogulia)[ RSS](/packages/vatnode-eu-vat-rates-data/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (1)Versions (15)Used By (0)

eu-vat-rates-data · PHP
=======================

[](#eu-vat-rates-data--php)

[![Packagist Version](https://camo.githubusercontent.com/c709ead6b2d82593a0484e60a08f96cd27697e8990d3726cc5ea853a10c91bc2/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7661746e6f64652f65752d7661742d72617465732d64617461)](https://packagist.org/packages/vatnode/eu-vat-rates-data)[![PHP Version](https://camo.githubusercontent.com/5c5d60f127d33afbc82bcfb7da77b454f93b0cb21d7b3afdc266d133daf634e1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f7661746e6f64652f65752d7661742d72617465732d64617461)](https://packagist.org/packages/vatnode/eu-vat-rates-data)[![Last updated](https://camo.githubusercontent.com/506e838fed1566392127e3ca07f02f7cdc945eede48b84464a8308f076112b65/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f7661746e6f64652f65752d7661742d72617465732d646174612d7068703f706174683d6461746125324665752d7661742d72617465732d646174612e6a736f6e266c6162656c3d6c61737425323075706461746564)](https://github.com/vatnode/eu-vat-rates-data-php/commits/main)[![License: MIT](https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667)](LICENSE)

VAT rates for **44 European countries** — EU-27 plus Norway, Switzerland, UK, and more. EU rates sourced from the European Commission TEDB and checked daily. Non-EU rates maintained manually.

- Standard, reduced, super-reduced, and parking rates
- `eu_member` flag on every country — `true` for EU-27, `false` for non-EU
- `vat_name` — official name of the VAT tax in the country's primary official language
- `vat_abbr` — short abbreviation used locally (e.g. "ALV", "MwSt", "TVA")
- **`format` — human-readable VAT number format (e.g. `"ATU + 8 digits"`)** — unique to this package
- **`pattern` — regex for VAT number validation + built-in `validateFormat()` — free, no API key needed** — unique to this package
- No dependencies — pure PHP 8.1+
- Data bundled in the package — works offline, no network calls
- EU rates checked daily via GitHub Actions, new version published only when rates change

Also available in: [JavaScript/TypeScript (npm)](https://www.npmjs.com/package/eu-vat-rates-data) · [Python (PyPI)](https://pypi.org/project/eu-vat-rates-data/) · [Go](https://pkg.go.dev/github.com/vatnode/eu-vat-rates-data-go) · [Ruby (RubyGems)](https://rubygems.org/gems/eu_vat_rates_data)

---

Installation
------------

[](#installation)

```
composer require vatnode/eu-vat-rates-data
```

---

Usage
-----

[](#usage)

```
use VATNode\EuVatRates\EuVatRates;

// Full rate array for a country
$fi = EuVatRates::getRate('FI');
// [
//   'country'       => 'Finland',
//   'currency'      => 'EUR',
//   'eu_member'     => true,
//   'vat_name'      => 'Arvonlisävero',
//   'vat_abbr'      => 'ALV',
//   'standard'      => 25.5,
//   'reduced'       => [10.0, 13.5],
//   'super_reduced' => null,
//   'parking'       => null,
// ]

// Just the standard rate
EuVatRates::getStandardRate('DE');  // → 19.0

// EU membership check — false for non-EU countries (GB, NO, CH, ...)
if (EuVatRates::isEuMember($userInput)) {
    $rate = EuVatRates::getRate($userInput);
}

// Dataset membership check (all 44 countries)
if (EuVatRates::hasRate($userInput)) {
    $rate = EuVatRates::getRate($userInput);
}

// All 44 countries at once
foreach (EuVatRates::getAllRates() as $code => $rate) {
    echo "{$code}: {$rate['standard']}%\n";
}

// When were EU rates last fetched?
echo EuVatRates::dataVersion();  // e.g. "2026-03-27"

// VAT number format validation — no API key, no network call
EuVatRates::validateFormat('ATU12345678');  // → true
EuVatRates::validateFormat('DE123456789');  // → true
EuVatRates::validateFormat('INVALID');      // → false

// Access format metadata directly
$at = EuVatRates::getRate('AT');
echo $at['format'];   // "ATU + 8 digits"
echo $at['pattern'];  // "^ATU\d{8}$"

// Flag emoji from a 2-letter country code — no lookup table, computed from regional indicator symbols
EuVatRates::getFlag('FI');  // → "🇫🇮"
EuVatRates::getFlag('DE');  // → "🇩🇪"
EuVatRates::getFlag('XX');  // → "" (empty string for unknown/invalid codes)
```

---

Data source &amp; update frequency
----------------------------------

[](#data-source--update-frequency)

- EU-27 rates: **European Commission TEDB**, refreshed **daily at 07:00 UTC**
- Non-EU rates: maintained manually, updated on official rate changes
- Published to Packagist only when actual rates change

---

Keeping rates current
---------------------

[](#keeping-rates-current)

Rates are bundled at install time. A new package version is published automatically whenever rates change — but your installed version will not update itself.

**Recommended:** add [Renovate](https://renovatebot.com) or [Dependabot](https://docs.github.com/en/code-security/dependabot) to your repo. They detect new versions and open a PR automatically whenever rates change — no manual update commands needed.

**Need real-time accuracy?** Fetch the always-current JSON directly:

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

```

No package needed — parse it with a single `fetch()` / `http.get()` / `file_get_contents()` call and cache locally.

---

Covered countries
-----------------

[](#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`

---

Need to validate VAT numbers?
-----------------------------

[](#need-to-validate-vat-numbers)

This package provides **VAT rates** only. If you also need to **validate EU VAT numbers** against the official VIES database — confirming a business is VAT-registered — check out [vatnode.dev](https://vatnode.dev), a simple REST API with a free tier.

```
curl https://api.vatnode.dev/v1/vat/FI17156132 \
  -H "Authorization: Bearer vat_live_..."
# → { "valid": true, "companyName": "Suomen Pehmeä Ikkuna Oy" }
```

---

License
-------

[](#license)

MIT

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

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance92

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

14

Last Release

40d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/6b250103e303d025f9207d5c77c91626af589ce9befd9d47b3e01062dbc13875?d=identicon)[rogulia](/maintainers/rogulia)

---

Top Contributors

[![rogulia](https://avatars.githubusercontent.com/u/126080557?v=4)](https://github.com/rogulia "rogulia (22 commits)")

---

Tags

automationcomposereueu-vateuropean-unionpackagistphpratestaxvatvat-ratesbillinginvoiceratese-commercevattaxfintecheuEuropeeu vatEuropean UnionVAT ratesvat-mossdigital-services-tax

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/vatnode-eu-vat-rates-data/health.svg)

```
[![Health](https://phpackages.com/badges/vatnode-eu-vat-rates-data/health.svg)](https://phpackages.com/packages/vatnode-eu-vat-rates-data)
```

###  Alternatives

[mollie/laravel-cashier-mollie

Laravel Cashier provides an expressive, fluent interface to Mollie's subscription billing services.

172155.4k1](/packages/mollie-laravel-cashier-mollie)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
