Odoo and Walmart Marketplace integration
Odoo manages your inventory, fulfillment, and accounting. Walmart Marketplace is where you sell to Walmart customers. Connecting the two keeps your stock levels and order status synchronized across both platforms, so overselling is prevented and Walmart orders flow into your fulfillment pipeline without manual re-entry. ml-connector bridges the very different APIs on each side and moves the data on the cadence that suits your business.
What moves between them
Orders flow from Walmart Marketplace into Odoo. When a customer places an order on Walmart.com, ml-connector reads it via Walmart's Orders endpoint and creates or updates the corresponding purchase order or sales transaction in Odoo, mapping Walmart order line data to Odoo product variants and quantities. Inventory flows bidirectionally. Odoo inventory on hand is read via polling and pushed to Walmart in bulk feeds to keep stock levels in sync, and Walmart inventory events are received via webhook or polled to update Odoo stock moves. Pricing flows from Odoo to Walmart via bulk price feeds, since single-item updates are rate-limited. Returns and refunds are read from Walmart and logged in Odoo for accounting and reconciliation purposes. All syncs respect Odoo's record-level access rules and Walmart's 15-minute token expiry and 100-update-per-hour price throttle.
How ml-connector handles it
ml-connector stores the Walmart Client ID and Client Secret encrypted and refreshes the OAuth access token every 15 minutes before expiry. On the Odoo side, it accepts the base URL (Odoo Online, Odoo.sh, or self-hosted), API key, and username, and uses those to authenticate once per sync to obtain the uid. On the Walmart side, every request includes the refreshed bearer token in the non-standard WM_SEC.ACCESS_TOKEN header, along with WM_SVC.NAME and a unique WM_QOS.CORRELATION_ID UUID per request. Walmart orders are polled via GET and also received via webhook; when an order arrives, ml-connector maps Walmart line items to Odoo products (by SKU or UPC) and creates a sales order or purchase order depending on your business model. Inventory is read from Odoo via write_date polling on stock.move and product.product records, then pushed to Walmart in bulk item feeds to avoid the single-item 100-per-hour limit. When Walmart inventory events arrive via webhook or poll, ml-connector updates Odoo stock.quant and logs the source. Pricing flows from Odoo product.product.list_price via bulk price feeds every sync cycle. Returns from Walmart are polled and logged in Odoo as account.move reversals for accounting purposes. Idempotency keys and job IDs prevent duplicate order creation if a sync retry occurs. Every record carries a full audit trail so failed syncs can be replayed.
A real-world example
A mid-sized consumer goods wholesaler uses Odoo Online for inventory, purchasing, and accounting, and sells via Walmart Marketplace to reach Walmart customers. Before the integration, the operations team manually downloaded Walmart orders every few hours, looked up SKUs in Odoo, and created sales orders by hand, then separately uploaded price changes and inventory updates via Walmart's CSV bulk feeds. Stock levels often drifted between systems, causing oversells and backorders. With Odoo and Walmart Marketplace connected, each order from Walmart flows into Odoo automatically and routes to the fulfillment queue, inventory updates from Odoo sync to Walmart every cycle so stock levels stay accurate, and price changes in Odoo push to Walmart without manual CSV upload. The sync runs hourly, overselling is eliminated, and order fulfillment starts minutes after the customer buys instead of hours later.
What you can do
- Create Odoo sales orders automatically when new orders arrive from Walmart Marketplace, mapped by SKU to the correct product variants.
- Keep Odoo inventory synchronized with Walmart stock levels via polling and webhook, preventing oversells and backorders.
- Push pricing from Odoo to Walmart using bulk price feeds to avoid single-item rate limits, and sync price changes every cycle.
- Handle Walmart OAuth 2.0 token refresh every 15 minutes and respect rate limits, retries, and header requirements automatically.
- Track order and inventory changes with full audit trails, so failed syncs can be replayed and discrepancies investigated.
Questions
- How does the integration handle Walmart orders with multiple line items?
- When an order with multiple line items arrives from Walmart, ml-connector maps each line item to the correct Odoo product by SKU, creates a single Odoo sales order with all lines, and assigns quantities and pricing. If a line item maps to a product that does not exist in Odoo, the sync logs the mismatch for manual resolution before the order enters fulfillment.
- Why does inventory push to Walmart use bulk feeds instead of single-item updates?
- Walmart throttles single-item price and inventory updates to 100 per hour, which is too restrictive for real-time syncs. ml-connector instead uses bulk feed operations, which have much higher throughput and allow Odoo inventory changes to be batched and pushed in a single request every sync cycle.
- How does ml-connector prevent duplicate orders if a sync retries?
- Every Walmart order is given a unique idempotency key based on Walmart's purchaseOrderId, and ml-connector stores that key with the corresponding Odoo sales order. If a sync reprocesses the same Walmart order, the idempotency key is recognized and the existing Odoo order is updated instead of duplicated.
Related integrations
More Odoo integrations
Other systems that connect to Walmart Marketplace
Connect Odoo and Walmart Marketplace
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started