Shopify's Duties Calculator Runs on Two Fields You Probably Left Blank

By Milan Dhameliya · · 9 min read

Shopify's native duties calculator only ever produces two kinds of numbers: an accurate one, built from a product's HS code and country of origin, or a guess built from its title and category when either field is missing -- and your checkout never tells the customer which one they got. This is the two-field test that predicts it before a parcel gets stopped at the border, why a correct HS code from six months ago can still produce the wrong number today, and the specific point at which a paid duty app starts earning its fee over the free native toggle.

Shopify's built-in duties calculator prices what a customer owes at checkout using exactly two product-level fields: the Harmonized System (HS) code and the country of origin. When both are present and correct, the number is a reasonable approximation of what customs will actually charge. When either is missing, Shopify doesn't refuse to calculate -- it estimates from the product's title and category instead, charges you the same transaction fee on that guess as it would on an accurate figure, and gives the customer at checkout no indication that the number in their cart might be wrong.

That's the gap the official documentation and every duty-app listing both have a reason to leave unsaid: the free native tool and every paid alternative price duties from the same two inputs. The real question was never which calculator is smarter. It's whether your catalog has the data either one needs, and whether the destination you're shipping into is stable enough for a six-month-old HS code mapping to still be true today.

What the native calculator actually checks before it charges anyone

The feature lives in two places that do the same underlying job: Settings > Taxes and duties > Duties and import taxes, or per-market inside Settings > Markets. Before Shopify will calculate anything for an order, three conditions have to hold:

Two fields do the actual math: the six-digit HS code (extended with country-specific digits where Shopify has them) and the country of origin, meaning where the product was made or assembled into its final sellable form, not where you ship it from. A handful of destinations, Switzerland among them, also factor in product weight. Leave HS code or origin blank on a product, and Shopify still produces a number -- estimated from the product's description and category -- but says plainly in its own documentation that a guess built this way is likely to be inaccurate.

At checkout you choose how the charge surfaces: Show as line item lists duties separately from the order total, or Duties included in price folds the cost into what you charge and you absorb the exposure instead of the customer. Either way, Shopify's own fee for running the calculation is currently a flat 0.5% per order with a nonzero duty, temporarily reduced from the standard 0.85% with Shopify Payments or 1.5% with any other gateway -- and that fee applies whether the underlying estimate turns out to be right or wrong. Domestic orders, EU-to-EU shipments, and abandoned checkouts are exempt.

Where the estimate actually breaks

A missing HS code is the obvious failure, and it's the one Shopify's own help docs already warn about. The less obvious one showed up in a Shopify Community thread from a merchant shipping from Canada into the US: their checkout kept charging a flat 6.8% on orders that, under the reciprocal tariff rate US Customs had newly applied to that HS code, should have been running far higher. The product data wasn't wrong. What was out of date was the tariff rate mapped to it -- and the thread's own diagnosis is worth sitting with: Shopify doesn't set tariff rates itself, it applies whatever rate table is current for that HS code and destination at calculation time, and in 2026 those tables have had far more reason to move than they did in a normal year.

That risk is concentrated specifically on the US lane. If you switched on duty collection when the US ended its de minimis exemption, an HS code you verified back then is not a guarantee that the rate sitting behind it is still current -- the field hasn't changed, the tariff schedule attached to it has.

The two-field test, before you trust the number

Run this against your own catalog before assuming your checkout is telling customers the truth:

Fail the first question, and no calculator, free or paid, will give you an accurate number -- the fix is a catalog audit, not a new subscription. Pass the first and fail the second, and you have a specific, narrow reason to look past the native tool rather than a general one.

When the free native calculator is genuinely enough

If your catalog has clean HS codes and countries of origin, and your international volume sits mostly in markets with settled trade terms, the built-in toggle is doing the same core calculation a paid app would do, for a lower fee and no extra account to manage. This describes most stores selling from the US, UK, Canada, Australia, or Ireland into each other's markets and into the EU -- established trade relationships don't move month to month the way a country actively renegotiating tariffs does. It's also the right starting point for any store that hasn't yet turned duty collection on at all: get the settings-level decision between DDU and DDP right first, since a wrong toggle there produces worse outcomes than an occasionally imprecise duty figure ever will.

When a paid duty app is worth its fee

The case for paying gets stronger the more your order value and your tariff exposure both increase, because the cost of a wrong number scales with both. Third-party duty calculators like Zonos, Avalara, or Passport are built around the same HS-code-plus-origin inputs Shopify uses, but several structure the commercial relationship differently in ways that matter once volatility is real. Zonos, for one, states in its own Shopify App Store listing that it pays the duty and tax bill itself rather than leaving the merchant to reconcile or dispute a carrier's invoice after the fact, and that it remits VAT directly so a merchant doesn't need to separately register for IOSS or a UK VAT number. That's a fundamentally different guarantee than Shopify's own estimate, which is explicitly disclosed as an estimate with no backstop if it's wrong.

Paying for that guarantee makes sense when a wrong number costs you more than the subscription: high-AOV catalogs where a duty miscalculation is a large absolute dollar gap, US-bound volume during a period of active tariff changes, or markets where you're required to register for VAT remittance yourself and would rather not. It's a weaker case for a store with a handful of international orders a month and no exposure to a currently-moving tariff schedule -- there, the fee is a fixed cost against a small and shrinking risk.

The classification depth is also worth checking before you switch, not after. Zonos's own listing puts 10,000 HS classifications in its Standard plan -- a broader mapping than most merchants will ever build by hand in Shopify's product editor, which matters if your catalog spans enough categories that a handful of SKUs sit in ambiguous or newly reclassified tariff codes. A narrow catalog with a handful of well-documented HS codes gets much less benefit from that depth than a large, varied one does, which is its own argument for auditing your catalog's actual code coverage before paying for a bigger database than you need.

What to actually do this week

Regardless of which tool ends up calculating the number, three things determine whether it's right:

If you want a second pair of eyes on which side of this decision your store actually falls on, or help auditing HS codes and country-of-origin data across a large catalog before a customer disputes a charge, get in touch, or see what I do for stores selling internationally on Shopify.

Sources reviewed