Set up duties and landed costs
See duties and import VAT by market, upload a 3PL or carrier invoice as a CSV without counting a cost twice, and how VAT paid outside Shopify is set.
6 min readUpdated 14 October 2026
Duties and landed costs brings together what your orders pay at the border and on the way to the customer: duty and import VAT, a 3PL's fees and freight. It lives in the brand's Settings, beside Costs.
Before you start
- Who: anyone who can open the brand's Settings sees the page. Uploading costs and adding VAT rules needs permission to edit the brand's costs.
- Duty collected at checkout and duty billed by Shopify come from Shopify on their own. You upload only what you pay outside Shopify, from a 3PL's or a carrier's invoice export.
- Amounts are shown in your shop's currency.
Step by step: open the page
- Open the brand and choose Settings.
- Choose Duties and landed costs.
The page has three parts: Duties by market, Upload landed costs and VAT paid outside Shopify (OSS and IOSS).
Duties by market
One row per destination country, for the last 30 days, 90 days or 12 months:
| Column | What it shows |
|---|---|
| Orders | Orders shipped there in the period |
| Collected at checkout | Duty shoppers paid at checkout |
| Billed by Shopify | Duty and import tax Shopify billed you |
| Paid outside Shopify | Duty and import VAT from your uploaded invoices |
| VAT estimate | VAT owed outside Shopify, estimated by a rule that is switched on |
| 3PL and freight | 3PL fees and freight from your uploaded invoices |
All markets at the foot totals every country. The figures sit side by side; nothing is netted on this page.
Step by step: upload landed costs
- Under Upload landed costs, choose Choose a CSV file. The file must be under 2 MB.
- The file is read straight away as a preview. Nothing is saved yet.
- Check what was read:
- each column and what it was read as, for example Duty as duty or Fulfilment fee as a 3PL fee, and any column Not read;
- each line's order or tracking number and its status: Matched, Matches two orders, No order found or No currency;
- the totals by kind of cost.
- If the file has no currency column, set Currency of the amounts. Check the Upload name (it defaults to the file name) and the Supplier, who billed the file, which keeps two suppliers' invoice numbers apart.
- Select Import with the number of lines. If the file replaces earlier lines, the button says how many, and a second select confirms it.
A message confirms how many cost lines were imported, and the table above updates.
What a file can hold
- One row per order or shipment with a column per cost (Duty, Import VAT, Fulfilment fee, Freight), or one cost per row with a charge type and an amount.
- Each row names its order by number or name (1042, #1042) or by a tracking or waybill (AWB) number.
- A plain VAT or Tax column is not read, because on a 3PL's invoice it is usually the VAT on their own fees. Name the column Import VAT if it is VAT paid at the border.
- Payment fees, Shopify Shipping labels and duty billed by Shopify are refused: they already come from Shopify.
Example
Fellwick's carrier sends a monthly export with an AWB number, Duty and Freight per shipment. Uploaded as carrier-october, 400 rows match their orders. A week later the carrier sends a corrected file for the same invoice: uploading it updates the changed lines and removes any line the new file no longer has, and nothing from September is touched.
What reaches profit
- Duty shows as two lines on the P&L, Duty paid and Duty collected. Duty paid is what Shopify billed you, else what you uploaded, else the duty Shopify calculated on the order. Duty collected is only duty charged on top at checkout; duty inside a duty-inclusive price is part of sales. Duty refunded to a shopper stays a cost, because it was paid at import.
- Freight from an upload replaces your shipping cost rule for that order. A Shopify Shipping label wins over uploaded freight.
- An order matching more than one order number is not imported, so a cost never lands on the wrong order.
VAT paid outside Shopify (OSS and IOSS)
For countries where you owe VAT that Shopify does not collect, through the EU's OSS or IOSS return or to a carrier or tax office.
- Select Add country.
- Enter the Country code (for example DE) and the VAT rate (%).
- Choose Paid through: IOSS, OSS or Carrier or tax office.
- Answer Does the shopper's price already hold the VAT?
- Select Save. The rule is added switched off.
While a rule is on, each order to that country where Shopify collected no tax carries an estimated VAT figure in VAT estimate, until an uploaded VAT figure for that order replaces it. Changing a rule that is on switches it off until Fabrik confirms it again.
Troubleshooting
- "Not available yet": the page is not ready for your brand yet. Try again later.
- "Nothing can be imported from this file": no row carried a cost, or no column was recognised. Rename the columns, for example Order number, Duty, Freight.
- "Matches two orders": use the order number rather than a reference shared by two orders.
- "No order found": the order or tracking number is not in Shopify, or the order is more than about four months older than the file's earliest date.
- "The file is over 2 MB": split the file into smaller files.