# Business Central HubSpot integration

*Business Central → HubSpot*

**In short:** A Business Central to HubSpot integration keeps your Dynamics 365 ERP and your CRM in agreement about the same customers. It syncs company and contact master data, pushes HubSpot closed-won deals into Business Central as customers and sales orders, and feeds posted-invoice and payment status back onto HubSpot companies and deals so sales and finance see one truth. Done properly it is not a nightly CSV or a brittle Zap: it is an idempotent, bidirectional pipeline with a shared cross-reference between HubSpot record IDs and Business Central customer numbers, so nothing is duplicated and nothing drifts.

## What a Business Central to HubSpot integration actually does

Business Central is where the money is real. It holds the posted invoices, the open balance, the payment terms, the credit limit, the customer number your finance team actually books against. HubSpot is where the relationship is real - the deals, the contacts, the pipeline, the conversations your sales and success teams live in. The two systems describe the same customers and almost never agree about them.

A Business Central to HubSpot integration closes that gap in both directions. It pushes ERP truth - who is a customer, what they owe, whether the last invoice is paid or overdue - onto the matching HubSpot company and deal, so sales stops asking finance for account status over email. And it turns won business in HubSpot into structured records in Business Central - a customer, a contact, a sales order - so finance stops re-keying deals off a spreadsheet. One customer, one identity, kept in sync automatically.

## What data moves

| Business Central object / event | Becomes in HubSpot | Notes |
| --- | --- | --- |
| Customer (Debitor) | Company | Matched by domain / VAT no.; No. and systemId written back to the company |
| Contact | Contact, associated to the company | HubSpot dedupes by email; associations rebuilt on the CRM side |
| Posted sales invoice | Deal property / invoice on the company | Amount, currency, due date, document no. surfaced to sales |
| Customer ledger open balance | Company property | Total outstanding and overdue amount, refreshed on a delta |
| Payment status | Deal / company property | Paid, open, or overdue - so sales sees dunning risk |
| Item / product | Product in the catalog | Optional; keeps HubSpot line items priced from the ERP |

And in the other direction:

| HubSpot object / event | Becomes in Business Central | Notes |
| --- | --- | --- |
| Closed-won deal | Sales order (and customer if new) | Customer created first, then the order references it |
| Company | Customer (Debitor) | Number assigned by the BC number series, not by HubSpot |
| Contact | Contact linked to the customer | Mapped to the BC contact-to-customer relationship |
| Deal line items | Sales order lines | Item numbers, quantities, unit prices, currency mapped through |

The field mapping, the system of record per field, and the cross-reference between the two ID schemes are agreed once and encoded in the pipeline. After that, nobody reconciles them by hand.

## The details that break naive syncs

A generic connector or a Zap gets you a demo and leaves the expensive edge cases in production:

- **No shared key.** HubSpot thinks in domains and emails; Business Central thinks in customer numbers and systemId GUIDs. Without a maintained cross-reference, the first company that changes its domain or the first contact with two email addresses becomes a duplicate customer in the ERP.
- **The customer number is not yours to set.** Business Central assigns No. from a number series. You have to create the record, read the assigned number back, and store it - a naive "upsert by No." pushes values the ERP rejects or silently ignores.
- **Company-scoped, versioned API.** Business Central's API is company-scoped inside an environment (many Mandanten can live in one tenant) and versioned (api/v2.0 and beyond). Writes need the ETag for optimistic concurrency, or your update loses to whoever saved last. A sync that ignores the company dimension writes into the wrong ledger.
- **Rate limits on both ends.** Business Central throttles per environment with request-per-minute and concurrency ceilings and a hard per-request timeout; HubSpot caps requests per ten-second window and per day. Full-table syncs trip both. Batch endpoints, backoff on 429, and delta reads are not optional at real volume.
- **Currency and tax.** Business Central carries document currency, local currency amounts, VAT Bus. Posting Groups, and VAT registration numbers. HubSpot deals are single-currency unless you are on an Enterprise multi-currency setup. Amounts have to be mapped in the right currency, not just copied as a number.
- **Ordering and partial failures.** A won deal must create the customer before the sales order can reference it. HubSpot batch calls return per-item errors while Business Central $batch is transactional - the pipeline has to sequence dependent writes and handle one failed line without dropping the whole order.
- **Deletes and GDPR.** Business Central rarely emits a clean delete signal; HubSpot GDPR deletes must propagate. The pipeline has to reconcile disappearances deliberately, not assume a missing record means nothing changed.

## How we build and run it

We treat this as a pipeline, not a bundle of workflow automations. Business Central changes are picked up on a delta - filtered on last-modified or via Graph change notifications - validated, transformed into your agreed HubSpot mapping, and written through HubSpot's batch API. HubSpot deal and company changes flow back the same way, creating customers and sales orders in the correct Business Central company.

The pipeline is idempotent. Every record carries a stable identity in the cross-reference, so a retry, a replay, or a re-run never creates a second customer or a duplicate deal. It runs on cloud-native, fully EU-hosted AWS infrastructure, so customer and financial data never leaves the EU - which keeps your DPA / AVV and your GDPR obligations clean.

Then we keep it running. Monitoring, alerting, incident response, and - critically - tracking Business Central and HubSpot API changes are our responsibility under contract. Microsoft ships Business Central API updates on a release cadence and HubSpot deprecates endpoints on its own schedule; staying ahead of both is our job, not a fire your team fights when deals stop appearing in the ERP. You get a named owner, a fixed-price scope, and an SLA.

## When this integration is worth building

If you close a handful of deals a month and one person copies them into Business Central without complaint, you do not need a pipeline, and we will tell you so. A HubSpot Operations Hub sync or a manual export may be enough.

The integration earns its place when deal volume makes re-keying a real cost, when sales genuinely needs live payment and balance status to prioritise accounts and chase renewals, when duplicate customers in the ERP are already causing invoicing errors, or when you run multiple Business Central companies against one HubSpot portal and the matching logic is beyond what a point tool can express. At that point a managed, bidirectional pipeline pays for itself in the reconciliation it removes.

## Frequently asked questions

### Which direction does the data flow - from Business Central to HubSpot or the other way?

Usually both, and the direction matters per object. Master data and financial reality (customers, posted invoices, open balance, payment status) flow from Business Central into HubSpot so sales sees accurate account state. New business flows the other way: a closed-won HubSpot deal becomes a customer and a sales order in Business Central. We agree the system of record for each field up front so the two sides never fight over the same value.

### How do you match a HubSpot company to a Business Central customer when they have no shared key?

That is the core of the build. HubSpot dedupes companies by domain and contacts by email; Business Central keys customers by a number-series No. and an internal systemId GUID. There is no common identifier, so we maintain a cross-reference table that maps HubSpot record IDs to Business Central customer numbers, seeded from an initial reconciliation and kept authoritative from then on. New records get matched on domain, VAT registration number, or name plus address before we ever create a duplicate.

### Can HubSpot create the customer number, or does Business Central assign it?

Business Central assigns it. Customer numbers come from a number series, so you cannot push an arbitrary No. from HubSpot and expect it to stick. The pipeline creates the customer in Business Central, reads back the assigned No. and systemId, and writes them onto the HubSpot company so both sides reference the same identity from that point on.

### Will this survive Business Central and HubSpot API rate limits at our volume?

Yes, because we design for them rather than discover them in production. Business Central throttles per environment (request-per-minute and concurrency ceilings, plus a hard per-request timeout) and HubSpot caps app requests per ten-second window and per day. We use the batch endpoints on both sides, back off on 429s, and sync deltas rather than full tables, so a busy sales month does not trip a limit and stall the queue.

### Who operates it after go-live?

We do. The pipeline runs on cloud-native, fully EU-hosted infrastructure that we monitor. When Microsoft ships a new Business Central API version or HubSpot deprecates a webhook, that is our problem to handle under contract, not a surprise your RevOps team finds when deals stop syncing. You get a named owner, alerting, incident response, and an SLA rather than a workflow somebody has to babysit.

## Related integrations

- [NetSuite ↔ HubSpot](https://seamless.engineering/integrations/netsuite-hubspot/): NetSuite HubSpot integration
- [SAP S/4HANA ↔ HubSpot](https://seamless.engineering/integrations/sap-s4hana-hubspot/): SAP S/4HANA HubSpot integration
- [HubSpot ↔ Intercom](https://seamless.engineering/integrations/hubspot-intercom/): HubSpot Intercom integration
- [HubSpot ↔ Mailchimp](https://seamless.engineering/integrations/hubspot-mailchimp/): HubSpot Mailchimp integration
- [HubSpot ↔ Pipedrive](https://seamless.engineering/integrations/hubspot-pipedrive/): HubSpot Pipedrive integration
- [HubSpot ↔ QuickBooks](https://seamless.engineering/integrations/hubspot-quickbooks/): HubSpot QuickBooks integration

## Browse by system

- [All Dynamics 365 integrations](https://seamless.engineering/integrations/dynamics-365/)
- [All HubSpot integrations](https://seamless.engineering/integrations/hubspot/)
- [HubSpot API changelog](https://seamless.engineering/api-changelog/hubspot/): 8 breaking changes and 2 deprecations in the last 90 days

## Request a scoping call

Need this integration built and permanently operated? Tell us which systems connect and what data has to move. Fixed-price scoping quote within 48 hours.

- Email: hello@seamless.engineering
- Contact form: https://seamless.engineering/#contact
