ml-connector
DeltekCoupa

Deltek and Coupa integration

Deltek Vantagepoint runs project accounting, finance, and the general ledger. Coupa runs procurement, where requisitions become purchase orders and supplier invoices are approved. Connecting the two means approved Coupa invoices and the purchase orders behind them flow into Deltek as AP invoices without re-keying, and the Deltek vendor firm master stays in agreement with Coupa suppliers. ml-connector handles the different APIs and auth on each side and moves the data on a schedule you control. The general ledger stays in Deltek, where Coupa never writes accounting entries.

How Deltek works

Deltek Vantagepoint exposes firms, contacts, employees, and projects through Hub APIs, and AP invoices, AR invoices, journal entries, cash receipts, and GL accounts through Accounting Transaction APIs, all REST and JSON on a tenant-specific URL such as acme.deltekfirst.com. It authenticates with OAuth 2.0, typically the password grant, which from version 5.0 must be enabled in settings, using a client ID, client secret, username, password, and database name. Webhooks are workflow-driven callbacks configured per record-save event with no HMAC signature, so finance records are read by polling. There is no native idempotency key and no confirmed public REST endpoint for purchase orders, so caller-side dedup is required.

How Coupa works

Coupa is a procurement platform. It exposes suppliers, purchase orders, and invoices through versioned REST APIs on an instance-specific coupahost.com URL, with approved invoices read from /api/invoices filtered by status. It authenticates with OAuth 2.0 client credentials against /oauth2/token, scoped to the permissions in the credential, and every call carries a pinned X-Coupa-API-Version header. Coupa pushes invoice, purchase order, and supplier events by webhook, signed with HMAC-SHA256, and supports an Idempotency-Key header on writes. It is the canonical procurement source, so spend records originate there rather than in the ERP.

What moves between them

The main flow runs from Coupa into Deltek. ml-connector reads approved invoices from Coupa and the purchase orders behind them and posts them into Deltek Vantagepoint as AP invoices, mapped to the matching Deltek vendor firm, project, and GL account. Supplier records flow the same direction so the Deltek firm master reflects Coupa suppliers and their tax and remittance details. Reference data such as suppliers and account segments is aligned so each AP invoice line resolves to a real Deltek firm number and GL account. The general ledger lives in Deltek, so ml-connector never writes accounting entries back into Coupa.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Coupa side it requests an OAuth 2.0 client-credentials token, caches it per instance until shortly before expiry, and sends the pinned X-Coupa-API-Version header on every call. On the Deltek side it requests an OAuth 2.0 password-grant token against the customer tenant URL and refreshes it when a call returns 401, which depends on the password grant being enabled in Vantagepoint settings and the API user role having full field visibility so fee and amount fields do not read as zero. Suppliers are mapped to Deltek firm numbers and Coupa account segments to Deltek GL accounts first, so every AP invoice line lands on a valid firm and account. Coupa can push approved-invoice and supplier webhooks signed with HMAC-SHA256 to trigger the work immediately, while a scheduled poll over Coupa invoices and suppliers backfills anything a push missed, since Deltek itself offers only workflow callbacks with no HMAC. Because Deltek has no idempotency key, ml-connector queries Deltek by invoice number before posting and dedupes on a BullMQ jobId, which avoids double-booking a re-read invoice. Each record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized architecture and engineering firm of roughly three hundred staff runs Deltek Vantagepoint for project accounting and the general ledger, and uses Coupa for procurement and supplier invoice approval. Before the integration, an AP clerk reviewed each approved invoice in Coupa and re-keyed it into Deltek by hand, matching it to the right vendor and project, which left invoices waiting days and let supplier numbers drift between the two systems. With Deltek and Coupa connected, each approved Coupa invoice and its purchase order post into Deltek as an AP invoice against the correct firm and project, and supplier changes keep the firm master aligned. Invoices clear faster, the re-keying step is gone, and the AP ledger matches procurement without a month-end reconciliation scramble.

What you can do

  • Post approved Coupa invoices into Deltek Vantagepoint as AP invoices against the matching vendor firm and project.
  • Carry the purchase order behind each Coupa invoice through to the Deltek AP record for matching.
  • Keep the Deltek firm master aligned with Coupa suppliers and their tax and remittance details.
  • Authenticate Coupa with OAuth 2.0 client credentials and Deltek with its tenant OAuth 2.0 password grant.
  • Trigger on Coupa HMAC-signed webhooks with a scheduled poll backfill, retries, and a full audit trail on every record.

Questions

Which direction does data move between Deltek and Coupa?
The main flow is Coupa into Deltek. Approved invoices, their purchase orders, and supplier records move from Coupa into Deltek Vantagepoint, posted as AP invoices and firms against the matching projects and GL accounts. The general ledger lives in Deltek, so ml-connector does not write accounting entries back into Coupa.
How does the integration bridge the two different auth methods?
ml-connector stores both credential sets encrypted and handles each side separately. For Coupa it requests an OAuth 2.0 client-credentials token and sends the pinned X-Coupa-API-Version header on every call. For Deltek it requests an OAuth 2.0 password-grant token against the customer tenant URL and refreshes it on a 401, which requires the password grant to be enabled in Vantagepoint settings.
Does Coupa push invoices, or does ml-connector poll Deltek for them?
Coupa can push approved-invoice and supplier events by webhook, signed with HMAC-SHA256, which trigger the work as soon as an invoice is approved. A scheduled poll over Coupa backfills anything a push missed, since Deltek offers only workflow callbacks with no HMAC signature. Because Deltek has no idempotency key, ml-connector checks for an existing invoice number before posting so a re-read invoice is not booked twice.

Related integrations

Connect Deltek and Coupa

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

Get started