Shopify logo
NetSuite logo

Shopify + NetSuite Integration

Items, inventory, and pricing flow from NetSuite to Shopify. Orders land as sales orders with the right subsidiary, location, and tax nexus. NetSuite remains the financial record; Shopify never posts journals.

mode:
Bidirectional
latency:
Near real-time
maturity:
Production-tested

what syncs

What syncs, which way, and how fast

Every row is a real data flow with a real trigger. The frequency column is what you should expect in production, not a best case.

Items

dir:
NetSuite → Shopify
frequency:
Every 15 min

Internal id is the join key, not the display SKU. Matrix items map to Shopify variants, which is where most catalogue mismatches originate.

Inventory

dir:
NetSuite → Shopify
frequency:
Every 5 min

Available per location, honouring commitment rules. Multi-location needs an explicit location-to-location map before go-live.

Pricing

dir:
NetSuite → Shopify
frequency:
Every 15 min

Base price level to Shopify. Customer-specific price levels resolve at checkout for B2B rather than being pushed as variants.

Orders

dir:
Shopify → NetSuite
frequency:
Near real-time

Sales order with subsidiary, department, and class derived from the sales channel. Getting this wrong makes finance reporting unusable.

Customers

dir:
Bidirectional
frequency:
Near real-time

B2C to a generic web customer, B2B to real customer records with terms. Dedupes on email plus subsidiary.

Fulfillment

dir:
NetSuite → Shopify
frequency:
Near real-time

Item fulfillment closes the Shopify fulfillment and pushes tracking. Partial fulfillments create separate Shopify records per shipment.

architecture

How it actually works

NetSuite is cloud-native with a real API, so the constraint is not connectivity but governance: SuiteScript units and concurrency limits shape every design decision.

  1. Shopify webhooks + queue

    Order and fulfillment events queue before touching NetSuite, so a governance-throttled RESTlet never causes webhook failures on the Shopify side.

  2. Connector or custom middleware

    Celigo and Boomi have mature prebuilt Shopify NetSuite flows worth their licence for standard requirements. Custom middleware wins when your NetSuite is heavily customised or the licence cost exceeds the build.

  3. RESTlet or SuiteTalk

    RESTlets for bespoke logic that must run inside NetSuite; SuiteTalk REST for standard record CRUD. We avoid SOAP on new builds.

  4. Saved searches for reads

    Inventory and price reads come from saved searches rather than record-by-record gets. This is the difference between a sync that fits in governance and one that dies at 10am daily.

  5. Governance-aware scheduler

    Batch sizes tuned to usage units with concurrency held below your account limit, so integration traffic never starves the users actually working in NetSuite.

failure modes

What breaks, and what happens when it does

Every integration fails eventually. The difference between a good one and a bad one is whether it fails safely and tells you.

  • SuiteScript governance limits

    The sync works in testing, then fails every morning once real order volume arrives.

    handling

    Usage units are budgeted per script execution, reads move to saved searches, and long jobs yield and reschedule instead of dying mid-run. Governance is a design constraint from day one, not a tuning exercise after launch.

  • Concurrency limit contention

    NetSuite users complain the UI has become slow, and the integration blames NetSuite.

    handling

    Concurrency is capped below the account limit and heavy batch work is scheduled outside business hours, leaving headroom for humans. Your integration should never be the reason finance cannot close a period.

  • Matrix item and variant mismatch

    Some variants never appear in Shopify, or appear without options.

    handling

    Parent and child matrix items map explicitly to Shopify products and variants, keyed on internal id. Unmapped combinations go to a reconciliation report rather than being auto-created with guessed options.

  • Tax nexus and subsidiary errors

    Orders post to the wrong subsidiary and the tax figures fail audit.

    handling

    Subsidiary, nexus, and tax code are resolved from the Shopify sales channel and ship-to before order creation. Shopify tax is passed through rather than recalculated, then reconciled at line level.

  • Multi-location commitment rules

    Shopify shows stock that NetSuite has already committed elsewhere.

    handling

    We sync available-after-commitment rather than on-hand, with location mapping agreed up front. On thin-margin fast movers a buffer is applied instead of claiming a polling sync can eliminate oversells.

  • Partial fulfillments across locations

    A split shipment sends one notification with the wrong tracking number.

    handling

    Each item fulfillment becomes its own Shopify fulfillment scoped to those line items, so each parcel triggers its own accurate notification and the remaining lines stay open.

field mapping

A real slice of the mapping

This is an abridged Order → NetSuite SalesOrder mapping, shown so you can sanity-check it against your own system.

Order → NetSuite SalesOrder

shopify → netsuite

  • order.namesalesorder.otherrefnum

    Customer PO field

  • order.idsalesorder.custbody_shopify_id

    Custom body field

  • line_item.skuitem.internalid

    Resolved via lookup

  • line_item.quantityitem.quantity
  • line_item.priceitem.rate
  • sales_channelsalesorder.department
  • total_taxsalesorder.taxtotal

    Passed through

  • shipping_line.titlesalesorder.shipmethod

Assumes a reasonably standard NetSuite. Custom body fields, approval routing, and multi-subsidiary logic are scoped in the audit.

implementation

Timeline and cost

typical duration

8 to 14 weeks

included in scope

  • Discovery, data model, and field mapping document
  • Six objects bidirectional with governance-safe batching
  • Subsidiary, department, and tax nexus logic
  • Queue, retry, dead-letter, and monitoring
  • UAT against a NetSuite sandbox with production data
  • Three weeks of hypercare and a handover runbook

what moves it up

  • Multiple subsidiaries or OneWorld consolidation
  • Heavily customised NetSuite with bespoke workflows
  • B2B customer-specific price levels and approvals
  • Historical migration of orders and customers
  • Advanced inventory, kits, assemblies, or drop-ship flows

questions

Questions buyers actually ask

Should we use Celigo, Boomi, or a custom NetSuite integration?

Use a connector like Celigo or Boomi when your NetSuite is close to standard and your flows are conventional: the prebuilt flows are mature and the licence is cheaper than a build. Go custom when NetSuite is heavily customised, when you need logic the connector cannot express, or when annual licence cost exceeds a one-off build. We recommend against custom purely to have custom.

What are SuiteScript governance limits and why do they matter?

NetSuite charges every script execution in usage units and caps concurrent API connections per account. Exceed either and your sync fails or throttles, typically once real volume arrives rather than during testing. The practical consequences are batching reads through saved searches and capping concurrency below the account limit so NetSuite users keep their headroom.

How does inventory sync handle multiple locations?

Each Shopify location maps explicitly to one NetSuite location, and we sync availability after commitment rather than raw on-hand so committed stock is never offered twice. That mapping has to be agreed before build because changing it afterwards means re-syncing the entire catalogue.

Can Shopify orders post to the correct subsidiary automatically?

Yes. Subsidiary, department, and class are derived from the Shopify sales channel and ship-to address before the sales order is created. This is worth getting right early: misrouted subsidiaries make consolidated reporting unusable and are painful to correct retroactively.

Do you write to the NetSuite general ledger?

No. We create sales orders, customers, and fulfillments, then let your existing NetSuite posting rules handle the GL just as they do for any other channel. Finance keeps one auditable posting path, which is what auditors expect to see.

How long does a Shopify NetSuite integration really take?

Eight to fourteen weeks for a full bidirectional build, and most of that is not coding. Data mapping, cleaning existing item records, and UAT against a sandbox dominate the timeline. Projects that claim three weeks are usually syncing orders one way and leaving inventory and pricing manual.

shopify + netsuite

Get a NetSuite scope with governance costed in

Send your NetSuite edition, subsidiary count, and monthly order volume. You get an architecture recommendation and a fixed price, including whether a connector beats a custom build.