
Shopify + FedEx Freight Integration
Live FedEx Freight LTL rates at checkout, bills of lading and pickups on fulfillment, and tracking events flowing back to the order. Your FedEx account stays the rate authority, so the price a buyer sees is your contract rate, not a marketplace estimate.
- mode:
- Bidirectional
- latency:
- Live at checkout
- maturity:
- Production adapter pattern
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.
Freight rates
- dir:
- Bidirectional
- frequency:
- Per checkout (live)
Our adapter sends origin, destination, freight class, weight, dimensions, and accessorials, and returns the quoted rate and transit days as a shipping option the buyer selects. The whole round trip runs inside our response budget of under eight seconds.
Cached contract rates
- dir:
- Adapter → Shopify
- frequency:
- Fallback (kept warm)
When FedEx Freight answers slowly or not at all, checkout falls back to cached rates built from recent contract quotes on the same lane, so the buyer still sees a credible freight price instead of an error or a fallback flat rate.
Shipments and BOL
- dir:
- Shopify → FedEx Freight
- frequency:
- On fulfillment
Booking the shipment creates the bill of lading and pickup request, and writes the PRO number back to the Shopify order as the tracking reference, so nobody re-keys a freight booking from a printout.
Tracking events
- dir:
- FedEx Freight → Shopify
- frequency:
- Scheduled polls
Carrier statuses map to Shopify fulfillment events, so picked up, in transit, and delivered notifications reach the customer from the store they bought from, not from a tracking page they never find.
Invoice reconciliation
- dir:
- FedEx Freight → Adapter
- frequency:
- Per invoice
Invoiced amounts from your FedEx account compare line by line against the rate quoted at checkout. Reclassifications and added accessorials surface in a variance report instead of hiding inside the freight bill.
architecture
How it actually works
FedEx publishes a developer API program that covers LTL Freight rating, shipping, and tracking, which gives the carrier side of this build a published developer program to build against. The hard engineering lives in the checkout: Shopify holds the rate request open only briefly before falling back to backup rates, so the entire rating path is designed around a response budget of under eight seconds. That budget is our build target, not a number Shopify publishes.
Shopify Carrier Service API
At checkout Shopify calls our rating endpoint with the cart and destination. This needs carrier-calculated shipping enabled on your plan, which we confirm during scoping rather than discover at launch.
Canonical rate adapter
Our layer, and the reason the build stays portable across carriers. Every cart is normalised into one shape: origin, destination, freight class, weight, dimensions, handling units, and accessorials in; quoted rate, transit days, and tracking events out. FedEx Freight is one translation of that shape, not a hard-wired dependency.
FedEx developer APIs
The adapter calls the LTL Freight rating, shipping, and tracking services in FedEx’s developer API program using your own account, so every quote reflects your negotiated tariff and discounts rather than a public or marketplace rate.
Response budget governor
The live rating call runs against a hard internal deadline under eight seconds, our build target, so checkout never waits on a slow carrier. A quote that misses the deadline is replaced by cached contract rates for the lane, and the miss is logged and alerted rather than silently absorbed.
Booking and tracking worker
Fulfillment triggers shipment creation and the bill of lading, and a worker polls tracking on a schedule, translating carrier statuses into Shopify fulfillment events. None of this runs inside the checkout path, so a slow booking never touches a buyer.
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 freight option intermittently vanishes at checkout and buyers see only a fallback rate, or abandon the cart entirely.
handling
Shopify holds the checkout rate request open only briefly before it falls back to backup rates, so a slow carrier response quietly replaces your real quote. We engineer the whole rating path to answer inside eight seconds, our build target, with cached contract rates answering when a live quote cannot make the budget. Repeated misses raise an alert instead of degrading silently.
Wrong freight class on products
Checkout quotes one price and the carrier invoice arrives higher after the shipment is reclassified.
handling
Freight class lives on each product as a metafield, seeded during a catalogue audit and sanity-checked against density where dimensions exist. Reclassification variances from invoices feed corrections back into the catalogue, so a wrong class gets fixed once instead of costing margin on every shipment that follows.
Missing accessorials
A residential delivery with no dock needs a liftgate, and the surcharge lands on your invoice instead of in the checkout price.
handling
The adapter classifies destinations as commercial or residential and applies liftgate, residential, and limited access accessorials with deliberately conservative defaults. A buyer paying a modest liftgate fee they did not strictly need is recoverable. A month of unbilled accessorials arriving on your invoice is not. The rules are tuned against real invoices after launch.
Mixed carts of parcel and freight items
One pallet item sits in a cart of small goods, and checkout rates the whole order as freight, or worse, the pallet as parcel.
handling
Products carry a ship-mode flag, and the adapter splits the cart: freight-flagged lines rate through FedEx Freight while the rest rates as parcel, presented to the buyer as one combined shipping choice. Where the split threshold sits is a margin decision, not a technical one, so it gets agreed in discovery.
Cross-border shipments into Canada
A Canadian order books cleanly and then sits at the border waiting for paperwork nobody prepared.
handling
Cross-border lanes are flagged so booking collects the commercial invoice data customs clearance needs before a pickup is requested. Where a Canadian regional carrier serves a lane better, the same adapter shape can rate Day & Ross or Manitoulin through the rating and tracking interfaces those carriers provide to account holders, so a second carrier is an extension, not a rebuild.
Quoted versus invoiced drift
The weekly freight invoice never quite matches what checkout collected, and nobody can explain the gap.
handling
Every quote is stored with its full request and response. Invoices reconcile against them line by line, so drift decomposes into named causes such as reclassification, added accessorials, or fuel surcharge movement, instead of a lump your margin quietly absorbs.
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 → fedex freight
location (ships from)rateRequest.originPostal code plus dock flag
shipping_addressrateRequest.destinationClassified commercial or residential
product.metafield freight_classrateRequest.lines[].freightClassNMFC class per line
line_item.gramsrateRequest.lines[].weightSummed into handling units
product.metafield dimensionsrateRequest.lines[].dimensionsDrives density checks
address analysisrateRequest.accessorialsLiftgate, residential, limited access
shipping rate pricerateResponse.totalChargeYour contract rate
shipping rate descriptionrateResponse.transitDaysShown as estimated days
fulfillment.tracking_numbershipment.proNumberThe LTL tracking key
This is our adapter’s canonical shape, not FedEx documentation. What FedEx Freight receives is a translation of this request through their developer API program, and the same shape rates other LTL carriers, which is what keeps the build portable.
implementation
Timeline and cost
typical duration
4 to 8 weeks
included in scope
- Freight catalogue audit: class, dimensions, weights, handling units
- Live checkout rating inside the eight-second response budget
- Cached contract rate fallback with alerting on misses
- Shipment booking, bill of lading, and PRO number write-back
- Tracking sync into Shopify fulfillment events
- Accessorial rules for liftgate, residential, and limited access
what moves it up
- Rate shopping across FedEx Freight and regional LTL carriers
- Cross-border lanes with customs documentation workflow
- B2B checkout with net terms and account-specific freight rules
- Invoice reconciliation and freight spend reporting
- Multiple origins or drop-ship freight programs
questions
Questions buyers actually ask
Does FedEx Freight have an API for LTL shipping?
Yes. FedEx’s developer API program covers LTL Freight rating, shipping, and tracking, which makes FedEx Freight one of the better documented LTL carriers to integrate against. That covers the carrier side. Getting those rates into a Shopify checkout still takes an integration layer, because Shopify does not collect freight class, dimensions, handling units, or accessorial needs on its own. Our adapter assembles that data from the cart and the product catalogue, sends it to FedEx Freight, and returns the quoted rate and transit days as a shipping option the buyer can select. The API program gives you the raw capability. The integration work is making a freight quote behave like a shipping rate.
What freight class should our products use, and why does it matter so much?
Freight class is the NMFC classification LTL carriers use to rate shipments, running from class 50 for dense, heavy goods to class 500 for light, bulky ones. It is the single most influential input in an LTL quote: the same pallet on the same lane prices very differently across classes. Most manufactured goods sold online land in the class 70 to 125 range, with furniture and other bulky products running higher, and because class is largely a function of density, accurate dimensions and weights matter as much as the class itself. In our builds, class lives on each Shopify product as a metafield, seeded during a catalogue audit before launch. A wrong class does not fail loudly. It quotes cleanly at checkout and comes back weeks later as a reclassified, more expensive line on your carrier invoice, which is why we reconcile invoices against quotes rather than assuming the first answer was right.
Will live freight rates slow down our checkout?
Not if the integration is engineered for the constraint. Shopify holds a checkout rate request open only briefly before it gives up and falls back to backup rates, so a slow carrier response does not hang your checkout, it silently replaces your real freight quote with a fallback. We therefore build the entire rating path to answer within eight seconds, which is our own response budget rather than a number Shopify publishes. Inside that budget, the live FedEx Freight quote answers directly. When it cannot, cached contract rates for the lane answer instead, so the buyer always sees a credible freight price, and the slow response becomes an alert for us rather than a lost order for you.
Do we need our own FedEx Freight account for this integration?
Yes, and that is the point. The integration rates through your account, so checkout pricing follows your FedEx Freight agreement, discounts and fuel surcharge program included. Marketplace shipping apps quote from their own broker accounts, which can suit occasional shippers, but it means the rate in your checkout has no relationship to the tariff your freight team negotiated. With your own account, the checkout quote, the bill of lading, and the invoice all speak the same rate language, which is also what makes invoice reconciliation possible at all. If you do not yet hold an LTL account, that conversation with a carrier comes before the integration, not after it.
How are liftgate, residential, and limited access fees handled?
As first-class inputs, because accessorials are where LTL quotes go wrong. A commercial address with a dock and a farmhouse driveway are different shipments to a freight carrier, and the difference is real money on every delivery. The adapter classifies each destination and applies the accessorials the delivery will actually need: liftgate where there is no dock, residential where the address is not commercial, limited access for sites like schools, farms, and storage facilities. Defaults are deliberately conservative, because a buyer paying a modest liftgate fee they did not strictly need is recoverable, while a string of unbilled accessorials arriving on your invoice weeks later is pure margin loss. After launch, the rules are tuned against your real invoices.
Can this handle shipments from the US into Canada?
Yes, and for many merchants cross-border is the reason the project exists. Where FedEx Freight serves your cross-border lanes, which we confirm during scoping, the integration flags those destinations so booking collects the commercial invoice details customs clearance needs before a pickup is requested, rather than after a shipment stalls at the border. Where a Canadian regional carrier is the better tool for a lane, the same adapter shape can also rate carriers like Day & Ross or Manitoulin through the rating and tracking interfaces those carriers provide to account holders, so adding a second carrier later is an extension of the build, not a rebuild.
shopify + fedex freight
Get freight rates into checkout without gambling your margin
Tell us your lanes, your typical pallet counts, and whether you hold a FedEx Freight account. We will come back with the rating architecture for your setup and a fixed price.