ml-connector
MYOBStripe

MYOB and Stripe integration

MYOB tracks accounting for small and mid-sized businesses in Australia and New Zealand. Stripe processes online payments and subscriptions. Connecting the two keeps your AR records current with every payment and refund, and syncs customer master data in both directions. When a customer pays an invoice in Stripe, the payment posts into MYOB without re-keying. New customers added in Stripe can flow to MYOB as contacts, and invoices issued in Stripe can be mirrored in MYOB for consolidated AR reporting.

How MYOB works

MYOB AccountRight Live API v2 exposes contacts, purchase orders, bills, sale invoices, customer payments, supplier payments, GL accounts, GL journals, inventory items, tax codes, categories, and jobs through REST endpoints with OData v3 query parameters. Authentication requires OAuth2 bearer token plus a company file username and password sent on every call in two additional headers. Access tokens expire after 20 minutes; refresh tokens last one week. MYOB does not support webhooks or push notifications, so connectors must poll using OData LastModified filters to detect changes since the last sync.

How Stripe works

Stripe exposes customers, invoices, invoice items, charges, payment intents, subscriptions, products, prices, refunds, payment methods, disputes, and payouts through REST API with JSON responses. All calls authenticate via API Key sent as HTTP Basic Auth with the key as username and empty password. Stripe pushes events to registered webhook endpoints via HTTPS POST with HMAC-SHA256 signature verification. Event delivery is at-least-once within a 5-minute replay window and retries for up to 3 days. Stripe supports no vendors, suppliers, purchase orders, GL accounts, or employee records; it is a payments platform, not an ERP.

What moves between them

The integration runs from Stripe into MYOB. When a Stripe customer record is created or updated, it syncs to MYOB as a contact. When a Stripe invoice is paid or a charge is successfully captured, the payment records in MYOB as a customer payment allocated to the matching invoice. Stripe refunds flow into MYOB as credit memos on the customer account. MYOB invoices can be queried for matching customers in Stripe to identify which AR records have been paid outside the system. Flows are event-driven where Stripe webhooks trigger the sync, plus polling on a schedule for invoice reconciliation.

How ml-connector handles it

ml-connector receives Stripe webhook events at a registered endpoint, validates the HMAC signature using the webhook secret, and parses payment intent and invoice events. For each event, it queries MYOB for the matching customer contact using OData LastModified filters to find or create a new contact. It then posts the payment into MYOB as a customer payment record, mapped to the customer and the original sale invoice. Because MYOB requires both OAuth bearer token and company file credentials (CF username and password), ml-connector stores all three encrypted and supplies them on every request. MYOB enforces a stale RowVersion on PATCH/PUT, so ml-connector pre-checks contact RowVersion before updating. Stripe-side, the integration also polls for invoice and payment intent state to catch webhook losses, since Stripe delivery is at-least-once but not guaranteed to arrive. Every payment and customer record carries an audit trail and can be replayed if a downstream posting fails.

A real-world example

A small online retail business in Sydney runs MYOB for accounting and Stripe for payment processing. Each day, dozens of customers place orders, pay via credit card on the website, and receive digital products. Before the integration, the finance team exported Stripe payment reports each morning and manually entered each payment into MYOB as a customer payment, matching each Stripe charge to the correct MYOB invoice by hand. This was time-consuming, error-prone, and delayed month-end close because unpaid invoices in Stripe did not sync with MYOB's AR aging. With MYOB and Stripe connected, each payment posts to MYOB automatically as soon as it clears in Stripe, customers are synced as contacts, and the AR aging in MYOB stays current without manual work.

What you can do

  • Sync Stripe customer records into MYOB as contacts, and update them when Stripe customer data changes.
  • Post Stripe charges and successful payment intents into MYOB as customer payments, matched to the correct invoice.
  • Sync Stripe refunds into MYOB as credit memos on the customer account.
  • Handle MYOB's dual authentication (OAuth2 bearer token plus company file username and password) and enforce RowVersion conflict detection on contact updates.
  • Receive Stripe webhooks with HMAC-SHA256 signature verification, and poll for invoice state to catch webhook losses.

Questions

Why does the integration poll MYOB when it can receive Stripe webhooks?
MYOB does not support webhooks or push notifications on the AccountRight Live API. ml-connector receives events from Stripe via webhooks and then queries MYOB on a schedule using OData LastModified filters to detect changes. This polling also catches any MYOB records created or updated outside the integration, ensuring no AR drift.
Does the integration write invoices back into Stripe, or only payments into MYOB?
The integration is asymmetrical. It posts Stripe charges and refunds into MYOB as customer payments and credit memos, but it does not write invoices from MYOB into Stripe. Stripe invoices are the source of truth for payments; MYOB invoices are matched to Stripe charges for AR reconciliation.
How does ml-connector handle MYOB's two-factor authentication (OAuth2 plus company file credentials)?
ml-connector stores both the OAuth2 bearer token and the company file username and password encrypted in the database. On every API call to MYOB, it supplies the bearer token in the Authorization header and the company file credentials in two additional headers (x-myobapi-cftoken as Base64 of username:password, and x-myobapi-key for the API key). If the company file credentials are incorrect, every MYOB call returns 401 and the sync fails.

Related integrations

Connect MYOB and Stripe

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

Get started