Keep CRM in Salesforce or HubSpot while Odoo runs quotes, orders, inventory, and invoicing by syncing accounts, contacts, opportunities, and products on a schedule or webhook. Map stages to sale.order states, avoid duplicate pipeline ownership, and use middleware with field-level rules so marketing stays in CRM and fulfillment stays authoritative in Odoo stock models.
Steps
- Define system of record per object: leads in CRM, SO and stock in Odoo.
- Install connector or use iPaaS with OAuth to Salesforce REST or HubSpot APIs.
- Map res.partner and crm.lead fields including external IDs for idempotent upserts.
- Sync product catalog one-way from Odoo to CRM price books or quotes.
- Trigger sale.order creation when opportunity reaches Won with line items.
- Push order status and delivery tracking back to CRM custom objects.
- Log errors and dead-letter queue for failed sync rows with admin alerts.
Common mistakes
- Bi-directional product edits causing SKU chaos.
- Creating SO before credit limit or stock check in Odoo.
- Missing company_id on multi-company partner sync.
- Syncing every chatter message overwhelming API limits.
- No dedupe key on email for contact merge conflicts.
Odoo version notes
CRM connectors are external for Odoo 16–18; Enterprise crm app can replace HubSpot for simpler stacks. Salesforce integrations often use Heroku or Mulesoft with Odoo JSON-RPC. Test API rate limits on Odoo.sh shared workers. HubSpot custom objects need mapping updates when Odoo sale fields change on upgrade.
When to bring in help
If the fix touches custom modules, regulated traceability, or production outages, a focused rescue sprint beats months of trial and error. See our Odoo service.