Chimkins IT logo
Chimkins IT

Guide

How to Sync WooCommerce Orders to Odoo Automatically

Stop retyping orders. Let webhooks move data from checkout to fulfillment in minutes.

The problem: manual re-entry costs real time (and real money)

If you’re copying WooCommerce orders into Odoo by hand, you’re doing the least valuable work in your business every day: retyping data that already exists. It starts with “just a few orders”, then turns into a routine of opening the WooCommerce admin, copying customer details, recreating line items, adding shipping, applying coupons, and trying to match the taxes exactly.

The mistakes are predictable: a missing apartment number, a wrong SKU on one line, the shipping method entered as a product instead of a delivery charge, or the wrong tax rate because WooCommerce tax classes don’t map cleanly to Odoo taxes. Those small errors show up later as delayed fulfillment, confusing customer emails, and accounting that doesn’t tie out.

For a store doing 50+ orders/day, even a “fast” manual entry process (say 3–5 minutes per order) is 2.5–4+ hours of work daily. That’s half a workday spent moving data between tabs — and it doesn’t include the time spent fixing the inevitable edge cases.

What happens when an order comes in (end-to-end flow)

A proper order sync should be event-driven and traceable. Here’s the concrete flow most teams want:

  1. A customer places an order in WooCommerce.
  2. WooCommerce fires an order.created webhook (and later order.updated when the status changes).
  3. Chimkins receives the webhook, fetches the full order payload via the WooCommerce REST API, and maps it into Odoo records.

In Odoo, that usually means creating (or matching) these objects:

  • Customer / addresses (res.partner): match by email first, then create a partner if none exists. Create separate delivery and invoice contacts when the addresses differ (partner_shipping_id, partner_invoice_id on the sales order).
  • Sales order (sale.order): create an order with lines (sale.order.line) for each WooCommerce item, plus shipping/fees/discounts as separate lines when needed. Store the WooCommerce order number in client_order_ref (or a dedicated custom field) so it’s searchable.
  • Order confirmation and picking (stock.picking): when you confirm the sale order, Odoo generates delivery operations from routes and stock rules. At that point the warehouse can pick/pack/ship without anyone re-entering the order.
  • Invoice (account.move): if you invoice on order, create an out invoice (move_type='out_invoice') tied to the sale order.
  • Payment registration (account.payment): record the payment in the right journal and reconcile it to the invoice, so accounting reflects reality.

The output should be that, minutes after the WooCommerce checkout, your Odoo team can open Sales, search the WooCommerce order reference, and see a complete order ready for fulfillment — with the right customer, the right products, and the right amounts.

Payment and tax mapping: where DIY integrations usually break

Payment and tax details are the “boring” parts that make or break trust in an integration.

Payments

WooCommerce can take money through many gateways (Stripe, PayPal, Klarna, bank transfer, cash on delivery, etc.). In Odoo, those flows land in different places depending on how you run accounting. At minimum, you need consistent mapping from the WooCommerce payment method to an Odoo journal (account.journal), so card payments don’t end up in the same journal as bank transfer payments.

A common approach is to map WooCommerce payment_method / payment_method_title to:

  • the target account.journal (e.g., “Stripe”, “PayPal”, “Bank”)
  • optional payment terms / reconciliation rules
  • whether to create an invoice immediately or leave the order as a quotation

In Chimkins, you configure this mapping once in a small mapping screen, and then every new order follows it automatically.

Taxes

WooCommerce uses tax classes and rules; Odoo uses taxes (account.tax) and (often) fiscal positions (account.fiscal.position) to choose the right tax and accounts per customer. When the mapping is wrong, you see classic symptoms: tax totals in WooCommerce don’t match the Odoo invoice, or B2B/VAT-exempt customers get taxed incorrectly.

A solid sync aligns:

  • WooCommerce tax lines (rates, names, amounts) → Odoo account.tax records
  • regional / B2B logic → Odoo fiscal positions and tax mappings
  • shipping tax handling (shipping often has different rules than products)

Handling refunds and order updates

Real orders change. Customers request cancellations, partial refunds, address changes, or swaps.

When WooCommerce sends an update (typically via order.updated) or a refund is created, the sync should create an Odoo credit note (account.move with move_type='out_refund') for the refunded amount (partial refunds included), and optionally create an inventory return (stock.picking) when items are physically coming back and will be restocked. Keep the WooCommerce reference on all related documents so you can audit what happened later.

Getting started

Most setups follow the same path:

  1. Install the Chimkins helper module in Odoo.
  2. Connect WooCommerce credentials (site URL + REST API consumer key/secret).
  3. Enable order sync — partner matching is handled automatically by email.
  4. Map payment methods to Odoo journals, and tax classes to Odoo taxes/fiscal positions.
  5. Place a test order in WooCommerce and verify what’s created in Odoo (res.partner, sale.order, account.move).

For a full walkthrough, see the setup guide.

WooCommerce Odoo Order Sync — Automate Orders | Chimkins IT