- Sources
- CRM
Odoo
Overview
Section titled “Overview”Signals reads leads, opportunities, sales orders and invoices from Odoo on a schedule and sends the fields you mapped on to your ad platforms.
Odoo runs CRM and invoicing in one suite, so a won opportunity usually becomes a sales order and then an invoice. Leads and Opportunities carry the contact details and the sales outcome; Sales Orders and Invoices carry the amount.
Supported destinations
Section titled “Supported destinations”Destinations supported by Odoo
| Category | Supported |
|---|---|
| Offline Conversions | |
| Lead Conversions | |
| Custom Audience |
Prerequisites
Section titled “Prerequisites”- A Odoo account holding the records you intend to sync, in the module you intend to read: Leads, Opportunities, Sales Orders or Invoices. The fields you intend to map must already exist.
- Administrator access to your Odoo database, on a plan that includes external API access. You need it to create the user Signals connects as and to grant that user read access to the modules and records you map.
- A single-select field on the module you sync holding each record’s stage, such as New, Contacted, Qualified, Won or Lost. Each value maps to a conversion event, so a record left on a stale stage reports the wrong one.
Authentication
Section titled “Authentication”In Studio, open Sources, find the CRM category, and click the Odoo tile. This connector authenticates with credentials you add manually. Enter the following, then continue.
| Field | Where to find it |
|---|---|
| Your Odoo URL | The address you use to reach Odoo. |
| Database | The database name for the instance, shown on the Odoo sign-in screen. |
| Username | The Odoo user you are connecting as. |
| Password | Set when that user was created. |
Odoo separates data by database, so the URL and the database name together decide which records are read. Confirm both before you connect, since one Odoo instance can host several databases.
Configuration
Section titled “Configuration”Instance Setup
Section titled “Instance Setup”Select the Integration Type based on where the data needs to be sent. The options are Offline Events, Audience, Meta CAPI CRM, Google Leads, TikTok Leads, Snapchat Leads and LinkedIn Leads. The choice decides which fields you are asked to map and which destinations the connection can feed, so settle it first. Then choose the Odoo module Signals reads from, one of Leads, Opportunities, Sales Orders or Invoices, and give the instance a name. Only modules the connection can see will appear in the list.
Field mapping
Section titled “Field mapping”Map your Odoo fields onto the schema Signals expects. Each field is a dropdown of your own fields, so nothing has to be renamed in the CRM. What you are asked to map depends on the integration type.
| Group | Fields |
|---|---|
| Configuration | Event name, event time, last modified date, lead lifecycle stage. |
| Personal information | Email, phone, first name, last name, city, state, country, postcode, gender, date of birth, Facebook click ID, Google click ID, OpenAI identifier, source URL. |
| Product | Total value, currency, product type, name, category, ID, brand, price, quantity, transaction ID, number of items. |
Test connection
Section titled “Test connection”Click Test Connection before finishing. It checks both that the credentials still work and that the mapped fields actually contain data, so a mapping pointed at an empty field fails here rather than silently later.
Manage instance
Section titled “Manage instance”One instance is configured for one module. To read another module, configure it on a new instance from the Manage existing instance table. To change an existing one, open it from the Manage existing instance table, click the edit option in the menu to the top right, update the fields and click Finish.
Data & identifiers
Section titled “Data & identifiers”Only the fields you map are read. Personal identifiers are normalized and SHA-256 hashed before they are sent to any destination.
Email, phone, name and location are what destinations match on. Value, currency and product fields describe the conversion rather than the person, so they do not affect match rates.
Best practices
Section titled “Best practices”- If you map a platform lead ID such as the Meta Lead ID, keep that field as text. A numeric field truncates long IDs, which is the most common cause of lead conversions never matching.
- Odoo Online, Odoo.sh and self-hosted instances all work, but a self-hosted instance has to be reachable from outside your network before the connection can be made.
- Ensure the module holds personal information such as email address and phone number. Destinations weight these highest, so records without them match at a much lower rate.
- Maintaining consistent formatting in Odoo helps match rates: email addresses in lowercase, phone numbers in E.164 format, and no trailing spaces.
Troubleshooting & FAQ
Section titled “Troubleshooting & FAQ”Match rates are low. Map more identifiers and fix formatting at source. A hash only matches if both sides normalized the value the same way.

