Coder Vibe EU Parcel Duty

Description

Since 1 July 2026 the EU charges a flat €3 customs duty per declaration line on distance-sale parcels worth €150 or less shipped from outside the EU, whether or not you use IOSS. On a normal low-value declaration a line is a 6-digit HS code, not a unit:

  • 5 cotton T-shirts = 1 line = €3
  • 3 T-shirts and a watch = 2 lines = €6

This plugin handles the whole flow for UK and other non-EU shops selling to EU consumers.

Order detection

  • Spots EU-bound consignments from outside the EU and tests the €150 limit on goods value (ex VAT, shipping excluded)
  • Your own exchange rate, or opt in to daily European Central Bank reference rates
  • Skips virtual products, local pickup, non-EU destinations and shops that ship from inside the EU

EU VAT under IOSS

  • Collects the destination country’s VAT at checkout on parcels of €150 or less, through WooCommerce’s own tax engine
  • One click adds standard VAT rates for all 27 member states; edit them or add reduced rates as normal
  • Above €150, EU VAT is removed automatically: the sale is zero-rated and VAT is paid on import. The €150 test uses the goods value after coupons, the same value as the duty, and order recalculations in the admin use the order’s own value
  • Your IOSS number is encrypted at rest, masked in the admin, never shown to customers, and only sent to your carrier for parcels where IOSS VAT was actually collected, so nothing is taxed twice

The €3 duty

  • Charge it at checkout or absorb it and record it
  • Never charged at checkout on non-IOSS parcels shipped DAP, where the carrier already collects it from your customer
  • Lines by 6-digit HS code (H7) or by 10-digit code plus origin (H1)

Customs paperwork and carriers

  • HS code, country of origin and customs description on every product, with category defaults
  • HS code finder: describe a product and pick a code from the official UK Trade Tariff
  • Printable commercial invoice per order, with your EORI number
  • Royal Mail Click & Drop order-import CSV, single order or bulk, with IOSS delivery terms only where IOSS applied
  • REST endpoint for other shipping platforms: GET /wp-json/eupd/v1/orders/<id>/customs
  • Warnings for missing HS codes, weights and SKUs (required by Royal Mail for EU e-commerce goods from 1 November 2026)

Audit trail

  • Every order stores a record of the calculation: goods value, exchange rate with its source and date, duty lines, HS codes, VAT by rate, delivery terms and plugin version
  • The record locks when the order is paid and an order note summarises it; later exports, shipment references and recalculations that change the customs outcome are logged with time and user
  • Monthly IOSS report: VAT and taxable amount per member state and rate, net of refunds, converted at the ECB rate for the last day of the month, with CSV download

Important

This plugin is a calculation and record-keeping aid, not tax or customs advice. Check how your carrier and IOSS intermediary handle duty and VAT before going live. The €3 duty is transitional and due to run until 1 July 2028.

External services

GOV.UK Trade Tariff API (HM Revenue & Customs), used by the HS code finder in the admin. Only contacted when a store manager clicks “Find code” and searches.

  • Data sent: the search text, plus your site URL in the User-Agent header. No customer or order data.
  • Results are cached for a week.
  • Service: https://www.trade-tariff.service.gov.uk/
  • Terms: https://www.trade-tariff.service.gov.uk/terms
  • Privacy: https://www.trade-tariff.service.gov.uk/privacy

European Central Bank euro reference rates, optional and off by default. Only if the store manager chooses “European Central Bank” as the rate source in settings, the plugin downloads the public daily rates file twice a day, and the 90-day history file when the IOSS report is opened. Nothing about your shop, customers or orders is sent. Until then, the manual rate in settings is used and the ECB is never contacted.

  • Daily rates: https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
  • About the rates: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html
  • Legal notice and privacy: https://www.ecb.europa.eu/services/disclaimer/html/index.en.html

Checkout calculations never call an external service; they use the stored rate.

Screenshots

Installation

  1. Install and activate the plugin.
  2. Go to WooCommerce Settings Tax EU parcel duty.
  3. Check “Ships from” and how your non-IOSS parcels ship (DAP or DDP).
  4. If you use IOSS: tick “Collect EU VAT”, enter your IOSS number, click “Add EU standard VAT rates”, and make sure tax calculation is enabled in WooCommerce Settings General and “Calculate tax based on” is the customer shipping address in WooCommerce Settings Tax.
  5. Add HS codes, country of origin and weights to your products, or set default HS codes on categories.

FAQ

Can I use UK commodity codes?

Yes. The first 6 digits of any UK or EU commodity code are the international HS subheading.

Why isn’t the duty added at checkout?

If you don’t use IOSS and your parcels ship DAP, the carrier collects the €3 from your customer on delivery. Adding it at checkout as well would charge them twice, so the plugin records it on the order instead. Switch “Non-IOSS parcels ship” to DDP if you use a duties-paid service.

Is the €3 duty included in the IOSS VAT?

The European Commission says the duty is not part of the VAT taxable amount for IOSS sales. The duty fee is therefore not taxed by default.

What about orders over €150?

They can’t use IOSS. The plugin removes EU VAT and adds no flat duty; standard import VAT and duty are paid on arrival.

Does turning off “Enable” switch off the EU VAT handling?

No. “Enable” only controls the €3 duty. EU VAT follows the “Collect EU VAT (IOSS)” setting: with IOSS on, EU VAT is collected on parcels of €150 or less and removed above €150; with IOSS off, the EU VAT rates the plugin added are not used.

What happens to the EU VAT rates if I deactivate or delete the plugin?

They stay in WooCommerce Settings Tax, because they are ordinary WooCommerce tax rates you may have edited. Without the plugin nothing removes them, so they would charge EU VAT on every EU order, including orders over €150. If you stop using the plugin, delete those rates first. The Plugins screen shows a reminder while they are installed.

What about virtual products and local pickup?

Virtual products are not part of the parcel: they add no duty, their VAT is left as you configured it, and it is not counted as IOSS VAT. Orders collected by local pickup are not exported, so no EU duty is added and no EU customs record is made.

Does it work with the block checkout?

Yes. VAT and fees go through WooCommerce’s standard tax and fee APIs, which both checkouts use.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Coder Vibe EU Parcel Duty” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.1.2

  • The €150 IOSS test now takes coupons into account, so VAT and the IOSS status always agree. A parcel is only marked IOSS when the destination country’s VAT was actually charged.
  • Recalculating an order in the admin, or creating one through the REST API, now judges the €150 limit on that order, not on the shop manager’s cart, and the customs record is updated to match (logged if it was already locked).
  • Virtual items keep their VAT and no longer count towards the €150 limit or the IOSS VAT.
  • Local pickup orders are no longer treated as EU-bound parcels.
  • Only VAT of the country the parcel ships to is treated as IOSS VAT. Warning when tax is not calculated on the shipping address.
  • The duty “Enable” setting no longer switches off IOSS VAT handling.
  • Warning, and IOSS exports blocked, when the saved IOSS number is missing or can no longer be decrypted.
  • Warning on the Plugins screen that the EU VAT rates the plugin added stay active if it is deactivated.
  • Click & Drop CSV: phone numbers starting with + are no longer prefixed with an apostrophe. RFC 4180 output, with no PHP 8.4 deprecation notice.
  • Customs paperwork: refunded lines are left out, lines for deleted products are kept, a corrected shipping country is used, and totals add up when an order has virtual items.
  • Commercial invoice: neutral export VAT wording, no VAT box for non-EU or domestic orders, and translatable title and language.
  • The audit log records exports with the IOSS number status that was actually exported.
  • Fixed a fatal error when a refund ID was passed to the invoice, CSV export or customs REST endpoint.
  • IOSS report: fully refunded orders and refunds without line items are netted off, unpaid on-hold orders are only reported once paid, and VAT on virtual items or other countries’ rates is left out.
  • IOSS report months follow the store’s timezone, and the taxable amount is taken from the order lines.
  • HS code finder: a failed Trade Tariff lookup is no longer cached as “no results”.
  • The “Settings” link on the Plugins screen is hidden while WooCommerce is inactive.
  • Settings defaults for origin and exchange rate are no longer frozen by WooCommerce on install.

1.1.1

  • ECB exchange rates are now opt-in. Nothing is downloaded on activation or until the store manager chooses the ECB as the rate source.
  • The “WooCommerce required” notice only shows on the Plugins screen.

1.1.0

  • EU VAT under IOSS through WooCommerce tax rates, removed automatically above €150.
  • Encrypted, masked IOSS number, released only for IOSS consignments.
  • Daily ECB exchange rates.
  • Commercial invoice, Royal Mail Click & Drop CSV export and customs REST endpoint.
  • Country of origin and customs description on products.
  • Locked per-order audit record, audit log, shipment reference.
  • Monthly IOSS VAT report with CSV.
  • Duty is no longer charged at checkout on non-IOSS DAP parcels, where the carrier collects it.
  • Optional H1 line basis (10-digit code plus origin).

1.0.0

  • First release.