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.
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
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
Arabic Unitag
Chinese, Traditional
Danish
Dutch
English
English, USA
Finnish
French
German
Greek
Hebrew
Italian
Japanese
Norwegian Bokmål
Persian Farsi
Polish
Portuguese, Brazil
Portuguese, Portugal
Russian
Spanish
Swedish
TurkishNew 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.