Deltek and Snowflake integration
Deltek runs project-based ERP and accounting for professional services firms. Snowflake stores and queries data at scale but holds no finance objects of its own. Connecting the two lands Deltek project, firm, invoice, and journal entry data in Snowflake tables, where finance and analytics teams can report on it alongside other sources. ml-connector reads from the Deltek Vantagepoint REST API and writes idempotent upserts into Snowflake through its SQL API on the cadence you set. It can also read reconciled rows back out of Snowflake when a downstream flow needs them.
What moves between them
The main flow runs from Deltek into Snowflake. ml-connector reads Vantagepoint firms, projects, employees, AP and AR invoices, journal entries, and GL accounts and upserts them into the matching Snowflake tables on a schedule you control. Each record is written with a MERGE statement keyed on its Deltek identifier, so a re-read updates the existing row instead of duplicating it. When a flow needs reconciled or enriched values, ml-connector reads them back out of Snowflake with a timestamp watermark query. Deltek remains the system of record for accounting; ml-connector does not post financial entries from Snowflake back into Deltek unless a flow is configured to do so.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Deltek side it accepts the full tenant URL per customer, since Vantagepoint publishes no shared hostname, obtains an OAuth2 password-grant token, and refreshes it when a call returns 401. The API user must hold a role with full field visibility, because hidden fields such as fees return as zero rather than an error. On the Snowflake side it signs a key-pair JWT per request cycle, since the JWT expires within an hour, and sends it with the KEYPAIR_JWT token-type header. Reads from Deltek use page-based pagination, and writes to Snowflake use MERGE with a requestId so a retry after a network failure cannot double-insert. Deltek has no usable idempotency key and Snowflake sends no push events, so both sides are polled rather than waiting for a webhook. Line-item detail maps into VARIANT columns, identifiers are written as lowercase quoted columns to avoid case mismatch, and the connector backs off and retries on HTTP 429 from either system. Every record carries a full audit trail and can be replayed if a downstream write fails.
A real-world example
A mid-sized architecture and engineering firm of about three hundred staff runs Deltek Vantagepoint for projects, billing, and accounting across several offices. Before the integration, analysts pulled project budget and actuals data into spreadsheets each week to build utilization and profitability dashboards, and the numbers were stale by the time leadership saw them. With Deltek and Snowflake connected, project, invoice, and journal entry data lands in Snowflake automatically, where it joins time and resource data already in the warehouse. Dashboards refresh from a single current source, and the weekly export-and-rebuild routine is gone.
What you can do
- Upsert Deltek Vantagepoint firms, projects, employees, AP and AR invoices, journal entries, and GL accounts into Snowflake tables.
- Write each record with an idempotent MERGE keyed on its Deltek identifier so re-reads update rows instead of duplicating them.
- Authenticate Deltek with OAuth2 against its tenant URL and Snowflake with a self-signed key-pair JWT.
- Poll Deltek on a schedule you control, since its webhooks carry no fixed schema and Snowflake sends no push events.
- Read reconciled rows back out of Snowflake with a timestamp watermark when a downstream flow needs them.
Questions
- Which direction does data move between Deltek and Snowflake?
- The main flow is Deltek into Snowflake. Firms, projects, employees, AP and AR invoices, journal entries, and GL accounts are read from Vantagepoint and upserted into Snowflake tables. Snowflake is treated as an analytics destination, so ml-connector reads reconciled rows back out when a flow needs them but does not post financial entries into Deltek unless configured to.
- Snowflake has no invoice or vendor objects, so how does the data land there?
- Snowflake is a data warehouse, not an ERP, so every entity is a user-defined table rather than a built-in finance object. ml-connector maps each Deltek record to an agreed table schema and writes it through the SQL API with a MERGE statement, storing line-item detail in VARIANT columns. The Deltek identifier is the merge key, which keeps repeat syncs idempotent.
- How does the integration handle authentication and the lack of webhooks on both sides?
- ml-connector obtains a Deltek OAuth2 password-grant token against the customer tenant URL and refreshes it on a 401, and signs a fresh Snowflake key-pair JWT each request cycle because the JWT expires within an hour. Neither system pushes usable data events to an external endpoint, so ml-connector polls Deltek with page-based pagination on the schedule you set. Writes use a Snowflake requestId so a retry after a network failure cannot double-insert.
Related integrations
More Deltek integrations
Other systems that connect to Snowflake
Connect Deltek and Snowflake
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started