Accounts and contacts
Salesforce accounts and contacts matched to Odoo customers on a stable key, with the parent relationship preserved rather than flattened.
Businesses that run Salesforce rarely want to leave it. The sales team is trained, the reports are built, and the pipeline is the one number the board looks at. What they want is for a closed-won opportunity to stop being re-typed into the ERP by hand.
That makes this integration a boundary question before a technical one. Salesforce keeps the pipeline; Odoo keeps stock, delivery, invoices and cash. The connection carries the handover and sends the result back.
Businesses running Odoo with OdooBots
Odoo Salesforce integration carries a closed-won opportunity into Odoo as a sales order, and sends delivery and payment status back to the CRM. Accounts and contacts are matched rather than duplicated, products and price books align with Odoo products and pricelists, opportunity line items become order lines, and the salesperson sees in Salesforce whether their order shipped and whether the customer paid.
The hard part is not the sync, it is the boundary. If Salesforce keeps quoting while Odoo keeps stock, two systems will promise different delivery dates to the same customer. Deciding where a quotation is produced settles most of the design.
Six things move between Salesforce and Odoo, and the boundary between them decides what each one means.
Salesforce accounts and contacts matched to Odoo customers on a stable key, with the parent relationship preserved rather than flattened.
Products aligned by code and price books mapped to Odoo pricelists, so a quote in Salesforce and an order in Odoo carry the same number.
An opportunity marked closed-won creating an Odoo sales order with its line items, quantities, discounts and currency intact.
Picking and despatch status written back to the opportunity or account, so sales can answer a delivery question without phoning the warehouse.
Invoice raised, amount and paid status visible in Salesforce, which is usually the first thing a sales team asks for and the last thing they get.
Available quantity surfaced in Salesforce where the sales team needs it, so a promise is made against a real figure.
A deal is worked entirely in Salesforce. When it closes, the opportunity creates an Odoo sales order against the matched customer, with the products and prices it was won on. Odoo reserves stock, delivers and invoices. The despatch status and the paid flag travel back, so the account manager can answer a customer question from the CRM they already live in.
Where businesses get into trouble is quoting in both. Two systems producing quotations means two sets of prices and two delivery promises, and reconciling that is a manual job forever.
These are the decisions that are cheap to make now and painful to reverse once two systems have been exchanging records for a month.
Which system quotes, and what closed-won means operationally. This single decision shapes everything else in the integration.
An external id held on both sides, not the company name. Name matching creates duplicates within weeks.
The same product code in both systems, cleaned before the first sync. This is usually the largest preparation task.
Which Salesforce price book corresponds to which Odoo pricelist, including currency and customer-specific pricing.
Delivery status, invoice status, paid flag, ageing. Agreed with the sales team, because unused write-back is wasted effort.
Which system can change an address or a payment term. Both editing freely is how the two drift apart.
How Salesforce sandbox refreshes and release upgrades are handled, so the integration is tested before they land in production.
We would rather say this before you buy licences than after. These are the areas where we scope real development, recommend a different tool, or tell you the connector will not reach.
If the goal is to leave Salesforce, that is a migration project, not an integration. We will say which one you actually want.
Custom Salesforce logic and objects are not in a standard mapping and are scoped as development.
Configure-price-quote logic lives in Salesforce with its own rules. Aligning it with Odoo pricing needs explicit design.
Salesforce enforces daily API limits by edition, which decides batch size and frequency more often than Odoo does.
Letting both systems edit the same customer fields works only with conflict rules nobody enjoys maintaining.
Keeping both systems reporting on revenue means agreeing which figure is official, before someone presents the other one.
Connecting Salesforce to Odoo is less about the connector than about agreeing what is true where, and what happens when a record will not go through.
Understand where quoting happens today, how accounts and products are identified in both systems, and what the sales team actually needs to see back.
Agree the boundary, the matching keys, the price book mapping and the write-back list in writing before anything is built.
Connect Salesforce to Odoo using the standard connector where one fits, and build only what the connector genuinely cannot reach. See Odoo customization.
Your records, in a test database, including the awkward ones — the cancelled order, the partial refund, the product that exists on one side only.
A queue for failed records with a named owner and an alert, because an integration nobody watches diverges quietly and the divergence is found at audit.
Cutover with a reconciliation on both sides, then hypercare, then ongoing support and AMC.
We do not publish one integration price, because the same connector costs very differently depending on the factors below. We do publish what moves the number, and the price is fixed in writing before work starts.
We ask one question first: who produces the quotation. Businesses that answer it clearly get an integration that works for years; businesses that keep quoting in both end up reconciling by hand forever, whichever connector they bought.
Product capabilities stated on this page are documented by Odoo. The mapping advice, failure handling and limitations come from our own integrations.
Tell us where quotations are produced today and whether you intend to keep Salesforce long term. Those two answers decide the scope, and the diagnosis call is free.