ml-connector
DeltekGoCardless

Deltek and GoCardless integration

Deltek Vantagepoint runs project accounting, billing, and the general ledger. GoCardless collects money from customer bank accounts by direct debit and ACH. Connecting the two turns open AR invoices in Deltek into bank-debit collections in GoCardless, then brings the settled cash back into Deltek as cash receipts against the right client and project. ml-connector handles the different APIs and auth on each side and reconciles each GoCardless payout to the payments inside it so the ledger matches the bank.

How Deltek works

Deltek Vantagepoint exposes firms, contacts, employees, projects, AR invoices, AP invoices, cash receipts, journal entries, and GL accounts through a REST JSON API on a per-tenant URL such as https://acme.deltekfirst.com/acme/api/, so there is no shared hostname. It authenticates with OAuth2 using the password grant, which must be enabled in the instance settings, and every request carries a Bearer token refreshed against the tenant token endpoint. Vantagepoint can fire workflow-driven webhooks on record save, but these have no HMAC signature, so finance records are read by polling with page-based parameters. The older Costpoint product is SOAP and pull-only.

How GoCardless works

GoCardless exposes customers, customer bank accounts, mandates, payments, subscriptions, payouts, refunds, and an event log through its REST Payments API at https://api.gocardless.com, with a sandbox at api-sandbox.gocardless.com. Every call carries a Bearer access token plus a fixed GoCardless-Version header, and amounts are integers in the smallest currency unit. A payment cannot be created without an existing active mandate, and payouts are read-only because GoCardless creates them automatically. GoCardless pushes signed HMAC-SHA256 webhooks for payment, mandate, and payout events, and payout items are used to reconcile each payout back to its payments and fees.

What moves between them

The outbound flow runs from Deltek into GoCardless. ml-connector reads open AR invoices from Deltek Vantagepoint, matches each client firm to a GoCardless customer with an active mandate, and creates a payment for the invoice amount in the smallest currency unit on a schedule you set. The return flow runs from GoCardless into Deltek. As payments are confirmed and bundled into payouts, ml-connector posts a cash receipt into Deltek against the originating client and project and marks the invoice paid. Payouts are read-only in GoCardless, so ml-connector never writes financial entries back, it only reads payout items to reconcile each payout to its underlying payments, fees, and refunds.

How ml-connector handles it

ml-connector stores both credential sets encrypted. It holds the Deltek OAuth2 password-grant token and refreshes it against the tenant token endpoint when a call returns 401, and it sends the GoCardless Bearer token with the fixed GoCardless-Version header on every request. Because a GoCardless payment requires an active mandate, ml-connector only collects on invoices whose client has one, and surfaces clients that still need a mandate set up. Deltek amounts are converted to the smallest currency unit for GoCardless and back when posting cash receipts. Deltek has no signature on its webhooks, so AR invoices are read by polling, while GoCardless payment and payout webhooks are verified by HMAC-SHA256 before any cash receipt is written. Deltek has no idempotency header, so ml-connector checks for an existing receipt by reference before posting to avoid duplicates, and it sends a GoCardless idempotency key on every payment create. Charge dates respect each scheme's notice period, failed collections are surfaced from the failed event, and every record carries a full audit trail with error replay.

A real-world example

A 90-person architecture and engineering firm runs Deltek Vantagepoint for project accounting and bills clients on monthly retainers and milestone invoices. It collects most fees by UK bank debit through GoCardless. Before the integration, an accountant exported the open invoice list from Deltek each week, created the payments by hand in the GoCardless dashboard, then weeks later matched each lump-sum payout on the bank statement back to invoices line by line. With Deltek and GoCardless connected, approved AR invoices become bank-debit payments automatically against the right mandate, confirmed collections post back as cash receipts on the correct project, and each payout is reconciled to its payments, so cash application stops being a manual weekly chore.

What you can do

  • Turn open Deltek AR invoices into GoCardless bank-debit payments against each client's active mandate.
  • Post confirmed GoCardless collections back into Deltek as cash receipts on the originating client and project.
  • Reconcile each GoCardless payout to its underlying payments, fees, and refunds using payout items.
  • Bridge Deltek OAuth2 password-grant tokens and the GoCardless Bearer token, with token refresh on expiry.
  • Verify GoCardless HMAC-SHA256 webhooks and poll Deltek AR data, with retries and a full audit trail.

Questions

Which direction does data move between Deltek and GoCardless?
Open AR invoices move from Deltek into GoCardless as bank-debit payments, and confirmed collections move back from GoCardless into Deltek as cash receipts. GoCardless payouts are read-only, so ml-connector never writes financial entries into GoCardless. It only reads payout items to reconcile each payout to its payments.
What happens if a client has no GoCardless mandate yet?
GoCardless cannot create a payment without an existing active mandate, so ml-connector only collects on invoices whose client already has one. Clients that still need a mandate are surfaced rather than collected, and you set the mandate up in GoCardless or through a hosted billing request first. Once the mandate is active, that client's invoices are picked up on the next run.
How does the integration avoid duplicate payments and cash receipts?
Deltek has no idempotency header, so ml-connector checks for an existing cash receipt by reference before posting and queries Deltek for the invoice before collecting. On the GoCardless side it sends an idempotency key on every payment create, so a retry returns the same payment instead of creating a second collection. Every record carries an audit trail and can be replayed if a downstream call fails.

Related integrations

Connect Deltek and GoCardless

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

Get started