ml-connector
DeltekZendesk

Deltek and Zendesk integration

Deltek runs your projects, clients, vendors, and accounting. Zendesk runs your support desk. Connecting the two means the client and vendor firms in Deltek become the organizations your agents work against in Zendesk, and the contacts on those firms become Zendesk users, so a ticket always resolves to a real account. Zendesk holds no invoices, purchase orders, or GL accounts, so ml-connector treats it as a support and account directory rather than a finance system, and the ledger stays in Deltek. The Deltek record key is written into each Zendesk external_id, which keeps the two systems linked even as records change on either side.

How Deltek works

Deltek Vantagepoint exposes firms, contacts, employees, projects, opportunities, and accounting transactions such as AP and AR invoices and journal entries through a REST API documented in an interactive reference per version. It authenticates with OAuth 2.0 password grant against a tenant-specific URL like company.deltekfirst.com, so there is no shared hostname, and the Allow Password Grant Type setting must be enabled. Deltek Costpoint, used by government contractors, instead exposes vendors, AP invoices, and purchase orders through SOAP web services and Adaptive REST with JWT auth. Vantagepoint can fire workflow webhooks on record save, but they carry no HMAC signature, so records are normally read by polling with page and pagesize parameters.

How Zendesk works

Zendesk exposes tickets, users, organizations, and groups through its REST Support API, scoped to a customer subdomain such as acme.zendesk.com with no global endpoint. For a connector it authorizes with the OAuth 2.0 authorization code flow against that subdomain, using read and write scopes, and tokens persist until revoked. Organizations carry an external_id meant to hold a foreign key back to an ERP, and users link to an organization. Zendesk pushes ticket, user, and organization events by webhook signed with HMAC-SHA256, though ticket events require wiring the webhook to a trigger. It has no invoices, purchase orders, payments, or GL accounts.

What moves between them

The main flow runs from Deltek into Zendesk. ml-connector reads client and vendor firms from Deltek and creates or updates the matching Zendesk organizations, then reads the contacts on those firms and creates or updates the corresponding Zendesk users linked to the right organization. The Deltek firm and contact keys are stored in the Zendesk external_id and user fields so each support account maps to one Deltek record. Project and employee reference data flows the same direction to give agents account context. In the reverse direction, ticket activity and organization or contact edits made in Zendesk can be sent back to update the related Deltek contact. No financial records move, because Zendesk has no invoice, payment, or GL objects.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Deltek side it requests an OAuth2 password-grant bearer token against the customer tenant URL and refreshes it when a call returns 401, since Deltek publishes no shared base URL. On the Zendesk side it runs the authorization code flow against the customer subdomain and scopes every call to that subdomain. Firms are matched to organizations first, by external_id, so each synced user lands under an organization that already exists. Because Deltek webhooks are workflow-configured and unsigned, the connector reads Deltek by polling firms and contacts on a schedule with page and pagesize, while it verifies the HMAC-SHA256 signature and timestamp on inbound Zendesk webhooks before acting. Deltek has no idempotency header, so the connector checks for an existing firm or contact before posting and dedupes on a BullMQ jobId. Zendesk offset paging stops at 10,000 records, so cursor paging and incremental export are used for large directories. When a write to Zendesk creates a user, the email is set on create, since later email edits add a secondary address rather than replace. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A 300-person architecture and engineering firm runs Deltek Vantagepoint for projects, clients, and billing, and uses Zendesk for its client support desk. Before the integration, agents kept a separate spreadsheet of clients and contacts, so tickets were often filed against a misspelled company or a person who had left, and there was no clean way to tie a support request to the project it concerned. With Deltek and Zendesk connected, every client and vendor firm appears as a Zendesk organization and every contact as a user, each carrying its Deltek key, so a new ticket resolves to the correct account and project context the moment it arrives. Agents stop maintaining a side list, and reporting on support load by client lines up with the firms of record in Deltek.

What you can do

  • Create and update Zendesk organizations from Deltek client and vendor firms.
  • Create and update Zendesk users from Deltek contacts, linked to the right organization.
  • Write the Deltek record key into Zendesk external_id so each support account maps to one firm.
  • Authenticate Deltek with OAuth2 password grant on its tenant URL and Zendesk with subdomain OAuth.
  • Verify signed Zendesk webhooks and poll Deltek on a schedule, with retries and a full audit trail.

Questions

Which direction does data move between Deltek and Zendesk?
The main flow is Deltek into Zendesk. Firms become organizations and contacts become users, with the Deltek key stored in external_id. Ticket activity and contact edits in Zendesk can flow back to update Deltek contacts, but no financial records move because Zendesk has no invoices, payments, or GL accounts.
How does the integration link a Zendesk account back to the Deltek record?
ml-connector writes the Deltek firm number into the Zendesk organization external_id and the contact key into a user field. Organizations are matched on external_id before users are synced, so each support account resolves to exactly one Deltek firm even as names change on either side.
Does the connector use webhooks or polling for Deltek?
It polls Deltek on a schedule using page and pagesize parameters, because Deltek Vantagepoint webhooks are workflow-configured and carry no HMAC signature to verify. For Zendesk it verifies the HMAC-SHA256 signature and timestamp on inbound webhooks, so ticket and organization changes can be handled as they happen.

Related integrations

Connect Deltek and Zendesk

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

Get started