Shopify's Duties Calculator Runs on Two Fields You Probably Left Blank
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:
- The order isn't fulfilled through the Shopify Fulfillment Network.
- If you print shipping labels through Shopify, your carrier supports delivered-duty-paid (DDP) labels.
- The product involved has an HS code attached -- Shopify flags products missing one during setup, but only if you open that screen.
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:
- Does every product that ships cross-border have both an HS code and a country of origin set? Shopify's bulk editor under Products will surface which ones don't, but only if you go and check -- nothing flags a gap to you proactively once a product is live.
- Is your highest-volume international destination one with an actively moving tariff schedule? The US qualifies for most product categories in 2026. A lane governed by a long-stable trade agreement -- most intra-EU trade, UK-EU, or Australia-New Zealand shipping -- is far less likely to drift between the day you set the HS code and the day a customer checks out.
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:
- Audit HS codes and country of origin across your catalog in the Products bulk editor, prioritizing your highest-selling SKUs shipping cross-border first.
- If the US is a meaningful share of your international revenue, treat HS-code-to-tariff mapping as something to recheck this quarter, not something you set once and forget -- the rate table under a correct code is what's been moving.
- Only evaluate a paid duty app after the catalog audit, not instead of it. An app layered on top of missing product data inherits the same guesswork Shopify's native tool falls back to.
- Revisit your Show as line item versus Duties included in price choice for any market where you've since started collecting duties -- a duty line that appeared after a customer's first few orders in a market is a common, avoidable source of support tickets and disputed charges.
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.