I am a US-based merchant (Las Vegas, NV) shipping to Canada. I am GST registered in Canada (BN: 874195902 RM0001) and collect GST at checkout via Basic Tax.
The problem: Shopify is transmitting incorrect duty amounts to DHL when generating DDP shipping labels, even though:
CUSMA/USMCA trade agreement toggle is ON
HS code 3304910000 (cosmetic powders) — duty free under CUSMA
Country of Origin: United States of America
Customs notes on every order explicitly state: “Trade Agreement: CUSMA/USMCA — Duty rate: 0%”
Evidence:
Order #32041 ($240 CAD) — DHL label charged $35.02 USD in duties. Should be $0.
Order #32045 ($91.53 CAD) — DHL label charged $7.58 in duties. Should be $0.
Both orders show $0.00 duties OR correct CUSMA rate on the order itself
DHL eCommerce has confirmed in writing that Shopify is the broker transmitting the duty amounts — it is not a DHL error
What I need: Shopify’s duty calculation transmitted to DHL during label generation needs to reflect CUSMA 0% — not the default MFN rate of 6.50%.
Has anyone resolved this? Is there a specific setting beyond the CUSMA toggle that controls what Shopify transmits to DHL?
The CUSMA toggle on the order is the checkout duties calculator. The DHL DDP label is a second handoff, and those two can disagree.
Shopify documents them separately. Checkout uses Settings > Taxes and duties > Reduce rates when preferential treaties apply, plus HS code and country of origin on the product. Label purchase then sends a duty amount to the carrier. Help Center: https://help.shopify.com/en/manual/markets/duties-and-import-taxes
A few things I’d check before assuming the toggle is broken:
HS code and country of origin need to be on every variant, not just the parent product. Preferential treatment is based on origin, destination, HS, and COO together.
Shopify specifically calls out DHL Express as the commercial carrier that can apply HS codes and preferential treaties on DDP: https://help.shopify.com/en/manual/international/shipping/international-considerations You are on DHL eCommerce. Worth buying one test label with DHL Express DDP on a CUSMA order and comparing the duty line. If Express comes back at $0 and eCommerce doesn’t, that is the split.
If checkout already shows $0 duties, collecting GST via Basic Tax doesn’t change the duty line. The $35 / $7.58 on the label is the amount being sent as duties. That is worth a Shopify Support ticket with those two order IDs plus DHL’s note that Shopify is the broker transmitting the amount. Ask them to compare the Markets duty quote vs the label payload.
I would not keep absorbing MFN 6.5% labels while waiting. Either test Express, or pause DDP on eCommerce for Canada until support confirms what the label API is sending.
Two numbers worth checking before you dig further into the CUSMA toggle, because they can rule the paperwork theory out entirely.
CBSA does not require a certification of origin to claim preferential treatment when the value for duty is CAD 3,300 or under (Customs Notice 20-15). So at normal ecommerce order sizes, a missing or badly worded origin statement is not what is generating the charge, and rewriting the customs note is a dead end.
Under CAD 150 it is stronger than that. The CUSMA courier de minimis into Canada is CAD 150 for duties and CAD 40 for taxes, and it applies to goods of any origin that have entered US commerce. Below 150 there is no duty to assess whatever the HS code says. So if a sub-150 shipment still shows duty on the DHL bill, that number did not come out of a classification decision anywhere in the chain. It came from what was sent on the label.
The other thing I would separate out is duty from GST. You are GST registered and collecting at checkout, and a DHL DDP charge usually arrives as one lump with duty, GST and an advancement or brokerage fee inside it. If your BN is not on the entry as importer of record, GST gets assessed again at the border and you have paid it twice on the same order. Looking at the total, that reads exactly like duty appearing on a duty free product.
So ask DHL for the entry breakdown by line rather than the total, and run one order under CAD 150 against one over it. Same charge on both means it is the label payload and the toggle is a red herring. Only the over-150 one means classification is genuinely in play and the toggle conversation is worth having.
What are the order values where you are seeing this, roughly?
It sounds like the order is showing one duty calculation, but the customs information being sent to DHL when you generate the label is different. First, Cross-check the HS code of product, country of origin and the tax settings of your market with the customs information for the affected shipping labels. And make sure the CUSMA qualification information is being added at the product level and not just via order notes. If those values do match, regenerating the label after refreshing the customs information can help determine whether the problem is occurring at the label generation stage.