ml-connector
PlexLooker

Plex and Looker integration

Plex runs manufacturing and finance for discrete producers. Looker powers analytics and dashboards on top of your data warehouse. Connecting the two keeps your operational and financial data flowing into analytics without manual exports. Purchase orders, invoices, and inventory from Plex land in your warehouse automatically, so your dashboards reflect current production status and costs. ml-connector handles the different APIs and keeps the sync on a schedule that matches your business cycle.

How Plex works

Plex exposes suppliers, purchase orders, invoices, customers, sales orders, parts, inventory, GL accounts, and payments through REST JSON APIs at https://cloud.plex.com/api or https://test.cloud.plex.com/api, authenticated with OAuth2 client credentials. Plex also supports legacy SOAP Web Services with Basic auth for datasource queries. There are no native webhooks, so records are read by polling with filters on modified_date or created_date, or via scheduled SFTP datasource extracts. Role-based permissions are enforced, and the integration user must have the correct Plex role assigned or calls return 403 or empty results. Rate limits are not publicly documented, so exponential backoff is required on HTTP 429 responses.

How Looker works

Looker exposes queries, looks, dashboards, scheduled plans, users, groups, and connections through REST JSON APIs at https://<instance>.cloud.looker.com/api/4.0/, authenticated with OAuth2 client credentials that expire after one hour and require re-authentication. Looker does not natively store ERP data; it models warehouse data and serves as the analytics layer on top of your warehouse. Scheduled Plans can deliver data to webhooks, email, S3, or SFTP on a cron-driven schedule. Looker has no inbound webhooks or real-time change events, and no native write path to financial data, so integration is pull-based for querying and schedule-driven for delivery.

What moves between them

The main flow runs from Plex into Looker. ml-connector polls Plex purchase orders, invoices, inventory, and GL accounts on a configurable interval aligned with your planning cycle (daily or weekly typical), filters by modified date to pick up changes, and maps the records to Looker scheduled plans that deliver the data to your warehouse via S3 or SFTP. The sync is unidirectional; Looker serves analytics only and does not write back to Plex.

How ml-connector handles it

ml-connector stores Plex OAuth2 credentials encrypted and refreshes the bearer token on every poll, since Plex tokens do not carry a refresh_token and must be re-acquired from https://accounts.plex.com/oauth2/token. It polls Plex REST APIs on a configurable interval with filters on modified_date to detect changes, and it implements exponential backoff on HTTP 429 since Plex rate limits are not publicly documented. Because Plex enforces role-based permissions, the integration user must have the correct Plex role assigned or API calls will return 403 or empty results; this is validated during connection setup. For Looker, ml-connector refreshes the OAuth2 token on each call since Looker tokens expire after one hour and do not refresh. Purchase orders and invoices are mapped to the matching Looker queries, and the output is scheduled for delivery to your warehouse via S3 or SFTP using Looker's scheduled plans. Every record carries a full audit trail and can be replayed if a downstream load fails.

A real-world example

A mid-sized discrete manufacturer builds automotive components and uses Plex for production, procurement, and inventory. The finance and operations teams need current visibility into purchase orders, supplier performance, and cost by product line, and they use Looker dashboards for daily reporting. Before the integration, the reporting team exported purchase orders and invoice summaries from Plex twice daily and manually uploaded them to the warehouse, then refreshed Looker dashboards. With Plex and Looker connected, purchase orders and invoices flow into the warehouse on a morning and afternoon schedule, Looker dashboards refresh automatically, and the finance team has current data without manual steps.

What you can do

  • Poll Plex purchase orders, invoices, and inventory on a configurable schedule and sync them to Looker scheduled plans.
  • Handle Plex OAuth2 authentication and re-acquire tokens on every poll since Plex tokens do not carry a refresh_token.
  • Map Plex GL accounts, suppliers, and parts to Looker queries so financial and operational data land in the correct warehouse tables.
  • Implement exponential backoff on Plex rate limit responses and validate integration user role permissions before connecting.
  • Deliver Plex data to your warehouse via Looker scheduled plans to S3 or SFTP with full audit trail and replay on failure.

Questions

Which direction does data move between Plex and Looker?
The main flow is Plex into Looker. Purchase orders, invoices, inventory, and GL accounts from Plex are polled and mapped to Looker queries and scheduled plans, which deliver the data to your warehouse. Looker serves as the analytics layer and does not write back to Plex.
How does ml-connector handle Plex OAuth2 tokens and rate limits?
Plex OAuth2 tokens do not carry a refresh_token, so ml-connector refreshes the bearer token on every poll by calling https://accounts.plex.com/oauth2/token with the client credentials. Plex rate limits are not publicly documented, so ml-connector implements exponential backoff on HTTP 429 responses to avoid losing data.
What is the impact of Plex role-based permissions on the integration?
Plex enforces role-based access control, so the integration user must have the correct Plex role assigned or API calls will return 403 or empty results. ml-connector validates the integration user role during connection setup and alerts if permissions are insufficient.

Related integrations

Connect Plex and Looker

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

Get started