Skip to content

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.

On each run, InSyncer:

  1. Reads new Shopify orders placed on or after orders_sync_start_date
  2. Resolves the Exo debtor the order should sit against
  3. Creates the sales order in Exo, applying your field mappings and salesorder.defaults
  4. 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.

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:

salesorder.defaults
{ "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.

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

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:

salesorder.deliveraddr.custom_mapping
{
"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:

  • addressaddress1 and address2 joined together
  • company_or_name — first non-empty wins, for any fieldA_or_fieldB pair
  • blank — force the line empty
  • uppercase — zero-indexed line numbers to force to caps
  • wrap — a line range to word-wrap at 30 characters

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 description
  • salesorder.lines.use_final_price_as_unit_price — send the discounted price rather than the original
  • salesorder.lines.sort_by_sku — sort lines alphabetically by SKU before sending
  • salesorder.bom_check_enabled — expand bills of materials when creating the order

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.

Order Push is one direction. Two settings bring the result back:

  • order_fulfilling_enabled fulfils the Shopify order when the Exo sales order is dispatched, carrying the tracking number back. fulfill_orders_notify_customers decides whether Shopify emails the customer.
  • order_sync_push_transactions pushes Shopify payment transactions into an Exo custom table, for stores reconciling payments in Exo.
  1. Check the Shopify order for a MyobOrderNbr tag. No tag means no Exo document.
  2. Check the order date against orders_sync_start_date. Orders before it are ignored by design.
  3. Check the line SKUs against Exo stock codes, on the first 23 characters.
  4. Check that salesorder.defaults names a branch and location that exist in Exo.

Still stuck? See Troubleshooting.