Microsoft Dynamics 365 Business Central and Ramp integration
Microsoft Dynamics 365 Business Central runs the finance ledger and accounts payable. Ramp runs corporate cards, bill pay, and spend management. Connecting the two means the spend Ramp captures lands in the Business Central general ledger without re-keying. Approved Ramp bills become purchase invoices in Business Central, cleared card transactions post as GL lines coded to the right accounts, and the Business Central chart of accounts and dimensions flow back so Ramp codes every charge to an account that exists in the books. ml-connector handles the two very different APIs and moves the data on the cadence you set.
What moves between them
The main flow runs from Ramp into Microsoft Dynamics 365 Business Central. As bills reach approved status in Ramp, ml-connector creates matching purchase invoices in Business Central against the right vendor, and cleared card transactions post as general ledger lines coded to the mapped accounts and dimensions. Reference data moves the other direction: the Business Central chart of accounts and dimension values are pushed into Ramp GL accounts and field options so spend is coded to accounts that exist in the ledger, and Business Central vendors are aligned with Ramp payees. Bills and transactions arrive in near real time from Ramp webhooks, while Business Central reference data syncs on a schedule and on its own change notifications.
How ml-connector handles it
ml-connector stores both credential sets encrypted. For Ramp it base64-encodes the client id and secret to request the opaque token and refreshes it daily rather than waiting for a 401, since the token lives ten days. For Business Central it runs the Entra ID client-credentials grant and builds the base URL from the stored tenant id, client id, secret, and environment name, because there is no shared hostname. Ramp HMAC-SHA256 webhooks for created and paid bills and cleared transactions are treated as triggers only, so the connector re-fetches each bill or transaction by GET before writing to avoid posting a stale amount. Business Central reference data is kept current by delta polling on lastModifiedDateTime and by renewing the three-day webhook subscriptions before they lapse. Ramp GL accounts and field options are mapped to Business Central accounts and dimensions first, so every posted line references an account that exists. Writes carry an Idempotency-Key on the Ramp side and a stable BullMQ jobId keyed off the bill or document number on the Business Central side, and a purchase invoice is created as a draft and posted with the Microsoft.NAV.post bound action. Both APIs return HTTP 429 when throttled, so ml-connector backs off with jitter, and every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A 250-person software company runs Microsoft Dynamics 365 Business Central for its finance ledger and uses Ramp for corporate cards and vendor bill pay across the whole team. Before the integration, accounting exported Ramp bills and card statements at month-end and keyed the totals into Business Central by hand, then spent the first days of close matching coded spend against the general ledger and fixing charges booked to the wrong account. With the two systems connected, approved bills post as purchase invoices and cleared transactions post as GL lines as they happen, each coded to a Business Central account and dimension that was pushed into Ramp ahead of time. Close starts with spend already in the ledger and coded correctly, and the manual export-and-rekey step is gone.
What you can do
- Post approved Ramp bills into Microsoft Dynamics 365 Business Central as purchase invoices against the matching vendor.
- Book cleared Ramp card transactions as Business Central general ledger lines coded to the right accounts and dimensions.
- Push the Business Central chart of accounts and dimension values into Ramp GL accounts and field options so spend codes to valid accounts.
- Bridge Ramp's ten-day opaque token and Business Central Entra ID client-credentials auth on every call.
- Trigger on Ramp HMAC webhooks, re-fetch before writing, and retry with idempotency and a full audit trail.
Questions
- Which direction does data move between Microsoft Dynamics 365 Business Central and Ramp?
- The main flow is Ramp into Business Central. Approved bills become purchase invoices and cleared card transactions post as general ledger lines in Business Central. Reference data moves the other way: the Business Central chart of accounts and dimensions are pushed into Ramp GL accounts and field options so spend is coded to accounts that exist in the ledger.
- Does the integration use Ramp webhooks or polling?
- It uses both. Ramp pushes HMAC-SHA256 signed webhooks for bills created, updated, and paid and for cleared transactions, and ml-connector treats those as triggers and re-fetches the object by GET before writing, because Ramp webhooks are non-authoritative. Business Central reference data is kept current by delta polling on lastModifiedDateTime, since its webhook notifications carry no payload and expire every three days.
- How are credentials handled on each side?
- Both credential sets are stored encrypted. Ramp uses OAuth 2.0 client credentials with the id and secret in a Basic auth header to get an opaque token that lasts ten days, refreshed daily rather than on a 401. Business Central uses the Microsoft Entra ID client-credentials grant, and the connector stores the tenant id, client id, secret, and environment name to build the tenant-specific base URL.
Related integrations
More Microsoft Dynamics 365 Business Central integrations
Other systems that connect to Ramp
Connect Microsoft Dynamics 365 Business Central and Ramp
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started