ml-connector
MYOBMicrosoft Power BI

MYOB and Microsoft Power BI integration

MYOB runs your accounting. Microsoft Power BI runs your reporting and analytics. Connecting the two keeps your dashboards fed with current invoice, ledger, and tax information from MYOB without manual exports or re-keying. Once the connection is live, every sync pushes new and changed MYOB transactions into Power BI datasets, where you build reports and drill into patterns without leaving Power BI or re-creating tables.

How MYOB works

MYOB Business API exposes contacts (suppliers, customers, employees), purchase invoices and orders, sales invoices, customer and supplier payments, general ledger accounts, general journal entries, tax codes, and inventory items through a REST API secured with OAuth2. Every call also requires an x-myobapi-key header and a Base64-encoded company file username and password (x-myobapi-cftoken header), and tokens expire after 20 minutes. MYOB enforces an 8 requests per second rate limit and 1,000,000 requests per day per API key. MYOB does not support webhooks, so records are discovered by polling with OData LastModified filters to fetch only records changed since the last sync.

How Microsoft Power BI works

Microsoft Power BI accepts data through push datasets, which are semantic models that ingest rows via REST API without needing ETL or Power Query. Every push dataset requires you to define table schema (column names and data types) before posting rows. Power BI uses OAuth2 service principal authentication with client credentials, and each service principal must be added as a member or admin to every workspace it accesses. Tokens expire within an hour and must be refreshed by re-requesting credentials. Power BI is a one-way sink; it does not push data outbound or send webhooks to external systems.

What moves between them

The main flow is MYOB to Power BI. On a schedule you set, ml-connector polls MYOB for new and changed purchase invoices, sales invoices, general ledger accounts, account balances, and tax codes using OData LastModified filters. These records are transformed into columnar rows (account number, GL description, debit, credit, invoice number, supplier name, date, amount, tax code, etc.) and pushed into Power BI push dataset tables. Power BI is read-only; no data flows back from Power BI to MYOB.

How ml-connector handles it

ml-connector stores MYOB credentials (OAuth token, API key, and company file password) encrypted and provides the three required headers on every MYOB request, refreshing the token before it expires at the 20-minute mark. It caches OData LastModified timestamps from the previous sync so each poll fetches only records changed since then, staying well under MYOB's 1,000,000 daily request quota. On the Power BI side, ml-connector authenticates as a service principal using OAuth2 client credentials, obtains workspace and dataset metadata to verify the push dataset schema exists, and posts rows in batches to respect Power BI's payload limits. If a batch POST fails, ml-connector retries with exponential backoff up to a configurable limit, then logs the failure for manual replay. The connector verifies the service principal has member access to the workspace before the first push; if it does not, the job fails with an actionable error message.

A real-world example

A mid-sized professional services firm in Sydney runs MYOB for accounting and invoicing. The finance manager and partners need visibility into outstanding invoices, aging analysis, and tax reconciliation across clients, but currently export CSV from MYOB weekly and rebuild pivot tables in Excel. With MYOB and Power BI connected, the firm's Power BI dashboard auto-refreshes every night with the latest invoices and GL account balances from MYOB. Partners log into Power BI to see which clients are overdue, what tax is accrued this month, and year-to-date revenue by service line, all without leaving Power BI or waiting for manual exports. The weekly export and manual table rebuild disappear.

What you can do

  • Sync MYOB purchase invoices, sales invoices, GL accounts, account balances, and tax codes on a schedule to Power BI push datasets.
  • Handle MYOB's three-part authentication (OAuth token, API key, company file password) and refresh tokens before expiry.
  • Use OData LastModified filters to poll only changed records and stay within MYOB's daily API quota.
  • Authenticate Power BI with OAuth2 service principal credentials and verify workspace member access before the first push.
  • Replay failed dataset pushes and track every sync in a full audit trail with record-level error details.

Questions

Does all of MYOB sync into Power BI or only specific tables?
ml-connector syncs MYOB purchase invoices, sales invoices, general ledger accounts, account balances, and tax codes by default. You can configure which MYOB entities and which columns populate each Power BI table. Other MYOB entities such as contacts and inventory items can be added if your Power BI dashboards need them.
How does the connector handle MYOB's company file password requirement?
MYOB requires a company file username and password on every API call in addition to OAuth2. ml-connector stores both encrypted and includes them in the required x-myobapi-cftoken header on every request. If the password changes in MYOB, you update the credential in ml-connector and the next sync uses the new password.
What happens if Power BI's service principal loses workspace access?
The connector checks service principal permissions before pushing data. If the service principal is not a member of the Power BI workspace, the first push fails with an error message naming the workspace. You add the service principal as a member in Power BI Admin settings, and the next sync succeeds.

Related integrations

Connect MYOB and Microsoft Power BI

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

Get started