Banner for Shipping From Canada to the US Under the New Tariffs: The Consolidated-Pallet Playbook

Shipping From Canada to the US Under the New Tariffs: The Consolidated-Pallet Playbook

De minimis is gone and every parcel pays. How a Canadian retailer ships pallets to a US warehouse, clears customs once, and dispatches domestically.

If you run a Canadian store selling mostly to American customers, you already know the timeline. In the span of about seven months, US trade policy dismantled the business model of nearly every Canadian company shipping parcels south:

And if you were hoping the Supreme Court fixed this in February 2026: it didn't. The court struck down the IEEPA tariffs, but Section 232 and the de minimis suspension survived the ruling , a 10% replacement tariff under Section 122 was in place within hours , and Congress has de minimis scheduled for statutory repeal anyway. Duty-free parcels are not coming back.

I built the software behind one company's answer to this. The company is a Canadian automotive-parts retailer that sells almost exclusively to US customers, and this post is the playbook we ended up with — stop shipping parcels across the border; ship pallets, clear customs once, dispatch domestically — along with the operational details nobody writes down: the pallet workflow, the single customs manifest, the Section 232 metal-content addendum, and the two-warehouse inventory problem.

It's a case study, not a pitch. The app isn't for sale. But if you're an operator staring down the same problem, the pattern is reusable.

In this post:

Why per-parcel shipping broke

For years the retailer ran the obvious play: an order comes in on Shopify, a box goes out with FedEx, it crosses the border alongside thousands of other parcels. After de minimis ended, each of those boxes became its own customs event, and the couriers priced accordingly: FedEx charges a clearance entry fee of $9.75–$19.50 depending on declared value, a disbursement fee of the greater of $8.50 or 2% of the duty, and both FedEx and UPS raised their international processing fee to $2.50 per package — all before any actual duty. Stack that onto a $60 parts order and the math stops working fast.

The fees weren't even the worst part. Parcels started sitting in customs holds at the FedEx hub, sometimes for days, while customers refreshed tracking pages. And for automotive parts — a category swept wholesale into the Section 232 derivative list — every shipment now carried a paperwork burden the parcel channel was never designed for. The 50% duty applies to the value of the metal content, which means declaring content value, weight in kilograms, and the country where the steel was melted and poured (or the aluminum smelted and cast). If you can't document the content, the duty applies to the entire product value , and reporting "unknown" for an aluminum origin field triggers the 200% Russia rate automatically.

The retailer wasn't alone. The Globe and Mail covered a Toronto apparel brand that stopped US shipping entirely before pivoting to bulk pallets and a US warehouse, and demand for exactly this kind of workaround helped push Toronto-area industrial warehouse leasing up 43% .

One border crossing instead of hundreds

The strategic answer is the one the whole logistics industry has converged on:

  1. Open a small US warehouse just across the border, or more realistically, rent some space in a shared warehouse.
  2. Consolidate pre-sold US orders onto pallets, and top up the remaining space with stocking inventory.
  3. Truck each pallet across under a single customs manifest, cleared by a broker.
  4. Ship to customers domestically from the US side — cheaper, faster, no per-parcel brokerage, no customs holds.

The economics of a formal entry overwhelmingly favor consolidation: a customs broker fee runs roughly $100–150 per entry , and the Merchandise Processing Fee is 0.3464% of entered value, capped at $651.50 . Paid once per pallet covering dozens of orders, those are rounding errors. Paid per parcel as courier fees, they're a tax on every sale.

The catch: operationally, this is a different business. Someone has to decide which orders ride which pallet; handle orders that need to split (half on the pallet, half shipped from Canada because a bumper won't share a skid); choose what replenishment stock fills the spare space; produce a commercial invoice and metal-content addendum the broker will accept; label every box so the US warehouse can tell whose carton is whose when the pallet wrap comes off; get tracking numbers back into Shopify; and keep an accurate picture of inventory sitting in another country.

The team had been doing the old version of this with spreadsheets and daily emails. The Shopify App Store had freight-quoting apps and per-parcel invoice generators, but nothing that treats "build a pallet out of orders and clear it as one entry" as the core workflow — and nothing that touches Section 232 at all.

So I built it: a custom embedded Shopify app that runs the whole pipeline. Here's the workflow, step by step.

Step 1: Classify every order the moment it arrives

A webhook fires on every new Shopify order, and a small decision tree routes it:

  • Non-US order? Ships from the Canadian facility, as before.
  • Oversized exception products (splitters, hoods, widebody kits — things that physically can't ride a shared pallet)? Ship from Canada too.
  • Everything in stock at the US warehouse? Marked for immediate domestic dispatch — checked against live Shopify inventory at that location, not a cached list.
  • Otherwise: flagged to be palletized for the next border crossing.

Mixed orders split into lettered groups: order #1042 becomes #1042-A riding the pallet and #1042-B shipping from Canada, each with its own status, pallet assignment, and eventually its own tracking number. That suffix survives all the way through the warehouse paperwork and back.

Step 2: Build the pallet

Pallets are first-class objects in the app. Each one gets a number (PAL-2026-0014), a weight, a PAPS number — the pre-arrival clearance number the carrier files with US customs before the truck reaches the border — and a strict lifecycle with guard rails: open → closed → shipped → delivered. You can't close an empty pallet, and you can't ship one that isn't closed. Staff assign orders, or individual line items, to pallets straight from the Shopify order page through an embedded extension.

The physical layer matters more than you'd expect. A body kit can ship as three cartons with three different SKUs, so line items expand into lettered boxes — #1042A, #1042B, #1042C — and every box gets a 4×6 Zebra thermal label carrying the pallet number, order number, SKU, and quantity. When the shrink-wrap comes off at the US distribution center, those labels are the only thing connecting a carton to a customer. Shipping box A of a body kit without box B means an angry customer with half a kit. The pallet itself gets a letter-size placard with the pallet number and PAPS number in 48-point type, so the driver, the broker, and the receiving dock all match the same paper to the same skid.

Spare pallet space is too valuable to ship empty, so the app fills it with replenishment stock — and that suggestion goes to an AI. It compares current US-warehouse stock against user-set minimum thresholds and 30-day sales velocity, and Anthropic's Claude proposes what to add and why, each suggestion stored with a one-line reason a human can accept, edit, or delete. Nothing touches real inventory until a person closes the pallet. Replenishment rides along on every crossing instead of needing its own freight.

Step 3: Generate the customs paperwork

This is where most of the engineering went, because this is the part that scares people — reasonably, given the stakes. When a pallet is ready, one button generates the document set:

  • A commercial invoice for the whole pallet. Rather than listing hundreds of retail SKUs, every product maps to one of eighteen curated customs categories — each with a fixed description, HTS code, country of origin, and declared unit value (8708.29.5160 for exterior body panels; 7318.16.0030 for steel wheel nuts, with their melt-and-pour country attached). The broker sees a clean ten-line invoice instead of a 300-line dump. Products that haven't been mapped yet don't fail silently — they appear highlighted on the invoice preview with an inline dropdown, so the paperwork screen doubles as the data-cleanup screen.
  • A steel, aluminum and copper addendum — required on every crossing, since auto parts are Section 232 derivatives. For each line it declares which metals the product contains, the metal weight (computed as kilograms-per-unit × quantity, never hand-typed), and the origin countries: melt-and-pour for steel, smelt-and-cast for aluminum and copper. The app fills the broker's actual fillable PDF form, field by field, five line items per page.
  • A packing slip (the invoice minus dollar values) and order summaries with shipping details for the receiving team.

The documents go to the customs broker, a transport company picks up the pallet, and the whole load clears as one entry.

The regulation moved while I was building. The addendum form went from a steel-and-aluminum revision 5 to a steel-aluminum-copper revision 9.2 when copper joined the regime, and in April 2026 the assessment rules shifted again for many derivatives .

Step 4: Receive, dispatch, and keep two inventories honest

When the pallet closes, the stocking quantities post to the US warehouse's Shopify location automatically — counts are correct before the truck arrives. When it lands, pre-sold orders ship domestically.

The US warehouse crew never logs into anything. They get an email with a CSV manifest — shipping addresses, SKUs, quantities, and a deliberately blank tracking-number column. They fill in the column and send the same file back. The app imports it, matches each tracking number to the right order (or the right lettered split group), and creates the fulfillments in Shopify — Shopify first, local records second, so a customer is never marked shipped without getting their notification. Email plus a spreadsheet is the API contract, because that's the workflow the warehouse already knew.

On top sits a thin monitoring layer: per-SKU minimum-stock thresholds, a daily low-stock alert email, and a Monday-morning AI-written inventory summary flagging what will breach threshold before the next pallet.

The stack, deliberately boring

For the curious: an embedded Shopify admin app built on React Router 7 with a Prisma/SQLite database, running on a single small Fly.io machine in Toronto. PDFs are generated with pdf-lib — including filling the broker's official addendum template — emails go through Resend, and the stocking suggestions and inventory summaries call Claude. No queue, no Postgres cluster, no microservices. A business-critical customs workflow runs happily in a single process, because the volumes are pallet-sized, not Amazon-sized. (I wrote up the technical build separately, including the PDF-form war stories.)

What I'd tell other Canadian merchants

The strategy works, but the paperwork is the product. Consolidation only pays off if producing a compliant invoice and metal-content addendum takes minutes, not an afternoon. If the documents are painful, pallets ship late and the whole model wobbles.

The rules will move under you. During this build alone, the addendum form went through multiple revisions, copper joined the declaration regime, and the assessment basis changed. Owning your tooling means a regulation change is a small software update, not a process crisis.

Meet your partners where they are. The US warehouse runs on emailed CSVs. The customs broker gets their own PDF form back, filled in. The carrier gets a PAPS number in 48-point type. The system bends to existing workflows instead of forcing new ones — which is most of why it actually got adopted.

The retailer still sells to the same US customers from the same Shopify store. What changed is the shape of the border crossing: instead of hundreds of parcels each paying clearance fees and risking a customs hold, pre-sold orders and replenishment stock cross together on a pallet, under one manifest, with paperwork generated in minutes — and the last mile happens domestically. The compliance burden didn't disappear. It got encoded, versioned, and reduced to a button.


If you're a Canadian merchant staring down the same problem — or you've already opened a US warehouse and the spreadsheets are starting to crack — I'm happy to compare notes. And if you need something like this built for your own operation, get in touch.

Ready to get started?

Schedule a demo to see how we can help streamline your workflow.

Share this article