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.
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
More MYOB integrations
Other systems that connect to ShipBob
Connect MYOB and ShipBob
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started