HubSpot + Sage X3 integration

Sage X3 keeps its data in folders served by the Syracuse web server. What its Web API can hand HubSpot, where SOAP still decides, and the build hours.

Connects by API

Scope this integration Book a scoping call Estimate the cost

Is there an official Sage X3 + HubSpot integration?

Not from HubSpot or Sage. As of September 2026 the HubSpot App Marketplace lists one app named for X3, Sage X3 SYNC, Data Lake, AI, MCP by Commercient, which is third-party. We recommend a custom API integration that reads the X3 Web API folder by folder on a schedule, at 70 to 150 build hours; writing back to a function X3 has not yet moved to its newer class model means a SOAP web service, which adds work.

Recommended route
Custom API integration
Build effort
70 to 150 hours
In the HubSpot App Marketplace?
Yes, Sage X3 SYNC, Data Lake, AI, MCP by Commercient
Typical elapsed time
4 to 8 weeks

Marketplace checked September 2026.

Why teams connect Sage X3 to HubSpot

Sage X3 is organized around folders. Each folder is a complete set of parameters, rules and data, stored on SQL Server or Oracle and served through the Syracuse web server, and one installation can hold several. It runs on a company’s own servers or as Sage X3 Online. Either way, the people who sell for an X3 business rarely have an X3 login.

What they want is ordinary: the open orders, the last invoice and the credit position on the HubSpot company before a call. Today they ask the office, which answers from an X3 inquiry screen or an exported report, and the answer arrives after the conversation it was needed for.

Two facts about X3 shape this project more than the object list. The first is where it runs, because X3 Online accepts only OAuth2 tokens, while an on-premises server also allows basic or certificate authentication. The second is how far each module has moved from X3’s classic screens to its newer classes and representations. Sage is upgrading the modules progressively, and whether a module has made that move decides whether the Web API or SOAP carries a write. Sage also ships Version 12 update releases twice a year, and the integration has to keep working through each one.

What syncs

Five objects carry it. Customers, read from the BPCUSTOMER representation, become HubSpot companies and their contacts HubSpot contacts. Sales orders arrive as deals, sales invoices as custom object records, and X3 products as HubSpot products.

Reads can all come through the Web API, because Sage X3 provides read-only representations on every resource, so a first build moves everything one way into HubSpot. A write back, usually a won deal creating a customer or an order, is a second phase, and it uses the Web API only where that module has been upgraded.

Keys are X3’s codes, not names: the customer code (BPCNUM), the order and invoice numbers and the product reference, each held in a custom HubSpot property together with the folder it came from. The folder matters because a test folder copied from production holds the same codes, and a key without it lets a test run overwrite live records.

Objects that sync between Sage X3 and HubSpot
Source object HubSpot object Direction Match key Notes
Customer (BPCUSTOMER) Company Into HubSpot Customer code (BPCNUM), held with the folder it came from A test folder copied from production holds the same codes, so the folder is part of the key.
Contact Contact Into HubSpot Email, with the X3 contact code as the tie breaker
Sales order Deal Into HubSpot Sales order number, held with the folder Orders are read only in HubSpot. X3 prices, ships and invoices them.
Sales invoice Custom object Into HubSpot Invoice number, associated to the customer and the order
Product Product Into HubSpot Product reference

Architecture

Sage documents no webhook subscription for X3, so the service polls, one representation at a time. It holds an OAuth2 bearer token for a user mapped to an X3 user with its own security profile, and every hour it queries each representation with the Web API’s query syntax: a GET on the class and representation, a where predicate to narrow it, and an orderBy on the key.

Paging follows the links X3 returns. Each page carries a $next link keyed on the last code read, and the service follows it rather than computing offsets.

Writes into HubSpot are batch upserts on the X3 code in a custom property, and orders and invoices are linked to their company in a second pass. The service tracks each representation with a watermark where it exposes an update date and a row hash where it does not, so a failed run picks up where it stopped. A replay re-reads one representation over a range of codes, and the same code range drives a reconciliation against an X3 inquiry.

A sync service reads each X3 folder's Web API representations every hour, following the next link on each page, and upserts into HubSpot on X3's codes before a separate association pass. A later write back runs through a SOAP web service published for the classic function it needs.

What the API allows

API style
REST
Authentication
OAuth 2.0
Webhooks
Unknown
Changed-since filter
Unknown
Sandbox
Yes
Rate limit
Not documented

Developer documentation online-help.sagex3.com

Three ways to connect

On X3 the choice turns on where the system runs and which modules you need to write to. For reading, a custom API integration on the Web API works on premises and on X3 Online alike, and it keeps the mapping, the keys and the run history in one service that can replay.

Commercient’s Sage X3 app is the packaged alternative, a third-party sync that suits a standard customer and order feed with nobody of yours on call.

We steer away from any general automation platform that reaches X3 through SOAP. X3 licenses SOAP traffic by data volume per period, and a platform that polls full records spends that allowance on rows that did not change. Sage 100, despite the shared brand, connects in a completely different way, which the Sage 100 page covers.

  • Marketplace app

    Possible

    Commercient's X3 listing is a third-party sync, and the mapping, support and roadmap sit with that developer. Worth a look when the need is a fixed customer and order mapping with no service of your own to run.

  • iPaaS

    Avoid

    A general automation platform that reaches X3 through SOAP spends the licensed SOAP data allowance on every poll, and past the grace band the service slows down and then stops answering.

What breaks and how we prevent it

Pages the server shortens

The Web API returns 20 records a page unless asked for more, and the server may cap a larger count to limit memory. Code that assumes it received what it asked for skips records. We follow the $next link until it is absent and never compute an offset.

Zero web service child processes

On an on-premises X3, SOAP needs at least one web service child process on the host, and the setting defaults to zero. Every SOAP call then fails with an HTTP 500 saying no web services are accepted. We check the setting in discovery and make a trivial call the first health check after any server change.

The licensed SOAP data allowance

SOAP calls count against a data volume the licence sets per day, month or year. Past the limit a grace band slows the service down, and past the grace band it stops answering. We keep SOAP for writes to classic functions only and log the volume each run uses.

Where clauses naming a missing property

On an X3 endpoint, a query whose where clause names an unknown property fails with an HTTP 500. With two update releases a year, we validate each representation’s properties when the service starts and rerun the reads in a test folder before every update.

Our approach

  1. Scope. We confirm where X3 runs, which folders are live, and which modules have moved to classes and representations, since that decides the write path.
  2. Architect. We fix the representations, the keys with their folder, the watermark per representation and the page size, and name any SOAP web service to publish.
  3. Build. We develop against a test folder copied from production and a HubSpot sandbox, and the service refuses any folder or portal outside its allowlist.
  4. Validate. Customer counts and open order totals per folder are checked against an X3 inquiry, and finance walks the differences with us.
  5. Operate. We watch each representation’s run history, keep replay available, and rerun the reads in the test folder before each update release.

Common questions

Is there a Sage X3 app in the HubSpot App Marketplace?

Only a third-party one. As of September 2026 Commercient lists Sage X3 SYNC, Data Lake, AI, MCP by Commercient, which the marketplace shows with five installs. The Sage app that HubSpot builds itself, in the same search, is for Sage Business Cloud Accounting rather than X3, so an X3 connection is either Commercient's sync or a build.

Should a Sage X3 integration use the Web API, SOAP or GraphQL?

For reading, the Web API, because Sage provides read-only representations on every resource. For writing, the Web API works only on modules already moved to classes and representations, and SOAP covers the classic functions. Sage's developer portal now recommends its GraphQL API for most new integrations and keeps adding nodes, so we check which ones your release carries.

How does a HubSpot integration authenticate to Sage X3 Online?

With OAuth2, the only method X3 Online accepts. The server allows the oauth2 and bearer modes, and calls run as a user configured for OAuth2 and mapped to an X3 user with a suitable security profile. An on-premises X3 can also use basic or certificate authentication, and Sage calls certificates the usual choice there.

Can Sage X3 return only the customers that changed since the last sync?

Sometimes. A Web API query accepts a where predicate on the representation's properties, and each result can carry creation and update metadata, but Sage does not document an update-date filter that works on every representation. We confirm it representation by representation in discovery, and where it is missing we read by key on a schedule and compare row hashes.

Why would Sage X3 SOAP web services stop answering?

Two reasons come up. On premises, the host needs at least one web service child process, the setting defaults to zero, and every call then fails with an HTTP 500. And SOAP traffic is licensed by data volume per day, month or year: past the limit, a grace band slows the service, and past the grace band it stops answering.

How do you test a Sage X3 integration without touching live data?

In a test folder. X3 creates every folder from a reference folder, and any folder can serve as the reference, so a copy of production gives the build real structure and codes. The service reaches it through its own endpoint, and a folder allowlist refuses any write that did not come from the folder it expects.

What does a Sage X3 and HubSpot integration take to build?

Allow 10 to 20 hours of discovery and 70 to 150 hours of build for five objects with watermarks, replay and reconciliation endpoints. Discovery settles where X3 runs, which folders are live, how authentication works there, and whether a write back needs a SOAP web service published, because that last point is where the estimate moves.

Partnerships and accreditations

  • HubSpot Elite Solutions Partner
  • HubSpot Custom Integration Accreditation
  • HubSpot CRM Data Migration Accreditation
  • HubSpot Solutions Architecture Design Accreditation

HubSpot accreditations

  • HubSpot Onboarding Accreditation
  • HubSpot Academy Accreditations

Industry specializations

  • HubSpot Healthcare Industry Specialist
  • HubSpot Financial Services Industry Specialist
  • HubSpot Manufacturing Industry Specialist
  • HubSpot Quote to Cash Capability

Partnerships

  • Anthropic Solutions Partner

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.

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 X3 integration

Send the systems, the direction and the record volume. We reply with a scope and an effort band within one business day.

  • Sage X3

Type any system and its version, such as Sage 300 or Sage 50. Press Enter or a comma after each one.

Add more detail (optional)

Optional. A sentence or two about the workflow is enough.

We use these answers to scope the work and for nothing else. Privacy policy.

Prefer to talk it through first? Book a technical scoping call

Talk to the people who build these

  • Nijat
  • Sean
  • Prash

Book a scoping call

Sources
  1. Web services integration online-help.sagex3.com
  2. SData web service for Query online-help.sagex3.com
  3. Api get query online-help.sagex3.com
  4. Oauth2 authentication for Web services online-help.sagex3.com
  5. SOAP Web services implementation online-help.sagex3.com
  6. Folders online-help.sagex3.com
  7. GraphQL API · Docs (latest) · X3 · Developer Portal developer.sage.com
  8. 2026 R1 (12.0.39) | Sage X3 online-help.sagex3.com
  9. Sage X3 Lifecycle Policy docs.sage.com