ml-connector
MYOBLooker

MYOB and Looker integration

MYOB holds your accounting ledger, invoices, bills, and contacts. Looker models your data warehouse and powers BI dashboards. Connecting the two lets your finance and analytics teams query and report on MYOB data in Looker without manual export or re-keying. Invoices, bills, GL accounts, and transactions flow from MYOB into your Looker instance on a schedule you control, and any dashboard or scheduled report can pull live MYOB numbers.

How MYOB works

MYOB AccountRight Live API v2 exposes contacts, purchase orders, invoices, bills, general ledger accounts, GL journals, inventory items, and tax codes through REST with OData v3 query parameters. The API uses OAuth2 Authorization Code flow for API access plus a separate company file username and password, both required on every call via three headers: Authorization Bearer token, x-myobapi-key (API Key), and x-myobapi-cftoken (Base64 encoded CF credentials). Access tokens expire in 20 minutes; refresh tokens last one week. MYOB does not support webhooks, so changes are detected by polling with OData $filter on LastModified timestamps. Rate limits are 8 requests per second and 1,000,000 requests per day; HTTP 429 indicates throttling.

How Looker works

Looker is a BI platform (part of Google Cloud) that connects to data warehouses and exposes modeled data via REST API. It uses OAuth2 client credentials to issue access tokens (valid for one hour with no refresh endpoint) and does not natively store ERP data. Instead, it models warehouse dimensions and facts, and access is controlled by Looker roles and permission sets. Looker supports Scheduled Plans for outbound delivery via webhook, email, S3, or SFTP, and Pull-based REST querying for active integration. There are no inbound webhooks or real-time change events; data is retrieved on demand or by scheduled queries.

What moves between them

MYOB records move one way into Looker. MYOB invoices, bills, and GL journal entries are polled on a schedule and written into a Looker connection or warehouse table. Contacts, GL accounts, tax codes, and job categories are synced as dimension reference data. The flow runs on whatever cadence you choose (daily, weekly, after period close). Looker dashboards then query this data live without needing MYOB API calls on every dashboard load.

How ml-connector handles it

ml-connector maintains both credential sets encrypted. On the MYOB side, it stores the OAuth2 token and company file username/password separately, refreshes the 20-minute token before expiry, and uses OData $filter with LastModified to poll only changed records since the last sync. It respects MYOB's rate limits (8 requests per second, 1 million per day) and backs off on HTTP 429. On the Looker side, ml-connector obtains a fresh bearer token at the start of each sync (since the 1-hour token does not refresh), then writes MYOB records into a Looker connection or pushes them to a specified warehouse table. MYOB RowVersion fields are tracked to detect conflicts on updates; if a record is modified between fetch and write, ml-connector retries or surfaces the conflict. Every record carries an audit trail so replays are possible if a downstream write fails.

A real-world example

A mid-sized Australian professional services firm uses MYOB for invoicing clients, tracking expenses, and recording GL entries. The finance team and project managers need to see invoice aging, expense trends, and GL account balances in real-time dashboards without asking finance to export CSV files every week. By connecting MYOB to Looker, Invoices and bills flow into Looker automatically each morning, dashboards show invoice aging and cash flow by project, and GL balances are visible in executive reports without manual re-keying. Month-end close is faster because the finance team can verify GL balances directly from Looker instead of exporting and comparing spreadsheets.

What you can do

  • Poll MYOB invoices, bills, GL journal entries, accounts, and contacts on a schedule and write them into Looker as reference or fact tables.
  • Handle MYOB OAuth2 token refresh (20-minute expiry) and company file password authentication on every sync.
  • Detect MYOB changes using OData $filter on LastModified timestamps so full syncs are not needed.
  • Respect MYOB rate limits (8 requests per second, 1 million per day) and back off on HTTP 429 throttling.
  • Refresh Looker bearer tokens hourly and write audit records for every invoice, bill, and GL entry synced.

Questions

Does MYOB data flow into Looker in real time?
No. MYOB does not support webhooks, so ml-connector polls on a schedule you set (daily, weekly, or after period close). Looker then queries the synced MYOB data on demand or via scheduled reports. This approach keeps API costs low and respects MYOB's rate limits.
Which MYOB records can sync into Looker?
MYOB invoices, bills, purchase orders, general ledger accounts, GL journals, contacts (suppliers, customers, employees), inventory items, tax codes, and job categories all sync into Looker. These records become tables or dimensions in your Looker connection, and dashboards query them like any other warehouse table.
How does ml-connector handle MYOB's company file password and OAuth2 token?
ml-connector stores both encrypted and presents the company file password via the x-myobapi-cftoken header on every call. It refreshes the OAuth2 bearer token before the 20-minute expiry so calls do not fail mid-sync. If token refresh fails, ml-connector retries and surfaces the error so it does not cause silent data loss.

Related integrations

Connect MYOB and Looker

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

Get started