Shopify & Duty Changes: Mastering Repricing and Protecting Your Profit Margins
Ever had that sinking feeling when a notice about changing duty rates lands in your inbox? It's a common headache for anyone importing products, and it immediately brings up a cascade of questions: How do you even find out about these changes? Do you reprice everything immediately, wait for new stock, or just absorb the hit? And perhaps the biggest head-scratcher: are you working from a real landed cost, or just a rough markup?
These were exactly the questions that kicked off a really insightful discussion in the Shopify community, spearheaded by @marginify. As a Shopify expert who spends a lot of time digging into these conversations, I wanted to share some of the brilliant strategies and practical advice that emerged. It’s all about turning a potential profit drain into a manageable part of your business.
The Foundation: Knowing Your True Costs (Landed Cost is King!)
One of the first, and most critical, takeaways from the thread is the absolute necessity of working from a landed cost per item. As @veed wisely pointed out, Shopify's 'Cost per item' field is yours to define. While their examples might just show the supplier price, the community consensus is clear: this field should reflect your true cost, including supplier price, freight, duty, and any other fees.
Why is this so important? Because if you're only working from a rough markup on the supplier price, your reported margins are a mirage. When duty rates shift, your actual margin shrinks, but your system won't immediately flag it. By using landed cost, the 'Profit' and 'Margin' figures in Shopify's reports genuinely reflect what each item costs you.
How to Nail Landed Cost in Shopify:
The good news is that Shopify has built-in tools to help with this. @veed highlighted a fantastic feature:
- Use Purchase Orders: If you're receiving stock through Shopify's purchase order system, you can add customs duties, shipping, and other fees directly as 'cost adjustments' on each shipment of the linked inventory transfer.
- Per-Batch Costing: This automatically gives you a landed cost per unit for that specific batch, without needing a separate, complex spreadsheet. The 'Cost summary' on the transfer will show you the real cost to land that particular shipment.
Staying Ahead of the Curve: Monitoring Duty Changes
Okay, so you know your costs. But how do you even find out about duty changes before they catch you off guard?
- Official Sources are Key: Don't just rely on your customs broker or freight forwarder, though their warnings are certainly helpful. @veed recommends going straight to the source. For the US, that's CBP's CSMS email alerts and the USITC tariff schedule (hts.usitc.gov). In Canada, it's CBSA's Customs Notices.
- Keep Your Shopify Product Info Updated: This is a simple but powerful habit. Make sure the 'HS code' (Harmonized System code) and 'Country of Origin' are filled in for every product variant in Shopify's shipping section.
Checking Notices Against Your Catalog:
Once a notice comes in, how do you quickly see what it affects?
- For Small Catalogs: Checking by hand is perfectly fine. You can quickly eyeball the HS codes listed in the notice against the ones you've saved in your product details.
- For Larger Catalogs: This is where it gets smart. Shopify doesn't have a built-in report for this, and the product CSV export won't include HS codes. But @veed shared a pro tip: You can pull these in bulk using the Admin API. Specifically, look for the
harmonizedSystemCodeandcountryCodeOfOriginfields onInventoryItem. Once you've got that data in a spreadsheet, you can easily filter by the codes mentioned in the notice. This saves you tons of time!InventoryItem - GraphQL Admin: https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryItem - The HS Code Sheet: @Steven_Mock added a great practical tip: keep a very simple internal sheet per HS code. Just list the current rate, when you last checked it, and the SKUs it touches. This way, you know in a minute if a notice actually impacts your products.
The Repricing Dilemma: When and How to Adjust
This was @marginify's core follow-up question, and it's where things get a bit nuanced. Shopify stores only one Cost per item per variant. It doesn't natively track cost by batch, meaning there's no built-in FIFO (First-In, First-Out) or weighted-average costing. Whatever cost is in that field when an order is placed is what Shopify records for that sale.
Managing Old vs. New Rate Stock:
Since Shopify won't distinguish between old-rate and new-rate units sitting side-by-side, this split has to come from your own records. A simple spreadsheet tracking units received in each shipment and their landed cost per unit is usually enough to know when your old-rate units are sold through.
The "Threshold" Strategy:
@Steven_Mock offered a fantastic piece of advice here: set a threshold. If a duty change only moves your landed margin by a point or two, consider absorbing it on stock that's already landed. Only reprice the next batch. This prevents you from constantly nudging prices up and down for customers over minor changes they might not even notice.
Timing Your Reprice:
@veed laid out a clear approach:
- Update 'Cost per item' First: When a new rate takes effect, update your 'Cost per item' in Shopify. You can do this in bulk using the bulk editor or a product CSV export/import. Past orders will retain their old cost for profit reporting, but all new orders will use the updated cost.
- Reprice When New Stock Sells: The common approach is to switch both your 'Cost per item' and your actual selling price on the same day – when the first units from the new-rate shipment start selling.
- Or, Reprice Later for Old Stock: If you still have a significant amount of old-rate stock, you can switch the cost on that date, but wait to reprice until the old units are nearly gone. This means your old units earn a little extra margin for a while, which is a safer side to be on.
Repricing Methods:
Once you decide to reprice:
- Bulk Editor/CSV: Use Shopify's bulk editor or a product CSV file to update prices for all affected SKUs.
- Market-Specific Adjustments: If the duty change only affects one market (say, Canada), you can adjust that market's catalog instead of your base prices. This can be a percentage adjustment or fixed prices via CSV. Shopify's market catalogs even allow you to schedule these changes for a smooth rollout.
- Communicate Changes: If a price increase is significant, @Steven_Mock suggests adding a short note on the product page about the change landing with the next restock. This has gone over better with customers than a silent increase.
Ultimately, managing duty rate changes on Shopify is about combining Shopify's capabilities with smart, external record-keeping. While Shopify provides excellent tools for managing products and sales, the detailed, batch-level costing often lives best in a spreadsheet or dedicated inventory/accounting software (especially as your catalog grows). This allows you to use Shopify for what it does best – driving sales and providing margin reports based on accurate landed costs – while your external systems handle the granular inventory accounting. By adopting these strategies, you'll not only react faster to changes but also ensure your profit margins remain healthy and predictable, no matter what customs throws your way. If you're looking to get started on Shopify or refine your existing operations to handle complexities like these, consider exploring what Shopify has to offer for growing businesses.