EU VAT
Free
$0.00

Charge the Right Tax. Every Order. Automatically.

EU VAT is a tripwire in a business suit. Four rules, decided live at checkout, on every order in your Joomla ecommerce store — and a validation outage can never take your checkout down with it.

27
EU member states covered, plus Northern Ireland
4
Tax rules decided live on every order
0
Checkouts blocked by a validation outage
6
Checkout points where the number is validated

Everything It Decides So You Don't Have To

A text box that collects a VAT number is not a tax engine. This is a tax engine. It runs on every order, it never gets tired, and it never gets optimistic.

Four Rules, Decided Live

Home-country buyer. EU buyer without a valid number. Verified EU business across a border. Buyer outside the bloc entirely. Four situations, four correct answers, every single order. No thinking. No remembering. No 2 a.m. "wait, do I charge this one?"

Cross-Border Business Sales, Zeroed

A verified business in another member state gets their tax removed the moment their number checks out. Exactly what the law says should happen — now happening without you touching anything.

Stop Taxing the Rest of the World

One switch. Your American, Australian and Canadian customers stop paying a European tax they never owed — and stop emailing you about the mystery line item on their total.

Downloads Get Their Own Rule

Selling a licence to a company is not the same as selling it to a person, and the rules know it. An EU buyer with no company name — or a number that didn't validate — still gets charged. On purpose. By default.

An Outage Can't Kill Your Checkout

Only a confirmed rejection ever stops a shopper. Service down, key expired, quota gone, packet dropped over the Alps — all of it comes back "can't say" and the customer sails right through. Your store does not go dark because a government server had a bad Tuesday.

Checked While They're Still Typing

Guest billing, guest shipping, registered billing, registered shipping — all four. The message lands on the VAT field itself, at the step where it was typed, while their hands are still on the keyboard and the fix takes four seconds.

Never Checks the Same Number Twice

Looked up once, remembered for the rest of the visit. No repeat lookups. No repeat waiting. No spinner sitting where a Place Order button should be.

Connection Check, One Click

Test your key before you save it. It reports back in plain English: whether it worked, how many seconds it took, and what went wrong if it didn't. Your key is scrubbed out of anything it prints. Yeah. We do that.

Two Services, Your Call

Use the European Commission's own free VAT checker, or plug in a paid service with your own key — the key field only appears when you pick it. Same correct answer either way.

No Special Server Requirements

If the classic connection method isn't available on your host, it quietly uses the modern one instead. You will never see a "your server is missing something" error page. You will never open a hosting ticket over this.

A Paper Trail for the Accountant

Switch it on and every ruling is written down — who, where, what number, what verdict, what happened to the tax. When someone asks six months later why an order wasn't taxed, you have an answer instead of a shrug.

Optional Heads-Up on Confirm

Flip it on and the customer gets a plain notice on the final screen if their number didn't pass. Shown once. Never doubled up. Never a stuttering double message.

Their Number, Nobody Else's

A registered customer's VAT number comes from their own saved address and the ownership is checked again before it's used. Regulated personal data in 27 countries. It stays where it belongs.

Europe as It Is, Not as It Was

All 27 member states. Greece filed under the code the official service actually expects. Northern Ireland in scope for goods. Great Britain outside the bloc, because it is. Typed country prefixes stripped whichever way your customer types them.

It Doesn't Fight Your Store

It uses whichever address your store already bases tax on and never invents a second opinion. Tax is only ever zeroed when a rule genuinely fired. The rest of the time your rates are exactly as you built them.

The Feature That Keeps Your Checkout Alive

Every validation comes back one of three ways: valid, invalid, or can't say. Only an explicit, confirmed rejection ever stops a shopper. Everything else — and there is a lot of everything else — waves them through.

It even ignores the official service's charming habit of answering "not valid" when what it actually means is "I am currently unwell."

  • Service down for maintenance? Customer sails through.
  • Key expired overnight? Customer sails through.
  • Monthly quota gone at 4 p.m.? Customer sails through.
  • Network dropped a packet? Customer sails through.

One Click Tells You If Your Server Can Even Reach It

Press Connection Check and it contacts your chosen validation service using the values currently typed into the form — meaning you can test a key before you save it. That is the correct order of operations, and roughly nobody does it that way.

The answer comes back in plain English. No log file spelunking. No guessing.

  • Whether it worked, and how many seconds the round trip took
  • Whether your server's outbound request was blocked
  • Whether the service itself answered with an error
  • Your key scrubbed out of anything it prints back

Downloads Are Taxed Like Downloads

This is the single most commonly botched rule in European ecommerce, and it gets botched silently — order after order — until somebody audits you. Sell licences, PDFs or memberships and the treatment changes depending on whether the buyer is a business or a person.

So there is a dedicated switch for it, on by default, doing the right thing before you even find it.

  • EU buyer with no company name still gets charged
  • A number that failed to validate still gets charged
  • Verified businesses still get their reverse charge
  • One catalogue, one checkout, one mental model

Real-World Use Cases

Software licences, delivered by email, sold to companies in fourteen countries and to individual freelancers in all of them too. The freelancer in Lisbon with no company name gets charged. The agency in Vienna with a verified number does not. The buyer down the road in Berlin gets taxed like always. Three completely different legal outcomes, three completely different totals, zero manual intervention — and the owner hasn't thought about a VAT rule since the day they installed it.

Every customer is VAT-registered. Every cross-border order should land with the tax stripped out. Before: a checkout that charged everyone, and a finance team that issued credit notes as a full-time hobby. After: the number is checked at the address step, the tax comes off at the total, and the credit-note hobby is over. When the official service went down for four hours one morning, orders kept flowing — because "can't say" is not "no".

Physical goods and digital products in the same cart, and the two are not supposed to be taxed the same way for an individual EU buyer. The digital rule handles the split without the owner maintaining two product catalogues, two checkouts, or two mental models. They set it once and went back to selling things. Which is, allegedly, the job.

Based in the EU, selling worldwide, and — without ever meaning to — charging European VAT to buyers in the United States, Australia and Canada for two straight years. One switch fixed it. Those customers stopped seeing a mystery line item, support tickets about "what is this charge" evaporated, and conversion on non-EU traffic went up for the least glamorous reason in the history of ecommerce: the price finally said the right number.

Kill the Spreadsheet. Today.

Every day this isn't installed, your store is guessing at European tax law and quietly hoping nobody checks. Four rules. Every order. Automatically. Stop pasting VAT numbers into a government website one at a time like it's 2004.

Translated In The Following Languages

Arabic Unitag (ar-AA), Chinese, Traditional (zh-TW), Danish (da-DK), Dutch (nl-NL), English (en-GB), English, USA (en-US), Finnish (fi-FI), French (fr-FR), German (de-DE), Greek (el-GR), Hebrew (he-IL), Italian (it-IT), Japanese (ja-JP), Norwegian Bokmål (nb-NO), Persian Farsi (fa-IR), Polish (pl-PL), Portuguese, Brazil (pt-BR), Portuguese, Portugal (pt-PT), Russian (ru-RU), Spanish (es-ES), Swedish (sv-SE), Turkish (tr-TR)


  • Developer J2Commerce
  • Extension Type Apps
  • J2Commerce Version 4.x, 6.x
  • Joomla Version 4.x, 5.x, 6.x
Language Translations
Arabic UnitagArabic Unitag
Chinese, TraditionalChinese, Traditional
DanishDanish
DutchDutch
EnglishEnglish
English, USAEnglish, USA
FinnishFinnish
FrenchFrench
GermanGerman
GreekGreek
HebrewHebrew
ItalianItalian
JapaneseJapanese
Norwegian BokmålNorwegian Bokmål
Persian FarsiPersian Farsi
PolishPolish
Portuguese, BrazilPortuguese, Brazil
Portuguese, PortugalPortuguese, Portugal
RussianRussian
SpanishSpanish
SwedishSwedish
TurkishTurkish

New Feature Optional dedicated checkout step for the VAT ID: registered customers verify their saved number or enter a different one, guests just enter one

New Feature "Update my address" checkbox writes a freshly-entered VAT number/company back onto the customer's saved address, opt-in and order-scoped otherwise

Fix The VIES path falls back to scraping an HTML page that no longer exists

Fix A missing or rejected Vatlayer key is recorded as "invalid VAT number"

Fix VIES outage is recorded as "invalid VAT number"

New Feature Added a button 'Check' in the settings to perform connection test to VIES and Vatlayer services

Improvement Hold the admin connection check to the same permission as other setup screens

Improvement Keep provider credentials and server paths out of diagnostics and messages

Improvement Record reverse-charge zero-ratings in a dedicated audit log

Improvement Budget live provider lookups per session and bound the cached verdicts

Improvement Normalise and bound every value written to the audit log

Improvement Keep an unwritable log directory from interrupting checkout pricing

Improvement Keep the tax decision's EU and non-EU branches mutually exclusive

Improvement Omit third-party registrant details from debug traces

Improvement Apply the debug setting consistently to every diagnostic line

Improvement Mask the Vatlayer access key field and suppress browser autofill

Improvement Read the connection-check token from the request body only

Update Follows 6.1.0; no change to what any order is charged

Update Zero-rating decisions are written to administrator/logs/app_euvat_audit.php

Fix Wrong call to model

Fix https call to service

New Feature Added logs for better feedback on issues returned by the soap calls

Improvement Code clean-up

Fix try and catch attempts to check VAT via the SOAP client

Improvement Image integration with new app store

Fix Broken FOF in getCountry function

Improvement Improved language strings

Update Migrated to J2Store v4.x

You may also be interested in these products

Stay Updated

Subscribe for free and be the first to know about the latest features, updates, and new additions.