NetSuite + Shopify integration

An independent NetSuite Shopify agency: we configure Oracle’s connector or Celigo when they cover your flows, and build custom SuiteTalk REST and Shopify GraphQL integrations when they don’t.

California-based leadership · Serving US and international teams

NetSuite
AIONDATAsync · MCP · rules
Shopify
Items → Products and variantsItem availability → Inventory levelsOrders → Sales OrdersCustomers and companies → CustomersPayments → Customer DepositsItem Fulfillments → FulfillmentsRefunds and cancellations → Credit Memos and Customer RefundsPayouts → deposits and fee journals
Illustrative integration flow

Your integration, scoped before we build

  • Object and field mapping for your workflows
  • Sync timing, error handling and reconciliation
  • Written scope, timeline and support options

Ready to connect NetSuite and Shopify?

Share your objects, volumes, and timing needs — we'll come back with a written scope.

Please share the systems and workflow—not credentials or customer records. We’ll confirm API access, scope and next steps.

NVIDIA Inception

NVIDIA Inception member

Part of NVIDIA’s program for startups building with AI and accelerated computing.

About the program
Pravin BansalSravan Modugula

Bay Area roots. Enterprise experience.

Pravin’s experience includes Google and SmartBear. Sravan previously held leadership roles at JPMorgan Chase and First Republic Bank.

Meet the founders

San Francisco Bay Area, California

9110 Alcosta Blvd Ste H345, San Ramon, CA 94583

US-led delivery, with engineering in India. Supporting US and international organizations.
Prefer email? info@aiondata.io

Let’s scope your integration.

Just your name and email to get started. Your details are handled under our Privacy Policy.

How NetSuite and Shopify work together

Most brands that look for a Shopify NetSuite agency already have a sync that half works: orders reach NetSuite in 20-minute batches, stock lags a shipment by an hour, and finance ties out Shopify Payments payouts in a spreadsheet. The choice is between Oracle’s own NetSuite Connector, an iPaaS app such as Celigo, and a custom build on SuiteTalk REST and the Shopify GraphQL Admin API. AIONDATA is an independent consultancy, not an Oracle or Shopify partner, so we configure the connector or Celigo when they fit and build custom when they don’t.

Plan your NetSuite + Shopify implementation

These decisions shape the scope, cost and acceptance tests. The flows below describe possible implementation behavior, not a preinstalled connector or a guarantee for every product edition.

Which NetSuite record a paid Shopify order becomes

A Sales Order commits stock and leads to an Item Fulfillment, then an Invoice or Cash Sale; B2B orders on terms need an Invoice. Oracle’s B2B connector posts an invoice at order sync unless its PostCustomerDepositForShopifyB2B setting creates a Pending Approval sales order instead.

Which quantity Shopify shows, from which Location

inventorySetQuantities writes available or on_hand as an absolute value. We send quantity available from each mapped NetSuite Location, minus a buffer, never on hand.

Stores and subsidiaries

Shopify Plus includes nine expansion stores; Oracle’s connector needs a separate connector account per store. Each store maps to one subsidiary, Location and price level.

Authentication and a concurrency budget

Oracle says to use OAuth 2.0 and that from 2027.1 no new TBA integrations can be created. The account concurrency limit (5 on Standard, 15 on Premium, 20 on Enterprise and Ultimate, plus 10 per SuiteCloud Plus license) is shared by every integration, so the integration record gets its own allocation.

Whether payout reconciliation is in scope

Shopify exposes each ShopifyPaymentsPayout to apps with the read_shopify_payments_payouts scope. Oracle’s connector documents settlement syncs for Amazon, not Shopify, and Celigo sells payout import as an add-on.

Data flows

What moves between NetSuite and Shopify

  1. 01Items → Products and variantsNetSuite ShopifyInventory Items, Kit Items and matrix items become Shopify products and variants with SKU, barcode, price and weight.
  2. 02Item availability → Inventory levelsNetSuite ShopifyQuantity available per mapped Location is written to the Shopify Location with inventorySetQuantities, compare-and-set on.
  3. 03Orders → Sales OrdersShopify NetSuiteThe ORDERS_PAID webhook creates a Sales Order with lines, shipping, discounts and tax, and stores the Shopify order id.
  4. 04Customers and companies → CustomersShopify NetSuiteShopify customers are matched or created as Customers; B2B company locations carry payment terms.
  5. 05Payments → Customer DepositsShopify NetSuiteCaptured transactions post as Customer Deposits on the Sales Order, applied to the Invoice or Cash Sale.
  6. 06Item Fulfillments → FulfillmentsNetSuite ShopifyShipped Item Fulfillments create Shopify fulfillments with tracking through fulfillmentCreate, including partials.
  7. 07Refunds and cancellations → Credit Memos and Customer RefundsShopify NetSuiteREFUNDS_CREATE and ORDERS_CANCELLED events create Return Authorizations, Credit Memos and Customer Refunds, or close the order.
  8. 08Payouts → deposits and fee journalsShopify NetSuiteEach Shopify Payments payout becomes a bank deposit with fees expensed and lines matched.

Field mapping

NetSuite and Shopify field mapping

The records, match keys and triggers most implementations start from. Your scope confirms each row against your editions, custom fields and business rules.

NetSuite and Shopify field mapping
SourceTargetMatch keyDirectionTriggerNotes
Inventory Item, Kit Item, matrix itemProduct and ProductVariantItem name or custom SKU field = variant SKUNetSuite → ShopifyScheduled delta on last modified date, plus on-demand resyncWeb-sale items only; UPC, weight and base price mapped; matrix children become variants.
Item availability by LocationInventoryLevel per Location (inventorySetQuantities, name available)Location internal id = Shopify Location idNetSuite → ShopifyEvery 5 to 15 minutes, plus after Item Fulfillments and Item ReceiptsQuantity available minus a buffer; compareQuantity on; idempotency key per push.
Customer-specific pricing (price levels per Customer)B2B price list on a catalog assigned to a company or company locationCustomer internal id stored on the Shopify companyNetSuite → ShopifyScheduledPer-location assignment needs Plus.
Shopify CustomerCustomerEmail, or Customer internal id stored on the Shopify customerShopify → NetSuiteCUSTOMERS_CREATE webhook or first paid orderSubsidiary chosen by store; internal id written back after the first order.
Shopify Company and company locationCustomer (company) with sub-customers, terms and credit limitCompany external id = Customer internal idNetSuite ↔ ShopifyCOMPANIES_CREATE webhook; NetSuite terms changes on a scheduleNew companies created in NetSuite after approval; terms mirrored.
Shopify Order (paid)Sales OrderShopify order id in a custom body field; existing-order check before createShopify → NetSuiteORDERS_PAID webhook, plus a sweep on updated_atLines, shipping, discounts and tax mapped; Location from the fulfillment order.
Shopify payment transaction (sale or capture)Customer Deposit on the Sales Order, applied to the Invoice or Cash SaleTransaction idShopify → NetSuiteWith the order, and on later capturesEach gateway maps to a clearing account; fees handled in payout reconciliation.
Item Fulfillment (shipped)Fulfillment (fulfillmentCreate on the fulfillment orders)Created-from Sales Order → Shopify order idNetSuite → ShopifyOn shipped status, polled every few minutesCarrier and tracking from the package lines; partials supported.
Shopify RefundReturn Authorization, Credit Memo and Customer RefundRefund idShopify → NetSuiteREFUNDS_CREATE webhookRestocked lines create a Return Authorization first; shipping-only refunds create a Credit Memo; the gateway refund posts as a Customer Refund.
ShopifyPaymentsPayoutBank deposit, fee journal and deposit applicationPayout id; balance transaction → payment transaction idShopify → NetSuiteDaily, after each payout is issuedNet to the bank, fee to expense, lines matched to Customer Deposits and Refunds; needs read_shopify_payments_payouts.

Download this mapping as a CSV worksheet · no email required

Editions and APIs

NetSuite and Shopify: editions, hosting and APIs

The edition, hosting model and API on each side decide what the integration can do and how it is built.

Editions, hosting and APIs
NetSuite service tiers and concurrencyWeb services and RESTlets share one limit: 5 concurrent requests on Standard, 15 on Premium, 20 on Enterprise and Ultimate, plus 10 per SuiteCloud Plus license, in production, sandbox and release preview.
NetSuite APIsSuiteTalk REST web services (record CRUD, metadata, record actions, SuiteQL) cover Customer, Sales Order, Inventory Item, Kit Item, Item Fulfillment, Cash Sale, Invoice, Customer Deposit, Customer Payment, Customer Refund, Credit Memo, Return Authorization, Price Level and Location.
NetSuite authentication and sandboxOAuth 2.0 for REST web services and RESTlets; no new TBA integrations from 2027.1. Sandboxes are purchased separately and refreshed from production without OAuth 2.0 authorizations, TBA tokens or web store domains.
Shopify plansB2B is on all plans: up to three active catalogs on Basic, Grow and Advanced; unlimited catalogs assigned to company locations, and deposits, on Plus. Plus includes nine expansion stores and lists from $2,500 per month on a one-year term.
Shopify APIsGraphQL Admin API only: the REST Admin API has been legacy since October 1, 2024, and new public apps must use GraphQL since April 1, 2025. A version ships every three months and is supported for at least 12 months. Bulk operations run outside the rate limit, up to five per shop per app from version 2026-01.

Options, cost and timeline

Ways to deliver NetSuite and Shopify integration

A prebuilt connector is sometimes enough. This comparison shows when each route fits, what it typically costs and how long it takes.

Delivery options, cost and timeline
ApproachTypical costTypical timeFits whenWatch for
Oracle NetSuite Connector (formerly FarApp)From about $199.92/month (B2C Standard) to about $916.58/month (B2B) (vendor list price on the Shopify App Store, Sep 2026), billed by Oracle NetSuiteDays to weeks to authorize the store, map fields and testOne store with standard flows, a 3PL, or Shopify B2B with invoice postingSchedules of 20, 60 and 90 minutes unless the real-time option applies; one connector account per store; no transfer orders; no Shopify payout sync listed; B2B catalogs per company
Celigo Shopify – NetSuite Integration AppNo public price; Celigo charges by endpoints and flows rather than transactions, with a 30-day free trialDays to weeks for the standard flows, longer for custom mappingTeams already on Celigo, orders imported as Sales Order, Cash Sale or Invoice, Shopify POSPayout report import is an add-on; confirm which edition includes your flows and who watches the error queues
Custom integration (AIONDATA)Quoted after a short discovery; hosting and support priced separatelyUsually a few weeks for the standard flows; two to three months with several stores or subsidiaries, B2B pricing or payout reconciliationSeveral subsidiaries or stores, kits, custom records, payout reconciliation, B2B terms from NetSuite, or owning the codeSomeone must own monitoring, quarterly Shopify API versions and NetSuite release retests
Agency-run connector or iPaaSMonthly fee quoted per scope, on top of the Oracle or Celigo subscriptionOngoingTeams without integration staff who want one party to configure the tool, watch failures and fix mappingsAgree response times, who corrects NetSuite data errors, and your access to mappings and logs if you change agency

Vendor prices are list prices from their public pages on the date shown; confirm current pricing with each vendor.

APIs, authentication and limits on both sides

On the NetSuite side we build on SuiteTalk REST web services, which Oracle lists as fully supported for record CRUD, metadata, record actions and SuiteQL, with no custom scripts to deploy. Authentication is OAuth 2.0 under an integration record and a dedicated role, since no new TBA integrations can be created from 2027.1, and that record gets a fixed share of the account concurrency limit. On the Shopify side the integration is a custom app with only the scopes its flows use; read_orders covers the last 60 days, so a backfill of older orders needs read_all_orders. Each GraphQL request costs points against a per-plan budget with a 1,000-point cap per query, so the integration throttles on the status Shopify returns and moves catalog loads and backfills to bulk operations, which finish with a JSONL file and the bulk_operations/finish webhook.

Order to cash: Sales Orders, deposits, invoices and payouts

Most merchants create a Sales Order from the ORDERS_PAID webhook, because it commits stock in the shipping Location and gives the warehouse an Item Fulfillment to work from. The captured payment posts as a Customer Deposit against that Sales Order and is applied when the Item Fulfillment ships and the Invoice or Cash Sale is created; B2B orders on terms post an Invoice due under the Shopify payment terms. Payouts close the loop: each ShopifyPaymentsPayout carries its net amount, issue date, a fee summary and its balance transactions, so the integration posts a bank deposit, expenses the fees and matches each line to the Customer Deposit or Customer Refund in NetSuite.

B2B, Shopify Plus and expansion stores

Shopify B2B is available on every plan, with up to three active catalogs on Basic, Grow and Advanced and unlimited catalogs on Plus, where catalogs can also be assigned to individual company locations and deposits can be required. NetSuite holds the equivalent in price levels, customer-specific prices, terms and credit limits, so the integration publishes each price group as a Shopify price list on a catalog, stores the NetSuite Customer internal id on the Shopify company, and keeps terms on the company location in step. Plus organizations also get nine expansion stores; each needs its own app credentials, Location mapping, price level and subsidiary rule.

Failure and reconciliation playbook

Shopify says it does not guarantee webhook order, that delivery is not always guaranteed, and that an app should reconcile with periodic reads on updated_at; it retries a failed HTTPS delivery 8 times over 4 hours, then deletes a subscription created through the Admin API after 8 consecutive failures. The integration therefore stores every event, processes it once, writes inventory with compareQuantity and an idempotency key, and keeps failures visible until someone resolves them.

  • Duplicate webhook: ignored by webhook id, then by the Shopify order id on the Sales Order.
  • Missed webhook: a sweep lists orders updated since the last run and posts any that are missing.
  • Stock drift: a nightly job compares quantity available per Location with Shopify availability for every SKU.
  • Money check: a daily list of paid orders without a Customer Deposit.

Environments and acceptance tests before go-live

We test against a NetSuite sandbox refreshed shortly before UAT and a Shopify development store. A sandbox is bought separately and comes back from a refresh without the OAuth 2.0 authorizations, TBA tokens and web store domains of production, so the integration is re-authorized after every refresh. Finance and warehouse leads sign off these tests, which run again after each NetSuite release and Shopify API version change.

  • A paid order with a discount code, shipping and tax creates one Sales Order with matching totals and a Customer Deposit.
  • The same ORDERS_PAID webhook delivered twice creates one Sales Order.
  • A partial Item Fulfillment creates a partial Shopify fulfillment with tracking, and the deposit applies to the Invoice.
  • A refund with restock creates a Return Authorization, Credit Memo and Customer Refund; a shipping-only refund creates only the Credit Memo and refund.
  • A B2B buyer sees the catalog price for their company location, and an order from a second store posts to the right subsidiary.

AI agent access across NetSuite and Shopify

Both vendors ship official MCP servers, and neither sees the other system. Oracle’s NetSuite AI Connector Service is a remote MCP endpoint per account at no extra fee, with the free MCP Standard Tools SuiteApp for records, reports, saved searches and read-only SuiteQL under a non-administrator role; its custom tools cannot call external APIs. Shopify’s connector for Claude edits products, inventory and discount codes and reads orders at no extra Shopify fee, but cannot issue refunds, cancel orders or process returns. For questions that span both, we build a separate MCP server that calls SuiteTalk REST and the GraphQL Admin API: read tools first, and write tools such as releasing a held order behind the approval rules your team sets.

Outcomes

Why teams connect NetSuite and Shopify

  • Shopify shows the quantity available in the NetSuite Location that ships web orders, not an hourly snapshot.
  • Paid orders post to NetSuite within minutes with the Shopify order id on the transaction, so nothing is keyed twice.
  • Tracking from Item Fulfillments reaches the Shopify order and the customer without warehouse staff opening Shopify.
  • Payouts, fees and refunds tie out in NetSuite, so month-end ends at the bank statement, not a spreadsheet.

NetSuite Shopify Integration FAQs

Should we use Oracle’s NetSuite Connector, Celigo or a custom build?

The connector for one store with standard flows and a 3PL: it maps orders, products, inventory, fulfillments and refunds out of the box. Celigo if you already run it or need its Sales Order, Cash Sale or Invoice import options. Custom for several subsidiaries or stores, kits, payout reconciliation, B2B terms owned by NetSuite, or to own the code.

What does the NetSuite Connector for Shopify cost?

The Shopify App Store listing for NetSuite ERP Connector shows B2C Standard from about $199.92/month, B2C Premium and POS at about $249.92/month and B2B at about $916.58/month (vendor list price, Sep 2026), billed by Oracle NetSuite. Celigo publishes no prices and charges per endpoint and flow, not per transaction.

How real-time is each option?

Oracle’s help lists the connector’s standard schedules as orders every 20 minutes, products every 60 and fulfillments and refunds every 90. Our builds take orders from the ORDERS_PAID webhook and create the Sales Order within seconds to a few minutes, push availability every 5 to 15 minutes or after each Item Fulfillment, and sweep on updated_at because Shopify does not guarantee webhook delivery.

How do NetSuite concurrency limits affect the sync?

Every REST and RESTlet request counts against one account limit: 5 on the Standard tier, 15 on Premium, 20 on Enterprise and Ultimate, plus 10 per SuiteCloud Plus license, in sandbox as well as production. The integration record therefore gets its own allocation and catalog work is throttled.

Which Shopify plan do we need?

Any plan works for D2C; API budget and B2B differ. Shopify grants 100 cost points per second on Standard plans, 200 on Advanced, 1,000 on Plus and 2,000 on enterprise, and caps B2B at three active catalogs below Plus. Plus includes nine expansion stores and lists from $2,500 per month on a one-year term.

How are Shopify orders, payments and refunds recorded in NetSuite?

A paid order becomes a Sales Order with the Shopify order id in a custom body field and the order name in the memo. The captured payment posts as a Customer Deposit, applied when the Invoice or Cash Sale is created after fulfillment. A refund with restocked lines creates a Return Authorization and Credit Memo, a refund without restock only the Credit Memo, and the money leaving the gateway posts as a Customer Refund.

Can Shopify B2B pricing and payment terms come from NetSuite?

Yes. NetSuite price levels and customer-specific prices map to Shopify price lists on catalogs, which attach to companies or, on Plus, to individual company locations. Terms on the company location (Net 7 to Net 90 or due on fulfillment) match the NetSuite customer terms.

How do you handle SKU mapping and duplicate customers?

The NetSuite item name or a custom SKU field equals the Shopify variant SKU; matrix items, Kit Items and units of measure are handled explicitly in the mapping workbook. Shopify customers match a Customer by email or by the NetSuite internal id stored on the Shopify customer after the first order.

What happens when an order fails in NetSuite?

It waits in a retry queue with the NetSuite message, and the named owner gets an alert. Technical errors retry with backoff; data errors wait for a fix and a replay. Every create first checks for a transaction with the same Shopify order id, so a replay cannot create a second Sales Order.

Do you reconcile Shopify Payments payouts?

Yes, as an optional flow. Shopify’s Admin API returns each payout with its net amount, issue date, a fee summary and its balance transactions. We post the payout as a bank deposit, expense the fees and match the lines to the Customer Deposits and Refunds in NetSuite.

Can AI agents act across NetSuite and Shopify?

Each has an official MCP server that sees only its own data: Oracle’s NetSuite AI Connector Service with the free MCP Standard Tools gives Claude or ChatGPT records, saved searches, reports and read-only SuiteQL, and Shopify’s connector for Claude edits products and inventory and reads orders but cannot refund or cancel. To trace an order from checkout to payout, we build a separate MCP server that calls both APIs, since NetSuite custom tools cannot call external APIs, with writes behind your approval rules.

How long does a NetSuite Shopify integration take?

A standard items, availability, orders, customers, payments, fulfillments and refunds build usually takes a few weeks including sandbox testing. Several stores or subsidiaries, B2B price lists, kits, payout reconciliation and backfills extend that, typically to two to three months.

Ready to connect NetSuite and Shopify?

The enquiry form is at the top of this page. Share your objects, volumes and timing needs and we'll come back with a written scope.

Go to the enquiry form