ml-connector
DeltekLooker

Deltek and Looker integration

Deltek runs project accounting and finance for services firms and government contractors. Looker turns warehouse data into dashboards and reports for the whole company. Connecting the two means Deltek's projects, invoices, journal entries, and employee records flow into the data warehouse that Looker models, so finance and operations dashboards show current ERP numbers instead of stale extracts. ml-connector reads the very different APIs on each side and moves the data on a schedule you control. It can also pull aggregated Looker query results back when a summarized figure is useful as reference.

How Deltek works

Deltek Vantagepoint exposes firms, contacts, employees, projects, opportunities, AP invoices, AR invoices, journal entries, cash receipts, expense reports, and GL accounts through a REST API on a tenant-specific URL such as company.deltekfirst.com. It authenticates with OAuth2 using the password grant, which must be enabled in the application settings, and the access token is passed as a bearer token. There are no documented public endpoints for purchase orders. Vantagepoint webhooks are workflow-driven callbacks with no signature header, so finance records are read by polling. Older Deltek Costpoint sites integrate through SOAP web services or flat-file preprocessor templates and are pull-only.

How Looker works

Looker is a BI and analytics layer over a data warehouse, not a transactional ERP, so it has no native invoice, purchase order, vendor, or GL account objects. Those values live in the warehouse and are modeled in LookML. The Looker API 4.0 runs queries and saved Looks against modeled data and returns JSON, CSV, or XLSX, capped at 5000 rows per call unless you use async query tasks. Writes are limited to content, users, groups, and scheduled plans; there is no path to post a financial transaction into Looker. Authentication is OAuth2 client credentials against the instance login endpoint, the token uses the token scheme rather than Bearer, expires after one hour, and has no refresh token. Scheduled plans can POST query results to a webhook on a cron, but Looker accepts no inbound webhooks.

What moves between them

The main flow runs from Deltek into the warehouse that Looker reads. ml-connector polls Deltek for projects, firms, employees, AP and AR invoices, journal entries, and GL accounts on the schedule you set, and lands them in the warehouse tables your LookML models sit on, so Looker dashboards report on current ERP data. Because Looker holds no source-of-truth finance records, the reverse direction is limited: ml-connector can run a Looker query or saved Look and pull an aggregated result, such as a budget or pipeline summary, back as reference. No financial transactions are ever written into Looker, since the API offers no such path.

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 Deltek publishes no shared base address, requests an OAuth2 token with the password grant, and refreshes the bearer token before it expires. On the Looker side it logs in with client credentials, sends the token using Looker's token scheme rather than Bearer, and re-authenticates whenever a call returns 401, because Looker tokens last only one hour and have no refresh token. Deltek finance records map to the warehouse tables your LookML reads, so a Deltek invoice or journal entry becomes a row Looker can query rather than a Looker object. Because Deltek cloud webhooks are workflow-only and carry no signature, ml-connector polls rather than relying on a push, and it spaces requests with conservative backoff since Deltek publishes no rate limit. Deltek has no idempotency key, so it checks for an existing record by number before writing to avoid duplicates, and it stays under Looker's roughly sixty requests per minute, backing off on 429. Large Looker pulls use async query tasks rather than the 5000-row single-call cap. Every record carries automatic retries, a full audit trail, and error replay if a downstream call fails.

A real-world example

A professional services firm of about 400 people runs Deltek Vantagepoint for project accounting, billing, and AP, and uses Looker on a BigQuery warehouse for company-wide reporting. Before the integration, an analyst exported project, billing, and labor data from Vantagepoint into spreadsheets each week and loaded it into the warehouse by hand, so the utilization and project-margin dashboards in Looker were always several days behind and prone to copy-paste errors. With Deltek and Looker connected through ml-connector, project, invoice, and journal data flows into the warehouse automatically on a daily schedule, and the Looker dashboards refresh against current ERP numbers. Leadership reviews real margins and utilization without waiting on a manual export, and the weekly spreadsheet step is gone.

What you can do

  • Land Deltek projects, firms, employees, AP and AR invoices, journal entries, and GL accounts in the warehouse Looker reports on.
  • Keep Looker dashboards refreshed against current Deltek data on the schedule you set.
  • Pull aggregated Looker query and Look results back as reference summaries where a rolled-up figure is useful.
  • Bridge Deltek OAuth2 tenant login and Looker's client-credentials token, sent with Looker's token scheme on API 4.0.
  • Poll Deltek because its webhooks are workflow-only, with retries, a full audit trail, and error replay on every record.

Questions

Which direction does data move between Deltek and Looker?
The main flow is Deltek into the warehouse that Looker reads. Projects, invoices, journal entries, employees, and GL accounts move from Deltek into your warehouse tables so Looker can report on them. The reverse is limited to pulling aggregated Looker query results back as reference, because Looker has no native financial objects and the API offers no way to post a transaction into it.
Can ml-connector write Deltek transactions into Looker?
No. Looker is a BI layer over a data warehouse and stores no invoice, purchase order, or GL account objects, and its API only writes content, users, and scheduled plans. Deltek finance records are landed in the warehouse Looker models instead, so they become rows Looker can query rather than objects inside Looker itself.
How does the integration handle Deltek's lack of signed webhooks and Looker's short token?
Deltek cloud webhooks are workflow-driven and carry no signature, so ml-connector polls Deltek on the schedule you set rather than relying on a push. Looker access tokens expire after one hour with no refresh token, so ml-connector caches the token and re-authenticates transparently whenever a call returns 401.

Related integrations

Connect Deltek and Looker

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

Get started