Skip to main content
iVentureTeam
Odoo API

n8n Odoo Integration Guide: Auth, Webhooks, 4 Workflows and Limits

n8n Odoo integration guide: JSON-2 vs the Odoo node, API keys, automation rule webhooks, 4 production workflows, error handling, costs and when to code.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
November 4, 202614 min read1 view
n8n Odoo Integration Guide: Auth, Webhooks, 4 Workflows and Limits cover

Most n8n and Odoo guides stop at "drag the Odoo node onto the canvas." They skip which API the node calls, why the first credential test fails, and why Odoo gives your webhook one second to answer. This guide covers those gaps with the patterns our Odoo integration services team uses.

It is written for operations leads, Odoo admins and developers running Odoo 17 to 20 who want automation around Odoo without a new module for every request. For the API basics, read our Odoo API and third-party integration guide first.

Which Odoo API should n8n use: the Odoo node or JSON-2?

n8n Odoo API options: Odoo node or JSON-2 API?

Use the n8n HTTP Request node with Odoo's JSON-2 API for new work, and keep the built-in Odoo node for quick reads on Odoo 17 or 18. The two options differ more than the canvas suggests.

We checked the n8n-nodes-base package (version 2.15.1) that ships the Odoo node. It posts JSON-RPC calls to `/jsonrpc`, logs in with `common.login`, and runs every operation through the legacy `object.execute` method. Odoo's external API documentation lists /xmlrpc, /xmlrpc/2 and /jsonrpc as deprecated.

Factorn8n Odoo nodeHTTP Request node with JSON-2
Endpoint/jsonrpc, service object, method execute/json/2/model/method, one URL per call
AuthUsername, password or API key, database nameAuthorization: bearer API key
Odoo versions17, 18, 19, 20 on a deprecated pathOdoo 19 and 20
Removal datecommon and object services end in Odoo 22 and Online 21.1Current API, no removal planned
ModelsContact, Opportunity, Note, any model as Custom ResourceAny model, any public method
Filters and contextBasic filters, no sort, no context keysFull domain, fields, limit, order and context
Best forQuick reads, Odoo 17 or 18Writes, business methods, anything that must survive upgrades

Because the node uses `execute` rather than `execute_kw`, it cannot pass keyword arguments, so no context values and no sort option, as an n8n community proposal from May 2026 points out. JSON-2 takes named arguments on one URL per method; our Odoo JSON-2 API migration guide shows the request format.

How do you authenticate n8n with Odoo?

Create a dedicated Odoo user for n8n, generate an API key under Account Security, and store it in an n8n credential, never in a workflow field. This order avoids the usual first-day failures.

  1. Confirm the plan. Odoo's docs state that API access is available only on Custom plans, which also covers Odoo.sh and on-premise. Standard and One App Free users will not see the Developer API Keys menu.
  2. Create a bot user. Grant only the rights the flows need, plus read access on technical models; an n8n community thread traced an "Access Denied" error while loading fields to missing read rights on ir.model.access.
  3. Generate the key. In Preferences, Account Security, New API Key, enter a description and a duration. The docs say a key can last at most three months, and Odoo shows it once.
  4. Enter the exact database name. A forum user whose self-hosted CRM rejected n8n with "Credentials are not valid" fixed it by typing the exact database name shown in developer mode.
  5. Pick the credential type. Use the Odoo credential for the Odoo node. For JSON-2, create a Header Auth credential named `Authorization` with the value `bearer `, and set a reminder to rotate it before it expires.

How do you trigger n8n from Odoo events, and the other way around?

Odoo automation rules send a webhook to n8n when a record is created, saved or changes a field, and Odoo's On webhook trigger receives calls from n8n. No polling is needed in either direction.

Odoo's automation rules documentation lists the trigger families: Values Updated, Timing Conditions, Custom (on create, on create and edit, on deletion) and External (on webhook). The Send Webhook Notification action posts the fields you tick as JSON to the URL you paste in.

Odoo's source code adds details the manual leaves out:

  • Payload shape: every webhook carries `_model`, `_id` and `_action`, plus the selected fields read with `load=None`, so many2one values arrive as plain IDs.
  • Timing: the POST runs after the database commit, so n8n never sees a rolled-back record.
  • Timeout: Odoo waits one second, logs a warning if nothing comes back, and never retries.
  • Consequence: set the n8n Webhook node to respond "Immediately" and do the heavy work afterwards.

For the inbound direction, Odoo's webhooks guide explains the On webhook trigger: Odoo generates a confidential URL, you can rotate the secret, and the Target Record expression reads the JSON payload. Turn on Log Calls while you test.

Workflow 1: web form to Odoo CRM lead without duplicates

A form submission hits an n8n Webhook node, n8n checks Odoo for an existing contact and open lead, then creates or updates the lead through JSON-2. Most teams build this first, and most build duplicates into it.

  1. Webhook or Form Trigger receives the submission from your website or form tool.
  2. Edit Fields lower-cases the email and splits the name.
  3. HTTP Request posts to `/json/2/res.partner/search_read` with a domain on `email`.
  4. HTTP Request posts to `/json/2/crm.lead/search_read` with a domain on `email_from`, so an open lead is reused.
  5. IF routes to create or update.
  6. HTTP Request posts to `/json/2/crm.lead/create` with `vals_list` holding `name`, `partner_id`, `email_from`, `phone` and `source_id`, or to `/json/2/crm.lead/write` with `ids` and `vals`.
  7. HTTP Request posts to `/json/2/mail.activity/create` to schedule the follow-up call.

Store the Odoo lead ID in the form tool or a sheet so later edits update rather than insert.

Workflow 2: confirmed sales order to Slack or WhatsApp

An automation rule on sale.order fires when the state becomes Sales Order, posts a webhook to n8n, and n8n sends a formatted message to Slack or WhatsApp. Odoo has no native Slack action, which is why this flow earns its place.

In Odoo, create a rule on Sales Order with the trigger "State is set to" Sales Order. Add a Send Webhook Notification action, tick `name`, `amount_total`, `partner_id`, `user_id` and `date_order`, and paste the n8n production webhook URL.

In n8n, the Webhook node responds immediately. An HTTP Request node then reads `/json/2/sale.order/read` with `ids: [_id]` for extra fields such as `order_line`, and a Slack node posts the summary. For WhatsApp, use n8n's WhatsApp Business Cloud node with an approved template.

Odoo's own Send WhatsApp action already covers template messages to customers, so use n8n for internal or conditional routing; our Odoo WhatsApp integration guide covers template approval.

Workflow 3: posted invoice to reporting tools and payment reminders

An automation rule on account.move fires when an invoice is posted, n8n pushes the data to the external tool, and a scheduled flow sends overdue reminders. This replaces the spreadsheet somebody updates every Friday.

Set the rule on Journal Entry with trigger "State is set to" Posted and a domain limiting `move_type` to Customer Invoice. Send `name`, `partner_id`, `amount_total`, `amount_residual` and `invoice_date_due`. In n8n, respond immediately, then read the partner's email from `/json/2/res.partner/read`.

  • Group reporting: append a row to Google Sheets or the parent company's consolidation tool, keyed on the Odoo invoice ID.
  • Reminders: a Schedule Trigger runs each morning, calls `/json/2/account.move/search_read` with `payment_state` not paid and `invoice_date_due` before today, and sends one email per customer.
  • Audit trail: after each reminder, post to `/json/2/account.move/message_post` with a short `body`, so the chatter shows what went out.

Keep the money logic in Odoo. n8n should never compute tax, change amounts or register payments; it reads and notifies.

Workflow 4: daily stock shortage digest

A Schedule Trigger reads Odoo's replenishment data each morning and sends one digest of products that need ordering to the buyer's channel. Odoo's reorder rules decide what to buy; n8n makes sure someone sees it.

The core call is `/json/2/stock.warehouse.orderpoint/search_read` with a domain `qty_to_order > 0` and fields `product_id`, `warehouse_id`, `qty_on_hand`, `qty_forecast` and `qty_to_order`. An Aggregate node turns the rows into one message, a Slack or email node sends it, and a sheet keeps the history.

An Odoo 17 user on the forum wanted a vendor to push stock changes into Odoo through a webhook automation; that inbound case uses the On webhook trigger with a Target Record that finds the product by default code. Our guide to Odoo reorder rules, safety stock and MRP alerts covers the Odoo side.

How do you handle errors, loops and duplicates in n8n Odoo workflows?

Build the error path before the happy path: an error workflow, retries on Odoo calls, idempotent writes and a guard against automation loops. These habits separate a demo from something finance will trust.

  • Error workflow: attach a workflow that starts with n8n's Error Trigger node and receives the execution ID, failing node and message. Route it to Slack with the Odoo record ID.
  • Retries: n8n nodes have a Retry On Fail setting with a tries count and a wait between tries. Use it on every HTTP Request node that hits Odoo.
  • Idempotent writes: search before create, and store the Odoo ID in the external system or in an external reference field on the Odoo model.
  • Loop guard: a rule "On Save" that webhooks n8n, which writes back to the same record, fires the rule again. A forum user hit this update loop between an automation rule and an RPC write. Limit the rule to specific fields under "When updating."
  • Secrets: keep the API key in n8n credentials, rotate it before the three-month expiry, and protect the n8n webhook URL with Header Auth so only Odoo can call it.

What does n8n cost for Odoo automation: self-hosted or cloud?

n8n pricing is per workflow execution, not per action, which keeps Odoo flows with several nodes predictable. The Odoo license is the larger line on most budgets.

OptionPrice (official pages, November 2026)What you getWatch for
n8n Cloud StarterEUR 20 a month billed annually2,500 executions, unlimited workflows5 minute execution limit
n8n Cloud ProEUR 50 a month billed annually10,000 executions40 minute execution limit
n8n Community editionFree, self-hostedFull workflow engine via DockerYou run server, backups, updates
ZapierFree 100 tasks a month; Professional from US$19.99 a monthWidest app catalogEach successful action is a task
MakeFree 1,000 credits a monthVisual scenariosEach module run uses a credit
Odoo Custom planUS$61.00 per user a month billed yearly (first year US$49.00); India Rs 1,350External API, Studio, multi-companyRequired for any API integration

An n8n execution is one run of the whole workflow, whatever its node count. Workflow 2 above is one execution; on Zapier it is at least two tasks, on Make three to five credits. Self-hosting suits Odoo.sh and on-premise customers who already run servers.

Build time is the real cost: an illustrative single flow with testing takes a consultant one to three days.

n8n vs Odoo automation rules vs Zapier or Make vs a custom module: which to use?

Use Odoo automation rules when the process stays inside Odoo, n8n when Odoo must talk to other systems, Zapier or Make when non-technical staff own the flow, and a custom module when the logic must live in Odoo and survive upgrades. The table shows the trade-offs.

CriterionOdoo automation rulesn8nZapier or MakeCustom Odoo module
Lives whereInside OdooOutside OdooOutside OdooInside Odoo
Odoo API neededNoYes, Custom planYes, Custom planNo
Other systemsWebhook, email, SMS, WhatsAppHundreds of nodes plus any HTTP APILargest catalogsAnything, in Python
Pricing unitIncludedPer execution, or free self-hostedPer task or creditDevelopment time
Best forField updates, approvals, notificationsMulti-step flows across apps, AI stepsSimple one-to-one syncsCore logic, high volume, packaged reuse

Three signals say a flow has outgrown n8n: it runs on every record of a busy model, it must be transactional with the Odoo write, or it changes how Odoo behaves. Then a module is safer, as our comparison of Odoo Studio vs custom development explains.

If the hard part is a decision rather than a data move, our guide to automating Odoo workflows with AI shows where an AI step fits.

Which industries get the most from an n8n and Odoo setup?

Industries with many outside touchpoints, such as eCommerce, distribution, services and manufacturing, gain the most from n8n around Odoo. The table lists where we see the fastest payback.

IndustryPain or cost driverOdoo approachHow iVentureTeam helps
eCommerce and retailOrders, tracking and reviews in five toolsOdoo as order and stock master, n8n syncs the restTrigger map, dedup rules, channel digests
Wholesale distributionShortages noticed when a customer callsReorder rules plus a daily n8n digestWorkflow 4, supplier webhooks
Professional servicesLeads from forms, LinkedIn and emailWorkflow 1 into CRM with activitiesLead routing, AI qualification steps
ManufacturingVendor shipment data never reaches OdooInbound On webhook trigger updates receiptsPayload design, Target Record code
Accounting firmsOverdue invoices chased by handWorkflow 3 reminders and group reportingReminder cadence, chatter logging

How iVentureTeam helps with n8n Odoo integration

Pricing an Odoo integration? Get a range first

iVentureTeam builds n8n and Odoo integrations end to end, from the automation rule in Odoo to the last node in n8n, and knows when to stop and write a module instead. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.

  • Trigger and ownership map: which system owns each record, which Odoo events fire webhooks, and which flows run on a schedule.
  • JSON-2 first: every new flow uses the current API, so the Odoo 22 removal of the old RPC services does not break it.
  • Self-hosted n8n setup: Docker, backups, Header Auth on webhooks and key rotation, through our AI workflow automation services.
  • AI steps where they pay: lead scoring, document reading and ticket triage inside the flow, through our AI and Odoo integration services.
  • Module when needed: when a flow must be transactional or packaged across versions, we move it into Odoo.

Want a number first? The free Odoo project estimate tool gives a cost and timeline range for integration work.

Odoo integration case study: AfterShip tracking inside Odoo Sales and Purchase

When a US eCommerce retailer needed shipment tracking for 686 couriers inside Odoo, the right answer was a module, not middleware. The project shows where the line between n8n and custom code sits.

Tracking numbers lived in emails and carrier portals, statuses in Odoo went stale once a parcel left the dock, and inbound purchase orders had no tracking at all. With couriers numbering in the hundreds, per-carrier integrations were never going to be maintainable.

iVentureTeam used AfterShip as the single tracking layer and wired Odoo to it in both directions. On delivery validation, Odoo creates the tracking entry in AfterShip, a custom Purchase extension records vendor tracking on the matching purchase order, and a scheduled action polls for checkpoints.

The sales-side module was packaged across Odoo 10, 11, 12 and 13, and delivery took 5 weeks. Customer service now answers delivery questions from the Odoo record instead of carrier sites. Read the AfterShip and Odoo tracking integration case study.

The bottom line on n8n Odoo integration

n8n is the right tool for Odoo flows that cross system boundaries, as long as you build them on JSON-2, trigger them from automation rules, and answer Odoo's webhook within a second. The built-in Odoo node is fine for a first read, but its JSON-RPC path is deprecated.

Start with one flow that has a clear owner and a measurable result, and add the error workflow on day one. When a flow runs on every record or needs to be transactional, move it into an Odoo module and let n8n keep doing what it does well.

Ready to connect n8n to your Odoo database?

Plan my n8n and Odoo flows

Get a trigger map and a build plan from a team that runs both n8n and Odoo in production. Plan your n8n and Odoo workflows with us, call +91-90235-15208, or email business@iventureteam.com.

Frequently Asked Questions

Does n8n have an Odoo integration?

+

Yes. n8n ships a built-in Odoo node for contacts, opportunities, notes and any custom model, with create, get, get many, update and delete. For writes and business methods, most teams use the HTTP Request node against Odoo's JSON-2 API instead.

Which Odoo plan do I need for n8n?

+

Odoo's documentation says the external API is available only on the Custom plan, which covers Odoo Online Custom, Odoo.sh and on-premise. One App Free and Standard users will not see the Developer API Keys menu, so neither the Odoo node nor JSON-2 will work.

Does the n8n Odoo node use XML-RPC or JSON-RPC?

+

The current node posts JSON-RPC calls to /jsonrpc using the legacy execute method. Odoo lists /xmlrpc, /xmlrpc/2 and /jsonrpc as deprecated, with the common and object services scheduled for removal in Odoo 22 and Odoo Online 21.1.

How do I trigger n8n when something changes in Odoo?

+

Create an automation rule on the model, choose a trigger such as a state change or On create, and add a Send Webhook Notification action with the n8n webhook URL. Odoo posts the selected fields plus _model and _id after the record is saved.

Why does my Odoo webhook to n8n time out?

+

Odoo waits one second for a response and then logs a warning without retrying. Set the n8n Webhook node to respond Immediately and do the Odoo reads and Slack or email steps afterwards, not before the response.

Can n8n create leads, orders and invoices in Odoo?

+

Yes. Post to /json/2/crm.lead/create, /json/2/sale.order/create or /json/2/account.move/create with named arguments. Create leads freely, but keep order confirmation and invoice posting inside Odoo so tax, stock and accounting rules still apply.

Is n8n better than Zapier for Odoo?

+

n8n charges per workflow execution and can be self-hosted for free, while Zapier counts every action as a task. For multi-step Odoo flows or when data must stay on your servers, n8n usually fits better. Zapier wins when non-technical staff own simple one-to-one syncs.

How much does n8n cost?

+

n8n Cloud Starter is EUR 20 a month billed annually with 2,500 executions, Pro is EUR 50 for 10,000, and the self-hosted Community edition is free. Add the Odoo Custom plan at US$61.00 per user a month billed yearly for API access.

When should I build a custom Odoo module instead of an n8n workflow?

+

When the logic must be transactional with the Odoo write, runs on every record of a busy model, changes Odoo behavior, or must be packaged across versions. Our AfterShip tracking project is a typical example of that choice.

Free integration feasibility review

Connecting your other systems to Odoo?

Tell us what needs to sync between your systems and Odoo. We recommend a connector, API or custom approach and plan how failures are handled.

Free, with no obligation. A senior consultant replies within 12 business hours.