Source connector
Odoo CRM connector
Odoo CRM integration for databases, warehouses and BI tools
Modular CRM in the Odoo suite for leads, opportunities, and revenue. Datrise captures Odoo CRM entities such as modular CRM entities, opportunities, and revenue process data, then lands normalized and typed models for warehouse reporting, attribution, and AI workflows.
The Odoo External API (XML-RPC and JSON-RPC, execute_kw on the /object endpoint) authenticates with username / password, API key, incremental runs key on write_date, and Odoo CRM caps calls at no fixed quota is published; Odoo's Acceptable Use Policy calls unsustained RPC/API calls of 1 call/second with no parallel calls typically acceptable and flags unthrottled bulk calling as abuse.
Of the 3 objects, 3 sync as upserts keyed on the primary key and 0 as append-only streams, so each incremental run moves only what changed since the last watermark. Every object lands in its own table (for example `odoo_crm_modular_crm_entities`) with a schema derived from the Odoo CRM API rather than a flattened CSV, in any of the 43 supported destinations.
Datrise is in early access: pick a destination below to open the Odoo CRM pipeline page, and join the waitlist to get the Odoo CRM connector (CRM) with guided onboarding.
What Odoo CRM data Datrise extracts
Each object lands in its own typed table. Sync mode is derived from the object: history-style objects append, everything else upserts.
| Object | Landing table | Sync mode |
|---|---|---|
| modular CRM entities | odoo_crm_modular_crm_entities | Upsert by primary key, incremental on updated-at |
| opportunities | odoo_crm_opportunities | Upsert by primary key, incremental on updated-at |
| revenue process data | odoo_crm_revenue_process_data | Upsert by primary key, incremental on updated-at |
Odoo CRM API: setup facts for the connector
Verified against the vendor documentation on 2026-09-07. Unknown values are left blank rather than guessed.
| API | Odoo External API (XML-RPC and JSON-RPC, execute_kw on the /object endpoint) |
|---|---|
| Authentication | username / password, API key — Odoo has no OAuth for the external API; you authenticate an XML-RPC/JSON-RPC call with database name, username, and either the account password or an API key generated under Preferences > Account Security, then reuse the returned uid on every execute_kw call. |
| Pagination | offset — search_read takes offset and limit keyword arguments to page through crm.lead (and any other model); there is no cursor or page token. |
| Rate limit | no fixed quota is published; Odoo's Acceptable Use Policy calls unsustained RPC/API calls of 1 call/second with no parallel calls typically acceptable and flags unthrottled bulk calling as abuse |
| Incremental cursor | write_date — write_date is an automatic, read-only datetime field Odoo updates on every record write, so filtering crm.lead with a write_date >= domain is the standard incremental pattern. |
| Webhooks | Yes — Studio Automation Rules with an outbound webhook action (POSTs a payload to an external URL on a record trigger) |
| Bulk export | No |
| Deletes detectable | No — unlink() hard-deletes the row (the vendor docs' own example calls search afterward to show the id no longer exists); crm.lead has no vendor-documented is_deleted flag, so removals are only visible as ids that stop being returned by search |
What bites when replicating Odoo CRM
- External API access is gated by pricing plan: Odoo's docs state it is only available on Custom plans and is not available on One App Free or Standard plans, so a target database may reject execute_kw entirely.
- There is no dedicated bulk/batch read endpoint; search_read's offset/limit pagination over crm.lead is the only path, and the vendor's own Acceptable Use Policy asks integrators to throttle to about 1 call/second with no parallel calls.
- unlink() performs a hard delete with no soft-delete flag documented for crm.lead, so a connector must diff id lists across syncs to detect removed leads rather than filtering a deleted column.
- write_date moves on any field write to the record, not just pipeline-relevant changes, so an incremental filter on it can re-pull leads whose stage or amount never changed.
Popular destinations for Odoo CRM
Choose a destination below to open the ready pipeline page.
- AAirtable
Relational spreadsheet destination for ops and go-to-market teams.
View pipeline - AAmazon Athena
Serverless SQL over S3 data lake tables.
View pipeline - AAmazon DynamoDB
Serverless key-value and document store on AWS.
View pipeline - AAmazon QuickSight
AWS serverless BI with SPICE and embedded analytics.
View pipeline - AAmazon Redshift
AWS petabyte-scale warehouse with Spectrum.
View pipeline - AAmazon S3 Data Lake
Object storage landing zone for parquet and snapshots.
View pipeline - AApache Superset
Open-source BI for SQL exploration, charts, and dashboard publishing.
View pipeline - AAzure Data Lake Storage
ADLS Gen2 object storage for analytics workloads.
View pipeline - AAzure Synapse
Microsoft analytics workspace with SQL pools.
View pipeline
Odoo CRM connector FAQ
- What Odoo CRM data does the connector extract?
- 3 objects: modular CRM entities, opportunities and revenue process data. Each lands in its own table with types preserved; history-style objects (0) load as append-only streams.
- Is the Odoo CRM integration incremental?
- Yes. After the initial full load, every run reads only records changed since the last watermark (updated-at or event timestamp) and applies an upsert or an append depending on the object.
- Where can I load Odoo CRM data?
- Into 43 destinations: relational databases, cloud warehouses, data lakes, spreadsheets and BI tools. Each Odoo CRM → destination pair has its own page with the object-to-table mapping.
Related CRM sources
Other sources in the same category, each with its own connector page.
Early access
Launch your Odoo CRM pipeline with guided onboarding
Join the waitlist to get priority access for Odoo CRM integrations with guided setup, schema-aware mapping, and production-grade incremental sync.