ml-connector
MYOBShipBob

MYOB and ShipBob integration

MYOB manages your accounting and inventory. ShipBob manages your fulfillment and shipping. Connecting the two keeps your orders and inventory in sync across both systems. Customer invoices and SKU data flow from MYOB into ShipBob so orders pick and ship against the correct products, and shipment status flows back into MYOB so your sales records reflect what actually left the warehouse. ml-connector handles MYOB's OAuth2 plus company file credentials, ShipBob's webhook signature validation, and the different sync cadences each system uses.

How MYOB works

MYOB AccountRight is a cloud or desktop accounting platform for SMEs in Australia and New Zealand. It exposes contacts, invoices, purchase orders, items, and general ledger accounts through the MYOB Business API v2 using REST with OData v3 query filters. Authentication requires OAuth2 Authorization Code flow plus a Base64-encoded company file username and password on every request. Access tokens expire in 20 minutes, and refresh tokens last one week. MYOB publishes no webhook system, so data is detected by polling with OData $filter on LastModified timestamps. The API enforces a rate limit of 8 requests per second and 1 million requests per day, and requires RowVersion on PATCH or PUT operations.

How ShipBob works

ShipBob is a 3PL and fulfillment platform where merchants send inventory to fulfillment centers for picking, packing, and shipping. It exposes orders, shipments, products, inventory levels, receiving (warehouse receiving orders), returns, and billing through REST APIs authenticated with OAuth2 or Personal Access Tokens. All calls require Authorization header and shipbob_channel_id header to identify which channel is acting. ShipBob uses webhook-driven sync with event topics like order.shipped, order.shipment.tracking.updated, and return.created, signed with HMAC-SHA256. Inventory is measured in ounces and inches, and read operations can span all channels but write operations are restricted to the caller's own channel.

What moves between them

MYOB invoices and inventory items flow into ShipBob on a poll schedule controlled by your fulfillment cycle. Each MYOB customer becomes a ShipBob contact, and each MYOB item becomes a ShipBob product (linked by SKU). When MYOB invoices are marked as invoiced, ml-connector creates corresponding ShipBob orders. Shipment records flow back from ShipBob into MYOB as sales receipts or journal entries to close out invoices and reflect fulfillment in your accounting. The flow is bidirectional but asymmetric: MYOB is the source for products and invoice metadata, ShipBob is the source for shipment status and tracking.

How ml-connector handles it

ml-connector polls MYOB on a schedule aligned to your fulfillment cycles, filtering invoices and items by LastModified timestamp to detect changes. It caches MYOB OAuth tokens across their 20-minute window and refreshes before expiry so polling does not stall. For each invoice in MYOB, it checks that the customer exists in MYOB contacts (creating if needed) and that all line-item SKUs exist as products in ShipBob, creating them from MYOB item data if they do not. When an invoice is ready, it posts to ShipBob as an order associated with the ShipBob location your customer uses. ShipBob pushes shipment events (order.shipped, order.shipment.tracking.updated) to a registered webhook endpoint, which ml-connector verifies with HMAC-SHA256 validation. On receiving a shipment event, it updates the matching MYOB invoice to mark it shipped and stores the tracking URL in the invoice memo field. The RowVersion field in MYOB is checked before PATCH to avoid 409 conflicts on concurrent edits, and rate-limit responses (HTTP 429) trigger exponential backoff.

A real-world example

A small wholesale distributor in Melbourne uses MYOB to manage customer invoices and product inventory, and uses ShipBob to store stock in their Sydney and Brisbane fulfillment centers. Before the integration, the warehouse team received printed invoices from the accounting system, manually entered each SKU into the ShipBob mobile app, and then printed shipping labels. The accounting team had to manually cross-reference ShipBob shipment status with MYOB invoices at month-end to record revenue. With MYOB and ShipBob connected, invoices flow directly into the fulfillment system with line-item SKUs automatically populated, the warehouse scans and ships, and tracking numbers are automatically updated in MYOB so the accounting team's month-end reconciliation is complete without manual lookups.

What you can do

  • Sync MYOB customer invoices into ShipBob as orders, with line items mapped to ShipBob products by SKU.
  • Create ShipBob products from MYOB inventory items, matching MYOB SKU codes to ShipBob variant IDs.
  • Receive ShipBob shipment events via webhook and update MYOB invoices with tracking URLs and shipped status.
  • Cache and refresh MYOB OAuth tokens to avoid interruptions across the 20-minute token expiry window.
  • Validate MYOB RowVersion on updates and back off on rate-limit responses to maintain sync reliability.

Questions

How does ml-connector handle MYOB's authentication plus company file credentials?
ml-connector stores both the OAuth2 access token and the company file username/password encrypted, and includes both on every MYOB API call: the Bearer token in the Authorization header and the Base64-encoded CF credentials in the x-myobapi-cftoken header. It caches tokens for their 20-minute lifetime and refreshes before expiry, so polling does not stall on 401 responses.
What happens when a MYOB invoice has a product SKU that does not yet exist in ShipBob?
ml-connector checks each line-item SKU against ShipBob products before posting the order. If a SKU is missing, it creates the product in ShipBob from the MYOB item data (name, SKU code, description). The product is created in the customer's ShipBob account so it is available for future orders without manual setup.
How does ml-connector keep ShipBob shipment status in sync with MYOB invoices?
ShipBob pushes shipment events (order.shipped, order.shipment.tracking.updated) to ml-connector's webhook endpoint, signed with HMAC-SHA256. ml-connector verifies the signature, finds the matching MYOB invoice by order reference, and updates it to shipped status with the tracking URL stored in the memo field. Repeat shipments update the same invoice without creating duplicates.

Related integrations

Connect MYOB and ShipBob

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

Get started