Skip to main content

How to Connect and Use Odoo in Alta Flows

Connect Odoo to Alta as a Flows action provider, then use the six available actions to manage contacts and CRM leads from any workflow.

Written by Katie Supporté

Summary

Alta ships with a native Odoo integration for Flows. Once connected, you can search, create, and update contacts (res.partner), create CRM leads (crm.lead), and post internal notes on either record type — all from any Alta workflow.

Who this is for: Alta users who run their CRM in Odoo and want to push contacts, leads, or notes into Odoo from an Alta workflow (e.g., when a prospect replies, books a meeting, or hits a goal).


Before you start

You'll need four pieces of information from your Odoo instance to connect:

  • Base URL — your Odoo instance URL (e.g., https://yourcompany.odoo.com).

  • Database Name — the Odoo database to authenticate against.

  • Email — the email of the Odoo user Alta will act as.

  • API Key — an API key generated for that Odoo user (Preferences → Account Security → New API Key in Odoo).

The user whose credentials you use should have permission to read and write res.partner and crm.lead records.

Note: Odoo is available in Alta as a Flows action provider only. It is not part of Alta's native bidirectional CRM sync layer (Salesforce, HubSpot, Pipedrive, Zoho, Dynamics 365) — so updates flow from Alta to Odoo through the actions below, not as a continuous mirror.


Step 1 — Connect Odoo to Alta

  1. In Alta, open Settings → Integrations.

  2. Find Odoo under Sales & CRM and click Connect.

  3. Fill in all four required fields: Base URL, Database Name, Email, and API Key.

  4. Save. The connection is now available for use in any Flow.


Step 2 — Add an Odoo action to a Flow

  1. Open the Flow you want to extend (or create a new one).

  2. Click the + on the step where Odoo should run.

  3. Select Odoo, then choose one of the six available actions below.

  4. Map the action's inputs to variables from earlier steps in the Flow.


The six available actions

1. Search Contact by Email

Looks up a contact in Odoo by exact email match.

  • Email (required) — the email address to search for.

Behavior: The search is case-insensitive and uses an exact-match comparison (no partial matches). It throws NotFoundError if no contact is found, and ValidationError if more than one contact has the same email — you'll need to resolve the duplicates in Odoo first.

2. Create Contact

Creates a new res.partner record.

  • Name (required) — full name of the contact.

  • Email, Phone, Street, City, Zip Code, Website — all optional.

3. Update Contact

Updates an existing res.partner by ID.

  • Contact ID (required) — the numeric Odoo partner ID.

  • Name, Email, Phone, Street, City, Zip Code, Website — provide only the fields you want to change. Empty fields are skipped, not blanked out.

Throws NotFoundError if the contact ID doesn't exist.

4. Create or Update Contact

Searches by email; if a contact exists, it's updated, otherwise a new one is created. Returns an action field of either "created" or "updated" so downstream steps can branch on the outcome.

  • Email (required) — used as both the search key and the email value when creating.

  • Name — required only when creating a new contact. If the contact already exists, name is optional.

  • Phone, Street, City, Zip Code, Website — optional.

If two or more Odoo contacts share the email, the action fails rather than guessing — clean up duplicates in Odoo before retrying.

5. Create Lead

Creates a new CRM opportunity (crm.lead).

  • Lead Title (required) — the title of the lead/opportunity.

  • Email — written to Odoo's email_from field.

  • Phone — optional.

  • Contact ID — optional Odoo partner ID to attach the lead to an existing contact.

  • Description — long-text body for the lead.

6. Add Note

Posts an internal note (mail thread message) on a contact or lead.

  • Record Type (required) — must be exactly res.partner (Contact) or crm.lead (Lead). Any other value is rejected with a ValidationError.

  • Record ID (required) — the Odoo ID of the contact or lead.

  • Note (required) — the note body. Long text supported.

Notes are posted as type comment with the mail.mt_note subtype, i.e., they appear as internal notes (not customer-facing messages) in Odoo's chatter.


Tips and common pitfalls

  • Email matching is exact. "Search Contact by Email" and "Create or Update Contact" both compare on lowercased, trimmed email. A trailing space or alternate casing in Odoo won't match — but unrelated wildcards (%, _) in the input are safely escaped.

  • Duplicate emails are a hard stop. If two contacts share an email, both lookup and upsert fail. This is intentional — Alta refuses to update the wrong record.

  • "Update Contact" is partial, not destructive. Only fields you supply are written. Leave a field blank to keep its existing value in Odoo.

  • "Create or Update Contact" requires Name only when creating. If you're not sure whether the contact exists, supply Name anyway — it's harmless on the update path.

  • Lead → Contact linking is by ID, not email. Use "Search Contact by Email" first if you only have an email, then pass the returned contactId to "Create Lead".

  • API Key, not password. Use an Odoo API key (generated in Preferences → Account Security in Odoo). User passwords are not supported.

  • Permissions matter. The Odoo user must have read/write access to res.partner and crm.lead, otherwise actions will fail with an authorization error from Odoo.


Related

Did this answer your question?