Microsoft Dynamics 365 Business Central and SAP Ariba integration
Microsoft Dynamics 365 Business Central runs finance, purchasing, and accounts payable. SAP Ariba runs sourcing, procurement, and supplier management. Connecting the two means the purchase orders and invoice headers raised in Ariba flow into Business Central for matching and AP, and the vendor master stays aligned across both systems. ml-connector handles the very different APIs on each side and moves the data on a schedule you control. Because Ariba exposes no general ledger account API and creates its procurement documents through cXML rather than REST, the chart of accounts and posting stay in Business Central where they belong.
What moves between them
The main flow runs from SAP Ariba into Microsoft Dynamics 365 Business Central. ml-connector submits Ariba operational reporting jobs for purchase orders and invoice headers, downloads the results, and posts them into Business Central as purchase orders and draft purchase invoices, mapped to the matching vendors, GL accounts, and dimensions. The vendor master flows the other direction: Business Central vendors are written into the Ariba Supplier Data API so supplier records and registration status stay aligned. Reference data such as dimensions and cost centers is read from Business Central so Ariba accounting fields resolve to valid postings. GL accounts are read only in Business Central and Ariba has no GL API, so ledger postings stay in Business Central and ml-connector never writes financial entries back into Ariba.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Ariba side it requests and caches an OAuth2 bearer token, refreshing it before the one hour expiry, and attaches the static apiKey header and the realm query parameter to every request. On the Business Central side it runs the Entra client credentials flow against the api.businesscentral.dynamics.com scope and builds the base URL from the stored tenant and environment name, since BC publishes no shared host. Because the Ariba Open APIs are poll only, ml-connector drives the async reporting jobs on a schedule: it submits a job for a bounded date window, respecting the one year maximum span, polls the job result endpoint until it is ready, and pages through the result with pageToken. It keeps a high water mark on the last successful updatedDateTo so the next run only picks up changes, and it backs off on the X-RateLimit-Remaining-minute header rather than hitting 429. Vendors and dimensions are mapped first, so every imported purchase invoice line references a Business Central vendor and GL account that already exist. Business Central draft purchase invoices are not posted automatically; ml-connector creates them as drafts and leaves the Microsoft.NAV.post action to a controlled step so nothing posts to the ledger unreviewed. Business Central has no idempotency key header, so ml-connector filters on the document number before creating a record and uses a stable BullMQ jobId built from the Ariba document ID to avoid double booking a re-read order. Where Business Central webhooks fire on vendor or invoice changes, ml-connector takes the signal, fetches the changed record, and renews the three day subscription before it expires. Every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A mid-sized manufacturer with around 600 employees runs Microsoft Dynamics 365 Business Central for finance and accounts payable and uses SAP Ariba for sourcing and procurement across several plants. Before the integration, buyers raised purchase orders and approved supplier invoices in Ariba, then an AP clerk rekeyed each one into Business Central, which meant invoices sat for days, GL coding was sometimes wrong, and the vendor list in Ariba drifted out of step with the finance system. With Microsoft Dynamics 365 Business Central and SAP Ariba connected, each Ariba purchase order and invoice header lands in Business Central within the polling window as a draft for review, coded to the right vendor and dimension, and new vendors set up in Business Central appear in Ariba automatically. The rekeying step is gone and AP starts from records that already reconcile.
What you can do
- Pull SAP Ariba purchase orders and invoice headers through async reporting jobs and post them into Microsoft Dynamics 365 Business Central as purchase orders and draft purchase invoices.
- Push the Business Central vendor master into the Ariba Supplier Data API so supplier records and registration status stay aligned.
- Map Ariba accounting fields to Business Central GL accounts and dimensions so every imported line lands on a valid posting.
- Bridge Entra OAuth2 and the environment URL on the Business Central side with the Ariba bearer token, apiKey header, and realm query parameter.
- Poll Ariba on a schedule with high water mark cursors, document number and jobId dedup, retries, and a full audit trail on every record.
Questions
- Which direction does data move between Microsoft Dynamics 365 Business Central and SAP Ariba?
- The main flow is SAP Ariba into Microsoft Dynamics 365 Business Central. Purchase orders and invoice headers move from Ariba into Business Central as purchase orders and draft purchase invoices, while the Business Central vendor master is pushed into the Ariba Supplier Data API. Ariba purchase orders and invoices are read only over REST and Ariba has no GL account API, so the ledger and chart of accounts stay in Business Central and ml-connector never writes financial entries back into Ariba.
- Does SAP Ariba push data, or does ml-connector poll for it?
- ml-connector polls. The Ariba Open APIs have no general outbound webhook, so bulk procurement data comes from async reporting jobs that are submitted, polled for completion, and then downloaded page by page. ml-connector keeps a high water mark on the last processed updated date and runs the jobs on a schedule, respecting the one year maximum window per job and backing off on the rate limit headers.
- How does the integration bridge the two different authentication models?
- ml-connector handles both. On the Business Central side it runs the Microsoft Entra OAuth2 client credentials flow and builds the base URL from the stored tenant and environment name, since BC has no shared host. On the Ariba side it caches and refreshes a one hour OAuth2 bearer token and attaches the static apiKey header plus the realm query parameter to every call, because Ariba returns 401 if any of the three is missing.
Related integrations
More Microsoft Dynamics 365 Business Central integrations
Other systems that connect to SAP Ariba
Connect Microsoft Dynamics 365 Business Central and SAP Ariba
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started