Integration

Connect Shopify to NetSuite

Push paid Shopify orders into NetSuite as sales orders, matching shoppers to customers and line items to items, hold high-risk orders for review before they post, and send fulfillment status and inventory levels back to the store. Every order is an ordered run you can inspect and replay.

Two-way
Direction
prompt on order, scheduled for inventory
Latency
Order paid
Common trigger
Template, then map items and locations
Setup

Why teams connect Shopify and NetSuite

The store runs in Shopify, the business runs in NetSuite, and between them sits a person exporting orders to a CSV each morning, or a rigid connector that drops an order when a SKU is missing. Order volume grows and the gap turns into backlog and mis-shipments.

  • Paid orders become NetSuite sales orders on the next poll, so fulfillment and invoicing start the same day
  • Shoppers are matched to customers on email and an external ID, and a missing item holds the order for review instead of dropping it
  • High-risk orders, flagged by Shopify's fraud analysis, pause for a human before they ever reach finance
  • Fulfillment, tracking, and inventory levels flow back, so the storefront shows the truth and support stops guessing

Worked example

The order-to-cash flow most stores turn on first.

Paid Shopify order to a NetSuite Sales Order, with a fraud hold and a SKU guard

Triggered when an order is paid, with two branches that keep bad data out of NetSuite.

  1. 1Trigger: Shopify orders/paid webhook, carrying the order, line items, customer, and addresses.
  2. 2Risk check: read the order's fraud risk. If the recommendation is cancel or investigate, post to #order-review with the order link and stop until a human releases it.
  3. 3Resolve customer: upsert NetSuite Customer keyed on externalId = shopify_customer_id, from the mapping below.
  4. 4Resolve items: for each line, match NetSuite Item by line.sku → itemId. If any SKU does not match, hold the whole order in the review queue rather than creating a partial order.
  5. 5Create order: NetSuite Create record on SalesOrder, keyed on externalId = shopify_order_id, adding a shipping line and a discount line from the order totals.
  6. 6Write back: write the NetSuite internal ID to a Shopify order metafield custom.netsuite_so_id.
  7. 7Ongoing: a second flow listens for NetSuite ItemFulfillment and creates the Shopify fulfillment with the tracking number, and a scheduled flow pushes inventory levels from NetSuite to the Shopify location.

Field mapping

The starting map for the Shopify order to NetSuite Sales Order step.

ShopifyNetSuiteNotes
order.idSalesOrder.externalIdIdempotency key. A redelivered webhook updates the order, not a second one.
customer.idCustomer.externalIdMatch key. Creates the customer if missing.
customer.emailCustomer.emailSecondary match when the customer ID is absent (guest checkout).
order.created_atSalesOrder.tranDateISO 8601 with timezone. Converted to the NetSuite account timezone.
order.currencySalesOrder.currencyFails the run if the currency is not set up in NetSuite.
line_items[].skuSalesOrder.item.itemResolved to internal item ID. A miss holds the order.
line_items[].quantitySalesOrder.item.quantityLine level.
line_items[].priceSalesOrder.item.rateOverride, so NetSuite price rules do not restate the charged price. Amounts are strings in Shopify; cast to number.
total_shipping_price_setSalesOrder.item (shipping item)Added as a non-inventory line, not the header shipping cost field.
total_discountsSalesOrder.discountItemSingle order-level discount line. Line-level discounts are pre-applied to rate.
order.nameSalesOrder.otherRefNumThe #1001 style store order number, for support lookups.

What syncs, each direction

  • Orders and customers. Paid orders become sales orders. New shoppers become customers. Refunds create credit memos against the original order. (Shopify to NetSuite)
  • Fulfillment and tracking. An item fulfillment in NetSuite creates the Shopify fulfillment with the carrier and tracking number, which notifies the shopper. (NetSuite to Shopify)
  • Inventory levels. Available quantity per item is pushed to the matching Shopify location on a schedule, so the storefront does not oversell. (NetSuite to Shopify)
  • Products and pricing. New items and price changes keep the Shopify catalog and the NetSuite item list aligned, with one system set as the source of truth. (Either direction)

Governance and audit

The same controls apply to this sync as to every other Neblex workload.

  • Ordered run log. Every order is an event log with the payload, the customer and item resolution, and the sales order it created. Replay a run without re-charging or re-fulfilling.
  • Approval and holds. High-risk orders and orders with unmapped SKUs pause in a review queue. A person releases or rejects each one.
  • Scoped access. Shopify uses an admin API token with only the order and inventory scopes. NetSuite uses a role limited to sales orders, customers, and items.
  • Environments. Build against a Shopify development store and a NetSuite sandbox, then promote the same flow to production.

Frequently asked questions

Is the order sync prompt or batched?

Close to it. The order-to-cash flow runs off Shopify's orders/paid webhook pointed at a Neblex endpoint and creates the sales order when the webhook arrives. Inventory push runs on a short schedule instead.

What happens to an order with a SKU that is not in NetSuite?

The whole order holds in a review queue with the unmapped SKU named, rather than creating a partial sales order. Add the item mapping and release it, and the flow resumes.

How are duplicate orders prevented?

The sales order is keyed on the Shopify order ID as an external ID. A redelivered webhook updates the existing order rather than creating a second one.

How are refunds handled?

A Shopify refund creates a NetSuite credit memo against the original sales order, with the refunded lines and any restock reflected.

Does anything get installed in NetSuite?

No. The connector uses NetSuite's SOAP and REST web services. No SuiteScript or bundle is deployed.

Can we run more than one store into one NetSuite account?

Yes. Each store is its own connection, and a subsidiary or a class can be set per store on the sales order.

Connectors on this page

Shopify

Finance & Commerce

Operations
367
Typed outputs
100%
Change triggers
Poll or inbound webhook
Authentication
None

NetSuite

Applications

Operations
271
Typed outputs
0%
Change triggers
1 (poll)
Authentication
ConnectionString

NetSuite does not publish typed output schemas yet, so the field mapping on this page is configured in the flow rather than pre-verified.

See it on your data

Bring one real integration

We will build it with you against your own systems, with the run log open.