DrPlugin

EU VAT and tax

Updated October 24, 2026

Charge EU and UK VAT at the buyer's rate, check business VAT numbers with VIES and keep the evidence for each sale. This needs TierMint Pro.

What TierMint does and does not do

TierMint works out the tax for each sale, adds it at checkout and stores the evidence a tax authority can ask for. Digital products sold to consumers in the EU are taxed at the buyer's rate, not yours, and TierMint handles that.

TierMint is not a merchant of record. You are still the seller. You register for VAT or for the OSS scheme, collect the tax, and file and pay your own returns. TierMint calculates, checks VAT numbers and keeps records. It files nothing for you.

Turn on tax calculation

  1. Open TierMint → Settings → Tax.
  2. Turn on Enable tax calculation.
  3. Pick your Merchant country. Type a name to filter the list.
  4. Fill in the other settings in the table below.
  5. Click Save.

Tax stays off until Enable tax calculation is on and Merchant country is set. Nothing changes on your store before that.

Setting Default What it does
Enable tax calculation Off Turns the tax engine on. While it is on, the checkout always asks for the country and the tax ID, and the country is required.
Catalog prices already include tax Off Treats your catalog prices as tax-inclusive. See Prices that include tax.
Merchant country None The country your business is established in. TierMint uses it to tell a domestic sale from a cross-border one.
Your VAT number Blank Optional. TierMint sends it to VIES as the requester when it checks a buyer's VAT number, so each check is recorded against your number. VIES then returns a consultation number, which TierMint stores with the order.
When VIES is unavailable Accept a correctly formatted VAT number What happens when the VAT number service does not answer. See When VIES is unavailable.
When the billing country and the IP country disagree Ask the customer to confirm What happens when the two location signals differ. See Two pieces of location evidence.
Manual rate overrides None Rates you set yourself. See Set your own rates.

The tax settings with the merchant country, VAT number, both policies, the rate table and one manual rate override

What buyers see at checkout

With tax on, the Billing section of the checkout asks for:

  • Country, which is required. Its help text reads "We use this to work out the tax on your order."
  • VAT, GST, or tax ID (optional), for business buyers. It sits under I am buying as a company, next to Company name. If you turned off Offer a company purchase option under TierMint → Settings → General, the field shows on its own.
  • I confirm this is the country I live in, a checkbox that shows only when the mismatch policy is Ask the customer to confirm.

When the buyer picks a country, the order summary shows a Tax line and the new total before they pay. The line says "Tax", not "VAT", because the same row works wherever you sell.

The checkout with a Country field, the company fields with a VAT number, and a tax line in the order summary

The card fields open in the Payment section after the buyer clicks Pay now, as How a buyer pays explains.

A VAT number does not change the total shown before payment. The summary keeps the VAT, with the note "VAT is shown at your country's rate for now. Your VAT number is checked when you pay, and the VAT is removed then if it is valid." TierMint checks the number with VIES only when the buyer pays, not on each update of the summary. So the price a business sees before paying can only go down at payment, never up.

How the tax is worked out

Buyer What happens
A consumer in an EU country Charged that country's VAT rate, wherever you are.
A consumer in the UK Charged the UK rate.
A business in another EU country, with a VAT number that VIES confirms Reverse charged. No VAT is added, and the buyer accounts for it.
A business in your own country Charged your domestic rate. Reverse charge applies to cross-border sales only.
A business with a UK (GB) or Northern Irish (XI) VAT number Charged VAT. TierMint cannot check these numbers. See UK and Northern Irish VAT numbers.
A buyer in a country with no rate in the table and no override No tax is added. A VAT number is ignored.

The rate table that ships with TierMint Pro covers the 27 EU member states, the UK, the Isle of Man and Monaco. VAT reporting treats Monaco as outside the EU, so a Monaco sale is charged VAT but appears under Not on this OSS return.

Tax is worked out on the price after any discount, so a discount lowers the tax too.

If the tax engine fails, for example with a damaged rate table or a plugin conflict, the sale goes through without tax. TierMint writes the failure to its log table, tiermint_logs with your database prefix. Check it if your tax figures ever look wrong.

Prices that include tax

By default, a catalog price is the price before tax, and TierMint adds the tax at checkout. Turn on Catalog prices already include tax under TierMint → Settings → Tax to make the catalog price the price the buyer pays, tax included. It takes effect only while tax calculation is on and a merchant country is set.

With it on:

  • The catalog price is the price paid, wherever the buyer is. The product grid, the pricing table and the buy button show the price with an "incl. tax" note.
  • TierMint works out the tax inside that price from the buyer's country. The checkout summary shows an Includes tax line, and the total stays the same. The cart summary labels its total Subtotal (incl. tax).
  • A business in another EU country with a VAT number that VIES confirms pays the price with the contained tax taken off.
  • Nothing on the page depends on where the visitor is, so a cached product page is right for everyone.

A plan price with an incl. tax note beside it

The note and the two labels come from TierMint Pro, through filters the free plugin offers. To show your own note, such as "incl. VAT", filter tiermint_price_note at a later priority. Return the note unchanged when it is empty, so prices show no note while the setting is off.

add_filter( 'tiermint_price_note', fn ( $note ) => '' === $note ? $note : 'incl. VAT', 20 );

If you deactivate TierMint Pro, orders already placed keep their figures. The storefront shows each price as entered, with no note, and the summary rows read Tax and Total. Checkout charges the entered price with no tax line. The setting stays stored and applies again when you activate Pro.

The price is fixed and the tax rate is not, so what you keep changes with the buyer's country. A price of 49.00 at a 19 percent rate contains 7.82 of tax and leaves you 41.18. At 27 percent, it leaves you 38.58. To keep your margin fixed instead, leave the setting off so the tax is added on top.

Your records stay the same. Each order still stores the tax-exclusive figures. A 49.00 sale at 19 percent is recorded as net 41.18, VAT 7.82 and total 49.00, which is the split the invoice prints and the OSS return needs. A discount is recorded as its net part and its tax part.

What the setting does not do:

  • It sets one price for every country. A separate price per market is not supported.
  • Prices show in your store's single currency.
  • The price field in the product editor keeps its label. With the setting on, TierMint reads the amount you enter as tax-inclusive.

Tax on subscription renewals

TierMint works out tax at checkout only. A renewal order records the amount the payment gateway charged and has no tax line. This is the same with tax-inclusive and tax-exclusive prices. Renewal orders, and the orders TierMint books for plan-change prorations, carry no tax record. They appear nowhere in VAT reporting, and their invoices print no VAT rows. Account for them yourself.

Two pieces of location evidence

EU rules ask you to keep two pieces of evidence, which do not contradict each other, for where a digital buyer is. TierMint collects:

  1. The country the buyer picks at checkout, their billing country.
  2. The country of their IP address, when your host provides it. On Cloudflare this works on its own, through the CF-IPCountry header. On other hosts, a developer can supply the country with the tiermint_tax_geoip_country filter. It receives the country found so far (or null), the buyer's IP address and the checkout context, and returns a two-letter country code.

When the two agree, nothing else happens. When they differ, the setting When the billing country and the IP country disagree decides:

Option What happens
Ask the customer to confirm (default) The checkbox I confirm this is the country I live in is optional while the signals agree. When they differ, checkout stops with "The country you selected does not match where your connection appears to be. Please confirm the country you live in to continue." The ticked box is stored as the buyer's own statement, which settles the conflict.
Trust the billing address The checkbox does not show. The billing country wins and no question is asked. Buying is faster, and the record is weaker in an audit.

A buyer on a VPN, or traveling, often triggers the mismatch.

TierMint records whether it had two pieces of evidence that agree, but it does not refuse a sale with only one. On a site with no IP country, most sales have one piece and are flagged as thin evidence under VAT reporting. Add an IP country source if you want to meet the two-piece standard.

Check business VAT numbers (VIES)

VIES is the European Commission's VAT number checker. When a buyer enters a VAT number and pays, TierMint:

  1. Checks the format first. A number with the wrong shape for its country gets VAT charged, without asking VIES.
  2. Checks that the number's country matches the country the buyer picked. If not, VAT is charged.
  3. Asks VIES whether the number is registered. TierMint keeps each answer for 24 hours, so a repeat buyer does not trigger a new check.
  4. Reverse charges the sale when VIES confirms the number and the buyer is in another EU country. If VIES says the number is not registered, VAT is charged.

The buyer sees a message for each case:

Case Message
The format is wrong That VAT number is not in a recognized format, so VAT has been charged. Check it and try again to have it reverse charged.
The country does not match That VAT number is registered in (country code), which does not match the country you selected, so VAT has been charged.
The buyer is in your own country VAT has been charged at the domestic rate. Reverse charge applies to cross-border sales only.
VIES confirms the number Your VAT number was verified, so this sale is reverse charged and no VAT has been added.
VIES does not confirm the number That VAT number could not be verified as registered, so VAT has been charged.

When VIES is unavailable

VIES, and the member state services behind it, are sometimes down. The setting When VIES is unavailable decides what happens:

Option What happens
Accept a correctly formatted VAT number (default) The sale is reverse charged and flagged as unverified. TierMint asks VIES again later, on its own. See Awaiting a VAT number re-check.
Charge VAT and refund later VAT is charged. The buyer is told to contact you for a refund once the number is verified, and you refund the VAT by hand.

If TierMint checked the same number successfully in the last 30 days, it uses that answer during an outage and records how old it is.

UK and Northern Irish VAT numbers

VIES covers EU member states only, so it cannot check GB numbers, and TierMint does not connect to the UK's own checker. TierMint treats Northern Irish XI numbers the same way.

A GB or XI VAT number is always charged VAT and never reverse charged, whatever When VIES is unavailable says. That setting covers a short outage, after which the number can be checked again. A UK number can never be checked by TierMint. The buyer sees "UK VAT numbers cannot be verified automatically, so VAT has been charged. Contact us for a refund if you are VAT registered." You can check the number yourself with the UK government's VAT number checker and refund the VAT by hand.

Rates and keeping them current

TierMint ships with a VAT rate table. It also holds rates for special territories, such as the Canary Islands, Ceuta and Melilla, but the checkout asks for a country, not a region. A buyer there picks the country and pays its standard rate. To charge a special territory's rate, a developer must supply the buyer's region through the tiermint_checkout_intent_context filter as billing_region. The shipped regional rates then apply. A manual override covers the whole country and does not help here.

Once a week, TierMint downloads an updated rate table from DrPlugin. A failed download does no harm: TierMint keeps the last good table, or the rates that shipped with the plugin. The EU VAT rate table box on the Tax tab shows the Version, Rates as of, Last verified, and the result of the last download.

While tax is configured, TierMint shows users who can manage TierMint settings a notice in wp-admin when the rates are more than 60 days past their last verified date. The Tax tab shows its own warning to anyone who opens it. On a healthy site the weekly download keeps that date current. If WP-Cron and your server cron are both off, TierMint never tries a download, and the warning says so. When you see the warning, check the current rates for the countries you sell to and add an override for any that changed.

Set your own rates

Under Manual rate overrides, click Add override, pick a country and enter the rate as a percentage, for example 21 or 25.5. The rate must be between 0 and 100. Click Remove to delete a row, then Save.

An override beats the rates that shipped with the plugin and any rates downloaded later. You never have to wait for a rate update. An override for a country that is not in the table adds it, so you can charge VAT in a country TierMint does not ship a rate for. An override covers the whole country, including any special territories in it.

The 60-day warning is about the age of the rate table, so it stays even when you override every country you sell to. Treat it as a reminder to check your own rates.

What TierMint stores with each order

Each taxed order records:

  • the tax charged, per line and in total
  • the place of supply, the country whose rate was used, and the rate
  • both location signals, and the buyer's confirmation when one was asked for
  • the VAT number and the VIES answer, with the consultation number when there is one
  • whether the sale was reverse charged

An order's tax record with the place of supply, the buyer's VAT number, the location evidence and the VIES answer

You can file the quarterly OSS return and review flagged orders under TierMint → VAT reporting. The record itself opens from the order number on the Flagged orders tab. For any other order, use the address admin.php?page=tiermint#/tax/orders/<order id>. The VAT reporting page explains each screen.

TierMint never deletes this evidence on its own. EU VAT rules expect you to keep it for ten years, and how long you keep it is your decision. When you erase a buyer's data with Tools → Erase Personal Data, TierMint removes the IP address and any business name and address VIES returned. It keeps the country, the rate and the VAT number, which you need as accounting records.

A completed sale also gets a numbered PDF invoice. The tax record decides what the invoice states, including the reverse charge wording. See PDF invoices.

TierMint does not offer IOSS. IOSS covers imported goods in consignments up to EUR 150. TierMint sells electronic services, which are reported through OSS.

Common questions

Why is no tax added?

Check that Enable tax calculation is on and Merchant country is set. Tax stays off until both are set. Then check the buyer's country: a country with no rate in the table and no override pays no tax.

Why must buyers tick the confirmation box?

Only when the country they picked differs from the country of their connection. If this happens to many buyers, your IP country source may be wrong. A proxy or CDN in front of Cloudflare can report its own location. Correct it with the tiermint_tax_geoip_country filter, or set the mismatch policy to Trust the billing address.

Why is a valid VAT number rejected?

Check the number on the VIES website. A newly registered number can take days to appear there. Also check that the number's country matches the country the buyer picked. A GB or XI number is always charged VAT.

A business buyer says the VAT did not come off. Why?

Before payment, the checkout still shows the VAT. It comes off when the buyer pays and VIES confirms the number. Check the completed order, not the checkout page. If the VAT is still on a completed order, open its tax record to see the VIES answer. See What TierMint stores with each order for how to reach it.

Why does the tax line not update at checkout?

The summary updates through a background request as the buyer fills in the form. If your page cache serves the checkout page from cache, exclude it, the same way you would exclude a cart page.