# Odoo integration

> Two-way sync of Odoo companies, contacts and CRM opportunities with your relations and quotes — on Odoo Online, Odoo.sh or self-hosted.

**Category:** CRM

## What is Odoo?

Odoo is a suite of business apps — CRM, sales, invoicing, inventory and more — available as Odoo Online, on Odoo.sh or self-hosted. Companies and their contacts are both partners (res.partner) in Odoo, and the CRM app tracks leads and opportunities.

## What syncs between Odoo and Transportial

- **Companies ↔ business relations** (Both ways): Odoo companies and Transportial business relations are kept in sync both ways. Before anything is created, Transportial looks for an existing match by VAT number, then Chamber of Commerce number, then website or e-mail domain, then name — so neither side ends up with duplicates.
- **Contacts ↔ contact persons** (Both ways): The contacts of an Odoo company are kept in step with the contact persons of the matching business relation.
- **Opportunities ↔ quotes** (Both ways): Each quote is a CRM opportunity on the company, and its stage follows the quote status through a stage mapping you can change. Won and lost use Odoo’s own won and lost actions. Optionally, marking an opportunity won or lost in Odoo accepts or declines the quote; this is off by default.
- **Transport orders and invoices → chatter notes** (To Odoo): Transport orders and sent invoices are posted as notes in the chatter of the Odoo company.

## How to connect Odoo

1. Check your Odoo plan: Odoo allows access through its external API only on the Custom plan.
2. In Odoo, create an API key under Preferences → Account Security. Odoo keys are valid for three months at most, so note when it needs renewing.
3. Add the Odoo integration in Transportial with your Odoo URL and the API key. For Odoo versions before 19, or a server that hosts several databases, also enter the database name and your login.
4. Check the defaults: sync direction per object, conflict policy (newest change wins), opportunity stage mapping, field mapping, whether unknown Odoo companies become relations (on) and which relation types are synced.

## Sync frequency and limits

- Odoo 19 and later are reached through the JSON-2 API, older versions through JSON-RPC.
- Transportial sends its own changes to Odoo and checks Odoo for changes every 15 minutes.
- Sync direction is set per object; when a record changed on both sides, the newest change wins by default.
- Changes Transportial wrote to Odoo are never imported again, so updates do not bounce back and forth.
- Opportunity amounts are in your Odoo company currency.

## Typical use case

A transport company runs sales in Odoo and planning in Transportial. Companies and contacts added in either system appear in the other, matched on VAT number so nothing is entered twice. Quotes from Transportial show up as opportunities in the Odoo pipeline, and each order and sent invoice is posted in the company’s chatter, where the whole sales team can see it.


## Frequently asked questions

### Does it work with self-hosted Odoo?

Yes. Odoo Online, Odoo.sh and self-hosted servers are supported. Odoo 19 and later use the JSON-2 API; for older versions, or a server with several databases, also enter the database name and login.

### Which Odoo plan do I need?

Odoo allows external API access only on its Custom plan, so that is the plan the integration needs.

### What happens when the Odoo API key expires?

Odoo API keys are valid for three months at most. After that Transportial can no longer reach Odoo, so create a new key under Preferences → Account Security and enter it on the integration.

### Can a won opportunity in Odoo accept the quote?

Yes, if you switch it on. By default the opportunity only follows the quote. With the option on, marking an opportunity won or lost in Odoo accepts or declines the quote in Transportial.


---
Canonical page: https://transportial.com/en/integration/odoo
