Shopify logo
Manitoulin logo

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.postal

    Ship-from location

  • rate.destination.postal_codeRateRequest.destination.postal
  • rate.destinationRateRequest.accessorials[]

    Residential classification adds liftgate

  • item.gramsRateRequest.units[].weight

    Converted to pounds

  • metafield freight.classRateRequest.units[].freight_class

    NMFC class per product

  • metafield freight.dimensionsRateRequest.units[].dims

    Drives density and cube checks

  • rates[].total_priceRateResponse.total

    Your contract rate, quoted live

  • rates[].descriptionRateResponse.transit_days

    Transit 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.