A customer in another country orders from your store, pays, and a week later the courier asks for an extra bill before handing over the parcel. Some customers pay and are annoyed. Some refuse the parcel, and you lose the goods, the postage and the sale. This is one of the most avoidable problems in cross-border selling, and it starts with a question: who pays the duties, and when do they find out?
This guide explains the choice and what Shopify needs from you to make it work, using Shopify's Help Center pages that I read on 11 November 2026. They show no dates and the details can change, so check them in your own admin. I give no duty rates, because each country sets its own. This is general information, not legal or tax advice.
Two ways duties reach the customer
Shopify's duties page says customers may be charged duties and import taxes when a parcel arrives. The amount is set by customs authorities from the product's classification and the rules for its origin and destination. The other way is that you, the merchant, collect an estimate at checkout, so the customer sees the cost before paying and nothing is charged at the door.
The features overview mentions Delivered Duty Paid labels, called DDP labels, which include international duties and import tax so the customer sees prepaid shipping costs. The pages I read do not define the other arrangement in detail, so in this guide I just call it customer pays on delivery.
Neither choice is better for every store. Collecting at checkout is friendlier and gives fewer refused parcels, but it needs good product data and a carrier that supports the right label. Leaving it to the door is simpler, but customers may meet a surprise.
What Shopify needs to collect duties at checkout
The charging duties page gives three conditions:
- If you buy shipping labels, your carrier must support DDP labels.
- You must not use Shopify Fulfillment Network.
- Your products must have HS codes.
If these are not met, the page says to use a third-party app. Shopify calculates duties from the HS code and the country of origin. For some countries, such as Switzerland, it also needs the weight. If the HS code is missing, it falls back to the product description and category, and if all of those are missing the result is likely to be inaccurate.
The page describes a transaction fee on orders where duties are calculated. The rate depends on your payment gateway, so read the current figure on the page before you switch the feature on.
The product data customs asks for
Two fields do most of the work.
- HS code. Shopify's HS code page says it is an international trade code that identifies what a product is. It usually has six digits, and countries may add more digits or letters. If a country-specific code exists, Shopify uses it. Otherwise it uses the six-digit code.
- Country of origin. This is where the product was made or assembled into the form you sell. A default country of origin for the store applies only to products that have none of their own. That default is a trap for anyone who sells goods from several factories.
Customs also asks for a clear product description, and weight can matter. If you drop-ship or resell goods, ask your supplier for the code and the origin. Do not guess them to fill the gap.
Four ways to add HS codes and origins
- The product page. In the Shipping section you can enter the HS code and the country of origin, and add region-specific codes.
- The bulk editor. It has columns for the harmonised system code and the country of origin.
- A CSV file. Import it through Settings, then Taxes and duties. Shopify matches rows by product handle and variant SKU.
- When you buy a label. Use Edit customs information on the label screen.
To find a code, you can type a description on the product page. The help page also links to the US International Trade Commission's tariff search. If you use Shopify Managed Markets, the page says Shopify assigns HS codes automatically.
Showing duties to the customer
Under Settings, Taxes and duties, you set up Duties and import taxes. The page lists steps: confirm that carriers support DDP, choose countries, add missing HS codes and origins, update your store policy and notifications, agree to the terms and set the options for each market in Markets. For each market you choose how taxes are displayed (dynamic, included or as a line item) and whether duties appear as a line item, added to the total, or are included in the price, which means you absorb them.
Two cautions from the page. First, the amounts are estimates. If product data is missing or wrong, a customer can still be charged extra duties on delivery. Second, preferential trade treaties are included by default, and a certificate of origin may be needed. You can turn that off. For goods bound for the US, the page also has settings for particular US tariff rules, so read those if the US is one of your markets. In the merchant's order view you can see the HS codes, duty rates, the amounts and whether a treaty or a minimum value limit was applied.
Fees that are not duties
Duties are not the only charge a customer can meet at the door. The Canada Border Services Agency's courier page says approved couriers may charge customs clearance fees, such as document preparation costs, separate from duties and taxes. It describes them as a private matter between customer and courier, outside the agency's control, and advises customers to confirm fees with the courier. That is one country's page, but it shows why a checkout estimate of duties may still leave a bill at delivery. Tell customers in your shipping policy what is and is not included.
A worked example, with invented numbers
A seller of handmade candles exports 120 products and finds that 70 have no HS code and none has a country of origin, because everything is made in one workshop and the store default was never set. She fixes the default first, so all products have an origin. Then she sorts the 70 missing codes into five product types, looks up one code for each type with her adviser and fills them in with a CSV import, matched by handle and SKU. Last, she places test orders for two countries and checks the duty lines in the order view. The work takes an afternoon, and the checkout estimate no longer falls back to guesses from product descriptions.
Questions to settle before you switch it on
- Which countries will you collect duties for, and which will you leave to the courier?
- Do you pass duties to the customer, or absorb them in the price?
- Does your carrier support DDP labels for those routes?
- Are HS codes and origins filled in for every product, and who owns them?
- What does your returns policy say about duties? Our guide to returns and refunds helps.
- What will the checkout and the confirmation email say about duties, in each language?
For tax and duty rules by country, see our guides to selling into the EU from outside and selling to US customers, and our Shopify Markets guide. Check each country's customs authority for current rules, or ask an adviser.
ESTASOFT's integrations and APIs page describes the carrier and system connections we build. To talk about your shipping set-up, send a short brief on the contact page.
Sources
- Duties and import taxes (Shopify Help Center): customers may be charged on arrival, estimates at checkout, what sets the amount, linked topics; page shows no date (checked 11 November 2026)
- Collecting duties and import taxes at checkout (Shopify Help Center): conditions for collecting duties, how they are calculated, display options, estimates, treaties, transaction fee note, setup path; page shows no date (checked 11 November 2026)
- HS codes and country of origin (Shopify Help Center): what an HS code is, six digits, country of origin, four ways to add them, Managed Markets; page shows no date (checked 11 November 2026)
- Low-value shipments by courier (Canada Border Services Agency): couriers may charge clearance fees separate from duties and taxes; page date not shown (checked 11 November 2026)
- Overview of order fulfillment and shipping features (Shopify Help Center): customs documentation, HS codes, duty calculations, DDP labels; page shows no date (checked 11 November 2026)
