Docs/MYOB Exo
Order Push
Order Push sends Shopify orders into MYOB Exo as sales orders, so picking, invoicing, and financials all happen in Exo.
How it works
Section titled “How it works”On each run, InSyncer:
- Reads new Shopify orders placed on or after
orders_sync_start_date - Resolves the Exo debtor the order should sit against
- Creates the sales order in Exo, applying your field mappings and
salesorder.defaults - Tags the Shopify order with the Exo order number —
MyobOrderNbr: 12345
That tag is your confirmation. An order with no MyobOrderNbr tag has not reached Exo. Set salesorder.suppress_order_number_tag if you do not want the tag written, but be aware you lose the easiest way to check.
Order defaults
Section titled “Order defaults”salesorder.defaults is a JSON object of field values applied to every sales order InSyncer creates. In practice this is where the branch, the default stock location, and often a salesperson are pinned:
{ "branchid": 1, "defaultlocationid": 4, "salespersonid": 12 }To push orders as quotes rather than live sales orders, set salesorder.send_as_quote. That creates the Exo document with quotation status, so someone converts it in Exo before it is real.
Field mapping
Section titled “Field mapping”The Shopify order does not map one-to-one onto an Exo sales order, so several fields are yours to choose:
| Setting | What it controls |
|---|---|
salesorder.customer_order_number_prefix |
Prefix on the Shopify order number to form Exo’s customer order number, e.g. SO- or SH |
salesorder.mapping.reference |
Shopify field written to the Exo reference field |
salesorder.mapping.instructions |
Shopify field(s) written to Exo instructions, e.g. email;phone |
salesorder.mapping.quantity |
Whether lines use current_quantity or fulfillable_quantity |
salesorder.add_customer_email_to_notes |
Appends the customer email to the Exo order notes |
salesorder.mapping.extra_fields |
Writes Shopify values into Exo sales order extrafields |
Delivery address
Section titled “Delivery address”Exo takes a delivery address as six fixed lines, and Shopify does not. salesorder.deliveraddr.custom_mapping controls how one is written into the other.
The default is line1=name, line2=company, line3=address1, line4=address2, line5=city, line6=zip. Override it when that shape does not suit your labels or courier integration:
{ "line1": "name", "line2": "company_or_name", "line3": "address", "line4": "city, zip", "line5": "country", "line6": "blank", "uppercase": [4], "wrap": "3-4"}Useful values beyond the plain Shopify field names:
address—address1andaddress2joined togethercompany_or_name— first non-empty wins, for anyfieldA_or_fieldBpairblank— force the line emptyuppercase— zero-indexed line numbers to force to capswrap— a line range to word-wrap at 30 characters
Line items
Section titled “Line items”Order lines push when the Shopify variant SKU matches an Exo stock code — the same 23-character match used by Stock Sync. Unmapped SKUs are skipped and logged rather than blocking the whole order.
Shipping needs somewhere to go: set orders_sync_shipping_stock_code to the Exo stock code used for freight, commonly FREIGHT.
Other line-level options:
salesorder.lines.use_shopify_title_as_description— use the Shopify line title as the Exo line descriptionsalesorder.lines.use_final_price_as_unit_price— send the discounted price rather than the originalsalesorder.lines.sort_by_sku— sort lines alphabetically by SKU before sendingsalesorder.bom_check_enabled— expand bills of materials when creating the order
Which debtor the order lands on
Section titled “Which debtor the order lands on”By default, orders are matched to an Exo debtor by email. use_company_for_customer_linking switches that to match on company name instead, which suits B2B stores where several buyers share an account.
Where InSyncer creates a debtor from the order, the debtor.create_from_order.* settings control it — its delivery and postal address layout, and whether an Exo contact is created alongside it (debtor.create_from_order.create_contact). A contact that fails to be created never fails the order push.
place_order_add_gst adds GST to order amounts on the way into Exo, at the rate in place_order_add_gst_rate — a decimal, so 0.15 for 15%. Use it only when your Shopify prices are GST-exclusive and Exo expects them inclusive. Getting this wrong is a reconciliation problem, not a sync problem, so confirm it against a real order before go-live.
After the order reaches Exo
Section titled “After the order reaches Exo”Order Push is one direction. Two settings bring the result back:
order_fulfilling_enabledfulfils the Shopify order when the Exo sales order is dispatched, carrying the tracking number back.fulfill_orders_notify_customersdecides whether Shopify emails the customer.order_sync_push_transactionspushes Shopify payment transactions into an Exo custom table, for stores reconciling payments in Exo.
When an order does not appear
Section titled “When an order does not appear”- Check the Shopify order for a
MyobOrderNbrtag. No tag means no Exo document. - Check the order date against
orders_sync_start_date. Orders before it are ignored by design. - Check the line SKUs against Exo stock codes, on the first 23 characters.
- Check that
salesorder.defaultsnames a branch and location that exist in Exo.
Still stuck? See Troubleshooting.