MYOB and ShipStation integration
E-commerce merchants using ShipStation for order fulfillment and MYOB for accounting need their order and shipment data in sync. ShipStation captures orders from multiple sales channels with rates and tracking, while MYOB holds the financial record. Connecting the two ensures each order that ships creates an invoice in MYOB without manual re-entry, shipment tracking updates the corresponding invoice line items, and your GL accounts always reflect what actually left the warehouse.
What moves between them
Orders flow from ShipStation into MYOB as sales invoices. When a new order is received in ShipStation, ml-connector creates a matching invoice in MYOB under the same customer contact with line items matching the order items and quantities. When the order ships, ml-connector polls ShipStation for shipment status and updates the corresponding invoice in MYOB to mark items as fulfilled. Customer records are created in MYOB on first invoice if the customer does not already exist, mapped from ShipStation's customer data.
How ml-connector handles it
ml-connector stores ShipStation API Key and secret, and MYOB OAuth token plus company file username/password, with the latter encrypted in the credential store. On authentication, it presents ShipStation API Key via the Authorization header (no Bearer prefix) and MYOB credentials as both the OAuth Bearer token and the Base64-encoded CF credentials pair in the x-myobapi-cftoken header. Since ShipStation's ORDER_NOTIFY webhook returns only a pointer, ml-connector immediately retrieves the full order with a GET to ShipStation. Because MYOB has no native webhook system, ml-connector polls ShipStation and MYOB's LastModified field on a user-defined schedule to detect shipment updates. Idempotence is achieved by storing the ShipStation orderKey and checking for existing MYOB invoices before creating duplicates. MYOB's RowVersion field is read before any PATCH and included in the update to prevent conflicts from concurrent edits. Rate limiting is handled by respecting ShipStation's 40 req/min (V1) and MYOB's 8 req/sec, backing off on HTTP 429, and retrying with exponential jitter.
A real-world example
A mid-sized e-commerce merchant processes orders from multiple sales channels through ShipStation (website, marketplace, wholesale). The operations team picks and packs orders in ShipStation, generates labels and tracking, and ships them daily. Before the integration, the finance team downloaded a daily order report from ShipStation and manually re-entered each order as an invoice in MYOB to track revenue. With ShipStation and MYOB connected, each new order automatically creates an invoice in MYOB under the correct customer, and daily shipment batch updates mark invoices as fulfilled. Month-end revenue reconciliation is now automatic, and the re-entry step is eliminated.
What you can do
- Create MYOB sales invoices from new ShipStation orders, matched to customer and line item details.
- Update invoice line items in MYOB when orders ship in ShipStation, marking fulfillment status without re-keying.
- Map ShipStation customers to MYOB contacts, creating contact records on first order if they do not exist.
- Authenticate ShipStation with API Key and MYOB with dual OAuth plus company file credentials, both bridged in one flow.
- Poll ShipStation and MYOB on a user-defined cadence to detect order and shipment updates, with idempotent deduplication on order key.
Questions
- Do new orders in ShipStation automatically create invoices in MYOB?
- Yes. When ml-connector receives an ORDER_NOTIFY webhook from ShipStation or detects a new order via polling, it creates a matching sales invoice in MYOB under the same customer contact with line items matching the ShipStation order items and quantities. If the customer does not exist in MYOB, ml-connector creates the contact record first.
- How does ml-connector handle MYOB's dual authentication requirement?
- MYOB requires both an OAuth2 access token and a company file username/password pair (sent as Base64 in the x-myobapi-cftoken header) on every API call. ml-connector stores both credentials encrypted, refreshes the OAuth token when a call returns 401, and includes the CF credentials on every request without additional round-trips.
- Why does ml-connector poll instead of relying only on ShipStation webhooks?
- ShipStation's SHIP_NOTIFY webhook payload contains only a pointer to the shipment resource, not the full data. ml-connector must authenticate and GET the actual shipment details, which can be rate-limited. MYOB has no webhooks at all, so ml-connector polls both systems on a schedule you define to detect all changes reliably and reduce the risk of missing updates.
Related integrations
More MYOB integrations
Other systems that connect to ShipStation
Connect MYOB and ShipStation
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started