Odoo and Zoho CRM integration
Odoo runs your finance, inventory, and procurement. Zoho CRM manages your sales pipeline and customer relationships. When the two are connected, your customer master data stays synchronized: new customers in Odoo appear in Zoho as accounts and contacts, and sales orders and quotes automatically flow into Zoho deals. ml-connector bridges the very different authentication models and exposes the right customer and sales records across both systems.
What moves between them
The primary flow runs from Odoo into Zoho CRM. Odoo customers (res.partner records) sync into Zoho as accounts and contacts, matching by email or external ID. Odoo sales orders and quotes map to Zoho deals, keeping your pipeline in sync with open commitments. Contact and account updates in Odoo flow to Zoho on a daily or weekly schedule tied to your sales cycle. Account and contact changes in Zoho can optionally flow back to Odoo as new partners or updates to existing ones.
How ml-connector handles it
ml-connector stores the Odoo API key encrypted and uses it to authenticate once per sync cycle, obtaining a session ID that remains valid for subsequent XML-RPC or JSON-2 calls. For Zoho it stores the refresh token encrypted and exchanges it for a new access token before each request, using the api_domain field returned by Zoho to route calls to the correct region. It polles Odoo using write_date filters with a high-water-mark timestamp, so only changed records are fetched. Odoo partners without a region-specific email domain are skipped; Zoho invoices, sales orders, and quotes are available only if your subscription includes them. Notification channels from Zoho are tracked, renewed before expiry, and used to supplement polling when enabled. ml-connector handles Odoo's API key refresh and Zoho's hourly token expiry transparently, mapping Odoo account trees to Zoho account hierarchies where both systems support them, and retrying on Zoho rate limits with exponential backoff.
A real-world example
A mid-market B2B manufacturer runs Odoo ERP for finance, inventory, and procurement, and uses Zoho CRM to track sales opportunities and customer interactions. Before the integration, the sales operations team manually exported new customers from Odoo each week, looked up the matching Odoo partner in Zoho, and created duplicate contact records and deals by hand. Quotes and orders had to be cross-entered into both systems. With Odoo and Zoho CRM connected, customers created in Odoo automatically appear in Zoho within hours, sales orders flow into deals with the correct customer context, and the sales team can see their open commitments in CRM without re-keying. Month-end reconciliation between what Odoo shows as open orders and what the sales team is tracking in Zoho deals now takes minutes instead of hours.
What you can do
- Sync Odoo customers (partners) to Zoho as accounts and contacts, with email or external ID matching.
- Map Odoo sales orders and quotes to Zoho deals, keeping your pipeline aligned with committed revenue.
- Authenticate Odoo with API key and Zoho with OAuth 2.0 refresh tokens, handling expiry and region routing transparently.
- Poll Odoo on a daily or weekly schedule using write_date filters to fetch only changed records, with retries on rate limits.
- Renew Zoho notification channels automatically and replay failed records when a downstream sync misses a record.
Questions
- Which direction does data move between Odoo and Zoho CRM?
- The primary flow is Odoo into Zoho CRM. Customers, sales orders, and quotes move from Odoo into Zoho. Optionally, account and contact updates in Zoho can flow back to Odoo as new partners or partner updates. Odoo invoices are read-only in most tiers, so ml-connector does not write financial records back from Zoho.
- How does ml-connector handle Odoo and Zoho's different authentication models?
- ml-connector stores both API keys encrypted. For Odoo, it calls the authenticate endpoint once per sync to obtain a session ID, then includes the API key on every subsequent XML-RPC or JSON-2 call. For Zoho, it stores the refresh token and exchanges it for a new access token before each request, automatically using the region-specific base URL returned by Zoho.
- Does the integration work with self-hosted Odoo or Zoho regions outside the US?
- Yes. ml-connector accepts any Odoo base URL (https://<subdomain>.odoo.com, https://<subdomain>.odoo.sh, or self-hosted https://<domain>) per customer. Zoho's OAuth 2.0 response includes the correct api_domain field for the region (.com, .eu, .in, .com.au, .jp, .ca, .com.cn), and ml-connector routes all subsequent calls to that domain.
Related integrations
More Odoo integrations
Other systems that connect to Zoho CRM
Connect Odoo and Zoho CRM
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started