Skip to content
Integration · Odoo

If you use Odoo, your CRM talks to Odoo.

Account, product, order and invoice data stays in Odoo; your sales team sees the same data in the CRM. Because Odoo is open source and modular, the access question starts differently than it does with other ERPs — and that is where this page begins.

Rapitek CRM channels and integrations screen (Turkish interface): WhatsApp Bots, Email Accounts, Meta Pages, Instagram, CTI Adapters, Payment Providers cards
Channels and integrations screen — connection cards

Odoo's modules are open, yet the pre-sales process is still adrift

At companies using Odoo, the product may have been customised either by an in-house developer or by an Odoo partner. This page was not written to disparage Odoo; it was written to describe a real pattern that recurs at the companies who call us.

  • Orders and invoices move along properly in Odoo; but everything before the order — the lead, the discovery, the quote revision, the reason for losing — accumulates nowhere.
  • The customer request arrives over WhatsApp, the quote goes out by email; both are outside the ERP and both get lost.
  • The field team does not use the ERP screen on a phone; the visit note stays a note that never gets written up in the evening.
  • As customisation accumulates, new requests join the developer queue; the sales manager cannot add their own field themselves.
  • The person who prepares the reports sits in the technical team; the question “what is in the pipeline this week” turns into a ticket.
  • And there is the possibility nobody likes: two customer lists form in two places, and which one is correct becomes a matter of debate.

That last item is the real subject of this page. The job of an integration is not to produce a second list, but to set a rule for which system is the authority for which data.

How is the connection built?

There is no out-of-the-box module for Odoo on our side, and we will not claim there is. The connection is built as an integration project whose scope is determined in the discovery call, using the REST API, OAuth2, webhooks and import/export. Which external interface will be used on the Odoo side — which endpoint, with which permissions — we determine together during discovery.

Odoo differs from other ERPs in one way, and that makes our work easier: because the source code is open, what is possible on the other side is not guessed at, it is looked at. With a closed ERP, the answer to the access question is sought at the licence and version desk; with Odoo, we look at your own installation during the discovery call. This lets us determine the scope earlier and more precisely; but it is not the same thing as an out-of-the-box module — there is still a connection that has to be written.

Three tools are used on the Rapitek CRM side:

  • REST API — the product ships out of the box with 183 business objects, and each one is exposed in the REST API with its own data and schema endpoint; access is authorised with OAuth2. An object's schema can be read from the describe endpoint, several operations can be sent in a single composite request, and bulk transfer is done through the batch endpoints.
  • Outbound webhook — CRM events are delivered to the external system signed; a failed call is retried and the target address is verified.
  • Import/export — a four-step wizard; we do the initial data migration ourselves during setup.

The limits of these three tools are measured, not estimated: the REST API gives object and field definitions from the describe endpoint, processes up to 200 records in a single batch request, and carries 25 sub-requests at once in a composite call. The import wizard works on more than 75 objects, up to 100,000 rows per job and 25 MB per file. Our general approach is on the integrations page, and the same framework applied to a closed ERP is on the Netsis integration page.

A concrete scenario

Thursday, 15:10 — the customer asks for a revision over WhatsApp, and the quote had been written in Odoo. Once the connection is in place, here is what changes:

  1. 1

    The request lands as a record, not as a message

    If your WhatsApp Business account is connected to the CRM, the message is written into the shared inbox and onto the relevant customer record. The revision request does not stay on one person's phone.

  2. 2

    The quote revision is tracked on the opportunity record

    Which revision number it is, what changed and who approved it stay in the CRM. The version that turns into an order is passed to Odoo through defined fields.

  3. 3

    The price stays the same as the list in the ERP

    Because the product catalogue and the price list are transferred from Odoo, the quote is written at the current price. The authority for the price stays in Odoo; the copy in the CRM is there for the sales screen.

  4. 4

    The authority for the customer record is set by a rule

    Which system the customer record is created in, and how it flows to the other, is written down during setup. The two lists do not drift apart, because one becomes the source and the other the mirror.

  5. 5

    The sales manager adds their own field themselves

    Adding custom objects and fields on the CRM side is done without writing code. There is no joining the developer queue for a new sales field; the customisation queue on the ERP side gets some relief.

  6. 6

    A reporting screen, not a report request

    The pipeline, the source breakdown and the reasons for losing are prepared with the drag-and-drop dashboard designer. No appointment with the technical team is needed for a sales report.

Flows that can be built between Odoo and Rapitek CRM

Customer record matching and the authority rule

Which system is the authority for the customer record, and how it flows to the other, is defined in the written scope. Matching is set up on the tax number or on the identity key on the Odoo side.

Product catalogue and price list transfer

Product cards and the price list are transferred into the CRM; quotes are written at the current price. The transfer can be periodic, or it can be set up over the API.

Passing a won opportunity to Odoo

A signed webhook that passes the order data to the external system when an opportunity is won can be set up. Entering the same data by hand a second time is reduced.

Account balance and invoice visibility

Balance, due date and invoice header data are transferred onto the customer card. The authority for the document stays in Odoo; the CRM adds a visibility layer for the sales team.

Connecting messaging channels to records

Your own Meta WhatsApp Business account is connected to the CRM and the correspondence lands on the relevant record. You connect your own Gmail account with OAuth; that connection covers email sending and calendar synchronisation — inbox reading is switched off. Outlook and Microsoft 365 connections are not live.

Adding fields and objects without writing code

The administrator defines the fields the sales side needs themselves. The customisation queue on the ERP side is not tied up for a new sales field.

Choosing a method

Which method, and when?

We choose the method together with your Odoo partner. All four use the same REST API surface; the difference is who moves the data, and how often.
MethodWhat it is forWhen it is preferred
REST API (183 business objects out of the box, each with its own data and schema endpoint)The external system reads and writes the records in the CRM; it is authorised with OAuth2, the schema is read from the API, and 25 sub-operations are sent in a composite requestWhen an external interface can be used on the Odoo side and the flow is meant to run automatically
Outbound webhookEvents in the CRM (e.g. opportunity won) are delivered to the external system signed; a failed call is retriedIn flows that need event notification in the CRM-to-Odoo direction
Import (Data Hub)Excel/CSV extracts are transferred with a four-step wizard: upload, map fields, preview, run. Export is done in the same module; we have not measured its limitsFor the initial data migration and one-off transitions; as a bridge until the API flow is in place
Your own developer or your Odoo partnerThe team that already knows the Odoo side can write the connection themselves using the same REST API; we give them the schema, the OAuth2 access and the field mapping tableIf customisation has accumulated in your Odoo and you will keep working with that team
What we can say

What we have verified

183
Business objects in the REST API
25 sub-requests
Operations that can be sent in a single composite request
200 records
Records processed in a single call on the batch endpoints
every 6 hours
A database backup is taken, kept for 30 days and tested for integrity
Implementation

How is the Odoo connection put into service?

  1. 1

    Discovery

    We work out where you run Odoo, which modules you use and which customisations have been made. We recommend that the partner or developer who set up your Odoo joins this call.

  2. 2

    The authority rule and field mapping

    Which system is the authority for which data is decided here — this is the critical step in Odoo flows. The field mapping table, the direction of flow, the frequency and the cost, if any, are shared in writing.

  3. 3

    Configuration and test migration

    The objects, fields and permissions on the CRM side are set up; two-way verification is done with sample records. Duplicate record scenarios are tried out here.

  4. 4

    Training and go-live

    Training for the sales and field teams, then close follow-up during the first week. We do not commit to a duration before discovery; after the discovery call we give you a date, not a range. The duration of the API-based Odoo flow becomes clear according to the scope.

Our limits: what we do not promise on this page

There are four things people ask about when ERP integration comes up. We do not promise any of the four, and we write down why.

  • We do not say “your stock will be in sync”. The authority for the stock record stays in Odoo.
  • We do not say that the order → invoice → collection chain will flow on its own. That chain is built into the product, but we do not think it is right for it to be sold as an automated accounting flow.
  • We do not promise manufacturing and MRP automation. The bill of materials and the production line definition exist in the product; we cannot describe work order execution with a reference case today.
  • We do not issue e-Invoice or e-Archive documents. Rapitek CRM is not a GİB private integrator; it does not produce official documents and does not track ETTN or GİB status. Your invoices continue to be issued under your current arrangement.

We wrote the reason for the first three, and “what can be done instead”, in one place, line by line: the three things we do not promise. We are not repeating it here, so that we do not end up writing two different sentences in two places.

One more thing: if a module has to be installed or an endpoint has to be written on the Odoo side, that work sits with your developer or your Odoo partner. We provide the CRM side, the schema, the OAuth2 access and the field mapping table. We do not offer Odoo installation, upgrade or maintenance services.

Data location: your data is held in the European Union — the database in Helsinki (Finland), files in Frankfurt, backups in Falkenstein (Germany). We do not have a single component in Türkiye, and we do not have a region selection feature. This is a transfer abroad within the scope of KVKK art. 9. The details are on the security page and in the KVKK disclosure notice.

Certification: we do not have an ISO 27001 or SOC 2 certificate, and we will not claim one until we do.

Plan prices are out in the open; scope comes out of discovery

The scope of the Odoo connection, and its cost if there is one, are worked out in the discovery call and shared in writing. Plan prices and separately priced items, on the other hand, we publish on a single page, with the figures.

Three plans, a scope table and separately priced items on a single page.

FAQ

Frequently asked questions about Odoo integration

Is CRM integration with Odoo possible?
Yes — but not with an out-of-the-box module; as an integration project with a defined scope. The connection is built with the REST API, OAuth2, a signed outbound webhook and import/export. Which external interface will be used on the Odoo side, and with which permissions, is determined during discovery and shared as a written scope.
Is there a ready-made Odoo module in Rapitek CRM?
There is not; it would not be right to say there is. We have no out-of-the-box module specific to Odoo: a code scan looked for provider-specific code under the Odoo name and did not find any. As for what exists in a third-party app marketplace, we have not measured that, so we do not write about it. What we do have is a documented interface: the product ships out of the box with 183 business objects, and each one is exposed in the REST API with its own data and schema endpoint — you can read the field structure from outside with describe; alongside it, OAuth2, a signed webhook and a four-step import wizard.
Odoo has its own CRM module. Why a separate CRM?
That is a legitimate question, and our answer is this: if Odoo's sales side does the job for you, do not change it. The reason we hear at the companies who call us tends to be a different one: the sales and field teams not using the ERP screen in their daily work, WhatsApp and email traffic staying off the record, and the setup being left to them. What sets us apart is not a feature list: we do the setup, the data migration and the training in Turkish ourselves.
We run Odoo on our own server. Will access be a problem?
It does not have to be, because in an installation on your own server you define the permissions. What is decisive is this: can an endpoint with limited permissions be defined that lets the CRM and Odoo reach each other? We check that during discovery together with your IT lead. If it cannot be defined, the flow is built with periodic import/export.
We have a partner who has done customisation in Odoo. Can they write the connection?
Yes, this is a path we support. Your partner can write the connection themselves using Rapitek CRM's REST API; we give them the API documentation, the OAuth2 access, the object definitions and the field mapping table. Who writes what, how the testing will be done and which field flows in which direction we set out separately, in writing, during discovery. We do not have a figure for how many Odoo installations have taken this path; since we have not measured it, we do not write a number either.
Does it matter which Odoo version we use?
It affects the scope, it does not change the answer. During discovery we work out your version, the modules you use and the customisations that have been made; what is decisive is whether an externally accessible interface can be defined. The Rapitek CRM side is the same in every case: 183 business objects out of the box, each with its own data and schema endpoint in the REST API, authorised with OAuth2.
Won't we end up with two customer lists in two systems?
This is a step that is expensive to skip in integrations, and it is where we start. During setup, an authority is determined for each data type: where the customer record is created, which field flows in which direction, and which one wins in a conflict. That rule sits in the written scope. In an integration built without the rule being written down, the two lists can drift apart over time; talking about it beforehand is the cheapest part of the job.
Does it replace Odoo?
No, and we do not recommend that it should. Odoo stays on the accounting, stock, order and official document side; Rapitek CRM takes the pre-sales process: the lead, the meeting history, quote revisions, messaging and sales reporting. The job of the integration is to connect these two sides with a defined flow.
Will our stock stay in sync with the CRM?
We do not promise real-time stock synchronisation. The authority for the stock record stays in Odoo; the scope of the stock data to be carried over to the CRM side, its frequency and which fields it will include are defined during discovery. We wrote the reason, and what can be done instead, in the limits section of the integrations page.
Can we issue an e-invoice from the CRM?
No. Rapitek CRM does not issue e-Invoice or e-Archive documents and is not a GİB private integrator; fields such as ETTN or GİB status do not exist in the product. Your invoices continue to be issued under your current arrangement; the invoice number, date and amount can be carried onto the customer card as fields.
Will synchronisation be real-time?
It depends on the method, and we do not give a “real-time” promise up front. API- and webhook-based flows can run close to the event; import/export is periodic. Which flow runs at which frequency sits line by line in the written scope.
What does the Odoo integration cost?
We do not write a figure on this page, because the cost depends on the scope: which objects flow, in which direction and at what frequency, how deep the customisation goes, and who writes the connection. If your own partner writes the connection, the work item on our side gets smaller. After discovery we share the scope and the cost in writing.
How long does setup take?
We do not commit to a duration before discovery. After the discovery call we give you a date, not a range: the dates of the discovery, configuration, data migration, training and go-live steps sit in the written plan. An import/export-based start can be set up within that plan; the scope and the date of the API-based flow are clarified in the same plan.
Where is our data held?
In the European Union: the database in Helsinki (Finland), the files you upload in Frankfurt, the database backups in Falkenstein (Germany). We do not have a single component in Türkiye and we do not offer a region selection. This is a transfer abroad within the scope of KVKK art. 9; we establish its legal basis together during the contract process. Your CRM data is held in a separate database belonging to you.

Let's clarify your Odoo flow in 30 minutes

Invite the team that set up your Odoo to the call as well; let's decide together which system will be the authority for which data, and who will write the connection.

The scope of the setup, and its cost if there is one, are worked out in the discovery call and shared in writing.

Made with RapitekGO

We would like to use optional cookies to measure your visit. The site works exactly the same if you decline. Cookie policy