HubSpot + Dolibarr integration
Dolibarr is open-source ERP and CRM that small firms run on their own server or with a SaaS host. How its REST API and Webhook module reach HubSpot.
Connects by API , iPaaSScope this integration Book a scoping call Estimate the cost
Dolibarr HubSpot - Into HubSpot
- Two way
Is there an official Dolibarr + HubSpot integration?
No. Dolibarr has no app in the HubSpot App Marketplace as of September 2026, where a search for the name returns no results at all. The route we recommend is a custom API integration: Dolibarr's Webhook module posts business events to a queue, its REST API supplies the full records, and a nightly sweep catches anything the events missed, at 70 to 150 build hours.
- Recommended route
- Custom API integration
- Build effort
- 70 to 150 hours
- In the HubSpot App Marketplace?
- No listed app
- Typical elapsed time
- 4 to 8 weeks
Marketplace checked September 2026.
Why teams connect Dolibarr to HubSpot
Dolibarr is the open-source ERP and CRM that a freelancer, an association or a small company installs because it is free software that covers the job. It runs on the company’s own server or with a SaaS host, it handles proposals, sales orders, invoices and stock, and it keeps customers and prospects in one third party list. When the business adds HubSpot for marketing and a sales pipeline, the two start to disagree about who the customer is and what they have bought.
The ask is usually modest and specific. Sellers want to see whether a proposal was signed and whether the invoice behind it was paid, without logging in to the ERP. Marketing wants prospects entered in Dolibarr to reach HubSpot as contacts. Finance wants a deal marked won in HubSpot to turn into something it can bill, rather than an email asking someone to type it in again.
Dolibarr makes this more approachable than most ERPs. The REST API ships with it as a module, and so does a Webhook module that posts a JSON message when a business event fires. What it does not offer is a change timestamp that its own developers recommend relying on, and that gap shapes the design more than anything else on this page.
What syncs
Six objects cover what sellers and finance ask about. Third parties that are customers or prospects become HubSpot companies, and their contacts become HubSpot contacts. Commercial proposals become deals, because the proposal is the Dolibarr record that is signed or refused once. Sales orders and customer invoices land on custom objects associated to the deal and the company, and products and services become HubSpot products.
The third party list needs filtering on the way in. Dolibarr keeps customers, prospects and suppliers as third parties with different statuses, and the API’s list call takes a mode that asks for customers rather than suppliers. Loading the list unfiltered puts suppliers into a sales pipeline. Proposals carry their outcome in their own trigger codes, PROPAL_CLOSE_SIGNED and PROPAL_CLOSE_REFUSED, which is what closes the deal as won or lost.
Every record keys on its Dolibarr id, held in a custom HubSpot property. Names and customer codes are for people; the id is for the sync. Contacts key on email, with the Dolibarr contact id as the tie breaker. Everything moves into HubSpot except one write back: a closed won deal creating the third party and, where finance wants it, a draft order.
| | | Direction | Match key | Notes |
|---|---|---|---|---|
| Third party, customer or prospect | Company | Two way | Dolibarr third party id held in a custom HubSpot property | Customers, prospects and suppliers share one third party list, filtered by type. |
| Contact/address | Contact | Into HubSpot | Email, with the Dolibarr contact id as the tie breaker | |
| Commercial proposal | Deal | Into HubSpot | Proposal id, with the proposal reference shown to sellers | A signed or refused proposal closes the deal as won or lost. |
| Sales order | Custom object | Two way | Order id, associated to the proposal's deal | An order written from a closed won deal starts as a draft behind a review step. |
| Customer invoice | Custom object | Into HubSpot | Invoice id, associated to the third party's company | |
| Product or service | Product | Into HubSpot | Product id, with the product reference as the label |
Architecture
The shape is a webhook queue with a sweep behind it. The Webhook module posts a JSON message to our ingest endpoint for each trigger code we register, with third party, contact, proposal, order and invoice events among them. The endpoint acknowledges at once and queues the message. A consumer then reads the full record over the REST API with the integration user’s key, because the event is a prompt rather than a copy we trust, and upserts into HubSpot in batches keyed on the Dolibarr id, followed by an association pass.
The sweep exists because of what the documentation leaves out. Dolibarr’s wiki describes no retries for webhook messages, and its own development rules say not to rely on the modification stamp. So each night the sweep pages through every tracked list, compares ids and statuses with HubSpot and replays the difference. Where the multicompany module is on, every call names its entity and every stored key carries it.
What the API allows
- API style
- REST
- Authentication
- API key
- Webhooks
- Yes
- Changed-since filter
- Partial
- Sandbox
- Yes
- Rate limit
- Not documented
Developer documentation wiki.dolibarr.org
Three ways to connect
The deciding question is whether anything has to survive a missed event. A notification, such as posting a signed proposal into a sales channel, can ride on an iPaaS catching the Webhook module’s JSON, and it is a fair way to prove the value. A pipeline someone forecasts from needs the sweep, the keys and the replay, and that is a service with somewhere to keep state.
Hosting is the other question. On a self-hosted server, whoever runs it has to enable the REST API and Webhook modules and allow the calls in and out, and those are settings rather than code. With a SaaS host, we confirm before scoping that both modules are available on that host’s plan.
-
Custom API integration
RecommendedA service we build takes each Webhook module event as a prompt, reads the record in full over the REST API and sweeps nightly, which keeps HubSpot right even when an event goes missing.
-
iPaaS
PossibleAn iPaaS can catch the Webhook module's JSON and create a HubSpot record, which proves the value for one flow. Catching missed events needs a second, scheduled job, and every record it touches bills as a task.
-
Marketplace app
AvoidA HubSpot App Marketplace search for Dolibarr returns no results, so there is no app to install or to evaluate against a build.
What breaks and how we prevent it
A modification stamp meant for debugging
Dolibarr’s table conventions include a tms column that the database updates on every change, which looks like a watermark. Dolibarr’s own development rules say never to rely on it, call it mostly a debugging field, and warn that it drifts when the database and the PHP server disagree on time zone. We use events plus a nightly key comparison instead.
Orders created without their lines
Dolibarr’s documentation warns that creating an order and its lines in one call is not supported. We create the order, add each line through the order’s lines endpoint, then validate it, and a retry resumes at the step that failed rather than starting again.
Suppliers in the sales pipeline
Customers, prospects and suppliers are all third parties, told apart by status. We filter the list call by mode, as Dolibarr’s own example does to separate customers from suppliers, and tag each HubSpot company with its Dolibarr type, so a supplier never lands in a sales report.
Webhook messages with no documented retry
The Webhook module posts the trigger code and the whole object, and its wiki page says nothing about retries or signatures. The ingest endpoint only acknowledges and queues, the consumer re-reads the record before writing, and the target address carries a long random path that we rotate like a password.
Entities sharing one database
With the multicompany module, several companies share one Dolibarr database and each record belongs to an entity. We name the entity on every API call with the DOLAPIENTITY header and store it beside the id in HubSpot, so one company’s invoice never lands on another company’s record.
Our approach
- Scope. We find out where Dolibarr runs, which version and modules are enabled, whether multicompany is on, and which events matter to sellers and finance.
- Architect. We fix the trigger codes, the Dolibarr id keys, the third party filter, the queue and the nightly sweep, and write them down.
- Build. Ingest, queue, consumer and sweep are written against a test instance and a HubSpot sandbox, with a dedicated API user and a portal allowlist.
- Validate. We backfill each object, reconcile counts by type against Dolibarr’s lists, and replay a day of events twice to prove nothing duplicates.
- Operate. We watch the queue and the sweep, replace the API key on a schedule, and retest after each Dolibarr upgrade.
Common questions
Does Dolibarr have an app in the HubSpot App Marketplace?
No. A HubSpot App Marketplace search for Dolibarr in September 2026 returned no results at all, not even a loose match. Dolibarr's own add-on marketplace is a separate place, and anything bought there is a Dolibarr module rather than a HubSpot app. The dependable route is a custom API integration over the REST API module, which ships with Dolibarr and only needs switching on.
How does Dolibarr tell HubSpot that an invoice was paid?
Through its Webhook module. An administrator adds a target URL and picks trigger codes, and Dolibarr then posts a JSON message with the trigger code and the whole object each time one fires. BILL_PAYED is the event for a customer invoice marked paid. Our service treats the message as a prompt, re-reads the invoice over the REST API and updates HubSpot.
Does a Dolibarr integration need its own user?
Yes. Dolibarr's REST API documentation says to create a new user and generate or set its key for the API, which then travels in a DOLAPIKEY header on every call. With the multicompany module, a DOLAPIENTITY header picks the entity. A dedicated user can be switched off, or its key replaced, without locking out anyone who works in Dolibarr.
Can HubSpot create a sales order in Dolibarr?
Yes, in steps. Dolibarr's documentation warns that creating an order and its lines in one call is not supported, so the service creates the order, adds each line through the order's lines endpoint, then validates it. Each step is idempotent, and write backs wait in a review queue at first, because a half-written order costs more than a missing one.
What happens when a Dolibarr webhook never arrives?
The nightly sweep finds the gap. Dolibarr's wiki describes the Webhook module's message but says nothing about retries, so we assume some events will be lost. Each night the service pages through the third parties, proposals, orders and invoices it tracks, compares ids and statuses with HubSpot, and replays the difference, listing every record it touched.
Should a Dolibarr integration be built against a test copy?
Yes. The REST API explorer runs real calls, and Dolibarr's own documentation warns that the data really is modified in your database. We build against a test instance, either a copy of yours or a free dedicated instance from one of the providers on Dolibarr's online demo page, and switch the key and address at cutover.
How long does a Dolibarr and HubSpot integration take?
Plan on 10 to 20 hours of discovery and 70 to 150 hours of build for third parties, contacts, proposals, orders, invoices and products, with webhook ingest, a queue and a nightly sweep. Hosting shapes the estimate: a self-hosted Dolibarr has to accept API calls from outside and let webhook calls out, which is a conversation with whoever runs the server.
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 Dolibarr 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
- Module Web Services API REST (developer) wiki.dolibarr.org
- Module Webhook wiki.dolibarr.org
- Triggers system wiki.dolibarr.org
- Language and development rules wiki.dolibarr.org
- Dolibarr Open Source ERP and CRM - Web suite for business dolibarr.org
- Online demo of Dolibarr ERP CRM - Try your online business suite now dolibarr.org