Logistics Integration
Shipping Carrier Integration for Odoo (DHL, FedEx, UPS & more)
Get carrier rates on the quotation, print the label when the picking is validated, and push the tracking number to the customer — from Odoo, for every carrier you use. TechUltra configures Odoo's native connectors (DHL Express, FedEx, UPS, USPS, bpost, Sendcloud, EasyPost, Shiprocket, Starshipit, Envia) and builds custom or aggregator integrations for the carriers Odoo does not ship — regional couriers in India, the GCC, South Africa, and elsewhere.
Last reviewed:
What it is
Odoo Enterprise ships third-party shipper connectors that let a delivery method fetch live rates, create the shipment, print the carrier label with barcode and tracking number, and (for supported carriers) cancel a shipping request. Per Odoo's own documentation for the current version, the connectors are: DHL Express (all regions), Envia.com (all), FedEx (all), UPS (all), US Postal Service (United States), Sendcloud (shipping from AT, BE, FR, DE, IT, NL, ES, UK to any European country), bpost (Belgium), EasyPost (North America), Shiprocket (India), and Starshipit (Australia and New Zealand). Sendcloud, EasyPost, Shiprocket, Starshipit, and Envia are themselves aggregators, so one connector opens dozens of local carriers underneath. TechUltra's engagement is (a) configuring those connectors correctly — accounts, packaging types, product weights and dimensions, source addresses, service levels, insurance, incoterms — and (b) building integrations for carriers outside the list against the carrier's REST or SOAP API, or through a regional aggregator, exposing the same rate / ship / label / track / cancel actions inside Odoo's standard delivery-method model.
Why it matters
Shipping is where an ERP either saves an hour per hundred orders or costs one. Without integration, the warehouse re-types addresses in a carrier portal, the sales team quotes shipping from a rate card that is out of date, and customer service answers 'where is my order' by searching a courier site. With integration, the rate appears on the quotation and the eCommerce checkout, the label prints when the picking is validated, the tracking number goes out with the shipment email, and returns generate their own labels. Odoo's native connectors cover the global majors and a few aggregators; the gap is regional — Indian domestic couriers, GCC last-mile, South African carriers, LATAM — and that gap is what most Odoo users in our markets actually ship with.
Features
-
Native connector configuration
DHL Express, FedEx, UPS, USPS, bpost, Sendcloud, EasyPost, Shiprocket, Starshipit, and Envia.com connectors set up per Odoo's documentation: production and test credentials, delivery-method service levels, package types, default weight and dimensions, label format (PDF / ZPL for Zebra printers), and per-warehouse source addresses.
-
Rate shopping on quotes and checkout
Sales users click Add Shipping on a quotation and get the live carrier rate; Odoo eCommerce shows real-time rates at checkout. Margin, free-shipping thresholds, and fixed-vs-real-cost rules are configured per delivery method.
-
Label generation and tracking
Validating the delivery creates the shipment at the carrier, attaches the label to the picking, stores the tracking number, and exposes the carrier tracking link on the delivery. Tracking is included in the customer shipment email and can be pushed to Shopify, BigCommerce, WooCommerce, or Amazon via the respective integration.
-
Custom and aggregator integrations for regional carriers
India: Delhivery, Blue Dart, DTDC, Ecom Express, XpressBees — directly or via Shiprocket. GCC: Aramex, SMSA, and local last-mile providers. South Africa: The Courier Guy and other domestic couriers. Built as Odoo delivery-carrier extensions so the warehouse workflow is identical to a native connector.
-
Multi-carrier rules
Automatic carrier and service selection by destination country or pincode, weight band, cash-on-delivery, declared value, delivery promise, or cheapest live rate. Fallback carrier when the primary API is down or does not serve the pincode.
-
Packaging and dimensional weight
Odoo package types with dimensions and max weight, put-in-pack on the picking, and multi-package shipments so the carrier bills on volumetric weight correctly. Product-level weights and dimensions cleaned up during onboarding because bad master data is the usual cause of rate mismatches.
-
Returns and reverse pickup
Return labels generated from the Odoo return picking (native carriers where supported; custom carriers via their reverse-pickup API). RTO / undelivered handling for COD-heavy markets, with stock and accounting entries when goods come back.
-
Cash-on-delivery and remittance reconciliation
For India and GCC couriers, COD amount passed with the shipment, and courier COD remittance files reconciled against Odoo invoices and bank statements.
-
Pickup requests, manifests, and end-of-day
Where the carrier API supports it, pickup scheduling and daily manifest / close-out are triggered from Odoo. Where Odoo's native connector does not include pickup booking, we add it in the custom layer or document the carrier-portal step.
How it works
-
Carrier and flow audit
List every carrier, service level, and origin warehouse; order volume by lane; COD share; label printer setup; and which storefronts need rates. Decide native connector vs aggregator vs custom per carrier.
-
Master data clean-up
Product weights and dimensions, package types, warehouse addresses, HS codes for cross-border, and customer address formats. Most integration failures trace back to this step being skipped.
-
Connector configuration and custom build
Configure native connectors in test mode; build custom carrier modules against the carrier or aggregator API with rate, ship, label, track, cancel, and return endpoints; set multi-carrier rules.
-
Test shipments and rate reconciliation
Test-account shipments per carrier and service; compare Odoo rates with carrier invoices; validate label print on the actual warehouse printers.
-
Go-live and monitoring
Switch to production credentials, watch failure queues for the first week, and hand over a runbook covering credential rotation and carrier API changes.
Deployment timeline
One or two native connectors with rate, label, and tracking on a single warehouse: 2–3 weeks. Adding multi-carrier rules, packaging, and eCommerce checkout rates: 3–4 weeks. Custom integration for one regional carrier or aggregator: 3–5 weeks per carrier including returns and COD reconciliation. Multi-country rollouts with five or more carriers: 6–10 weeks, phased by region.
Best for
Odoo Inventory / eCommerce users shipping 20+ parcels a day; D2C brands and marketplaces sellers in India, the GCC, and South Africa whose carriers are not on Odoo's native list; distributors shipping B2B pallets and parcels through different carriers; 3PL-style operations with multiple warehouses and origin countries; companies whose warehouse still keys orders into carrier portals. Less relevant for freight-only shippers on negotiated LTL contracts with no parcel volume — those are usually handled as fixed delivery methods plus EDI.
Frequently asked questions
-
Which carriers does Odoo support natively?
Odoo's current documentation lists DHL Express, Envia.com, FedEx, and UPS for all regions; USPS for the United States; Sendcloud for shipping from eight European countries to any European destination; bpost for Belgium; EasyPost for North America; Shiprocket for India; and Starshipit for Australia and New Zealand. Anything else needs a custom or aggregator integration.
-
We ship with Delhivery, Blue Dart, and DTDC in India. What are our options?
Two routes: use Odoo's native Shiprocket connector, which aggregates those and other Indian couriers under one account, or integrate the carriers directly against their own APIs. Shiprocket is faster to set up and cheaper at low volume; direct integration suits higher volumes with negotiated contracts and gives you COD reconciliation and reverse pickup on your own terms.
-
Can customers see live shipping rates in the Odoo eCommerce checkout?
Yes. Delivery methods with a connector return live rates at checkout; you can add margin, cap the displayed options, or offer free shipping above a threshold. The same rates appear on back-office quotations via Add Shipping.
-
How does the integration handle multiple carriers and choosing between them?
Rules on the delivery method and a selection layer: by destination country or pincode, weight, COD, declared value, or cheapest live rate, with a fallback carrier when the primary API fails or does not serve the address. Warehouse staff can override on the picking.
-
Why do our Odoo rates not match the carrier invoice?
Almost always volumetric weight: missing product dimensions, wrong package type, or no put-in-pack, so the carrier bills dimensional weight and Odoo quoted actual weight. Master-data clean-up and correct package types fix most of it; surcharges (fuel, remote area) are the remainder and can be modelled as rules.
-
Do returns and reverse pickups work?
Return labels are generated from the Odoo return picking. Native connectors support this where the carrier does; custom carriers use their reverse-pickup API. For COD markets we also handle RTO shipments and the stock and accounting entries when goods come back.
-
What does it cost and what is the first step?
Fixed-price after a 30-minute scoping call. Bring: carriers and service levels, monthly parcel volume, warehouse count and countries, COD share, and which storefronts need rates. We reply with a native-vs-custom recommendation per carrier and a phased plan.