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.
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
More Deltek integrations
Other systems that connect to Shopify
Connect Deltek and Shopify
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started