ml-connector
Microsoft Dynamics NAVSAP Concur

Microsoft Dynamics NAV and SAP Concur integration

Microsoft Dynamics NAV runs accounting and operations for small and mid-size businesses. SAP Concur runs travel and expense management in the cloud. When connected, employee expense reports and invoices approved in Concur flow into NAV as general ledger entries and payable invoices, eliminating manual re-entry and keeping vendor records in sync. ml-connector bridges the OAuth credential flow for both systems, handles Concur's multi-datacenter routing, and maps dimensions and vendors so every expense lands on the correct GL account and vendor in NAV.

How Microsoft Dynamics NAV works

Microsoft Dynamics NAV exposes vendors, purchase orders, purchase invoices, sales invoices, general ledger entries, dimensions, employees, accounts, and journals through OData v4 REST APIs and legacy SOAP web services. The system authenticates with OAuth 2.0 client credentials through Microsoft Entra ID, with a tenant-specific base URL for online deployments or on-premises instances. NAV supports webhooks with a 3-day subscription lifetime that must be renewed before expiry, or polling via OData queries. GL accounts are read-only through the standard API, and posted GL entries are immutable. Webhook payloads are verified via a clientState field rather than HMAC signature, and subscriptions are deleted immediately if a notification returns a non-2xx code outside the 408/429/5xx range.

How SAP Concur works

SAP Concur provides a REST API for managing expense reports, invoices, purchase orders, purchase requests, employees, vendors, and financial integration documents across its multi-datacenter cloud infrastructure. The system uses OAuth 2.0 with password grant (credtype=authtoken), and the datacenter geolocation is determined from the token response and must be used for all subsequent API calls. Concur requires clients to register scopes at app registration time and cannot change them dynamically. Webhooks are delivered at least once via the Event Subscription Service with automatic retry on 5xx, 401, 403, 429, or I/O errors, and each app is limited to 5 active subscriptions. Purchase Orders cannot be deleted and Purchase Requests v4 do not support PATCH, PUT, or DELETE operations.

What moves between them

Expense reports, invoices, and purchase requests approved in SAP Concur flow into Microsoft Dynamics NAV as general ledger entries, payable invoices, and purchase orders, synchronized on a daily or weekly schedule depending on your approval workflow. Vendors and cost dimensions are synced bidirectionally to keep both systems current. Approved expenses and invoices in Concur post into NAV's general ledger allocated to the correct GL account and vendor, while new vendors created in NAV are provisioned in Concur if provisioning is enabled. The integration is read-only for historical GL entries in NAV and purchase requests in Concur, so corrections or cancellations are recorded as offsetting entries rather than deletions.

How ml-connector handles it

ml-connector stores both OAuth credential sets encrypted and uses the geolocation from Concur's token response to route all Concur API calls to the correct datacenter endpoint rather than hardcoding a single base URL. It refreshes both the NAV and Concur bearer tokens before they expire and handles 401 responses by retrying with a fresh token. Before posting an expense report or invoice from Concur into NAV, ml-connector validates that the associated vendor exists in NAV and maps the cost center and employee department from Concur to matching NAV dimensions. It monitors Concur's 5-subscription limit per app and coalesces related topics where possible. NAV's 3-day webhook subscriptions are renewed automatically, and if a subscription is deleted due to a non-2xx response, ml-connector resubscribes. For purchase requests and orders, the integration respects Concur's constraint that Purchase Requests v4 are POST and GET only, so modifications go through a separate flow. Every record carries a full audit trail, and if a downstream Concur API call fails, ml-connector queues the document for replay once the issue is resolved.

A real-world example

A mid-sized professional services firm runs Microsoft Dynamics NAV for accounting and operations and uses SAP Concur for travel and expense management across its staff. Before the integration, the operations team exported approved expense reports from Concur every week, manually looked up the matching vendors in NAV, and keyed the amounts into the GL as payable invoices, a process that created frequent mismatches between the two systems and delayed month-end close. With Microsoft Dynamics NAV and SAP Concur connected, approved expense reports and invoices flow into NAV automatically, matched to the correct vendors and GL accounts, and the operations team no longer re-enters data. Month-end close now starts with all expense and invoice accounts pre-populated and reconciled.

What you can do

  • Post approved SAP Concur expense reports and invoices into Microsoft Dynamics NAV general ledger entries and purchase invoices on a schedule matched to your approval workflow.
  • Validate vendors in SAP Concur against vendors in NAV before posting, preventing expenses from landing on non-existent or inactive vendors.
  • Map cost centers and employee departments from SAP Concur to dimensions in Microsoft Dynamics NAV so expenses allocate to the correct GL account.
  • Handle OAuth 2.0 for both systems, with automatic token refresh and geolocation routing for Concur's multi-datacenter infrastructure.
  • Manage Concur webhook subscriptions within the 5-per-app limit, renew expiring NAV subscriptions automatically, and track a full audit trail for every expense and invoice record.

Questions

What records flow from SAP Concur into Microsoft Dynamics NAV?
Approved expense reports, invoices (payment requests), and purchase requests flow from Concur into NAV as general ledger entries, payable invoices, and purchase orders respectively. Vendors and cost dimensions are synced in both directions. The integration respects Concur's read-only constraint on historical expense reports, so corrections are recorded as offsetting entries in NAV rather than deletions.
How does the integration handle geolocation routing for SAP Concur?
ml-connector extracts the datacenter geolocation from Concur's OAuth token response and uses it to route all subsequent API calls to the correct base URL (us.api.concursolutions.com, emea.api.concursolutions.com, or cn.api.concursolutions.com). This ensures compliance with Concur's multi-datacenter architecture without hardcoding a single endpoint.
What happens if a vendor in SAP Concur does not exist in Microsoft Dynamics NAV?
ml-connector validates the vendor before posting the expense report or invoice and holds the record in a pending state if the vendor is not found in NAV. The integration sends an alert and waits for the vendor to be created in NAV or the mapping to be resolved manually before retrying the post to the general ledger.

Related integrations

Connect Microsoft Dynamics NAV and SAP Concur

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started