//
NS90: Integrate:
Shopify and NetSuite

Shopify and NetSuite, reconciled down to the payout.

NS90: Integrate connects Shopify to NetSuite through MHI's integration service on NSIP, with every order, deposit, refund and payout staged in an Oracle data hub first. Finance gets journal entries that tie to the bank, and operations gets inventory and fulfillment that follow each location.
System
Shopify
Direction
Both ways: orders and money in, catalog, inventory and fulfillment out
API
Shopify Admin GraphQL API
Run mode
Scheduled, near real-time: orders every 5-10 min, inventory 30 min to daily
Platform
NSIP + NSAW
Delivered
34 delivered · 1 in progress
//
WHY NOW

GraphQL

Shopify's REST Admin API is legacy, and GraphQL is the path forward

Shopify made the REST Admin API legacy on 1 October 2024 and requires new public apps to use GraphQL only from 1 April 2025. Integrations still built on REST are the ones that need rework as Shopify adds features and larger catalogs to GraphQL only. MHI standardized the NS90: Integrate Shopify connector on the Shopify Admin GraphQL API: every order, customer deposit, refund, cancellation, product, inventory and fulfillment flow runs on GraphQL, the API Shopify requires going forward.
Source: shopify.dev, REST Admin API page, accessed 13 Oct 2026
//Supported flows

Shopify flows delivered on NS90: Integrate

Each solid dot is a client project where MHI built the flow on NSIP. Hollow markers are flows in progress. Arrows show direction relative to NetSuite.

Master data

NETSUITE
Products and variants
NetSuite item → Shopify productSet / productVariantsBulkCreate
30 min – daily
Inventory by location
NetSuite location availability → Shopify inventorySetOnHandQuantities
30 min – 6 h
Customers
Shopify customer → NetSuite customer, or default channel customers
With each order

Transactions

NETSUITE
Orders
Shopify order → NetSuite sales order
5 – 10 min
Fulfillments and tracking
NetSuite item fulfillment → Shopify fulfillmentCreateV2 on fulfillment orders
10 – 15 min
Cancellations
Shopify cancelled order → NetSuite close sales order (full or by line)
5 – 15 min
Returns with restock
Shopify return → NetSuite return authorization → item receipt
In progress

Financial & reconciliation

NETSUITE
Customer deposits
Shopify order transactions (sale / capture) → NetSuite customer deposit
5 – 10 min
Refunds
Shopify refund → NetSuite customer refund, or credit memo + refund once invoiced
15 min
Payouts and fees
Shopify Payments payout + balance transactions → NetSuite journal entry
Daily
//
How it runs
Every Shopify run is counted, checked and recoverable
Records land in the NS90 data hub in Oracle Autonomous Data Warehouse before they reach NetSuite, so each one can be checked, retried and traced.
Balance and Control

Checks before and after posting

Source and target record counts are written to a job audit for every run.

Payout journal entries post only when the lines match the payout net; any unmatched lines post to a variance line for review.

Deposits and refunds use the same clearing account as the payout journal, so the clearing balance returns to zero.

Tax is set line by line so NetSuite order totals match the storefront to the cent.

Self-healing

Record-level reprocessing

Failed records retry automatically up to five times a day, then resume the next day.

A record can be put on hold without blocking the rest of its batch.

Change tracking runs on a lag offset so orders that change status mid-run are not skipped.

Alerts and visibility

Dashboards and monitoring

Payout journal entries link to a payout dashboard in NetSuite Analytics Warehouse, with a link from each line back to its NetSuite transaction.

An observability dashboard shows each flow's runs, failures and queued records.

//
What we’ve learned
8 lessons from Shopify projects on NS90: Integrate

Change tracking needs a lag

Shopify's last-updated timestamps can move past an order while a run is in progress. A few minutes of lag on every pull, and a short minimum age for deposits and refunds, keeps orders from being skipped.

Expect several variants per NetSuite item

Shopify catalogs often sell one NetSuite item under several variants or SKUs. A cross-reference that supports many-to-one, and blocks duplicate entries, prevents order failures after launch.

Fulfillment follows fulfillment orders

Orders that ship from several locations, or carry Shopify-only lines such as package protection, need fulfillment matched to Shopify's fulfillment-order lines, not to the first line on the order.

Payouts reconcile best as one journal

Posting each Shopify Payments payout as a journal entry, matched to the deposits and refunds it settles, keeps Undeposited Funds clean and avoids NetSuite's bank-deposit line limits.

Agree inventory cadence with operations

NetSuite availability lags until recent Shopify orders have synced. Very frequent inventory pushes can overstate stock, so cadence is a business choice, typically every 30 minutes to a few hours.

Load payout account mappings before cutover

Payout journals need a GL account for every balance-transaction type (charges, refunds, fees, adjustments, chargebacks). Loading that map before go-live means the first payout posts on day one.

Check what upstream apps send

One client's order app didn't pass shipping discounts to Shopify, so order totals in NetSuite didn't match what customers paid. Checking the source payloads during testing finds these gaps before go-live.

Gift card redemptions need care with tax

Posting a redemption as a negative line can fail when the order total goes negative, because NetSuite calculates tax after the order is saved.
//
How we deliver
Six steps from assessment to steady state
01.

Assess

Review stores, payment gateways, 3PLs and the NetSuite setup that orders must land in.
02.

Map

Agree item, customer, tax, discount, gift card and payout mappings in a field-level workbook.
03.

Build on NSIP

Configure the prebuilt Shopify flows on NSIP, staged in your NSAW data hub.
04.

Test and reconcile

Run real orders end to end and tie a full payout from Shopify to the NetSuite journal and bank.
05.

Go live

Cut over with a dated start point, production smoke tests and payout mappings loaded.
06.

Run and monitor

Dashboards, automatic retries and counts by run, with MHI support during hypercare.
About 3–4 months
from signed design to production
Paced by
your UAT
// Oracle NetSuite Partner of the Year
A black and white photo of a clock tower.
A black and white photo of a clock tower.
A black and white photo with the words partner of the year.
A black and white photo with the words partner of the year.
//
FAQ
Shopify integration questions
Do Shopify orders post as sales orders or cash sales?
How are Shopify Payments payouts reconciled?
How is sales tax handled?
Does inventory sync by location?
What happens when a record fails?
How do you stay within Shopify's API limits?
Do you support several Shopify stores?
How are gift cards handled?
Can orders wait before they sync?

Planning a Shopify and
NetSuite integration?

Tell us about your stores, gateways and 3PLs, and we'll show you the flows and reconciliation we'd set up.
//
More NS90: Integrate connectors