
Shopify + Manitoulin Integration
Checkout sends origin, destination, freight class, weight, dimensions, and accessorials to our freight adapter, which quotes your Manitoulin contract rates live. Booking and BOL data flow out on fulfillment, tracking events flow back, and cached contract rates keep checkout answering when the carrier is slow.
- mode:
- Bidirectional
- latency:
- Live at checkout
- maturity:
- Contract-rate adapter
what syncs
What syncs, which way, and how fast
Every row is a real data flow with a real trigger. The frequency column is what you should expect in production, not a best case.
Rate quotes
- dir:
- Shopify → Manitoulin
- frequency:
- Live at checkout
Our adapter sends origin, destination, freight class, weight, dimensions, and accessorials, and returns the quoted rate and transit days from your contract. Engineered to our response budget of under eight seconds.
Booking + BOL
- dir:
- Shopify → Manitoulin
- frequency:
- On fulfillment
When the order is fulfilled, the adapter assembles the pickup request and bill of lading data from the order, and the carrier reference lands back on the Shopify order for support lookups.
Tracking events
- dir:
- Manitoulin → Shopify
- frequency:
- Polled, roughly hourly
Carrier statuses are normalized to Shopify fulfillment events, so the buyer’s order page and notifications stay truthful without anyone re-keying tracking.
Cached contract rates
- dir:
- Adapter → Shopify
- frequency:
- Fallback at checkout
Recently quoted lane rates are cached. When a live response misses our budget, the cache answers instead, so checkout never shows an empty shipping step.
Invoice reconciliation
- dir:
- Manitoulin → Adapter
- frequency:
- Per invoice cycle
Invoiced amounts are compared to the original checkout quotes. Reweighs, reclassifications, and accessorial adjustments are flagged with the order and products that caused them.
architecture
How it actually works
Manitoulin provides rating and tracking interfaces to account holders, so the build is an adapter: one canonical freight shape on the Shopify side, translated to the carrier’s interfaces on the other. Shopify holds the checkout rate request open only briefly before falling back to backup rates, so the whole path is engineered to a response budget under eight seconds, which is our build target, not a number Shopify publishes.
Checkout rate endpoint
Registered against the store so freight-flagged carts request live rates. It assembles the canonical rate request from the cart, the destination, and the freight metafields on each product, then answers within our response budget.
Freight adapter core
The canonical shape is ours and is deliberately carrier-agnostic: origin, destination, freight class, weight, dimensions, and accessorials in; quoted rate, transit days, and tracking events out. Adding a second carrier is a connector, not a rebuild.
Manitoulin connector
Translates the canonical request to the rating and tracking interfaces Manitoulin provides to account holders, connected on your account. Your contract rates are what come back.
Contract rate cache
Recent quotes are cached per lane and freight profile. When the carrier is slow or unreachable, the cache answers the checkout request, so a carrier incident degrades rate freshness rather than killing checkout.
Tracking and reconciliation worker
Polls tracking on our schedule, normalizes statuses to Shopify fulfillment events, and compares carrier invoices to their original quotes so variances surface as a report rather than a margin mystery.
failure modes
What breaks, and what happens when it does
Every integration fails eventually. The difference between a good one and a bad one is whether it fails safely and tells you.
Slow rate responses at checkout
The shipping step hangs, then shows a generic backup rate instead of a real freight quote.
handling
Shopify holds the rate request open only briefly before falling back, so we engineer the full path to a response budget under eight seconds and keep cached contract rates per lane. A slow carrier response means the buyer sees a slightly older contract rate, not a blank shipping step or a made-up flat rate.
Wrong freight class on a product
The checkout quote looks right, then the invoice arrives higher weeks later after the carrier reclassifies the shipment.
handling
Freight class lives in a product metafield and is audited class by class during the build. After go-live, invoice reconciliation compares billed to quoted, so a product with a wrong or drifting class is caught on its first invoice and corrected at the product record.
Residential and liftgate surprises
A delivery is repriced because the address needed a liftgate or turned out to be residential.
handling
Accessorial defaults are conservative: destinations that look residential or lack a dock get liftgate included in the quote rather than discovered at delivery. Occasionally overquoting a liftgate beats a stream of invoice adjustments and unhappy buyers.
Remote lane surcharges
Deliveries to northern or remote communities invoice above the checkout quote.
handling
Some remote surcharges are not returned in any live quote and are applied after delivery. We say that in checkout copy on affected lanes and apply a buffer on known remote postal ranges rather than pretending automation covers what it does not.
Carrier interface outage
No live rates come back at all, on every checkout at once.
handling
Cached contract rates keep checkout quoting through the outage, queued work replays once the interface answers again, and alerting fires on the failure rate rather than waiting for a merchant to notice missing rates.
Tracking goes quiet mid-transit
An order sits at the same status for days and support fields the where-is-my-order calls.
handling
The tracking worker alerts on staleness per shipment, not just on errors, so a quiet shipment is escalated to the carrier with its reference while the buyer still sees an accurate, honest status on the order page.
field mapping
A real slice of the mapping
This is an abridged Checkout → Adapter RateRequest mapping, shown so you can sanity-check it against your own system.
Checkout → Adapter RateRequest
shopify → manitoulin
rate.origin.postal_codeRateRequest.origin.postalShip-from location
rate.destination.postal_codeRateRequest.destination.postalrate.destinationRateRequest.accessorials[]Residential classification adds liftgate
item.gramsRateRequest.units[].weightConverted to pounds
metafield freight.classRateRequest.units[].freight_classNMFC class per product
metafield freight.dimensionsRateRequest.units[].dimsDrives density and cube checks
rates[].total_priceRateResponse.totalYour contract rate, quoted live
rates[].descriptionRateResponse.transit_daysTransit estimate shown to the buyer
This table documents our adapter’s canonical shape, not carrier documentation. Carrier-side specifics are provisioned per account and stay between you, us, and your Manitoulin agreement.
implementation
Timeline and cost
typical duration
4 to 8 weeks
included in scope
- Discovery, lane review, and a freight class audit of the catalogue
- Live rate flow at checkout with the response budget and cache fallback
- Booking and BOL flow on fulfillment with references on the order
- Tracking sync with normalized statuses and staleness alerting
- Invoice reconciliation comparing quoted to billed, with variance flags
- Runbook and handover, including exactly what needs your carrier rep
what moves it up
- Multi-carrier rate shopping beside Day & Ross or FedEx Freight
- B2B carrier preferences and accessorial rules per company
- Cross-border lanes with customs documentation workflow
- ERP-side freight cost posting and reconciliation
- Multiple ship-from origins or 3PL pickup points
questions
Questions buyers actually ask
What does the integration actually connect to on the Manitoulin side?
Manitoulin provides rating and tracking interfaces to account holders, and that is what our connector speaks to, connected on your account. We deliberately do not publish endpoint-level detail here, because carrier interfaces are provisioned per account and the specifics belong to your carrier agreement, not a marketing page. What we can state precisely is our side of the exchange: the adapter sends origin, destination, freight class, weight, dimensions, and accessorials, and it receives a quoted rate, transit days, and tracking events. That canonical shape is ours, it is documented in the field mapping above, and it is the same shape we use for other freight carriers, which is what makes adding a second carrier a connector rather than a rebuild.
Do we need our own Manitoulin account for this integration?
Yes, and that is the point. The integration quotes your contract rates, meaning the pricing your Manitoulin representative negotiated for your lanes and volumes, not a marketplace rate. Marketplace shipping apps quote from their own blended accounts, which is convenient but means the rate at checkout is theirs, the invoice relationship is theirs, and your negotiated position with the carrier does nothing for your buyers. Our adapter runs connected on your account, so the rate a buyer accepts at checkout is the rate your agreement produces, and the invoice that arrives later reconciles against a quote you can actually defend. If you ship enough freight to be reading this page, you almost certainly have better contract rates than any marketplace blend.
Will live freight quotes slow our checkout down?
Not if the integration is engineered for it, and this is where freight integrations most often fail. Shopify holds the checkout rate request open only briefly before falling back to backup rates, so a slow carrier response does not just feel slow, it silently replaces your real freight quote with a generic one. We build to a response budget of under eight seconds end to end, which is our own target rather than a number Shopify publishes, and we keep a cache of your recent contract rates per lane. When the carrier answers within budget, the buyer sees a live quote. When it does not, the cached contract rate answers instead, so checkout always shows a defensible freight price and never hangs waiting on a carrier.
Why does freight class matter so much for Manitoulin shipments?
Freight class drives the rate, and Manitoulin’s strongest lanes carry a lot of the dense, heavier classes that industrial and agricultural products fall into. Every product that ships freight needs an NMFC class stored against it, which we keep in a Shopify metafield so it travels with the product rather than living in a spreadsheet. A wrong class produces a quote that looks fine at checkout and then a reclassified invoice weeks later, which is margin quietly leaking. During the build we audit the catalogue class by class, and after go-live the invoice reconciliation flow compares what was quoted to what was billed, so a product with a drifting class gets caught on the first invoice rather than the tenth. Our freight class calculator does the density math if you want a starting point before talking to anyone.
Why would the carrier invoice differ from the checkout quote?
Because LTL pricing is settled at the dock, not at checkout. Carriers weigh and inspect freight, and a shipment that comes in heavier, denser, or on more handling units than quoted gets rebilled at the corrected basis. Deliveries also pick up accessorial charges the quote did not include, most commonly liftgate at an address that turned out to be residential, and some remote lane surcharges are simply not returned in any live quote. The integration cannot make these differences impossible, and anyone who says otherwise is selling something. What it does is make them visible: every invoice is compared to its original quote, variances are flagged with the order and products that caused them, and repeat offenders, which are usually a wrong freight class or a missing dimension, get fixed at the product record so the same leak does not repeat.
Which lanes is Manitoulin the right carrier for?
Manitoulin is best known for Ontario and Western Canada lanes, with a long history on industrial and agricultural freight, which is why manufacturers and distributors shipping palletized goods in those regions tend to hold Manitoulin accounts. That regional shape matters for integration design: most merchants do not run one carrier for everything, and the honest architecture is an adapter that speaks one canonical rate shape so Manitoulin can quote the lanes it wins and another carrier can quote the rest. If your freight profile is Ontario outbound or Prairie-bound pallets of dense goods, Manitoulin is usually in the rate shop. If your volume leans elsewhere, a different carrier mix may serve you better, and we will say so during scoping.
shopify + manitoulin
Get Manitoulin quotes off the phone
Tell us your lanes, your typical freight classes, and whether you already hold a Manitoulin account. You get a scope for live contract rates at checkout and a fixed price.