ml-connector
DeltekChargebee

Deltek and Chargebee integration

Deltek Vantagepoint runs project accounting and the client ledger. Chargebee runs recurring subscription billing, invoicing, and payment collection. Connecting the two means the invoices Chargebee raises, the payments it collects, and the credit notes it issues land in Deltek as AR invoices, cash receipts, and adjustments without re-keying, and the customer list stays in step with the Deltek client Firms. ml-connector handles the different APIs and auth on each side and moves the data on a schedule you control. Because Chargebee has no general ledger of its own, the GL stays in Deltek where it belongs.

How Deltek works

Deltek Vantagepoint exposes Firms, Contacts, Employees, Projects, AR invoices, AP invoices, journal entries, cash receipts, and GL accounts through a REST JSON API on a per-company URL such as https://acme.deltekfirst.com/acme/api/, so there is no shared hostname. It authenticates with OAuth2 using the password grant against that tenant, returning a bearer token that expires in about an hour and is refreshed with a refresh token. The role assigned to the API user governs field access, so a restricted role can silently return zero amounts. Vantagepoint webhooks are workflow-triggered and carry no HMAC signature, so accounting records are read by polling. The Costpoint product is SOAP and JWT based and is pull-only.

How Chargebee works

Chargebee exposes customers, subscriptions, invoices, payments, transactions, and credit notes through its REST v2 API on a site-scoped URL such as https://acme.chargebee.com/api/v2/, with regional hosts for EU and AU. It authenticates with HTTP Basic auth where the API key is the username and the password is empty, with separate keys for the test and live sites. Reads use GET with offset-based pagination capped at 100 records per page, and writes use form-encoded POST. Chargebee pushes events by webhook but uses no HMAC, so the documented pattern is to re-fetch each event through GET /events/{id}. Timestamps are Unix epoch seconds.

What moves between them

The main flow runs from Chargebee into Deltek. ml-connector reads posted and paid Chargebee invoices and writes them into Deltek Vantagepoint as AR invoices against the matching client Firm and project, reads successful payment transactions and records them as Deltek cash receipts, and turns Chargebee credit notes into the matching Deltek adjustment so the receivable reflects refunds and write-offs. Chargebee customers flow the same direction so each Deltek client Firm matches a billed account. The Deltek general ledger stays in Deltek, since Chargebee has no GL resource, so ml-connector never writes ledger accounts back into Chargebee. Sync runs on a schedule you set, typically after each billing cycle.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Chargebee side it sends the API key as the Basic-auth username with an empty password, derives the correct regional base URL from the site region, and pages through invoices, transactions, and credit notes with the offset parameter and the next_offset field. On the Deltek side it accepts the full tenant URL per company, requests an OAuth2 password-grant bearer token, and refreshes it before the roughly one-hour expiry. Customers are mapped to Deltek client Firms first, so every invoice resolves to a Firm and project that already exist. Neither API offers an idempotency-key header, so ml-connector dedupes on the Chargebee event id and a BullMQ jobId, and on the Deltek side it queries by invoice number before posting, since duplicate prevention is the caller's job in Vantagepoint. Because Chargebee webhooks carry no HMAC, pushes are treated as a trigger to re-fetch the event through the events API rather than trusted directly, and scheduled polling remains the backstop. Chargebee rate limits return HTTP 429 with a Retry-After header, which ml-connector honors with backoff, and every record carries a full audit trail and can be replayed if a Deltek post fails.

A real-world example

A professional services firm of around 200 staff runs Deltek Vantagepoint for project accounting and client billing, and bills a growing book of managed-service retainers through Chargebee subscriptions. Before the integration, a billing clerk exported the Chargebee invoice and payment report each month and keyed the totals into Vantagepoint by hand, which left the client receivables a step behind, introduced typing errors on amounts, and meant refunds issued in Chargebee were missed in the ledger. With Deltek and Chargebee connected, each posted invoice and collected payment flows into Vantagepoint against the right client Firm within the polling window, credit notes post as adjustments, and the receivables reconcile without a month-end scramble.

What you can do

  • Post paid Chargebee invoices into Deltek Vantagepoint as AR invoices against the matching client Firm and project.
  • Record successful Chargebee payment transactions as Deltek cash receipts so collections show in the ledger.
  • Turn Chargebee credit notes into Deltek adjustments so refunds and write-offs reduce the receivable.
  • Authenticate Chargebee with its Basic-auth API key and Deltek with its OAuth2 tenant token, refreshed before expiry.
  • Poll on a schedule with event-id and jobId dedup, Retry-After backoff, and a full audit trail on every record.

Questions

Which direction does data move between Deltek and Chargebee?
The main flow is Chargebee into Deltek. Invoices, payments, credit notes, and customer records move from Chargebee into Deltek Vantagepoint as AR invoices, cash receipts, and adjustments against the client Firm. Chargebee has no general ledger resource, so the GL stays in Deltek and ml-connector never writes ledger accounts back into Chargebee.
How does the integration verify Chargebee webhooks without an HMAC signature?
Chargebee does not sign webhooks with an HMAC header. ml-connector treats each push as a trigger and re-fetches the event through the Chargebee events API before acting on it, which is the pattern Chargebee documents. Scheduled polling stays in place as a backstop so nothing is missed if a push is dropped.
How are duplicate invoices and payments prevented?
Neither API offers an idempotency-key header. ml-connector dedupes on the unique Chargebee event id and a BullMQ jobId so a re-read record is not processed twice. On the Deltek side it queries by invoice number before posting, since Vantagepoint makes duplicate prevention the caller's responsibility.

Related integrations

Connect Deltek and Chargebee

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

Get started