Short answer: a CRM keeps track of people and deals: who enquired, what was promised, what happens next. An ERP keeps track of the work that follows once a deal is agreed: stock, purchasing, invoices and the books. In Odoo both live in one database and share one contact record, so for a small business the question is rarely “which system” and more often “which apps, and in what order”.
Applies to
- Odoo version: 19. I also compared the CRM pages in the 20.0 documentation and found the same text, so nothing below changes on a 20.0 site as far as the docs show.
- Edition: the
crmandsale_crmmodules are in the open-sourceodoo/odoo19.0 repository, so the CRM and Sales link is not Enterprise-only. Other apps you may add later (Accounting, for example) differ by edition, so check the edition comparison on odoo.com before you plan around them. - Apps: CRM, Sales, Contacts. Inventory and Accounting come into the worked example only as the next step.
What question does each system answer?
A CRM answers “who might buy, and where are we with them?” Its records are leads, opportunities, activities and contacts. Its reports are about conversion, forecasts and lost deals.
An ERP answers “can we deliver this, and did we get paid?” Its records are products, stock moves, purchase orders, vendor bills, customer invoices and journal entries.
Neither is the more serious system. They fail in different places. A business with a bad CRM loses enquiries quietly. A business with a bad ERP ships the wrong thing, or ships it and forgets to invoice.
Where do the two meet in Odoo?
At the contact. The opportunity form in CRM and the quotation form in Sales both point at the same res.partner record, so the customer you chase and the customer you invoice are the same row.
Reading the 19.0 source, the link between a deal and an order is one field. The sale_crm module adds opportunity_id to sale.order, and order_ids on the lead going the other way. The opportunity then shows counts for quotations and orders and a sum of confirmed orders.
There is one small behaviour worth knowing about. When a linked order is confirmed, the code compares the opportunity’s Expected Revenue with the order’s untaxed total. If the expected revenue is lower, and the currencies match, it is raised to the order total and a note is logged. It is a nudge, not a full sync, so I would not treat that field as an accounting figure.
What changes if the CRM is a separate product?
The join becomes your job. Three things need a decision before anyone writes code:
- Which system owns the customer? Pick one. Two-way editing of names and addresses is where duplicates start.
- What is the shared key? Store the other system’s ID in a field you control, and look it up before you create anything. That makes a retried call harmless.
- What triggers the handover? Usually a deal moving to won. Decide whether that creates a quotation or a confirmed order on the ERP side.
Odoo 19 documents a JSON-2 endpoint at /json/2/<model>/<method>, authenticated with an API key. The page also says external API access is only available on Custom Odoo pricing plans, which matters if your plan was chosen before integration came up.
When it fits and when it doesn’t
One suite fits when the same few people quote, deliver and invoice, and you want one contact list. It saves you from writing and maintaining the join.
It fits less well when sales already runs happily in a tool the team likes and only the back office is the problem. Then I would start with the operations apps and integrate the CRM later, rather than force a migration nobody asked for.
Worked example: a small joinery workshop
A workshop that builds made-to-measure shelving gets enquiries by email and phone. Today they sit in inboxes and a shared spreadsheet, and orders are written on job sheets.
In Odoo, the first step is CRM alone: every enquiry becomes an opportunity, with a salesperson and a next activity. Once that habit holds, install Sales. Now New Quotation on the opportunity creates a draft order that already carries the customer, campaign and source. Confirming it later feeds Inventory and invoicing, which the workshop can switch on one at a time.
The order of work follows where the pain is, not the app list.
Common mistakes
- Buying the whole suite and turning everything on in week one. Each app adds fields people must fill in.
- Treating Expected Revenue as booked revenue.
- Keeping a second customer spreadsheet “just in case”. It will drift.
- Integrating two products before deciding which one owns the contact.
Related
Pipeline stages and the day-to-day habits come next once the CRM question is settled. There is a longer plain-language comparison on sajjalbajaj.in, if you want a non-technical read to share with a colleague.
Official references
- Odoo 19 CRM documentation
- Create and send quotations from an opportunity
- Odoo 19 Contacts
- External JSON-2 API
- sale_crm source, 19.0
How this article was checked: I read the 19.0 documentation pages listed above, compared them with the 20.0 versions, and read the crm and sale_crm models in the 19.0 source. I did not run a live database for this post.
If you are deciding which side to start with, you can get in touch through my site and we can talk it through.