
Orders, fulfilment and stock in both directions
Shopify Integrations
Shopify NetSuite integration for Shopify and Shopify Plus: orders, fulfilment, stock, prices and customers moving both ways on the GraphQL Admin API and NetSuite's web services, payouts reconciled.
Scope the NetSuite SyncWhy it drifts
Both ways orders out, stock back1 reconciliation report
A Shopify store and NetSuite drift apart one shortcut at a time. Orders are keyed into NetSuite by hand, stock by location is a nightly export that is wrong by lunchtime, a Shopify Payments payout lands in the bank as one figure, and a B2B customer has net terms in NetSuite and a card on file in Shopify.
The connector that was meant to fix it is often the next problem. Many were written on Shopify's REST Admin API, legacy since 1 October 2024; since 1 April 2025 new public apps must use the GraphQL Admin API, so a REST integration is on borrowed time.
NetSuite's side is better defined than most expect: its REST web services create, read and update records, run SuiteQL queries and process requests asynchronously, authenticating with OAuth 2.0 or token-based authentication rather than a user's login. An integration is the mapping between the two, written down, built on those services and reconciled on a schedule, so what did not sync is a line in a report rather than a surprise.
Where it drifts
Each of these is a job someone does by hand on a Friday. Together they are the reason the integration gets rebuilt.

An order placed on Shopify is typed into NetSuite by someone in the office, with a different SKU format, a rounding difference and no link back to the Shopify order number.

The nightly export says a warehouse has twelve; it shipped the last four this morning. Shopify sells from the wrong location and support handles the apology.

A Shopify Payments payout lands as one figure, net of fees and refunds, and finance spends the afternoon working out which orders it contains before the ledger balances.

A company account has net-thirty terms and a credit limit in NetSuite and pays by card on the storefront, because the customer record was never matched between the two.

The sync was configured by a vendor years ago on an API that is now legacy. A new location, a custom field or a NetSuite update means a ticket, a wait and a workaround in a spreadsheet.

An order with a special character in the address fails to post, no alert fires, and the customer calls two weeks later asking where the parcel is.
What the integration covers

Paid orders posted to NetSuite as sales orders with the Shopify order number kept, and fulfilment, tracking and invoices sent back to the customer's account.

Stock by warehouse pushed to Shopify's locations as it changes, so each location sells what it actually holds.

NetSuite price levels mapped to Shopify prices and to the B2B catalogs that give a company its own list, updated when NetSuite changes.

Customers and companies matched between the systems once, then kept in step: terms, credit limits, addresses and contacts.

Shopify Payments payouts broken down into the orders, fees and refunds they contain and posted to the ledger, so the bank reconciles.

A monitor that alerts on a failed message and a scheduled reconciliation that lists what did not sync, by record, before the warehouse does.
Map, build, test, run
Object by object
Minutes for a stock changeYours code and mapping
Orders leave Shopify as they are paid and arrive in NetSuite as sales orders with the Shopify order number kept; fulfilment, tracking and invoices come back and appear in the customer's account. Stock moves the other way, by location, as NetSuite changes it; prices and B2B catalogs follow the price levels NetSuite holds. Customers and companies are matched once and then kept in step both ways.
Volume is handled by the platforms' own machinery. Shopify sends webhooks as events happen and runs bulk operations asynchronously for the large reads, returning a file to parse line by line without paging or throttling; NetSuite processes its side asynchronously too. A queue in between carries the peaks, and a failed message retries, then alerts.
You keep the mapping document, the code in your repository, the monitor and the monthly reconciliation, so a future developer can see what moves, where, and why.
Pick the way in
The full integration: the mapping document, the build on the GraphQL Admin API and NetSuite's web services, the reconciliation runs and the go-live window. For a store keying orders by hand or living with a connector nobody can change.
The same integration for a Magento 2 or Adobe Commerce store: orders, fulfilment, stock, prices and customers on Magento's asynchronous API and NetSuite's web services, with the same mapping method and the same reconciliation.
For an integration already live, by us or by someone else: the monitor watched, the monthly reconciliation run, the Shopify API version moved before the old one is retired and the NetSuite release tested in the sandbox before it lands.
Not our word for it

Shopify Verified Skill Badge
9 experts
Shopify Verified Skill Badge
8 expertsTrusted by 100+ companies
Keep reading
FAQ
Tell us about your store and we will come back with straight answers.
Talk to usEither can work; what matters is who can change it. An app from the App Store is fast to install and slow to change when your mapping differs from its template. A custom integration on the GraphQL Admin API and NetSuite's web services is built to your mapping and lives in your repository. We build the second and we do not resell connectors, so the recommendation is not a commission.
Any NetSuite account with REST web services enabled and a role we can scope: an integration record with OAuth 2.0 or token-based authentication, a dedicated integration user, and permissions limited to the records in the mapping. SuiteQL covers the reads that do not fit a record call. The build runs in your sandbox first; if you do not have one, the mapping says how we test safely without it.
No. The GraphQL Admin API, webhooks and bulk operations are available to apps on every plan. What depends on the plan is the B2B feature set, company accounts and catalogs included, and some checkout customisation, so a B2B store syncing company terms needs the plan that carries them. We check that in the mapping before anything is built.
As often as NetSuite changes it. Inventory moves on events rather than on a schedule, so a stock adjustment in NetSuite reaches the matching Shopify location in minutes. A scheduled full reconciliation runs alongside, so a missed event cannot leave a location wrong for long.
Each NetSuite location maps to a Shopify location, so stock is set per location and Shopify's own routing decides where an order ships from. Locations that should not sell online are excluded in the mapping, and a new warehouse is a mapping change rather than a rebuild.
Yes. NetSuite price levels map to Shopify prices and to the B2B catalogs that give a company its own list, and company records carry terms, credit limits and contacts both ways. Which B2B features your store has depends on your Shopify plan, which the mapping confirms first.
A payout lands in the bank as one figure, net of fees and refunds. The integration breaks each payout into the orders, fees and refunds it contains, using Shopify's own activity records, and posts them to the ledger against the right invoices, so the bank statement reconciles without an afternoon in a spreadsheet.
The message is retried, and if it still fails it is logged with the record, the reason and the payload, and an alert goes to the people you name. Nothing is dropped silently. The monthly reconciliation lists anything that did not sync, by record, so a failure the alert missed is still found.
The mapping takes two to three weeks, because it is where every disagreement between the systems is settled. The build depends on the objects: orders, fulfilment and stock alone is a matter of weeks; payouts, B2B catalogs and company terms add to it. The estimate names the number after the mapping.
Fixed scope after the mapping, because the mapping decides how many objects move and in which directions, and no two stores sync the same set. There is no price list on this site; the written estimate comes with the mapping document.
Yes, and we prefer to. Your NetSuite partner owns the account's customisations, saved searches and roles; we own the Shopify side and the integration between the two. The mapping document is the shared contract, and the integration user, roles and tokens are set up with them.
Yes. The code lives in your repository, the app is installed on your store under your account, the NetSuite integration record and tokens are yours, and the mapping document is written for whoever maintains it next. Nothing is hosted on a server you cannot see.
Shopify releases API versions on a schedule and retires the old ones, which is how a connector written on the REST Admin API ended up on borrowed time. We move the integration to a supported version before the old one is retired and test each NetSuite release in the sandbox before it lands, as part of keeping it running.
Yes. We read the existing code and the NetSuite integration record inside two business days, list what moves, what fails and what sits on a retired API, and give you a fixed scope to stabilise it or a reason to replace it. If the mapping was never written down, that is the first thing we produce.
Let’s build something great together!
Send us what moves between your store and NetSuite today, and what does not. We come back with the mapping outline and a written estimate.