Odoo n8n integrationAutomate Odoo with n8n.
Every Odoo record reachable from a workflow, without touching the API by hand. The Odoo n8n integration covers 20 operations across 4 resources: contacts, opportunities, activities and any custom model in your database. n8n ships no Odoo trigger, so a Schedule Trigger or another app starts the run.
Verified Trustpilot reviews · AI, automation & growth agency
What does the Odoo n8n integration actually cover?
The Odoo n8n integration is a single node, shipped with n8n, that reads and writes records in an Odoo database through its external API. It exposes 20 operations across 4 resources: Contact, Opportunity, Activity and Custom Resource, the last one pointing at any Odoo model you name. Authentication runs on one credential, created once and reusable in every workflow.
Three shapes of workflow come back often. The first one fills the CRM: a form entry, or a row added in Google Sheets, lands in Odoo through contact.create, then opportunity.create opens the deal attached to it.
The second one keeps the sales team moving. opportunity.getAll pulls the open deals every morning, a filter keeps the ones that went quiet, and activity.create schedules the follow up call on the record itself, with a short message posted to Slack. The reminder lives in Odoo, where the sales team already works.
The third one exports. contact.getAll with Return All walks every page of the API and pushes the result into Postgres or Airtable, which is the usual way to build a report the database does not offer natively. Published templates go further: one summarizes incoming emails and saves them as notes on a sales opportunity (template 2336), another imports product images from Google Drive (template 3181).
Custom Resource is the escape hatch inside the node. Name the Odoo model in Resource Name or ID, and the same create, read, update, delete and list verbs apply to it. Most of what the three named resources leave out is reachable that way.
Where it stops: there is no Odoo trigger node, so nothing inside the database starts a workflow on its own. A Schedule Trigger calling a listing operation, or the n8n Webhook node called by an automation on the Odoo side, is how a run begins. External API access also needs a Custom Odoo plan, since the One App Free and Standard plans keep it closed. And when an endpoint is not modelled by the node at all, the HTTP Request node calls it directly and reuses the same credential. If the platform choice itself is still open, the n8n review goes through it in detail.
How do you connect Odoo to n8n?
- 01
Pick the authentication method
The node accepts two credentials: API Key (Recommended) and Username & Password. Both ask for the same four values: Site URL, Username, Password or API key, and Database name. Check the Odoo plan before anything else, because access to the external API only exists on a Custom plan. The One App Free and Standard plans will refuse the connection whatever you type.
- 02
Generate the API key in Odoo
Open Your Profile, then Preferences, Account Security, Developer API Keys. Select New API Key, give it a Description such as n8n integration, then Generate Key. Copy the value straight away and paste it into Password or API key on the n8n side. The Username is the one displayed on the Change password screen in Odoo, not the name shown to colleagues.
- 03
Fill the credential and save it
Site URL takes the address of your Odoo server or site. Database name is the instance name, the one that tells Odoo which database to open when several share a server. Save it once from the Credentials menu, and every Odoo node in every workflow picks it from a dropdown. A credential is simply that stored login, kept apart from the workflows that use it.
What can the Odoo node do?
The Odoo node exposes 20 operations across 4 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
| Resource | Create | Get | Get Many | Update | Delete |
|---|---|---|---|---|---|
| Activity | ✓ | ✓ | ✓ | ✓ | ✓ |
| Contact | ✓ | ✓ | ✓ | ✓ | ✓ |
| Custom Resource | ✓ | ✓ | ✓ | ✓ | ✓ |
| Opportunity | ✓ | ✓ | ✓ | ✓ | ✓ |
Operations index
Activity
5 operationsCreate an activity
activity.createWhat you see in n8n
Notes & use cases
Schedules an activity on an existing Odoo record, the way a salesperson plans a call or a task from the record itself.
Key parameters
- Linked Document Model: the Odoo model the activity attaches to, picked from the list or given as an expression such as
{{ $json.model }}. - Linked Document: the record inside that model.
- Activity Type: the kind of activity to schedule, taken from the types defined in Odoo.
- Additional Fields: the mapper where the remaining fields of the activity are filled.
Delete an activity
activity.deleteWhat you see in n8n
Notes & use cases
Removes a planned activity. The record it was attached to stays untouched, only the scheduled task disappears.
Key parameters
- Activity: the activity to remove, selected from the list or passed as an expression, most often an id collected by an earlier listing step.
Get an activity
activity.getWhat you see in n8n
Notes & use cases
Reads a single activity and returns its fields, which is what a later branch needs before it decides anything.
Key parameters
- Activity: the one to retrieve.
- Fields to Include: under Options, keeps the response to the fields you name instead of the whole record.
Get many activities
activity.getAllWhat you see in n8n
Notes & use cases
Lists activities in batches, with filters that narrow the result to one model or one record.
Key parameters
- Return All: switched on, n8n walks every page of the API; switched off, Limit caps how many activities come back.
- Linked Document Model: in Filters, keeps only the activities attached to one model, for example
res.partner. - Linked Document ID: narrows further, down to a single record.
- Fields to Include: trims the fields returned.
Update an activity
activity.updateWhat you see in n8n
Notes & use cases
Changes an activity already in the schedule, instead of deleting it and creating a replacement.
Key parameters
- Activity: which one to modify.
- Fields to Update: the mapper listing the fields to overwrite; whatever is left out keeps its current value.
Contact
5 operationsCreate a contact
contact.createWhat you see in n8n
Notes & use cases
Adds a contact to Odoo and returns it, id included, so the next node can attach a deal or an activity to it.
Key parameters
- Fields to Send: required, the mapper where each Odoo field receives its value, typed by hand or taken from the incoming item with an expression like
{{ $json.email }}.
Delete a contact
contact.deleteWhat you see in n8n
Notes & use cases
Erases a contact from the database. Nothing on the n8n side brings it back, so the branch that calls this operation usually sits behind a condition.
Key parameters
- Contact: the record to erase, selected in the list or resolved from an expression.
Get a contact
contact.getWhat you see in n8n
Notes & use cases
Fetches one contact and hands its fields to the rest of the workflow.
Key parameters
- Contact: which record to read.
- Fields to Include: under Options, restricts the response to the fields you pick, which keeps a crowded contact record readable downstream.
Get many contacts
contact.getAllWhat you see in n8n
Notes & use cases
Returns contacts in bulk, filtered with the operator list Odoo itself uses.
Key parameters
- Return All: on, every page is collected; off, Limit stops the run at a fixed number of contacts.
- Field Name or ID, Operator and Value: the filter itself, with operators such as
like,inorchildOf. - Fields to Include: the fields you actually want in the output.
Update a contact
contact.updateWhat you see in n8n
Notes & use cases
Writes new values onto an existing contact, field by field, leaving the rest of the record as it was.
Key parameters
- Contact: the record to modify.
- Fields to Update: the mapper; only the fields listed there are overwritten.
Custom Resource
5 operationsCreate a record
custom.createWhat you see in n8n
Notes & use cases
Creates a row in any Odoo model, not only in the three resources the node exposes by name.
Key parameters
- Resource Name or ID: required, the Odoo model to operate on.
- Fields to Send: required, the values for that model, mapped one by one.
Delete a record
custom.deleteWhat you see in n8n
Notes & use cases
Deletes one row from the model you name. Two parameters, both required, because the node has to know the model before it can find the row inside it.
Key parameters
- Resource Name or ID: the model to operate on.
- Record: the row to delete.
Get a record
custom.getWhat you see in n8n
Notes & use cases
Reads one row from an arbitrary model and returns its fields.
Key parameters
- Resource Name or ID: the model to read from.
- Record: which row to retrieve.
- Fields to Include: here it is a comma separated list of field names, such as
name,email,phone, and not a picker.
Get many records
custom.getAllWhat you see in n8n
Notes & use cases
Lists rows from a model you name, which is where most reporting workflows on Odoo begin.
Key parameters
- Resource Name or ID: required, the model to read.
- Return All: on, n8n pages through the whole model; off, Limit caps the batch.
- Fields to Include: a comma separated list of field names.
Update a record
custom.updateWhat you see in n8n
Notes & use cases
Updates a row in any model. Same logic as the contact update, with the model chosen by hand.
Key parameters
- Resource Name or ID: the model.
- Record: the row to modify.
- Fields to Update: the mapper carrying the new values.
Opportunity
5 operationsCreate an opportunity
opportunity.createWhat you see in n8n
Notes & use cases
Opens a deal in the pipeline and returns it, ready to be linked to a contact or picked up by an activity.
Key parameters
- Fields to Send: required, the mapper carrying the fields of the deal, filled by hand or from the incoming item with an expression.
Delete an opportunity
opportunity.deleteWhat you see in n8n
Notes & use cases
Drops a deal from the pipeline for good. The operation takes a single parameter, which makes it easy to wire by mistake, so a condition in front of it is a reasonable habit.
Key parameters
- Opportunity: the deal to remove, chosen in the list or resolved from an expression such as
{{ $json.id }}, usually an id read by an earlier step rather than typed.
Get an opportunity
opportunity.getWhat you see in n8n
Notes & use cases
Pulls a single deal with its fields, so the workflow can branch on what it finds there.
Key parameters
- Opportunity: which deal to read.
- Fields to Include: under Options, limits the response to the fields you name.
Get many opportunities
opportunity.getAllWhat you see in n8n
Notes & use cases
Returns deals in batches, filtered with the same operator list as contacts.
Key parameters
- Return All: on, every page comes back; off, Limit fixes the size of the batch.
- Field Name or ID, Operator and Value: the filter, with
greaterThenornotEqualamong the operators available. - Fields to Include: the fields kept in the output.
Update an opportunity
opportunity.updateWhat you see in n8n
Notes & use cases
Moves a deal forward without touching the rest of the record.
Key parameters
- Opportunity: the deal to modify.
- Fields to Update: the fields to overwrite; everything else keeps the value it already had.
Need help automating Odoo with n8n?
A person reads every message.


