HubSpot + Dynamics 365 Finance and Supply Chain integration
Dynamics 365 Finance and Supply Chain keep legal entities, orders and posted invoices. Why HubSpot's Dynamics 365 app misses them, and what fills the gap.
Connects by API , iPaaSScope this integration Book a scoping call Estimate the cost
- Into HubSpot
Is there an official Dynamics 365 Finance and Supply Chain + HubSpot integration?
No. As of September 2026 Dynamics 365 Finance, Supply Chain Management and AX have no app in the HubSpot App Marketplace, and HubSpot's own Microsoft Dynamics 365 app syncs CRM records such as accounts, leads and opportunities rather than the finance and operations apps. We recommend a custom API integration over the OData data entities, reading changes through change tracking and taking invoice and payment business events, at 70 to 150 build hours. A business already running Dynamics 365 Sales with dual-write should test that chain through HubSpot's app first.
- 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 Dynamics 365 Finance and Supply Chain to HubSpot
Dynamics 365 Finance and Supply Chain Management sit at the centre of groups that trade through several legal entities. Each company in the group keeps its own customers, sales orders, warehouses and posted invoices, and the group reports across all of them. The sales team in that group often runs HubSpot, chosen for marketing and pipeline, and cannot see which company a customer buys through, what is still on order, or whether the last invoice was paid.
The confusion usually starts in the marketplace. A buyer searching for Dynamics 365 finds HubSpot’s own Microsoft Dynamics 365 app and reasonably assumes it covers the ERP, but HubSpot’s knowledge base lists what it syncs: accounts, contacts and leads, opportunities, products, activities, invoices and sales orders. Those are CRM records from the customer engagement side of Dynamics 365. Finance and Supply Chain Management do not appear anywhere in that documentation.
Some of these estates began life as Dynamics AX, and integrations built on AX 2012’s document services had to be rebuilt, because Microsoft lists those services as replaced by data entities. Data entities are also what insulate an integration from changes to the tables underneath them between versions. A HubSpot integration built now reads those entities, which is the design most likely to outlast the next few updates.
What syncs
The sync reads four data entities. Customers V3 becomes HubSpot companies, Sales order headers V2 becomes deals, Sales invoice headers V2 lands on a custom object, and Released products V2 becomes HubSpot products.
Customers, orders, invoices and released products each belong to a legal entity, stored as dataAreaId, and OData returns only the service account’s default company unless the request asks for cross-company data. So every key is a pair: customer account and legal entity, order number and legal entity, and so on. Where one buyer trades through two legal entities, that is two customer records in Finance, and discovery decides whether HubSpot shows one company or two.
Released products belong to a legal entity too, with the shared product sitting above them, so products key on the item number in the legal entity whose prices sales actually quotes.
The flow runs into HubSpot only. Microsoft classes posted invoices as transaction data, so the HubSpot copy is read only and updated from payment events rather than edited.
| | | Direction | Match key | Notes |
|---|---|---|---|---|
| Customers V3 (CustomersV3) | Company | Into HubSpot | Customer account scoped by legal entity (dataAreaId) | OData returns only the default company's customers unless the request asks for cross-company data. |
| Sales order headers V2 (SalesOrderHeadersV2) | Deal | Into HubSpot | Sales order number scoped by legal entity, associated through the ordering customer account | Orders stay read only in HubSpot. Supply Chain Management confirms, ships and invoices them. |
| Sales invoice headers V2 | Custom object | Into HubSpot | Invoice number scoped by legal entity, associated to its sales order number | Microsoft classes posted invoices as transaction data, so the HubSpot copy stays read only. |
| Released products V2 (ReleasedProductsV2) | Product | Into HubSpot | Item number scoped by the legal entity whose prices sales quotes | A released product belongs to one legal entity. The shared product sits above it. |
Architecture
The service reads data entities through OData with change tracking, and takes business events alongside for invoices and payments. An application registered in Microsoft Entra ID authenticates with client credentials, and the Microsoft Entra applications page in Finance maps it to a dedicated service account whose roles limit what it can read. Change tracking is switched on per entity, and each read asks only for what changed since the previous one, with a position stored per entity.
The Invoice created from a sales order and Payment posted events go to an Azure Service Bus queue in the client’s subscription. A worker takes each event, checks its control number against those already processed, reads the record the event names, and passes it to the writer.
The HubSpot writer upserts in batches on number and legal entity, then a separate pass associates orders and invoices to their companies. Change tracking does not report deletions outside bring-your-own-database exports and virtual entities, so a nightly job compares keys per legal entity and closes whatever has gone.
What the API allows
- API style
- REST
- Authentication
- OAuth 2.0
- Webhooks
- Partial
- Changed-since filter
- Yes
- Sandbox
- Yes
- Rate limit
- No fixed quota: resource-based throttling returns 429 Too Many Requests when web server utilization crosses a threshold, and user-based limits are disabled from version 10.0.36
Developer documentation learn.microsoft.com
Three ways to connect
The first question is whether Dynamics 365 Sales already runs beside Finance and Supply Chain Management. If it does, dual-write may already copy customers, quotations and orders into Dataverse, and HubSpot’s Microsoft Dynamics 365 app can sync what reaches the Sales side. Test that chain before building anything.
If it does not, a custom API integration against the data entities is the route we recommend, with business events carrying invoices and payments as they post. It needs an Entra application, read access for a service account and one Service Bus queue, all of which sit inside the client’s own Microsoft tenancy.
Power Automate can subscribe to business events directly and is fine for a single notification, such as a posted invoice updating a HubSpot property. It has no backfill, no change position and no reconciliation, so it stays a supplement rather than the integration.
-
Custom API integration
RecommendedA custom API integration reads the data entities through OData with change tracking, takes invoice and payment business events from a Service Bus queue, and keys every record on its number and legal entity.
-
iPaaS
PossiblePower Automate can subscribe to finance and operations business events directly, which suits a single notification such as a posted invoice updating a HubSpot property. It carries no backfill and no reconciliation.
-
Marketplace app
AvoidHubSpot's Microsoft Dynamics 365 app syncs the CRM records its knowledge base lists, such as accounts, leads and opportunities, and nothing in that documentation reaches Finance or Supply Chain Management.
What breaks and how we prevent it
Customers missing from other legal entities
OData answers with the service account’s default company unless the request adds cross-company=true, and a result from one company looks complete because nothing errors. A sync built that way misses every customer traded elsewhere. We query cross-company, filter on dataAreaId explicitly, and reconcile counts per legal entity.
Customers V3 on a busy schedule
Microsoft marks Customers V3 as single thread only and advises against it where volume or frequency is high, because supporting every customer scenario costs it performance. We use it for the initial load, then read the Customer definitions or Customer details V2 entities that Microsoft names beside it, once discovery confirms they hold the fields sales needs.
Deletions change tracking never reports
Outside bring-your-own-database exports and Dataverse virtual entities, change tracking does not track deletions, so an order deleted in Supply Chain Management stays open in HubSpot. The nightly key comparison closes those records and reports how many it closed.
Events out of order or twice
Business events travel asynchronously, so the order they arrive in is not guaranteed, and each carries a control number so a consumer can spot a duplicate. We store processed control numbers, read the current record rather than trusting arrival order, and let a late event lose to newer data.
Endpoint secrets that expire
A Service Bus endpoint for business events depends on a secret in Microsoft Entra ID, and when it expires, events through that endpoint fail until someone updates it. We record the expiry date on the endpoint, where Finance warns as it approaches, and resend failed events from the error log after rotation.
Our approach
- Scope. We list the legal entities in scope, the Dynamics 365 apps running beside Finance, the business events already active, and who owns the Azure subscription that will hold the queue.
- Architect. We fix the keys with their legal entity, the change tracking option per entity, the event endpoint and the throttling priority for our application.
- Build. We build against the Tier 2 sandbox, and the service refuses any environment or HubSpot portal that is not on its allowlist.
- Validate. We reconcile counts per legal entity, post a test invoice and payment to prove the event path, and delete a test order to prove the nightly comparison.
- Operate. Cutover swaps the environment URL and the application credentials. We watch queue depth and the business events error log, and re-test in the sandbox before each update reaches production.
Common questions
Does HubSpot's Microsoft Dynamics 365 app work with Dynamics 365 Finance?
No. HubSpot's knowledge base lists what the app syncs: accounts, contacts and leads, opportunities, products and bundles, appointments, notes, tasks, invoices, sales orders, emails and phone calls. Those are the records of the Dynamics 365 CRM apps, and the article never mentions Finance, Supply Chain Management or the finance and operations apps. Connecting the ERP means a separate integration against its data entities.
Can dual-write carry Dynamics 365 Supply Chain Management data into HubSpot?
Only where Dynamics 365 Sales already runs. Dual-write copies customers, and quotations and orders from Supply Chain Management, into Dataverse for Sales, and HubSpot's Microsoft Dynamics 365 app syncs accounts and sales orders from the Dynamics 365 side. That puts two sync engines and two sets of match rules between the ledger and the portal, so we test the chain in sandboxes first and never add Sales licences just to create it.
Which Dynamics 365 Finance business events can a HubSpot integration use?
The Quote to cash events matter most: invoice created from a sales order, free text invoice posted, payment posted, transaction written off and collection status changed. They can go to a Service Bus queue or topic, Event Grid, Event Hubs, an HTTPS endpoint, Blob storage, Power Automate or Dataverse, activated per legal entity. Customer and order changes need change-based alert rules, which run in batch, so we read those entities on a schedule.
How does a Dynamics 365 Finance integration pick up changed records?
Through change tracking, enabled per data entity on its primary table, the entire entity or a custom query. A read that sends the odata.track-changes preference gets what changed since the previous read. Deletions are only tracked for bring-your-own-database exports and Dataverse virtual entities, so a nightly comparison of keys closes what was deleted. Changes reach HubSpot on the interval agreed in discovery.
What are the API limits for Dynamics 365 Finance and Operations?
There is no fixed request quota today. User-based limits of 6,000 requests per five minutes, per user and web server, were announced, then made optional, and from version 10.0.36 they are disabled on every environment. What remains is resource-based throttling: a 429 Too Many Requests when web server utilization crosses a threshold, which a client handles with Retry-After logic. Throttling priority mapping decides who is throttled first.
Is there a Dynamics 365 Supply Chain Management sandbox for integration testing?
Yes. The standard cloud offer includes one Tier 2 Standard Acceptance Testing environment for the length of the subscription, a multi-server instance meant for user acceptance and integration testing. Further sandboxes are paid add-ons. Tier 1 environments are single-box and not suited to acceptance testing, so we build and rehearse the integration in Tier 2 before production.
What happens to Dynamics AX integrations in Dynamics 365 Finance?
Most of them are rebuilt. Microsoft lists AX 2012 document services as replaced by data entities and the SOAP query service as replaced by OData, while SOAP custom services carry on and JSON custom services are new. A feed that read AX documents therefore becomes OData reads or package exports against data entities, which is the design described on this page.
How many hours does a Dynamics 365 Finance and Supply Chain integration take?
Allow 10 to 20 hours of discovery and 70 to 150 hours of build for customers, orders, invoices and products across the legal entities in scope, with change tracking, an event queue for invoices and payments, and a nightly key comparison. Calendar time depends on how quickly the client's administrators register the application in Entra and create the Service Bus queue.
Also in Enterprise ERP
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 Dynamics 365 Finance and Supply Chain 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
- Open Data Protocol (OData) learn.microsoft.com
- Data entities overview learn.microsoft.com
- Service endpoints overview learn.microsoft.com
- Enable change tracking for entities learn.microsoft.com
- Business events overview learn.microsoft.com
- Application business events learn.microsoft.com
- Alerts as business events learn.microsoft.com
- Manage business event endpoints learn.microsoft.com
- Service protection API limits learn.microsoft.com
- Throttling prioritization learn.microsoft.com
- Customers V3 entity learn.microsoft.com
- Sales order headers V2 entity learn.microsoft.com
- SalesInvoiceHeaderV2Entity in AccountsReceivable learn.microsoft.com
- Released products V2 entity learn.microsoft.com
- Environment planning learn.microsoft.com
- Integrated customer master learn.microsoft.com
- Prospect-to-cash in dual-write learn.microsoft.com
- Connect HubSpot and Microsoft Dynamics 365 knowledge.hubspot.com