ml-connector
DeltekSquare

Deltek and Square integration

Deltek runs project accounting and finance. Square runs payments, point of sale, and customer invoicing. Connecting the two brings the money you collect through Square into the general ledger without re-keying settlement detail. As Square payments complete and refunds settle, the captured amounts, refunds, and processing fees post into Deltek Vantagepoint as cash receipts and journal entries against the correct GL accounts, with each Square location mapped to a Deltek organization. ml-connector handles the very different APIs on each side and reconciles payment activity to the ledger on the cadence you set.

How Deltek works

Deltek Vantagepoint exposes firms, contacts, employees, projects, AP invoices, AR invoices, journal entries, cash receipts, and GL accounts through a REST JSON API on a tenant-specific URL such as company.deltekfirst.com, with a GL transaction API added in the 2026.1 release. It authenticates with OAuth2 using the password grant, which must be enabled in the integration settings, and access to fields is governed by the API user's role, so an account without full visibility returns fee and amount values as zero. Vantagepoint offers only workflow-driven outbound webhooks with no HMAC signature, so finance records are read by polling with page and pagesize parameters and there is no idempotency header. Older Deltek Costpoint sites integrate over SOAP web services or preprocessor import templates instead.

How Square works

Square exposes payments, refunds, invoices, orders, customers, vendors, catalog items, payouts, and merchant locations through a versioned JSON REST API under connect.squareup.com/v2. Authentication is a Bearer token sent with the Square-Version header, obtained through the OAuth 2.0 Authorization Code flow whose access token expires in thirty days, or a Personal Access Token for a single Square account. Square is a commerce layer, not an accounting system, so it has no GL accounts or chart of accounts, and most records are scoped to a location_id since one merchant can have several locations. Square pushes webhooks such as payment.updated, refund.updated, and invoice.payment_made signed with HMAC-SHA256, and pages list results with a cursor that expires after five minutes.

What moves between them

The flow runs from Square into Deltek. As Square payments complete and refunds settle, ml-connector posts the activity into Deltek Vantagepoint as cash receipts and journal entries: captured amounts, refunds, and the per-transaction Square processing fee, each mapped to the matching Deltek GL account, with the Square location resolved to a Deltek organization. Square customers can be mapped into Deltek firms so receipts tie back to the right client, and payment.updated, refund.updated, and invoice.payment_made webhooks trigger the work as soon as money settles, while a scheduled poll of the Square Payments and Refunds lists backfills anything a webhook missed and lets month-end totals be checked against the Square payouts. Square is treated as a read-only accounting source, so ml-connector never writes financial entries or payment instructions back into Square.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Square side it sends the Bearer token and the Square-Version header on every request, refreshing the thirty-day OAuth Authorization Code token before it expires rather than waiting for a 401, and accepts a Personal Access Token instead for a single-account setup. It verifies every inbound Square webhook by recomputing the HMAC-SHA256 signature over the notification URL plus the raw request body with the per-subscription signature key, using a constant-time compare, and returns 403 on a bad signature so Square keeps retrying rather than marking the endpoint healthy. On the Deltek side it requests an OAuth2 token with the password grant against the tenant deltekfirst.com URL and refreshes it before the hour expires, and the API user must hold the accounting role with full field visibility or amounts and fees come back as zero. Square payments and refunds are mapped into Deltek cash receipts and journal entries: the captured amount, the refund, and the Square processing fee posted as its own line, against GL accounts and an organization derived from the Square location, which are aligned first so every line lands on a valid Deltek dimension. Three real edge cases are handled: Square paginates with a cursor that expires after five minutes, so each backfill page is consumed promptly; Square scopes payments to a location_id, so the connector queries each location and resolves it to the right Deltek organization; and because Deltek Vantagepoint has no usable inbound webhook and offers no idempotency header, ml-connector polls it on a schedule and checks for an existing entry by the Square payment reference before posting to avoid duplicates, while sending a UUID idempotency_key on any Square write. Square rate limits return a 429, so ml-connector backs off with jitter and retries, and every record carries a full audit trail and can be replayed if a Deltek post fails.

A real-world example

A mid-sized architecture and interior design firm with about eighty staff runs Deltek Vantagepoint for project accounting and collects retainers, deposits, and consultation fees from clients through Square, both in person at its studio and online. Before the integration, the accounting team exported Square transactions each week and hand-entered the gross receipts, refunds, and per-transaction Square fees into Deltek as cash receipts and journal entries, and the fee lines in particular were easy to miss, which left the Square clearing account out of balance and made month-end close drag. With Deltek and Square connected, every settled payment and refund posts into Deltek automatically, with the processing fee on its own line and the studio location mapped to the right organization, and a weekly poll of the Square payments list confirms the totals against the payouts. The Square clearing account reconciles on its own and the manual weekly re-keying step is gone.

What you can do

  • Post settled Square payments and refunds into Deltek Vantagepoint as cash receipts and journal entries against the correct GL accounts.
  • Book each Square processing fee as its own line and map each Square location to a Deltek organization.
  • Match Square customers to Deltek firms so receipts tie back to the right client.
  • Bridge Square's OAuth Bearer token or Personal Access Token and the Square-Version header to Deltek's OAuth2 tenant login.
  • Verify Square HMAC-SHA256 webhooks, poll Deltek on a schedule with retries and a full audit trail, because Deltek cannot be pushed to.

Questions

Which direction does data move between Deltek and Square?
Data moves from Square into Deltek. Settled payments, refunds, and processing fees become cash receipts and journal entries in Deltek Vantagepoint's general ledger, and Square customers can be matched to Deltek firms. Square is treated as a read-only accounting source, so ml-connector does not write financial entries or payment instructions back into Square.
Does Square post invoices or GL accounts into Deltek?
Square has no GL accounts or chart of accounts, because it is a commerce and payments platform rather than an accounting system. What it provides is payment, refund, customer-facing invoice, customer, and location data, and ml-connector maps that activity into Deltek's general ledger as cash receipts and journal entries against GL accounts that are configured in the mapping up front.
How does the integration handle Square webhooks and Deltek's lack of webhooks?
Square pushes HMAC-SHA256 signed webhooks such as payment.updated, refund.updated, and invoice.payment_made, which ml-connector verifies with a constant-time compare and returns 403 on a bad signature. Deltek Vantagepoint offers only workflow-driven outbound webhooks with no usable inbound event API, so ml-connector polls Deltek on a schedule and checks for an existing entry by the Square payment reference before posting, since Deltek has no idempotency header.

Related integrations

Connect Deltek and Square

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

Get started