ml-connector
MYOBSlack

MYOB and Slack integration

MYOB runs your accounting in Australia and New Zealand. Slack runs your team communication. Connecting the two surfaces critical accounting events in real time so your finance and operations teams see bill approvals, invoice payments, and GL journal posts without checking MYOB constantly. New purchase orders, supplier payments, and customer invoice changes appear as formatted messages in designated Slack channels, keeping everyone aligned on cash flow and GL activity without cluttering email.

How MYOB works

MYOB exposes contacts, bills, invoices, purchase orders, payments, GL accounts, inventory items, and general journal entries through the MYOB Business API (AccountRight Live API v2), a REST service with OData v3 query parameters. Authentication requires OAuth2 Authorization Code flow plus company file username and password sent with every call in separate headers. Access tokens expire in 20 minutes and are renewed via refresh tokens lasting one week. MYOB does not support webhooks, so data is discovered by polling with the OData $filter on LastModified timestamps. The API enforces rate limits of 8 requests per second and 1 million requests per day per API key, and requires RowVersion field validation on all PATCH and PUT operations to prevent stale-record conflicts.

How Slack works

Slack is a cloud messaging platform accessed through the Slack Web API and Events API. The Web API is REST-based, with methods organized as family.action (e.g. chat.postMessage, conversations.list). Authentication uses OAuth2 to produce a non-expiring bot token (xoxb- prefix) passed in the Authorization header on every request. Slack also supports push-model event webhooks delivered to an HTTPS endpoint via HTTP POST callbacks. Each webhook event carries an HMAC-SHA256 signature in the X-Slack-Signature header that must be verified with constant-time comparison. Webhook requests include a timestamp that must not be older than 5 minutes, and the endpoint must respond with HTTP 2xx within 3 seconds or Slack retries up to 3 times with exponential backoff.

What moves between them

The main flow is MYOB into Slack. Bills, invoices, purchase orders, supplier payments, customer payments, and GL journal entries are polled from MYOB and posted as formatted messages into Slack channels designated by your team. Each record type is routed to its own channel so finance, operations, and AR/AP teams see only the events they need. The sync runs on a schedule you control, typically every 15 or 30 minutes during business hours, aligned with your accounting workflow. Slack acknowledgments and reactions are logged in the audit trail but do not flow back into MYOB.

How ml-connector handles it

ml-connector stores MYOB API credentials and company file passwords encrypted. On every poll cycle, it refreshes the OAuth2 bearer token, then calls the MYOB Business API with the company file credentials and API key in the required headers. It retrieves records modified since the last sync using OData $filter on LastModified timestamps and maps each record type (Bill, Invoice, SupplierPayment, etc.) to a message template. Before posting to Slack, ml-connector formats the message with invoice amounts, GL account codes, job codes, and contact names from the retrieved records. Each Slack post uses chat.postMessage with the bot token, and ml-connector captures the returned ts (timestamp) and channel ID in the audit trail for message tracking. On Slack's side, webhook signature verification is performed with constant-time HMAC-SHA256 comparison using the signing secret. If MYOB returns HTTP 429 for rate limit, ml-connector backs off exponentially and retries. If a Slack post fails, the record is marked for replay on the next cycle.

A real-world example

A mid-sized Australian consulting and contracting firm runs MYOB for accounting and uses Slack for team coordination across four offices. The finance team processes 80 to 100 bills per week from vendors and 40 to 60 customer invoices per cycle, and the operations team manages job codes and cost allocations across projects. Before the integration, the operations manager had to log into MYOB several times daily to check approval status on large bills and verify job allocations were correct before posting GL entries, and the project leads had no visibility into invoice payment status without emailing finance. With MYOB and Slack connected, every bill posted by a vendor flows into the finance-bills channel with supplier name, amount, GL account, and job code, and every customer invoice payment is posted to operations-cash-flow. Project leads now see invoice status immediately in their project channels, and the finance manager catches GL posting errors in real time before they compound in month-end reconciliation.

What you can do

  • Post MYOB bill and invoice events to Slack channels with supplier name, amount, GL account, and job code.
  • Stream purchase orders and supplier payments to designated channels so your operations and AP teams stay synchronized.
  • Track customer invoice payments and GL journal entries as Slack messages with a full audit trail per record.
  • Authenticate MYOB with OAuth2 and company file credentials, and verify Slack webhook signatures with HMAC-SHA256.
  • Poll MYOB on a schedule you control, with exponential backoff retry on rate limits and full message tracking.

Questions

Which direction does data flow between MYOB and Slack?
The main flow is MYOB into Slack. Bills, invoices, purchase orders, payments, and GL journal entries are polled from MYOB and posted as formatted messages to designated Slack channels. Slack acknowledgments and reactions are logged for audit purposes but do not write back into MYOB.
How does ml-connector handle MYOB's company file authentication and token refresh?
ml-connector stores MYOB API credentials and company file passwords encrypted in the database. It includes the company file username and password in dedicated headers on every API call along with the API key. OAuth2 access tokens expire after 20 minutes, so ml-connector refreshes the bearer token at the start of each poll cycle before fetching records.
What happens if MYOB rate limits are hit or a Slack message fails to post?
If MYOB returns HTTP 429 for rate limit, ml-connector backs off exponentially and retries the request. If a Slack post fails, the record is queued for replay on the next sync cycle so no accounting events are lost. All successes and retries are recorded in the audit trail.

Related integrations

Connect MYOB and Slack

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

Get started