Odoo and UPS integration
Odoo runs your purchasing, inventory, and order fulfillment. UPS moves your shipments. Connecting the two keeps your outbound logistics linked to Odoo's purchase orders and products. When you create a shipment on UPS, tracking updates flow back into Odoo so your warehouse and finance teams see real-time visibility. ml-connector handles the address validation, shipment creation, and tracking synchronization so manual re-keying and tracking lookups disappear.
What moves between them
Shipment data flows from Odoo into UPS. Odoo purchase orders and products trigger UPS shipment creation via the ml-connector mapping. Tracking events flow back from UPS into Odoo through Track Alert webhooks where enabled, or through Quantum View polling where webhook subscriptions are not available. Address validation happens in both directions as Odoo partner addresses are validated against the UPS address API before shipment creation, ensuring only valid addresses post to the carrier.
How ml-connector handles it
ml-connector accepts the Odoo API key and instance URL and authenticates XML-RPC or JSON-2 calls per customer configuration. On the UPS side it manages OAuth 2.0 client credentials, caches the bearer token across calls, and refreshes on token expiry rather than waiting for a 401 failure. When Track Alert subscriptions are configured, ml-connector renews them every 13 days before the 14-day expiration window, so tracking notifications never drop. Address validation runs first before shipment creation, parsing Odoo partner records into the UPS Address Validation schema and rejecting invalid addresses before they reach the shipment endpoint. Tracking events received via webhook are matched back to Odoo shipments by Odoo reference number, and polling via Quantum View is available as a fallback if webhook subscriptions are not in use. Every record carries a full audit trail so shipments can be replayed if a validation or carrier call fails.
A real-world example
A medium-sized wholesaler runs Odoo for purchasing, inventory, and order fulfillment across two warehouses and uses UPS for outbound shipping. Before the integration, the warehouse team created shipments on the UPS website, then manually logged tracking numbers back into Odoo spreadsheets, leading to duplicate entries and lost tracking links when clerks looked up shipments by hand instead of checking Odoo. With Odoo and UPS connected, purchase orders trigger shipment creation automatically with validated addresses, tracking updates flow back into Odoo in real time, and the warehouse team sees a single source of truth for inventory and in-transit visibility without re-keying or separate tracking lookups.
What you can do
- Create UPS shipments from Odoo purchase orders with automatic weight and product dimension data from Odoo's product catalog.
- Validate Odoo partner addresses against UPS Address Validation before shipment creation to prevent carrier rejections.
- Pull UPS tracking events back into Odoo as linked shipment records via Track Alert webhooks or Quantum View polling.
- Manage UPS OAuth 2.0 token refresh and Track Alert subscription renewal every 13 days to keep tracking notifications active.
- Maintain a full audit trail on every shipment so failed address validations and carrier calls can be replayed or corrected.
Questions
- Which direction does data move between Odoo and UPS?
- Shipment creation flows from Odoo into UPS, and tracking events flow back from UPS into Odoo. Address validation runs in both directions as Odoo partner addresses are checked against UPS before shipment creation. ml-connector does not write back to Odoo purchase order amounts or UPS invoice records, since UPS offers no invoice API.
- Does Track Alert subscription expiry cause tracking events to stop?
- Track Alert subscriptions expire after 14 days and must be renewed manually or automatically. ml-connector renews subscriptions automatically every 13 days, before expiration, so tracking notifications do not drop. If automatic renewal is not configured, Quantum View polling provides a fallback shipment visibility feed.
- How does the integration validate addresses before creating shipments?
- ml-connector calls the UPS Address Validation API for every Odoo partner address before attempting shipment creation. If validation fails or returns multiple candidates, the address is rejected with a clear error message so warehouse teams can correct it in Odoo. This prevents invalid addresses from reaching the UPS carrier endpoint, which would reject the entire shipment.
Related integrations
More Odoo integrations
Other systems that connect to UPS
Connect Odoo and UPS
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started