ml-connector
QADLooker

QAD and Looker integration

QAD runs manufacturing and finance. Looker is a business intelligence layer that queries your data warehouse and turns modeled data into reports. Connecting the two brings the numbers Looker calculates from your warehouse back into QAD, where they can be checked against the source ledger. ml-connector runs the Looker queries on a schedule and posts the results into QAD as reconciliation references, so analysts and finance work from the same figures. Because Looker holds no native financial records, the flow pulls computed summaries out rather than pushing transactions in.

How QAD works

QAD Adaptive ERP exposes suppliers, purchase orders, supplier invoices, GL accounts, cost centers, items, and goods receipts through REST business document APIs, documented in Swagger inside each customer instance. The cloud product authenticates with a JWT session or OAuth2 bearer token against a tenant-specific URL, so there is no shared hostname. Older on-premise sites run QAD Enterprise Edition with the QXtend SOAP framework instead. QAD has no public webhook system for cloud connectors, so finance records are read by polling.

How Looker works

Looker exposes query execution, Looks, dashboards, scheduled plans, users, and folders through Looker API 4.0, a REST/JSON API over HTTPS at an instance-specific hostname. Authentication exchanges an API3 client id and secret at the login endpoint for a bearer token that lasts one hour, with no refresh token, sent on each call using the token scheme rather than Bearer. Looker has no native invoice, purchase order, or GL account objects; financial figures come from running queries against Explores modeled in LookML. It sends no real-time change events, only scheduled-plan exports to a webhook, email, S3, or SFTP destination on a cron, with no signature header.

What moves between them

The flow runs from Looker into QAD. ml-connector runs the Looker queries and Looks that model your general ledger, payables, and procurement data, then writes the returned summaries into QAD as journal references and reconciliation values mapped to the matching QAD GL accounts and cost centers. Looker holds no transactional records and is read-only for finance, so ml-connector never posts invoices, purchase orders, or payments back into Looker. Cost center and account names are aligned on both sides so each pulled figure lands on a valid QAD dimension. Runs follow a schedule you set, since Looker has no record-level event stream.

How ml-connector handles it

ml-connector stores both credential sets encrypted. For Looker it posts the API3 client id and secret to the login endpoint, caches the returned token for its one-hour life, sends it on each call with the token scheme rather than Bearer, and re-authenticates when a request returns 401. On the QAD side it accepts the full tenant URL per customer, since QAD publishes no shared base address, and validates entity paths against that instance. Each Looker query names the model, Explore, and fields from the customer LookML, because there is no standard schema, and results return paged by limit and offset with a 5000 row cap per call, so large extracts are chunked through offset loops or async query tasks. Looker enforces about 60 requests per minute per key and returns 429 when exceeded, so ml-connector backs off and retries. Because Looker emits no real-time events, reads are polled on your schedule, or a Looker scheduled plan can POST results to an ml-connector ingest endpoint secured by a secret in the URL, since Looker adds no signature header. Cost centers and accounts are mapped first so every posted figure references a QAD GL account and cost center that already exists. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized contract manufacturer runs QAD Adaptive ERP for production, procurement, and finance, and models its warehouse data in Looker for management reporting across three plants. Before the integration, the finance team trusted QAD for the ledger but reviewed spend and margin in Looker dashboards, and reconciling the two at month-end meant exporting Looker reports to spreadsheets and matching them against QAD by hand. With QAD and Looker connected, ml-connector runs the same Looker queries on a schedule and writes the computed GL and payables summaries into QAD as reconciliation references against each plant cost center. The two views line up automatically, and the manual export and match step is gone.

What you can do

  • Run Looker queries and Looks for modeled GL, payables, and procurement data and post the summaries into QAD.
  • Map Looker query results to QAD GL accounts and cost centers so each figure lands on a valid dimension.
  • Authenticate Looker with the API3 login token and QAD with its tenant-specific session, refreshing the Looker token on expiry.
  • Page through Looker results with limit and offset, chunking large extracts and using async query tasks past the 5000 row cap.
  • Poll on the schedule you set or accept a Looker scheduled-plan export, with retries and a full audit trail on every record.

Questions

Which direction does data move between QAD and Looker?
The flow runs from Looker into QAD. ml-connector runs Looker queries for modeled financial data and writes the summaries into QAD as reconciliation references. Looker has no native transactional records and is read-only for finance, so no invoices or payments are written back into Looker.
Can ml-connector write invoices or purchase orders into Looker?
No. Looker is a business intelligence layer over a data warehouse and has no invoice, purchase order, or GL account objects. Its financial figures are query results modeled in LookML, so the integration pulls computed summaries out of Looker rather than pushing transactions in.
Does Looker send real-time events, or does ml-connector poll?
Looker sends no record-level change events. It only delivers scheduled-plan exports on a cron, and those carry no signature header. ml-connector therefore polls Looker on the schedule you set, or accepts a scheduled-plan export to an ingest endpoint secured by a secret in the URL, and re-authenticates whenever the one-hour token expires.

Related integrations

Connect QAD and Looker

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

Get started