ml-connector
DeltekSAP Concur

Deltek and SAP Concur integration

This connection moves approved spend from SAP Concur into Deltek Vantagepoint without manual re-keying. ml-connector reads expense reports and payment-request invoices from the Concur Financial Integration v4 API after they are approved, then creates matching AP invoices or journal entries in Deltek against the correct vendor and GL account. It keeps Deltek Firm records flowing into Concur as invoice vendors so each document resolves to a valid VendorCode. Posting results are sent back to Concur so every document is acknowledged and confirmed exactly once. The result is a closed loop between expense capture in Concur and the accounting ledger in Deltek.

How Deltek works

Deltek Vantagepoint exposes data through a REST JSON API on a tenant-specific URL like https://acme.deltekfirst.com/acme/api/. Authentication is OAuth 2.0 password grant, with the access token passed as a bearer header. Hub APIs cover Firms, Contacts, Employees, and Projects, while Accounting Transaction APIs inject and retrieve AP invoices, AR invoices, journal entries, and expense reports. Webhooks are workflow-driven callbacks configured in the Workflow system rather than a signed event bus, so steady-state reads use page-based polling with conservative backoff. There is no native idempotency header, so the connector checks for an existing record by invoice number before creating one.

How SAP Concur works

SAP Concur exposes finance data through REST JSON APIs reached at the geolocation base URL returned in the OAuth token response, such as https://us.api.concursolutions.com. Connector access uses company-level OAuth, a password grant with credtype authtoken that bootstraps from a one-time App Center auth token valid for 24 hours, after which the refresh token rotates access tokens for up to six months. The Financial Integration v4 endpoint serves approved expense, invoice, and payroll documents for ERP posting and accepts acknowledgements, posting confirmations, and payment confirmations. The Event Subscription Service pushes status-change events over mutual TLS with a Concur-Signature header, and the Invoice Vendor v3.0 API manages vendor master records.

What moves between them

The primary flow is inbound to Deltek. ml-connector pulls approved documents from the Concur Financial Integration v4 endpoint by document type, posts each expense report as a journal entry and each payment-request invoice as an AP invoice in Deltek Vantagepoint, and returns acknowledgement and posting confirmation to Concur. A secondary flow is outbound from Deltek: vendor master data from Deltek Firms is pushed to Concur as invoice vendors so payment requests resolve to a valid VendorCode. Inbound document polling runs on a short schedule, optionally triggered by an Event Subscription Service notification, and vendor sync runs on a slower cadence or when a Firm changes.

How ml-connector handles it

ml-connector holds two credential sets and bridges them. On the Concur side it exchanges the one-time auth token for a refresh token, then keeps the one-hour access token fresh and always calls the geolocation base URL from the token response rather than a hardcoded host. On the Deltek side it uses the OAuth password grant against the tenant URL, which requires Allow Password Grant Type to be enabled and an API user with Accounting and Administrator roles plus full field visibility. Document polling uses Financial Integration v4 page and limit parameters; each Concur document id is recorded so the same document is not posted twice, since neither system offers an idempotency header. Concur amounts and cost centers map to Deltek GL accounts and organizations, and a Concur VendorCode maps to a Deltek Firm. Concur expense business purpose is capped at 64 characters, so longer text is truncated on the Deltek note. Posting failures are retried with exponential backoff and jitter; a Concur 429 or 503 is retried, and Deltek AP invoices may land in a draft or approval state depending on the customer workflow configuration.

A real-world example

A 600-person architecture and engineering firm runs project accounting in Deltek Vantagepoint and books employee travel and supplier invoices in SAP Concur. Before the integration, accounting staff exported approved Concur reports and re-keyed them into Deltek by hand, which delayed project cost reporting and produced posting errors when a vendor or cost center was mistyped. With the connection live, approved Concur documents post automatically as AP invoices and journal entries in Deltek against the right project and GL account, and confirmations flow back so nothing posts twice. Month-end close moves faster and project managers see committed spend without waiting on manual entry.

What you can do

  • Approved SAP Concur expense reports post into Deltek Vantagepoint as journal entries automatically.
  • Approved SAP Concur payment-request invoices become Deltek AP invoices against the matched vendor and GL account.
  • Deltek Firm records sync to SAP Concur as invoice vendors so payment requests resolve to a valid VendorCode.
  • Posting confirmations return to SAP Concur so each document is acknowledged and posted exactly once.
  • Concur company-level auth and Deltek password-grant tokens are bridged and refreshed without manual re-keying.

Questions

Which direction does data move between Deltek and SAP Concur?
The main flow is from SAP Concur into Deltek Vantagepoint. ml-connector reads approved expense and invoice documents from the Concur Financial Integration v4 endpoint and posts them into Deltek as journal entries and AP invoices. A secondary outbound flow pushes Deltek Firm records to Concur as invoice vendors so payment requests resolve correctly.
Does this use webhooks or polling?
It is polling-led, with optional event triggers. The Concur Event Subscription Service can notify ml-connector that an expense report or invoice changed status, but the authoritative read is a paginated pull from the Financial Integration v4 endpoint. Deltek webhooks are workflow-driven callbacks without a signed payload, so steady-state document reads rely on page-based polling with conservative backoff.
How are duplicate postings prevented?
Neither system offers an idempotency key header, so ml-connector tracks each Concur document id and checks Deltek by invoice number before creating a record. The Concur acknowledgement endpoint also reports documents that were already acknowledged. Together these stop the same expense report or invoice from posting twice in Deltek.

Related integrations

Connect Deltek and SAP Concur

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

Get started