HubSpot + Sage 100 integration
Sage 100 runs on a Windows server, and its documentation offers no REST API. How its data still reaches HubSpot, what can write back, and the hours.
Connects by SQL , iPaaSScope this integration Book a scoping call Estimate the cost
- Into HubSpot
Is there an official Sage 100 + HubSpot integration?
Not from HubSpot or Sage. Commercient lists Sage 100 SYNC, Data Lake, AI, MCP by Commercient in the HubSpot App Marketplace as of September 2026, and it is a third-party listing. The route we recommend is a custom integration built around a small agent beside Sage 100 that reads changed rows through ODBC or SQL, at 70 to 150 build hours; writing orders back goes through the Business Object Interface and adds a phase.
- Recommended route
- Custom integration
- Build effort
- 70 to 150 hours
- In the HubSpot App Marketplace?
- Yes, Sage 100 SYNC, Data Lake, AI, MCP by Commercient
- Typical elapsed time
- 4 to 8 weeks
Marketplace checked September 2026.
Why teams connect Sage 100 to HubSpot
Sage 100 still carries its MAS 90 name in places: the ODBC driver is the MAS 90 4.0 driver and the program folder is still called MAS90. Since the 2023 version Sage has sold it as a single product with three installation approaches, the ones formerly called Standard, Advanced and Premium: stand-alone or LAN on ProvideX, client and server on ProvideX, and client and server on Microsoft SQL Server. All three install on Windows, on a server the business runs itself or has a partner run.
What these businesses ask for is specific. Put order history and open balances on the HubSpot company, and stop sellers creating customers that the bookkeeper then keys into Sage 100 a second time, under a slightly different name.
The complication is access. Sage 100’s documentation offers no REST API. What Sage documents is three ways in: the ODBC driver, which reads the data files as tables; Visual Integrator, which imports and exports through jobs; and the Business Object Interface, a COM interface to Sage 100’s own programs. All three need something running beside Sage 100 on Windows, so every design starts with where that agent lives, who is allowed to install it and who keeps it running after go-live.
What syncs
Five tables carry it. AR_Customer becomes the HubSpot company, AR_CustomerContact the contacts, SO_SalesOrderHeader the deals, AR_InvoiceHistoryHeader a custom object for invoices, and CI_Item the products. The first build copies in one direction only: Sage 100 is the ledger, and a won deal that should become an order is a second phase.
Keys are composite, and the obvious one is wrong twice. A customer’s primary key is the AR division number plus the customer number, so the customer number alone can repeat across divisions. An invoice in history is keyed on the invoice number plus a header sequence number, so the invoice number alone is not a safe key either. We store the full key in a custom HubSpot property.
Change detection follows the same file layouts. Master and header tables such as AR_Customer, SO_SalesOrderHeader and CI_Item carry a last update date and time, while detail tables such as SO_SalesOrderDetail do not, so order lines are re-read with their header whenever it changes.
| | | Direction | Match key | Notes |
|---|---|---|---|---|
| AR_Customer | Company | Into HubSpot | AR division number plus customer number | The customer number alone can repeat across divisions, so both travel together. |
| AR_CustomerContact | Contact | Into HubSpot | Division, customer number and contact code, with email as the readable match | |
| SO_SalesOrderHeader | Deal | Into HubSpot | Sales order number | Order lines carry no update stamp, so they are re-read whenever the header changes. |
| AR_InvoiceHistoryHeader | Custom object | Into HubSpot | Invoice number plus header sequence number | |
| CI_Item | Product | Into HubSpot | Item code |
Architecture
A small agent installed beside Sage 100 does the reading, table by table, on a watermark for each. On the ProvideX editions the agent reads through the ODBC driver; on the SQL Server edition it reads the database with a read-only login. Each run selects rows whose update date and time are past the table’s watermark and posts them over outbound HTTPS to our sync service, so nothing opens an inbound port on the Sage 100 server.
The service upserts into HubSpot in batches keyed on the composite keys, then links deals and invoices to their companies in a second pass. The service, not the agent, keeps each table’s watermark, so a reinstalled agent starts where the last run ended, and a replay re-reads one table over a date range.
A write back, when it comes, goes through the Business Object Interface on the same server. The agent creates a session, sets the company and logs on as a Sage 100 user with a narrow role, then writes the order through SO_SalesOrder_bus, the business object Sage lists for its sales order table.
What the API allows
- API style
- SQL database
- Authentication
- Database credentials
- Webhooks
- Unknown
- Changed-since filter
- Partial
- Sandbox
- Yes
- Rate limit
- Not documented
Developer documentation help-sage100.na.sage.com
Three ways to connect
On Sage 100 the edition and the server decide more than the object list. Every route puts software inside your network to reach the ODBC driver or the database, and the real question is whose software that is.
A custom integration puts our agent there, reads the composite keys correctly, and is the only route here that can write back through the Business Object Interface. Managed sync on Skyvia puts Skyvia’s agent there instead: it connects to on-premises SQL Server databases and to ODBC sources, so it can copy customers, orders and invoices one way on a schedule, as the Skyvia page describes. Commercient’s Sage 100 app is the packaged third route, run and supported by Commercient.
Sage X3 shares the name and little else: it has a web API and a different design, set out on the Sage X3 page.
-
Custom integration
RecommendedA custom integration runs a small agent beside Sage 100 that reads changed rows through ODBC or SQL, keys every record on Sage 100's composite keys, and is the only route that can write back through the Business Object Interface.
-
Managed sync on Skyvia
PossibleSkyvia's agent connects to on-premises SQL Server databases and to ODBC sources, so managed sync on Skyvia can copy customers, orders and invoices into HubSpot on a schedule. It writes nothing back, and the composite keys have to be built into its mapping.
-
Marketplace app
PossibleCommercient publishes the Sage 100 listing as a third-party sync, and its developer keeps the mapping and the support. It can serve a routine account and order copy where nobody on your side wants to run anything.
What breaks and how we prevent it
Composite keys read as one column
A sync keyed on the customer number merges two customers the day a second division reuses a number, and one keyed on the invoice number overwrites an invoice that shares it. We key on division and customer number, and on invoice number and header sequence, from the first run.
Order lines with no update stamp
SO_SalesOrderDetail has no last update date or time, so a changed line is invisible to a watermark on the lines themselves. The agent re-reads every line of an order whose header changed, and a nightly pass compares the line sets of all open orders, so a line edit that left the header untouched, or a removed line, still reaches HubSpot.
Deleted orders that leave no row
An update stamp cannot show a row that has gone. Sage 100 keeps deleted orders only when history retention and deleted-order retention are both switched on. We check those options in discovery and reconcile open order numbers nightly, closing any deal whose order has disappeared.
The yearly parallel upgrade
Version 2026 installs to a new location beside the old one and runs 64-bit only. An agent still pointed at the old data source keeps reading an installation nobody updates, without an error. The upgrade checklist repoints the agent, and a full read in a copied company proves it before production switches.
Our approach
- Scope. We confirm the edition and version, who looks after the server, which divisions exist and whether sales order history and deleted orders are retained.
- Architect. We fix the tables, the composite keys, the watermark per table and where the agent runs, and decide whether a write back belongs in phase two.
- Build. The agent and service are built against a copied company, which carries real customer data and is secured like production, with a HubSpot sandbox and a portal allowlist.
- Validate. We compare customer counts and the open order book with a Sage 100 report and settle every difference with the bookkeeper.
- Operate. We watch each table’s run history, keep replay available, and repoint and retest the agent at every yearly upgrade.
Common questions
Is there a Sage 100 app in the HubSpot App Marketplace?
A third-party one. As of September 2026 Commercient lists Sage 100 SYNC, Data Lake, AI, MCP by Commercient, with about 30 installs in the marketplace's own count, beside a separate app for Sage 100 France. Neither HubSpot nor Sage publishes a Sage 100 app, and this page covers the North American product in Sage's Sage 100 help.
Can HubSpot read Sage 100 data without an API?
Yes, through its tables. On the ProvideX editions the Sage 100 ODBC driver, registered as the SOTAMAS90 data source, reads each data file as a table, which is also how Crystal Reports reads Sage 100. On the SQL Server edition the data sits in a SQL Server database. Either way a small agent inside your network reads it and sends changed rows out.
How does a Sage 100 integration write an order back?
Through the Business Object Interface, which comes with every Sage 100 activation and gives a program Sage 100's own business objects over COM. The agent logs on as a Sage 100 user and enters the order through SO_SalesOrder_bus. Sage supports the interface only for developers certified on its course, and it does not debug programs its own developers did not write.
How fresh is Sage 100 data in HubSpot?
As fresh as the agent's schedule, because the agent polls: Sage 100's documentation describes no event it could subscribe to. Each run reads rows whose last update date and time are past the table's watermark, so a run moves only what changed and can be frequent. We agree the interval in discovery against the load the server can take in working hours.
What happens to a Sage 100 integration at the yearly upgrade?
It needs a planned step. Sage 100 2026 installs to a new location beside the old version and runs 64-bit only, and Sage supports only the current version and the two before it. The agent's data source and paths must move with the upgrade, so we repoint it against a copied company, rerun a full read and compare counts before production switches.
How does a Sage 100 sync notice a deleted sales order?
Not from update stamps, which cannot show a row that has gone. Sage 100 keeps sales order history only when its Retain Sales Orders/Quote History option is on, and keeps deleted orders only when that is set as well. We check both in discovery, and we reconcile open order numbers nightly so a deal whose order disappeared is closed.
What does a Sage 100 and HubSpot integration take in hours?
Expect 10 to 20 hours of discovery and 70 to 150 hours of build for five tables with watermarks, replay and reconciliation, including the agent. Discovery covers the edition, where the server runs, which divisions exist and whether history is retained. A write back through the Business Object Interface is scoped as its own phase.
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 Sage 100 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
- Installation Overview help-sage100.na.sage.com
- Installing Sage 100 Standard help-sage100.na.sage.com
- Sage 100 Supported Versions us-kb.sage.com
- Sage 100 File Layouts and Object Reference help-sage100.na.sage.com
- AR_Customer help-sage100.na.sage.com
- AR_CustomerContact help-sage100.na.sage.com
- SO_SalesOrderHeader help-sage100.na.sage.com
- SO_SalesOrderDetail help-sage100.na.sage.com
- AR_InvoiceHistoryHeader help-sage100.na.sage.com
- SY_Session help-sage100.na.sage.com
- Business Objects Interface FAQs help-sage100.na.sage.com
- Crystal Reports FAQs help-sage100.na.sage.com
- Configuring the Client/Server ODBC Driver help-sage100.na.sage.com
- Export data using internal applications or external ODBC compliant programs us-kb.sage.com
- Create an Import Job help-sage100.na.sage.com
- Retain or Create Sales Order/Quote History help-sage100.na.sage.com
- Copy a Company help-sage100.na.sage.com
- Agent Connections docs.skyvia.com