Every carrier has strengths. From package weight, address and service type, the variability for every deliveries is endless. Having multiple carrier accounts is beneficial.
The challenge begins when you need all of them. Each carrier has its own portal, label format, and tracking interface. Instead of simplifying fulfillment, your ERP ends up fragmented.
ShipStation and ShipEngine solve this by aggregating multiple carriers behind a single API. ShipStation uses ShipEngine as its underlying infrastructure, and this module connects directly to the ShipEngine API. You can use either a ShipStation account or a standalone ShipEngine account.
Without a native Odoo connector, businesses still copy order data between systems and manually bridge the gap between warehouse operations and carrier platforms.
Our ShipStation Shipping Integration for Odoo removes that friction. You can rate-shop across carriers, generate labels, track shipments, process returns, and manage customs directly inside Odoo’s delivery workflow.
What It Does
No single carrier wins every shipment. The cheapest option for a 2 lbs parcel to Vancouver is not the fastest option for a 50 lbs pallet to Montreal. Businesses that lock into one carrier overpay on some orders and underserve on others. With Rate shopping, you can compare live rates from multiple carriers in one request, then pick the best fit for price, speed, and reliability.
Live Rate Shopping
Query all your connected carriers for real-time rates directly from a sales order. While ShipEngine returns rates in USD by default, the module automatically converts them into the order currency. This is particularly useful for Canadian operations managing multi-currency transactions.
Shipping Label Generation
Shipping labels can be generated directly from delivery orders in PDF, PNG, or ZPL format. PDF files work for standard printers, PNG files are useful for email or archiving, and ZPL is designed for Zebra thermal printers. Labels are automatically attached to the delivery order, eliminating the need to log into carrier portals.
Customs for Overseas Deliveries
Cross-border shipments automatically include customs declarations built from the delivery order: product descriptions, quantities, declared values, HS tariff codes, and country of origin. No separate customs paperwork needed.
Return Labels
Generate return shipping labels with swapped addresses and optional RMA numbers. These labels can be printed and included in the package or sent to the customer when a return is approved.

Advanced Shipping Capabilities
The module extends Odoo’s delivery carrier framework with a ShipEngine-backed provider.
Here’s what it handles beyond standard functionality:
Multi-Package Shipments
Orders that ship in multiple packages get one label per package, each with its own weight and dimensions. Tracking numbers are recorded per package and linked to the delivery order.
Tracking Links
The module generates carrier-specific tracking URLs. Customers and warehouse staff can follow shipments directly on the carrier's tracking page, accessible from the Odoo delivery order.
Delivery Confirmation
Configure the required proof of delivery per carrier: standard confirmation, signature required, adult signature, or direct signature. This sets expectations at label creation, not after the fact.
Address Validation
Validate addresses against carrier databases before generating labels. Three modes: no validation, validate only (flag issues), or validate and auto-correct formatting. Catches errors before they become failed deliveries.
Minimum Weight Enforcement
ShipEngine rejects packages with zero weight. The module enforces a 0.1 kg floor automatically, preventing cryptic API errors when a product's weight is missing or zero.
Label Voiding
Void a shipping label from Odoo before carrier pickup. Voiding sends a cancellation request to ShipEngine and clears tracking references so the delivery order is ready for re-shipment. A refund for the label cost is requested from ShipEngine.
Fulfillment Workflow
The module integrates directly into Odoo’s delivery workflow. Shipping operations happen in the same interface your warehouse team already uses.
For Outbound:
- Customer places order → Odoo queries ShipEngine for live shipping rates
- Sales order confirmed → Delivery order created with the selected carrier and service level
- Warehouse picks and packs → Products assigned to packages with weights and dimensions
- Click “Validate” → Shipping label generated, tracking number recorded, label file attached to the delivery order
- Need to cancel? → Void the label before carrier pickup
For Returns:
- Customer requests return → Staff opens the original delivery order
- Click “Return” → Return label generated with swapped ship-from and ship-to addresses
- Label emailed or printed → Customer ships the package back
- Track the return → Carrier-specific tracking link available on demand from the delivery order
Getting Started
The module requires Odoo v19.0 or later.
ShipEngine Account:
- Sign up at shipengine.com, or log in with your existing ShipStation credentials (ShipStation accounts include ShipEngine API access)
- Connect your carrier accounts (FedEx, UPS, USPS, etc.) in the ShipEngine dashboard
- Generate an API key under Account Settings
The module is available and includes:
- Complete source code with comprehensive documentation
- Installation and configuration support
Conclusion
Multi-carrier shipping in Odoo should not require switching between multiple carrier platforms. This integration consolidates rate shopping, label generation, tracking, returns, and customs into a single, unified workflow.
Whether you ship ten packages a day or ten thousand, the process remains consistent. Confirm the order, validate the delivery, and generate the label.
If your business relies on multiple carriers and you want to centralize fulfillment within Odoo, this integration provides a scalable and efficient solution.