Odoo ERP

Lazada Odoo Integration: SKU Mapping and Stock Reconciliation

A practical guide to connecting Lazada orders to Odoo, keeping one stock ledger across marketplace and offline sales, and reconciling settlement payouts.

Ravi Shanker SinghFounder & Odoo ConsultantPublished 6 min read
Share
On this page

Every Lazada seller we have worked with in Bangkok eventually hits the same wall. The marketplace dashboard shows one set of numbers, the warehouse team sees another, and finance cannot tie either one to the bank deposit. A Lazada Odoo integration done properly fixes this. It routes every order, stock movement and payout through a single ledger in Odoo, instead of three disconnected spreadsheets.

This post walks through how we actually build these integrations. We cover how we map SKUs, how we keep one stock count across Lazada and offline or Shopee channels, and how we reconcile the fortnightly settlement report against what Odoo expects to receive. For the broader connector work, including Shopee and TikTok Shop, see our Odoo API integration services page.

Why a Lazada Odoo integration has to replace the seller center for accounting

Lazada Seller Center is built for listing management and order fulfillment. It was never designed for accounting or multi-channel inventory. It tells you an order was placed and shipped. It will not tell you whether that sale affected your withholding tax position, your month-end cost of goods sold, or your available stock for a wholesale customer buying the same SKU offline.

Once order data lives in Odoo as a sales order, everything downstream behaves normally. Delivery orders consume stock through standard routes. Invoices follow your VAT and e-Tax Invoice rules. The sale shows up in the same reports as your walk-in and B2B revenue. That consistency is the entire point. Without it, you are running two businesses that happen to share a warehouse.

Lazada Odoo SKU mapping: the step people underestimate

Lazada listings rarely use the SKU codes you already use in Odoo. Sellers often create listing-level SKUs per variant, per bundle, or per promotional set. Those codes multiply fast once a product has several colors or pack sizes.

Our approach on every project:

  • Keep Odoo's internal reference as the single source of truth for each product variant.
  • Build a mapping table (a simple Odoo model or a field on the product variant) that stores the Lazada SellerSku against the Odoo product_id.
  • Handle bundles explicitly. If a Lazada listing sells three Odoo products as one kit, the integration must explode that one marketplace order line into three stock moves, not one.
  • Reject unmapped SKUs at the sync step, not silently later. An order with no matching SKU should raise a visible error queue, not disappear into a failed cron log.

This mapping table is the piece most "simple" connectors skip. It is also the piece that breaks first once a catalog grows past a few hundred variants. If your catalog already spans several storefronts, our e-commerce development team can scope the cleanup as its own fixed-price phase before the connector goes live.

One stock ledger across marketplace and offline sales

The second question every merchant asks is some version of this. If I sell the last unit on Lazada five minutes before a shop sale, will the system know? The honest answer depends entirely on sync frequency and whether both channels write to the same Odoo stock location.

We set this up with marketplace orders arriving as sales orders tied to the same warehouse the offline team uses. Odoo's reservation logic then handles the conflict the same way it would for two simultaneous shop orders. First reservation wins, the second backorders. We typically poll Lazada's order API on a short interval, often between two and ten minutes depending on order volume. We do not rely on webhooks alone, because webhook delivery is not always guaranteed. Silent gaps are worse than a short delay.

A genuine limitation here. Near-real-time is not the same as real-time. On a fast-moving flash sale, a two-minute polling window can still allow an oversell if both channels drain the last units inside that window. We mitigate this by holding a small safety buffer in the Lazada channel stock feed rather than exposing 100 percent of on-hand quantity. That costs a little potential revenue. It avoids the cancellation and reputation cost of overselling.

Syncing stock back to Lazada

The sync runs both directions. Orders come in; available quantities go out. We push Odoo's on-hand quantity, minus the safety buffer and minus quantities reserved for other channels, back to Lazada through its stock update API on the same interval as the order pull.

Multi-warehouse setups are where this gets tricky. If a seller fulfills from both a Bangkok warehouse and a Chonburi warehouse, Lazada only wants one number per SKU. We compute that number in Odoo at the product level, summed across the locations actually eligible for Lazada fulfillment. Lazada has no way to interpret raw per-warehouse figures correctly, so we never send them.

Order status and fulfillment flow

The order lifecycle we implement usually looks like this:

Lazada statusOdoo action
Order placedCreate sales order, confirm, reserve stock
Ready to shipGenerate delivery order, print Lazada shipping label
ShippedValidate delivery, post stock move
DeliveredNo Odoo action required (informational)
Returned / RTSCreate return, restock if applicable, credit note
Cancelled before shipmentCancel sales order, release reservation

Cancellations and returns are where custom connectors usually show their age. A return that is not mapped to a proper Odoo credit note and stock-in move will quietly inflate your reported sales. It will also understate your returns rate, which then throws off demand planning for the next purchase order.

Lazada settlement reconciliation: closing the loop with finance

Lazada pays out on a fixed cycle and deducts commission, payment processing fees, shipping subsidies and sometimes penalties before the transfer hits your bank account. The settlement report it provides is detailed. It is not, however, in a format accounting can post directly.

Our reconciliation routine:

  1. Import the settlement report, CSV or API depending on account tier, into Odoo as a batch linked to a settlement date range.
  2. Match each settled order line back to its original sales order and invoice.
  3. Post the commission, logistics fee and any penalty lines as separate expense lines against the same order, not as one lump deduction, so margin reporting per SKU stays accurate.
  4. Reconcile the net payout against the actual bank statement line using Odoo's bank reconciliation. We follow the same discipline here that we apply to API-driven payment and order flows for other channels, a pattern described on our Odoo consultancy services page.
  5. Flag any order present in Odoo but missing from the settlement batch, and any settlement line with no matching Odoo order, as exceptions for the finance team to review weekly rather than at month-end.

This last step matters more than it sounds. Marketplace settlement timing rarely lines up cleanly with calendar months. Without a weekly exception check, finance ends up trying to explain a six-week backlog of mismatches during the close. That is exactly when nobody has time for it.

What a Lazada Odoo integration does not solve on its own

A Lazada Odoo integration will not fix a catalog that has duplicate or inconsistent product data. It will not retroactively clean up historical orders that were entered manually before the connector went live. We have seen projects stall for weeks because the SKU cleanup took longer than the integration build itself. Plan for that cleanup as its own phase, with its own fixed scope, rather than folding it into the connector timeline.

If you are running Lazada alongside Shopee, TikTok Shop or a physical store, the same architecture extends to each channel. One Odoo stock ledger, one SKU mapping table per marketplace, and the same reconciliation discipline applied to each settlement cycle. That is the pattern we bring into every API integration engagement, regardless of which marketplace is first on the list. For sellers planning to add their own storefront alongside Lazada, our web development team can scope that build as a separate phase too.

Share

Frequently asked questions

Does Lazada have an official Odoo app for this integration?

No. Lazada does not publish an Odoo connector, so the integration is built against Lazada's Open Platform API using custom or third-party connector modules configured for your catalog and warehouse setup.

Can one Odoo instance handle Lazada, Shopee and a physical store together?

Yes, and this is the normal setup we build. Each channel gets its own SKU mapping and order sync, but all of them post to the same Odoo stock location, so inventory counts and reports stay unified across channels.

How often should stock sync between Odoo and Lazada?

Most of our implementations poll every two to ten minutes depending on order volume. Faster polling reduces oversell risk during flash sales but increases API load, so the interval is tuned per seller rather than fixed.

What happens to Lazada commission and fees in Odoo?

We post them as separate expense lines against each settled order rather than one lump deduction, so gross margin per SKU stays accurate and finance can trace every fee back to its originating sale.

Is near-real-time stock sync enough to prevent overselling?

It reduces overselling substantially but does not eliminate it entirely. During high-volume flash sales, a short polling window can still allow a rare double sale, which is why we recommend holding a small safety buffer on the Lazada stock feed.

Sources

About the author

Ravi Shanker Singh

Founder & Odoo Consultant

Founder of Tech After Me and Odoo consultant. Ravi implements, customises and supports Odoo ERP and builds web, mobile and data products for companies in Thailand, the USA and India, working from Bangkok, New York and Delhi NCR.

More from this author

Keep reading

Odoo VAT Thailand Setup: 7% Tax, Invoices, and ReportsOdoo ERP

Odoo VAT Thailand Setup: 7% Tax, Invoices, and Reports

A practical walkthrough of Odoo VAT Thailand setup: 7% tax configuration, input and output VAT, tax invoice versus receipt, and the reports your accountant needs at close.

Ravi Shanker Singh6 min read

Put what you read into practice

The team writing these guides is the same team that ships them. Tell us what you are working on.

Get new articles in your inbox

Get new articles in your inbox

Odoo guides and IT news that matter to your business. At most one email a week.