ml-connector
DeltekShopify

Deltek and Shopify integration

Deltek Vantagepoint runs project accounting, billing, and the general ledger for a services or product firm. Shopify runs the online storefront, checkout, and payments. Connecting the two means each paid order, the refunds against it, and the Shopify Payments payout flow into Deltek as AR invoices, cash receipts, and journal entries without re-keying, and storefront buyers line up with Deltek client Firms. ml-connector handles the very different APIs on each side and moves the data on a schedule you control. Because Shopify has no general ledger, the chart of accounts stays in Deltek where it belongs.

How Deltek works

Deltek Vantagepoint exposes Firms, Contacts, Employees, and Projects through REST Hub APIs, plus accounting transactions such as AR invoices, AP invoices, journal entries, cash receipts, and GL accounts through its Accounting Transaction APIs, documented in the interactive reference for each tenant. It authenticates with an OAuth2 password grant against a company-specific deltekfirst.com URL, so there is no shared hostname, and the Allow Password Grant Type setting must be enabled. Vantagepoint webhooks are workflow-driven with no HMAC signature, so storefront-side reads are best driven from Shopify rather than Deltek. The older Deltek Costpoint product is SOAP-heavy and pull-only.

How Shopify works

Shopify exposes orders, customers, transactions, refunds, draft orders, products, and Shopify Payments payouts through its GraphQL Admin API, with the legacy REST Admin API still available. It authenticates with an OAuth2 authorization code grant that yields a long-lived offline access token beginning with shpat_, scoped to a single shop subdomain, and there is no multi-shop endpoint. Shopify pushes events such as orders/paid, refunds, and customers/create by webhook, each signed with HMAC-SHA256 and carrying a delivery id for deduplication. Shopify is not an ERP, so it has no general ledger, no AR ledger, and no native vendor object.

What moves between them

The main flow runs from Shopify into Deltek. ml-connector reads paid Shopify orders and posts them into Deltek Vantagepoint as AR invoices tied to the matching project, then records the Shopify Payments payout as cash receipts and the processing fees as journal entries against the correct GL accounts. Refunds move the same direction and post as credit transactions in Deltek. Shopify customer records map to Deltek client Firms so each order resolves to a real client. The general ledger and chart of accounts stay in Deltek, since Shopify has no GL, so ml-connector never writes ledger entries back to the store.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Shopify side it sends the offline access token in the X-Shopify-Access-Token header against the one shop subdomain, and verifies the HMAC-SHA256 signature on every inbound webhook, returning 401 on a bad signature so Shopify keeps retrying. On the Deltek side it accepts the full company deltekfirst.com URL and database name per customer, requests an OAuth2 password-grant bearer token, and refreshes it before the roughly one-hour expiry. Customers are mapped to Deltek Firms first, so every order references a client that already exists. Because Vantagepoint has no idempotency key header, ml-connector dedupes on the Shopify order GID and a BullMQ jobId before it posts, which prevents double-booking an order that a webhook delivers twice. Shopify webhooks such as orders/paid and refunds drive the work as it happens, and a scheduled GraphQL poll, using cursor pagination or a bulk operation for large catalogs, backfills anything a webhook missed. When the Shopify GraphQL query is throttled it backs off on the one-second restore window and retries. Every record carries a full audit trail and can be replayed if a Deltek post fails.

A real-world example

A specialty design-and-build firm with roughly 120 staff runs Deltek Vantagepoint for project accounting and billing, and sells finished product kits and accessories through a Shopify storefront alongside its project work. Before the integration, a bookkeeper exported Shopify orders and payout reports each week and keyed the sales, refunds, and processing fees into Deltek by hand, which left storefront revenue sitting unbilled for days and made the Shopify payouts hard to tie to the bank deposit at month-end. With Deltek and Shopify connected, each paid order posts as an AR invoice on its project, the payout posts as cash receipts with fees split to the right GL account, and refunds post as credits. Storefront revenue is recognized the same day and the deposits reconcile without a manual chase.

What you can do

  • Post paid Shopify orders into Deltek Vantagepoint as AR invoices tied to the right project.
  • Record Shopify Payments payouts as Deltek cash receipts and split processing fees to journal entries.
  • Map Shopify customers to Deltek client Firms so every order resolves to a real client.
  • Authenticate Shopify with its offline access token and verified HMAC webhooks, and Deltek with its tenant OAuth2 login.
  • Dedupe on the Shopify order GID and a jobId, with retries and a full audit trail on every record.

Questions

Which direction does data move between Deltek and Shopify?
The main flow is Shopify into Deltek. Paid orders, refunds, payout settlements, and customer records move from Shopify into Deltek Vantagepoint as AR invoices, cash receipts, journal entries, and client Firms. Shopify has no general ledger, so the chart of accounts stays in Deltek and ml-connector never writes ledger entries back to the store.
How does the integration handle Shopify webhooks and Deltek's lack of an idempotency key?
Shopify pushes HMAC-SHA256 signed events such as orders/paid and refunds, which ml-connector verifies before processing and returns 401 on a bad signature. Because Vantagepoint has no idempotency key header, each event is deduplicated on the Shopify order GID and a BullMQ jobId before posting. A scheduled GraphQL poll backfills anything a webhook missed, and the same dedup keeps a re-read order from being booked twice.
Can Shopify hold the general ledger, or does that stay in Deltek?
It stays in Deltek. Shopify is an e-commerce platform with no chart of accounts, no AR ledger, and no native vendor object, so it cannot own the books. ml-connector maps Shopify orders, refunds, and payouts into Deltek AR invoices, cash receipts, and journal entries against the correct GL accounts, keeping Deltek Vantagepoint authoritative for the ledger.

Related integrations

Connect Deltek and Shopify

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

Get started