> This is a page from the ElevenLabs documentation. For an index of the documentation, fetch https://elevenlabs.io/docs/llms.txt.

# Odoo

Your receptionist can check whether a caller is already one of your Odoo contacts and add new callers to Odoo CRM as leads, with what they need, so your sales team can follow up. There are two ways to connect:

* **[Webhook tools](#option-1-webhook-tools-recommended)** call Odoo's JSON-2 API directly, with no Zapier account and no Zapier task usage. They need Odoo 19 or later, Community or Enterprise, hosted on odoo.com, on Odoo.sh, or on your own server.
* **[Zapier](#option-2-zapier)** works with older Odoo versions too, but each action uses tasks from your Zapier plan, and it can't search a self-hosted database.

Use webhook tools if your database runs Odoo 19 or later. Odoo's older API, JSON-RPC, takes each method's arguments as one mixed list of values, which webhook tools can't build, so on older versions use Zapier.

> **Note**
>
> Odoo only allows outside apps to access your data on its **Custom** plan. If your database is
> hosted by Odoo on the One App Free or Standard plan, check your plan before you start.

## Option 1: Webhook tools (recommended)

### Check your Odoo version

Your Odoo version is shown at the bottom of the **Settings** page. Webhook tools need version 19 or later. For a self-hosted database, the server must be reachable from the internet over HTTPS.

### Create a user for Reception.ai

In **Settings** → **Users & Companies** → **Users**, create an internal user for Reception.ai. Give it **Sales**: **User: All Documents** access and no access to other apps, so the API key can only do what the tools need. **User: All Documents** lets it assign new leads to the salesperson you choose.

### Create an API key

API keys for users who aren't administrators last three months at most. To get a key that lasts a year:

1. As an administrator, turn on developer mode, then go to **Settings** → **Users & Companies** → **Groups**.
2. Create a group named, for example, `Reception.ai API key`, set **API Keys maximum duration days** to `365`, and add the Reception.ai user to it.

Then sign in as the Reception.ai user, open **Preferences** → **Account Security**, and select **New API Key**. Name it, for example `Reception.ai`, choose the longest duration offered, and copy the key right away: Odoo only shows it once. Note the expiry date, and replace the key before then.

> **Warning**
>
> The API key can do anything the Reception.ai user can do. Keep it out of shared documents, and
> delete it in Odoo if it leaks.

### Find the salesperson and sales team IDs

Open the salesperson's user in **Settings** → **Users & Companies** → **Users**. The number at the end of the page address is the user ID. Do the same for the sales team in **CRM** → **Configuration** → **Sales Teams**.

### Create the webhook tools

For each [tool below](#find-the-caller), go to **Integrations**, select **Add integration**, and choose **Webhook Tool**. Replace `YOUR_ODOO_ADDRESS` with your database's address, for example `mycompany.odoo.com`.

Every tool sends the same request headers:

* `Authorization` (Secret): `Bearer ` followed by your API key
* `X-Odoo-Database` (Value): your database name. Only needed if your own server hosts more than one database.

### Find the caller

| Field                | Value                                                                                                                                                                          |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Name**             | `find_odoo_contact`                                                                                                                                                            |
| **Description**      | "Find the caller among our contacts by their email address, or their full name if they have no email. Use it before adding a lead."                                            |
| **Method**           | POST                                                                                                                                                                           |
| **URL**              | `https://YOUR_ODOO_ADDRESS/json/2/res.partner/name_search`                                                                                                                     |
| **Request Headers**  | `Authorization` (Secret): `Bearer ` followed by your API key  `X-Odoo-Database` (Value): your database name, only if needed                                                    |
| **Body Parameters**  | `name` (string, required): "The caller's email address, or their full name as they spell it."  `operator` (string, fixed value): `=ilike`  `limit` (integer, fixed value): `5` |
| **Assign to agents** | **Receptionist**                                                                                                                                                               |

The `=ilike` operator matches the whole name or email address, ignoring capitals, so a search for "Jane" doesn't list every Jane. Odoo returns only the ID and name of each match. Odoo's contact search doesn't cover phone numbers, so your receptionist must ask for an email address or name.

### Add the caller as a lead

| Field                | Value                                                                                                                       |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Name**             | `create_odoo_lead`                                                                                                          |
| **Description**      | "Add the caller to our CRM as a lead when they want a quote or a callback."                                                 |
| **Method**           | POST                                                                                                                        |
| **URL**              | `https://YOUR_ODOO_ADDRESS/json/2/crm.lead/create`                                                                          |
| **Request Headers**  | `Authorization` (Secret): `Bearer ` followed by your API key  `X-Odoo-Database` (Value): your database name, only if needed |
| **Body Parameters**  | `vals_list` (object, required), with the fields below                                                                       |
| **Assign to agents** | **Receptionist**                                                                                                            |

Odoo expects the new lead's fields inside a `vals_list` object. Select **Add field** on `vals_list` for each of these:

* `name` (string, required, from the conversation): "The lead's title, for example: Kitchen quote - Jane Doe."
* `contact_name` (string, required, from the conversation): "The caller's full name."
* `email_from` (string, from the conversation): "The caller's email address, if they gave it."
* `phone` (string, required, from the conversation): "The caller's phone number in international format, for example +14155550123."
* `description` (string, required, from the conversation): "What the caller needs, in a few sentences."
* `user_id` (integer, fixed value): the salesperson's user ID
* `team_id` (integer, fixed value): the sales team's ID

The salesperson and team are fixed values, so every lead goes to them even if the AI sends other IDs. Leave out fields such as expected revenue, so your receptionist doesn't guess at amounts.

Select **Enable** on each tool, then [test your receptionist](/docs/reception-ai/receptionist/testing) as an existing contact who gives their email address, then as a new caller who asks for a quote. The new lead appears in your Odoo CRM pipeline.

## Option 2: Zapier

### Connect Zapier

If you haven't yet, connect [Zapier](/docs/reception-ai/integrations/zapier) in Reception.ai.

### Add the Odoo actions

In your Zapier MCP server at [mcp.zapier.com](https://mcp.zapier.com), add the [actions below](#zapier-actions) from the **Odoo CRM** app and sign in to Odoo when Zapier asks. For each field, either set a fixed value or let the AI fill it in, as listed.

The **Odoo CRM** app works with databases hosted on odoo.com. For a self-hosted database, see [Limitations](#limitations).

The actions can do anything the Odoo user you sign in as can do. Consider a dedicated user with access only to CRM and contacts.

### Assign the tools

In Reception.ai, open the Zapier integration's **Tools** tab, select **Refresh tools**, and assign each action to the **Client** (receptionist).

### Test it

[Test your receptionist](/docs/reception-ai/receptionist/testing) as an existing contact who gives their email address, then as a new caller who asks for a quote. The new lead appears in your Odoo CRM pipeline.

### Zapier actions

#### Find the caller

| Field                  | Value                                                                 |
| ---------------------- | --------------------------------------------------------------------- |
| **Zapier action**      | **Find Contact**                                                      |
| **Set in Zapier**      | Nothing.                                                              |
| **Let the AI fill in** | The caller's email address, or their full name if they have no email. |
| **Assign to**          | **Client**                                                            |

Odoo's Zapier app finds contacts by name or email address, not by phone number, so your receptionist must ask for one of them.

#### Add the caller as a lead

| Field                  | Value                                                                                                                                                |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Zapier action**      | **Create Lead**                                                                                                                                      |
| **Set in Zapier**      | The salesperson and sales team new leads go to, if your account shows those fields.                                                                  |
| **Let the AI fill in** | The lead's title (for example, "Kitchen quote - Jane Doe"), the contact's name, email, and phone number, and a description of what the caller needs. |
| **Assign to**          | **Client**                                                                                                                                           |

Leave fields such as expected revenue empty, so your receptionist doesn't guess at amounts.

> **Tip**
>
> Whichever option you use, add a [procedure](/docs/reception-ai/receptionist/rules-and-procedures)
> so your receptionist asks for the caller's email address and searches for them before it creates a
> lead.

> **Warning**
>
> The search can return contacts who aren't the caller, and **Find Contact** in Zapier returns
> whatever is saved on the contact. Add a
> [rule](/docs/reception-ai/receptionist/rules-and-procedures) telling your receptionist to never
> read a contact's details back to the caller, and to use them only to recognize the caller.

## Limitations

* Your receptionist can't look callers up by phone number. It needs their email address or exact name.
* The lead's description holds what the caller wanted. Zapier's **Odoo CRM** app has no action to add a note or log a call.
* With webhook tools, the API key expires. Replace it before its expiry date, or the tools stop working.
* With Zapier, a self-hosted Odoo database needs Zapier's **Odoo ERP Self Hosted** app instead. Its **Create Lead/Opportunity** action adds leads, but it has no search actions, so a returning caller can be added twice. Webhook tools can search a self-hosted database on Odoo 19 or later.
* Your receptionist can't check availability or book meetings in Odoo. Use Reception's own booking with [Google Calendar](/docs/reception-ai/integrations/google-calendar) instead.
* With Zapier, each action your receptionist runs uses tasks from your Zapier plan. Zapier currently counts two tasks per successful call; failed calls aren't counted. When the plan runs out, the actions stop until it resets.

## Troubleshooting

| Problem                                       | What to check                                                                                                                                                                                         |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 401 from Odoo                                 | The header must be `Authorization` with `Bearer `, a space, and the key. Check that the key hasn't expired or been deleted.                                                                           |
| 404 from Odoo                                 | Check the address, and that the URL ends in `/json/2/res.partner/name_search` or `/json/2/crm.lead/create`. Your database must run Odoo 19 or later, and CRM must be installed.                       |
| Odoo returns an access error                  | The Reception.ai user needs **Sales**: **User: All Documents** access.                                                                                                                                |
| Odoo can't find the database                  | Add the `X-Odoo-Database` header with your database name.                                                                                                                                             |
| An Odoo action doesn't appear in Reception.ai | Select **Refresh tools** on the Zapier integration after adding actions in Zapier.                                                                                                                    |
| An action shows **Changed** and isn't used    | You edited it in Zapier. Select **Update** in the **Tools** tab.                                                                                                                                      |
| Zapier can't connect to Odoo                  | Check that your Odoo plan allows outside apps, and that you use the right app for where your database is hosted.                                                                                      |
| Known callers aren't found                    | Check the email address spelling with the caller. Name searches need the name as saved in Odoo, and a contact that belongs to a company is saved as the company name, a comma, and the person's name. |
| Leads land with the wrong salesperson or team | Set the salesperson and sales team as fixed values, in the webhook tool or in Zapier.                                                                                                                 |