HubSpot + Odoo integration
Odoo keeps CRM, sales orders, invoicing and stock in one database. What HubSpot's own Odoo app syncs, where it stops, and what a keyed build adds.
Connects by APIScope this integration Book a scoping call Estimate the cost
Odoo HubSpot - Into HubSpot
- Two way
Is there an official Odoo + HubSpot integration?
Yes. HubSpot publishes an Odoo app, listed in the HubSpot App Marketplace as of September 2026, that syncs companies, contacts, leads, opportunities, products and activities one way or both. It stops short of sales orders and invoices, so reaching those takes a custom API integration over Odoo's external API, which we scope at 70 to 150 build hours.
- Recommended route
- Custom API integration
- Build effort
- 70 to 150 hours
- In the HubSpot App Marketplace?
- Yes, Odoo by HubSpot
- Typical elapsed time
- 4 to 8 weeks
Marketplace checked September 2026.
Why teams connect Odoo to HubSpot
Odoo is a suite of business apps sharing one database, and a company that runs it for quoting, sales orders, invoicing and stock may well have its CRM app switched on too. The teams that reach us have chosen HubSpot for marketing and the sales pipeline and kept Odoo for everything after the order. That split holds until a seller needs to know what a customer has ordered, whether the last invoice was paid, or whether an item is in stock, and none of it is in the portal.
Two things make Odoo different from most ERPs we connect. It already has a CRM, with leads, opportunities and a pipeline, so the first decision is which system owns the pipeline rather than how to move data. Running opportunities in both is how a business ends up with two forecasts. And the edition and the plan decide what is possible. Odoo Community is open source, Odoo Enterprise is licensed, and Odoo Online runs the same software on Odoo’s own infrastructure. On Odoo’s hosted plans, the external API comes only with the Custom plan.
HubSpot publishes an Odoo app of its own, and for a team whose question stops at companies, contacts and the pipeline, it is the cheapest answer. The request that needs a build is the one that crosses into orders and invoices: show open sales orders on the company, flag the customer with an overdue invoice, create the Odoo customer when a deal closes.
What syncs
Five objects carry most of the value, as the table lists. Odoo keeps companies and people in one contact model, and its external API tells them apart with a company flag, so the load splits one Odoo model into HubSpot companies and HubSpot contacts. Sales orders become deals, customer invoices land on a custom object associated to the order, and products become HubSpot products.
Every record keys on its Odoo id, held in a custom HubSpot property. Names are the wrong key here for a specific reason: HubSpot’s own data sync matches companies on name or domain, and it will pair two records that share a name even when their domains differ. Contacts are the exception, where email is the practical key and the Odoo id breaks ties between people who share an address.
Direction follows ownership. Odoo owns the order, the invoice and the product, so those move one way and stay read only in the portal. HubSpot owns the pipeline. The one write back worth building early is a closed won deal creating or updating the Odoo customer, and we hold even that behind a review step for the first month.
| | | Direction | Match key | Notes |
|---|---|---|---|---|
| Contact, company type | Company | Two way | Odoo partner id held in a custom HubSpot property | Odoo keeps companies and people in one contact model, told apart by a company flag. |
| Contact, individual type | Contact | Into HubSpot | Email, with the Odoo partner id as the tie breaker | |
| Sales order | Deal | Into HubSpot | Odoo sales order id, with the order reference shown to sellers | Orders are read only in the portal. Odoo stays the system of record. |
| Customer invoice | Custom object | Into HubSpot | Odoo invoice id, associated to the sales order | |
| Product | Product | Into HubSpot | Odoo product id |
Architecture
The shape is a polling watermark sync. Odoo stamps a write_date on every record of a model that keeps access log fields, which is the default, so a service can ask each model for the records changed since its last run. It reads with search_read, which searches and reads in one call and one transaction, and it keeps a watermark per model so a restart resumes rather than reloads.
On Odoo 19 and later the service calls the JSON-2 API: a POST to /json/2/ with the model and method in the path and an API key sent as a bearer token. The key belongs to a dedicated bot user, so its access rights limit what the integration can touch. Earlier versions use the XML-RPC object service, which takes the database, user id and password on every call.
Writes into HubSpot are batch upserts keyed on the Odoo id, then a separate association pass, so a replay changes nothing. Where speed matters, an Odoo automation rule can send a webhook notification when a record changes, and the service treats it as a prompt to read early rather than as the data itself. A reconciliation endpoint compares counts per model and reports the difference instead of correcting it quietly.
What the API allows
- API style
- REST
- Authentication
- API key
- Webhooks
- Yes
- Changed-since filter
- Yes
- Sandbox
- Yes
- Rate limit
- Not documented
Developer documentation odoo.com
Three ways to connect
What decides the route is how far past the CRM records you need to go. HubSpot’s Odoo app syncs companies, contacts, leads, opportunities, products and activities, one way or both, with default field mappings and a filter on any Odoo field or HubSpot list. The app itself is free, though it needs an Odoo subscription, custom field mappings need Data Hub Starter or above, and it does not carry sales orders or invoices.
Once orders and invoices are in scope, the choice is a custom API integration or an iPaaS, and both need Odoo’s external API, which on the hosted plans means the Custom plan. Connectors sold as modules on the Odoo Apps Store are a further option only away from Odoo Online, which Odoo documents as incompatible with Apps Store modules, so they need Odoo.sh or your own server.
-
Custom API integration
RecommendedA keyed service over Odoo's external API is the route that carries sales orders and invoices, reads only what changed since its last run, and writes the Odoo id onto every HubSpot record it touches.
-
Marketplace app
PossibleHubSpot's own Odoo app syncs companies, contacts, leads, opportunities, products and activities with no service to host, which is enough for a team that only needs the CRM records to agree.
-
iPaaS
AvoidAn iPaaS needs the same external API access as a build, which Odoo's hosted plans include only on the Custom plan, and it then bills per task on every order and invoice it moves.
What breaks and how we prevent it
Archived partners that vanish from reads
Odoo lets a user archive a record instead of deleting it, and an archived record, one whose active field is false, is invisible in most searches. A watermark read that does not ask for archived records never sees the archive happen, so the HubSpot company stays live. We read with archived records included and carry the active flag across as a status.
API keys capped at three months
Odoo 19’s documentation says an API key cannot be created to last more than three months, so an integration that runs for a year needs at least four keys. We generate the next key programmatically before the old one lapses, move the service onto it, then revoke the old key, which is the rotation order Odoo recommends.
The XML-RPC deadline in Odoo 22
Odoo has scheduled the XML-RPC and JSON-RPC endpoints for removal in Odoo 22, in fall 2028, and deprecated the services behind them. An integration written against /xmlrpc/2 today has a known end date. We build on JSON-2 where the database runs Odoo 19 or later, and put the RPC calls behind one adapter where it does not, so the move is a single change.
Rolling upgrades on Odoo Online
A database on an Odoo Online minor version must upgrade a few weeks after the next version ships, and minor versions usually arrive every two months, so fields and methods can change under a running sync. Odoo sends a notice before a mandatory upgrade, and we run the contract tests against a duplicate database when it lands, well before the deadline.
Our approach
- Scope. We settle which system owns the pipeline, which Odoo edition, version and plan the database runs, and whether HubSpot’s own app already covers the need.
- Architect. We fix the models, the Odoo id keys, the watermark per model, the archived record rule and the association order, and write them down.
- Build. The service is written against a duplicate database and a HubSpot sandbox, with a dedicated bot user and a portal allowlist from the first commit.
- Validate. We run a full reload, reconcile counts per model against Odoo, and walk the differences with whoever owns the ledger.
- Operate. Cutover is a key swap. After that we rotate keys before they expire, watch the run history, and retest after every Odoo upgrade notice.
Common questions
Does HubSpot's Odoo app sync sales orders and invoices?
No. HubSpot lists the app's default mappings as companies, contacts, leads, opportunities, products and custom activities, with Odoo leads landing as HubSpot contacts and opportunities as deals. Sales orders and invoices are not among them. Custom field mappings need Data Hub Starter or above, and they change the fields on those objects rather than adding new objects to the sync.
Which Odoo plan does a HubSpot integration need?
On Odoo's hosted service, the Custom plan. Odoo's documentation says access to data through the external API is only available on Custom pricing plans, not on One App Free or Standard. That rule covers a custom API integration and any iPaaS connector alike, because both call Odoo from outside. Odoo.sh and your own server are Custom plan options too.
How quickly does an Odoo change reach HubSpot?
With HubSpot's own app, records sync within 10 minutes of a change once the initial sync has finished, and HubSpot warns that a first sync of millions of records can take several days. With a custom API integration, the service reads changes on a schedule, hourly in a typical build, and an Odoo automation rule can post a webhook to start a read sooner.
What happens to an Odoo integration built on XML-RPC?
It has an end date. Odoo's documentation schedules the /xmlrpc, /xmlrpc/2 and /jsonrpc endpoints for removal in Odoo 22, in fall 2028, and marks the services behind them deprecated. Odoo 19 introduced the JSON-2 API as the replacement, authenticated with an API key sent as a bearer token. We build new work on JSON-2 wherever the database runs Odoo 19 or later.
Can two Odoo customers merge into one HubSpot company?
With name matching, yes. HubSpot's data sync matches companies on name or domain, and it pairs two records that share a company name even when their domains differ, and branches of one business can share a name in Odoo. A custom API integration keys every company on the Odoo partner id held in a HubSpot property, so each Odoo customer keeps its own company.
Can we test an Odoo integration without touching live data?
Yes. On Odoo Online the database manager can duplicate a database, and its For testing purposes option, on by default, disables external actions such as emails, payments and delivery orders. Duplicates expire after 15 days, with at most five per database. We build against a duplicate and a HubSpot sandbox, then cut over by swapping the key.
How long does an Odoo and HubSpot integration take?
Budget 10 to 20 hours of discovery and 70 to 150 hours of build for four to six objects, with a watermark per model and replay and reconciliation endpoints. Discovery settles which system owns the pipeline, because Odoo ships its own CRM app, and whether the database runs a plan and version that allow the JSON-2 API.
Also in ERP and accounting
Related reading
Partnerships and accreditations
HubSpot accreditations
Industry specializations
Partnerships
Trust and compliance
We design integrations to support the security and privacy rules your business works under, and we build them on independently audited platforms.
-
SOC 2
We build to support SOC 2 security controls, on platforms that hold SOC 2 reports of their own.
-
ISO/IEC 27001:2022
We build to support your information security program under ISO/IEC 27001:2022.
-
HIPAA
We scope BAA needs in discovery, then design builds around them for covered entities and their business associates.
-
GDPR
We scope data-processing needs in discovery and design builds to support your GDPR duties.
About the GDPR at the European Commission (opens in a new tab)
-
PIPEDA
We design builds to support your accountability for personal information as it moves between systems.
-
CASL
We can build consent capture and sync that support your CASL consent records.
Our builds run on
How we build
- Sandbox first. We build and test in a sandbox before anything reaches production.
- Fail-closed allowlists. An integration runs only against the HubSpot accounts it is approved for.
- Least-privilege access. Each integration gets only the API scopes it needs.
- Secrets in a vault. Keys and tokens live in a secrets vault, never in plain text.
- Sensitive data scoped early. Discovery covers sensitive data, access controls and any BAA or data-processing needs.
- A compliance package for regulated industries: audit logging, field-level encryption and sensitive-data handling.
Scope a Odoo integration
Send the systems, the direction and the record volume. We reply with a scope and an effort band within one business day.
Thanks, we will reply within one business day
Prash or Sean reads every one of these and comes back with a scope, or with the one question we need answered first.
Sources
- External JSON-2 API odoo.com
- ORM API odoo.com
- Automation rules odoo.com
- Odoo Online odoo.com
- Upgrade odoo.com
- Odoo Pricing | Discover Odoo Plans odoo.com
- Odoo Enterprise vs Community | Odoo Editions Comparison odoo.com
- Connect and use HubSpot data sync knowledge.hubspot.com
- Understand your data sync field mappings knowledge.hubspot.com
- Odoo - ERP App for HubSpot | HubSpot ecosystem.hubspot.com