Integraties
Odoo: automating purchase orders via XML-RPC
Connect OrderPilot to Odoo (Community or Enterprise) via XML-RPC. Covers partner matching, product cross-references, taxes, and the purchase.order creation flow.
Odoo is one of the fastest-growing mid-market ERPs in Europe and a common choice for young trading firms, SaaS startups, and wholesalers who want to avoid the strict licensing model of SAP or Microsoft. OrderPilot’s Odoo connector supports both Odoo Enterprise and Odoo Community via XML-RPC.
What makes Odoo different
Odoo does not have a polished REST API like Exact or Business Central. The primary integration path is XML-RPC (standard) or JSON-RPC. Newer Odoo versions (16+) have a limited REST layer, but XML-RPC remains the most complete and reliable option.
OrderPilot’s connector speaks XML-RPC natively. No extra middleware, no custom modules required.
Connector architecture
Flow:
- Credentials — You configure a dedicated technical user in Odoo with permissions on the Purchase, Inventory, and Accounting modules.
- Database selection — Odoo supports multiple databases per instance. OrderPilot connects to one database; for multi-tenant setups you can configure multiple connections.
- Sync + write —
res.partner(vendors),product.product(items),account.tax(VAT codes) are synced nightly. Validated POs are created viapurchase.order.create().
Vendor matching
Odoo’s res.partner table combines vendors and customers. OrderPilot filters on supplier_rank > 0 and matches incoming POs by:
- Email domain (field
email) - VAT number (
vat) - Commercial register number (in
refor a custom field) - Name fuzzy match (review required)
Odoo allows multiple contacts under a single vendor (parent entity + child contacts). OrderPilot links the PO to the top-level vendor, not to an individual contact.
Product matching
Odoo’s product.product model has both default_code (internal SKU) and barcode. Many customers also use product.supplierinfo for supplier-specific product cross-references (e.g. your SKU “WIDGET-001” = supplier’s “A-1234”).
OrderPilot matches in this order:
product.supplierinfomatch onproduct_codefor the specific supplier- Exact
default_codeorbarcode - Fuzzy match on
name+description
Unmatched items go to the review queue. OrderPilot never auto-creates products; master-data decisions stay with your team.
VAT and fiscal positions
Odoo’s VAT system is built around account.tax records and account.fiscal.position for intra-EU / non-EU scenarios. OrderPilot derives the correct tax from:
- Purchase taxes (
supplier_taxes_idon the product) — default VAT rule - Fiscal position of the vendor (intra-EU → reverse-charge; non-EU → VAT-exempt)
- Manual override per product line if the PO requires a non-default VAT treatment
For Dutch customers we configure the NL VAT codes (21%, 9%, 0%, reverse-charge, margin scheme) by default during onboarding.
PO creation
A validated PO is created via XML-RPC:
# Pseudo-code — OrderPilot's connector does this via XML-RPC
models.execute_kw(db, uid, pwd,
'purchase.order', 'create', [{
'partner_id': supplier_id,
'date_order': '2026-04-20 10:00:00',
'date_planned': '2026-04-28 10:00:00',
'order_line': [
(0, 0, {
'product_id': product_id,
'name': 'Item description',
'product_qty': 10.0,
'price_unit': 129.50,
'taxes_id': [(6, 0, [tax_id])],
'date_planned': '2026-04-28 10:00:00',
}),
],
}]
)
The PO is created in draft state. Confirmation (to purchase state) is done by the customer in Odoo — this aligns with Odoo’s workflow convention and respects the approvals already configured in your Odoo setup.
Idempotency
OrderPilot stores the Odoo id per PO. On retry we check for existence via search_read before creating again. Extra safety: we set a client_order_ref (Odoo’s standard field for external reference) equal to our own OrderPilot PO id, so dedup is also visible manually inside Odoo.
Custom modules and fields
Odoo’s biggest strength is also its biggest implementation quirk: custom modules. If your Odoo instance has custom fields on purchase.order or purchase.order.line, we can map them — that’s an onboarding conversation. We support both standard Odoo fields and Studio-custom fields.
Community vs Enterprise
OrderPilot works with both:
- Odoo Enterprise — Full support. All standard and Studio modules.
- Odoo Community — Full support on the purchase flow. Some workflow features (approvals, advanced) require Enterprise modules.
- Odoo.sh hosted — Works identically to on-prem or self-hosted. Valid SSL certs + correct credentials are sufficient.
- Odoo Online (SaaS) — Works; note that SSO and 2FA must be disabled on the technical user for XML-RPC compatibility.
What you don’t get
- No automatic product creation. Unknown items go to review, they are not silently added.
- No invoice matching from the PO connector. That’s OrderPilot’s invoice module.
- No support for Odoo 10 and earlier. Version 12+ is supported. For 10-11 an adapter project is needed.
FAQ
Does this work with multiple companies in one Odoo? Yes. Odoo’s multi-company is recognized; per OrderPilot workspace you pick which company is default, with optional rules for allocating to other companies.
What if I have a custom purchase-approval flow? We create the PO in draft. Your Odoo workflow (approval required, manager review, etc.) stays unchanged. OrderPilot respects Odoo’s existing permissions.
How long does implementation take? Standard: 1-2 business days. Custom modules or many Studio fields: 3-5 days.
Related articles
- IntegratiesAFAS Profit integration: native connector for Dutch mid-marketConnect OrderPilot to AFAS Profit using GetConnector and UpdateConnector. Covers supplier matching, inkooporder creation, and the one-click reconciliation flow. Read
- IntegratiesMicrosoft Dynamics 365 Business Central: template-free PO captureConnect OrderPilot to Business Central via the Standard API v2.0. Covers vendor matching, Item No. resolution, dimensions, and the posted-document workflow. Read
- IntegratiesExact Online: automatic PO creation with OrderPilotConnect OrderPilot to Exact Online via the official REST API. Covers vendor matching, GL accounts, VAT codes, and the one-click posting flow into the purchase ledger. Read