HubSpot + SAP Business One integration
SAP Business One holds the business partner, the sales order and the invoice, usually on a server a hosting partner controls rather than you.
- Into HubSpot
Is there a native SAP Business One + HubSpot integration?
No. There is no HubSpot-built SAP Business One app. The HubSpot App Marketplace carries third-party connectors only as of September 2026, the first being SAP B1 SYNC from Commercient. The route that works is a service we build, reading the Service Layer where the host exposes it and taking a scheduled file export where it does not, at 70 to 150 build hours.
- Recommended route
- Custom middleware
- Build effort
- 70 to 150 hours
- In the HubSpot App Marketplace?
- Yes, SAP B1 SYNC by Commercient
- Typical elapsed time
- 4 to 8 weeks
Marketplace checked September 2026.
Why teams connect SAP Business One to HubSpot
Business One is the ERP that small manufacturers and distributors grow into and then never leave. It is usually installed rather than subscribed, it usually runs on a server managed by the SAP partner who sold it, and the person who understands it best often works for that partner rather than for you. All three of those facts shape this project more than the API does.
The business problem is ordinary. Sellers want to know what an account has ordered, what is still open and whether the last invoice was paid, without phoning the office. Operations wants the sales team to stop promising delivery dates that ignore what is actually on order. Neither group is going to get a Business One client licence, so the information has to move to where they already work.
What makes the project unusual is access. The Service Layer runs on the company’s own server on a port, and the hosting partner decides whether that port is reachable from outside. Sometimes the answer is yes and the project is a straightforward keyed sync. Often the answer is no, and no amount of architecture argument changes it. Scoping this system starts with one question asked of the right person: can we reach the Service Layer, and if not, what can you schedule instead. Every later decision follows from the answer.
What syncs
Five objects do the work. Business partners become HubSpot companies, the contact people hanging off each partner become HubSpot contacts, sales orders become deals, invoices land on a custom object and items become products.
Everything moves one way. Business One is the system of record for the customer and for every document in the chain, and a portal that can edit a posted invoice is a liability rather than a feature. Where a write back is genuinely needed, it belongs in a second phase with its own review step.
Keys come from the document, not the name. Business partners key on the partner code, orders and invoices on the document number, items on the item code. One extra rule matters here and catches people out: a Business One installation can hold more than one company database, and document numbering restarts in each one. The key is therefore the document number scoped by the company database, never the number alone, or two companies will overwrite each other’s orders.
| | | Direction | Match key | Notes |
|---|---|---|---|---|
| BusinessPartners | Company | Into HubSpot | Business partner code, held in a custom HubSpot property | The partner code is stable. The partner name is edited constantly. |
| Business partner contact people | Contact | Into HubSpot | Business partner code plus email | Business One hangs contact people off the partner, so they arrive with it. |
| Orders | Deal | Into HubSpot | Document number, scoped by the company database | |
| Invoices | Custom object | Into HubSpot | Document number, associated to the order | |
| Items | Product | Into HubSpot | Item code |
Architecture
Two shapes, chosen by what the host allows.
Where the Service Layer is reachable, a service authenticates with a Login call carrying the company database, a user name and a password. SAP documents no HTTP Basic header here. The call returns a session identifier and sets a session cookie, the session times out, and a Logout call ends it, so the service renews rather than assuming it survives. It then reads each entity set on a schedule and upserts into HubSpot as batches keyed on the document identifiers, followed by a separate association pass. State is a watermark per entity held by the service, so a restart resumes rather than reloads.
Where it is not reachable, the same service reads files instead. The host schedules an export to an SFTP drop, one file per object plus a manifest of row counts. The load service collects each file, hashes it so a repeated drop is ignored, validates the rows, quarantines the ones that fail with a readable reason, and runs the same batch upsert and association pass as the API route. The manifest is the reconciliation: rows loaded against rows exported, reported every run rather than checked when somebody complains.
What the API allows
- API style
- REST
- Authentication
- Session login
- Webhooks
- Partial
- Changed-since filter
- Partial
- Sandbox
- Unknown
- Rate limit
- Not documented
Developer documentation help.sap.com
Three ways to connect
The deciding factor is whether you can get an API route at all, and who has to agree to it, rather than budget or object count.
If the Service Layer is open, a service we build gives you the freshest data and the most control, and it is the only route that can write anything back later. If it is closed, a scheduled export feeding a load service gives you the same object model a day behind, and it needs nothing from the host except a job and a file drop.
The third route is a third-party connector from the marketplace. It suits a standard mapping and a team that wants nobody on call, at the cost of owning neither the runtime nor the roadmap. What we steer away from is a general purpose automation platform: it still needs the same firewall exception, and it bills per task once it has it.
-
Custom middleware
RecommendedA service we build is the only route that adapts to how the system is hosted: reading the Service Layer directly where the host exposes it, and loading a scheduled export from SFTP where the host will not.
-
Native app
PossibleThe marketplace listings are third-party connectors rather than a HubSpot-built app, so the runtime and the roadmap stay with that vendor. That suits a standard mapping and a team that wants nobody on call.
-
Automation platform
AvoidThe Service Layer usually sits behind the hosting partner's firewall, so a cloud automation platform needs a tunnel opened for it anyway, and then bills per task on top.
What breaks and how we prevent it
Cancelled orders that live forever
Deletions break on a file route. An export of current rows cannot say that an order was cancelled, so cancelled documents live forever in the portal. We insist on either a status column or a full key list beside the changed rows, and we reconcile keys every run.
Document numbers reused across companies
A Business One landscape with a second company reuses document numbers, and a key built on the number alone silently merges two customers’ orders. Scoping the key by company database costs nothing on day one and is expensive to retrofit.
Drift in the hosting partner’s export
The export itself is written by somebody at the hosting partner, and it drifts when a column is added or a report is changed. We hash each file, check its column list against the agreed shape, and fail the run loudly rather than loading nulls into good records.
Overlapping nightly exports
A nightly export that runs long overlaps the next one. We give each file a run identifier, refuse to process two runs at once, and let the later file wait rather than fight.
Our approach
- Scope. The first call includes whoever hosts the system. We establish the release, whether the Service Layer is reachable, how many company databases exist and what can be scheduled.
- Architect. We fix the object list, the keys, the delete signal and the file format, and write them down as a contract the hosting partner can implement.
- Build. The load service is written against sample exports and a test company, with a portal allowlist in place from the first commit.
- Validate. We reconcile counts and open order totals against a Business One report, then walk the differences with the operations lead.
- Operate. We watch every run against its manifest, keep the replay endpoint available, and re-agree the export whenever Business One is upgraded.
Common questions
Is there a HubSpot app for SAP Business One?
Not one built by HubSpot. The marketplace carries third-party connectors only, led by SAP B1 SYNC from Commercient and an ERP bridge from another vendor. Either can work for a standard mapping. Neither removes the question that decides this project, which is whether your host will expose the Service Layer at all.
What if our SAP Business One host will not open the Service Layer?
That is the common case and it is workable. The host schedules an export from the company database to a file drop, and our load service collects it, validates it and upserts into HubSpot. It costs you freshness, since the feed moves at the export schedule, and it costs nothing in API access you cannot get.
Does SAP Business One send webhooks when a document is added?
Only on recent releases. SAP added webhook support to the Service Layer in Business One 10.0 FP 2602, delivered by a separate messenger service that has to be running in the landscape. Most installations we meet are on an earlier feature pack, so the practical assumption at scoping time is that there are no events to subscribe to.
Which SAP Business One objects belong in HubSpot?
Business partners, their contact people, sales orders, invoices and items. That covers the questions sellers actually ask. Stock levels, general ledger entries and production orders rarely earn their place: they make the sync slower, the mapping longer and the portal noisier without changing a single conversation with a customer.
How does a file based SAP Business One feed handle a deleted record?
It has to be told. A flat export of current rows cannot express a deletion, so we ask for a full key list alongside the changed rows, or a status column that marks a document as cancelled. Without one of those, a cancelled order stays open in HubSpot forever, which is the single most common defect in a file based ERP feed.
Can HubSpot write a sales order back into SAP Business One?
Technically yes through the Service Layer, and we rarely recommend it on a first build. An order carries pricing, tax and stock consequences, and a sales tool is a poor place to originate one. Where a client insists, we gate it behind a review step and write a draft document rather than a posted one.
What does an SAP Business One integration take to scope?
Budget 10 to 20 hours of discovery and 70 to 150 hours of build. An unusual share of the effort sits outside the code: agreeing the export with the hosting partner, settling the file format and the delete signal, and confirming which company database is authoritative when more than one exists.
Also in ERP and accounting
Related reading
Partnerships and accreditations
HubSpot accreditations
Industry specializations
Partnerships
Scope a SAP Business One 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.
Where these facts come from
- About SAP Business One Service Layer help.sap.com
- Consuming SAP Business One Service Layer help.sap.com
- Login and Logout help.sap.com
- Webhooks help.sap.com
- Service Layer API Reference help.sap.com