EU VAT rate changes 2024-2026: what changed and what your code needs to know
A consolidated reference of the standard and reduced VAT rate changes across European jurisdictions in 2024-2026. Switzerland 8.1%, Estonia 22% then 24%, Finland 25.5%, Czechia consolidated 12% reduced, Slovakia 23%, with practical guidance on date-aware rate logic.
TL;DR
- Five European jurisdictions changed headline VAT rates in 2024-2025: Switzerland, Estonia, Finland, Czechia, and Slovakia.
- Hardcoded rate constants from before 2024 will produce incorrect amounts on any invoice straddling the change date.
- Date-aware rate lookup is the only correct pattern. The applicable rate is set by the date of supply, not the invoice date.
Why this matters
Reference tables published before 2024 are wrong on at least four EU and EEA countries. Reference tables that scrape Wikipedia or the EU Commission VAT rates table without a freshness check are wrong on the same set. A handful of widely-cited sources still show pre-2024 rates and rank well in search results, including ad-funded calculator sites and stale tax-blog posts.
If your invoicing engine sources rates from any of those, every cross-border B2C sale to one of these countries since the change date is using the wrong rate. The seller-side liability for under-collection lands on you, not on the buyer.
Switzerland: 7.7% to 8.1% (1 January 2024)
Switzerland raised its standard VAT rate from 7.7% to 8.1% effective 1 January 2024. Reduced rates also moved:
| Bracket | Pre-2024 | From 1 Jan 2024 |
|---|---|---|
| Standard | 7.7% | 8.1% |
| Reduced | 2.5% | 2.6% |
| Special accommodation | 3.7% | 3.8% |
The funding rationale was the federal contribution to AHV (old-age) pension financing. The increase was approved by referendum in September 2022.
Liechtenstein, which shares the Swiss VAT system under the 1923 customs and VAT union, applies the same rate matrix and changed dates.
Estonia: 20% to 22% to 24% (Jan 2024, Jul 2025)
Estonia raised its standard VAT rate twice in two years:
| Effective date | Standard rate |
|---|---|
| Pre-2024 | 20% |
| 1 January 2024 | 22% |
| 1 July 2025 | 24% |
Both changes were enacted under the 2024 budget agreement. The 2024 increase funds defense spending; the 2025 increase was added during budget negotiations later in the same legislative cycle.
The Estonian reduced rate has historically been 9% across categories including books, accommodation, and pharmaceuticals; the reduced-rate composition has also been adjusted in recent budget cycles, with current values published by EMTA (the Estonian Tax and Customs Board).
Finland: 24% to 25.5% (1 September 2024)
Finland raised its standard VAT rate from 24% to 25.5% effective 1 September 2024. The mid-year effective date is unusual; most VAT rate changes align with calendar-year boundaries. The reduced rates remained at 14% (food and restaurant services) and 10% (books, accommodation, public transport, and several other categories) at the time of the change.
For invoicing systems, the September 2024 cut-off is what matters: invoices with a date of supply on or after 1 September 2024 use 25.5%; earlier supplies use 24%. The invoice date is not the determining factor; the date of supply is.
Czechia: reduced-rate consolidation (1 January 2024)
Czechia consolidated its previous 10% and 15% reduced VAT brackets into a single 12% reduced rate effective 1 January 2024:
| Bracket | Pre-2024 | From 1 Jan 2024 |
|---|---|---|
| Standard | 21% | 21% |
| First reduced | 15% | 12% |
| Second reduced | 10% | 12% |
The consolidation moved several categories between brackets simultaneously. Hardcoded references to 10% or 15% for any Czech supply on or after 1 January 2024 will be incorrect; the correct rate is 12% across the consolidated bracket. The current Finanční správa publications are the authoritative source for which categories now sit in the 12% bracket versus 21% standard.
Slovakia: 20% to 23% (2025 fiscal package)
Slovakia raised its standard VAT rate from 20% to 23% under the 2025 consolidation package. The package also introduced a new 19% reduced rate for selected categories (food, accommodation, restaurant services), while retaining the 5% rate for a separate set of categories.
| Bracket | Pre-2025 | From 2025 |
|---|---|---|
| Standard | 20% | 23% |
| First reduced | 10% | 19% |
| Second reduced | 5% | 5% |
The 19% rate is structurally a "first reduced" bracket, not a renamed standard rate. The 23% standard applies to most goods and services; specific categories moved from the 20% standard into the 19% reduced bracket as part of the package.
Croatia: euro adoption (1 January 2023)
Croatia is included here for completeness even though no rate value changed. On 1 January 2023, Croatia adopted the euro, replacing the kuna. Headline rates remained 25% standard, 13% reduced, 5% super-reduced. For invoicing systems handling Croatian counterparties:
- Pre-2023 invoices in kuna remain historical records only.
- Conversions from kuna amounts in legacy systems use the official conversion rate fixed at adoption (HRK 7.53450 per euro).
- New invoices, rates, and conversions all operate in euros.
Cross-border implications
Most of these rate changes affect B2C cross-border sellers more than B2B cross-border sellers. The reverse-charge mechanism on B2B intra-Community supplies means the seller invoices net of VAT regardless of the destination's rate; the buyer self-accounts at their local rate. The rate change matters to the buyer's recovery position, not the seller's invoice.
For B2C sellers operating under OSS, every change affects the rate applied at the seller's checkout. Stores that run their own price-display logic by stripping or adding VAT to a base price (common in mainland-EU pricing flows) need a rate lookup that knows the date of the price change.
Date-aware rate logic
The pattern that works:
interface RateLookupArgs {
country: string;
category?: string;
asOfDate: Date;
}
interface RateResult {
bracket: 'standard' | 'reduced' | 'super_reduced';
rate: number;
effective_from: Date;
effective_until: Date | null;
}
async function getRate(args: RateLookupArgs): Promise<RateResult> {
const res = await fetch(
`https://api.vatverify.dev/v1/rates/${args.country.toLowerCase()}` +
`?as_of=${args.asOfDate.toISOString().slice(0, 10)}` +
(args.category ? `&category=${encodeURIComponent(args.category)}` : ''),
{ headers: { Authorization: `Bearer ${process.env.VATVERIFY_API_KEY}` } },
);
return (await res.json()).data;
}The as_of parameter is the key: it tells the rates endpoint to return the rate that was in force on the supplied date, not the rate that is in force right now. For a re-issued invoice that corrects a 2024 supply, the rate returned should be the 2024 rate, not today's.
What to do if your code is wrong
Three steps:
- Find every place rates are hardcoded. Search your codebase for the literal strings
19,20,7.7,2.5near VAT-related identifiers. Most older codebases have them in at least three places: tax engine, invoice template, refund logic. - Replace with a date-aware lookup. vatverify's
/v1/ratesis one option; an internal rates table with dated rows is another. Either way the lookup takes a date and a country. - Re-issue invoices straddling a rate change date if material. For B2C sellers, this is mostly a price-display correction since the consumer is the one paying. For B2B sellers under reverse-charge, the buyer's recovery position can be off by the rate difference and the buyer will eventually flag it.