N NetSuite Integration/Help
Book a meeting
01Start

Overview

2 min read

NetSuite Integration connects one Shopify store to one NetSuite account. Each kind of record syncs in a set direction, and every sync can be switched on or off on its own settings page.

RecordDirectionWhen it runsWhat is created
OrdersShopify → NetSuiteWhen an order is created or updated in ShopifySales Order (default), Cash Sale, or Invoice for POS orders. Optional Customer Deposit, and an Invoice or Cash Sale created from the Sales Order.
FulfillmentsEither direction (you choose one)NetSuite → Shopify: hourly, or on demand. Shopify → NetSuite: when the Shopify order is fulfilled.Shopify fulfillments with tracking, or NetSuite Item Fulfillments.
RefundsBoth directionsShopify → NetSuite: when a refund is created in Shopify. NetSuite → Shopify: hourly.Cash Refund, or Return Authorization with Item Receipt and Cash Refund; Shopify refunds from refunded Return Authorizations.
CustomersBoth directionsShopify → NetSuite: when a customer is updated and with every order. NetSuite → Shopify: automatically on the app's schedule while import is on, or when you click Import Customers.NetSuite Customers (individual or company) and Contacts; new Shopify customers.
Companies (B2B)NetSuite → ShopifyWith the customer importShopify B2B companies with their contacts, optionally assigned to a catalog.
ProductsNetSuite → ShopifyAutomatically on a schedule, or when you click Import Product / Test SyncNew Shopify products and variants; optional updates to existing ones. Enterprise
Inventory & pricesNetSuite → ShopifyEvery few hours, or when you click Process Inventory SyncShopify stock levels per location and variant prices; market and company catalog prices on Enterprise.
Purchase ordersShopify → NetSuiteWhen an order is created or updated in Shopify and matches your conditionNetSuite Purchase Order instead of a Sales Order.
How the pieces fit

Items are matched between the two systems by the SKU Mapping Field you choose during setup (for example the NetSuite Item Name/Number matched to the Shopify SKU). Prices come from the NetSuite Price Level you choose. Get these two right first, because orders, inventory, prices and products all depend on them.

02Start

Before you start

2 min read

The app signs in to NetSuite with Token-Based Authentication (TBA). You need a NetSuite administrator to prepare five things. Do this in a sandbox account first if you have one.

1. Enable NetSuite features

  1. In NetSuite, go to Setup > Company > Enable Features and open the SuiteCloud subtab.
  2. Under SuiteTalk (Web Services), check SOAP Web Services and REST Web Services. The app writes records through SOAP and reads data through REST (SuiteQL queries), so both are needed.
  3. Under Manage Authentication, check Token-Based Authentication.
  4. Click Save and accept the terms if NetSuite asks.

2. Create a role for the integration

Create a dedicated role (Setup > Users/Roles > Manage Roles > New) and assign it to the user who will own the token. Using a dedicated role, not Administrator, keeps access limited to what the integration needs.

Permission tabGrant
SetupLog in using Access Tokens, SOAP Web Services, REST Web Services. Add User Access Tokens if this user will create their own token.
TransactionsThe records you plan to sync: Sales Order, Cash Sale, Invoice, Customer Deposit, Customer Payment, Item Fulfillment, Return Authorization, Item Receipt, Cash Refund, Purchase Order. Full level for records the app creates.
ListsCustomers, Contacts, Items, Locations, Currency, Price Levels / Pricing, Tax records, Promotions (if you sync discounts as promotion codes), Documents and Files (if you sync product images).
Missing permissions are the most common cause of failed syncs

If you add a feature later (for example refunds or fulfillments), check that the role can read and create the matching NetSuite records. Also give the role access to the subsidiaries, locations and custom fields your orders use.

3. Create an integration record

  1. Go to Setup > Integration > Manage Integrations > New.
  2. Enter a name such as Shopify NetSuite Integration and set the state to Enabled.
  3. Under Authentication, check Token-Based Authentication.
  4. Save. NetSuite shows the Consumer Key / Client ID and Consumer Secret / Client Secret once. Copy them somewhere safe.

4. Create an access token

  1. Go to Setup > Users/Roles > Access Tokens > New.
  2. Choose the integration record from step 3, the user, and the role from step 2.
  3. Save. NetSuite shows the Token ID and Token Secret once. Copy them.

5. Find your Account ID and API endpoint

  1. Go to Setup > Company > Company Information.
  2. Copy the Account ID. A production account looks like 1234567; a sandbox looks like 1234567_SB1.
  3. Open the Company URLs subtab and copy the value of SUITETALK (SOAP AND REST WEB SERVICES), for example https://1234567-sb1.suitetalk.api.netsuite.com. This is the app's API Endpoint.
Tip

Copy the Account ID exactly as NetSuite shows it, including the _SB1 suffix for a sandbox, and copy the API endpoint from the same account. Mixing a sandbox ID with a production URL (or the other way round) fails the connection test.

03Start

Install and connect

6 min read
  1. Install NetSuite Integration from the Shopify App Store and approve the requested permissions.
  2. Choose a plan on the Plans page (see Plans & billing) and approve the charge in Shopify.
  3. Open Configurations. The setup guide has three steps: NetSuite API Connection, General Configuration and Ready To GO! A progress bar at the top shows how many of the three are complete. Each step opens once the step before it is done.

Once all three steps are complete, opening the app takes you straight to the Dashboard. You can come back to these steps at any time from Configurations.

Step 1: NetSuite API Connection

This step connects your store to one NetSuite account using token-based authentication. Create the integration record and access token first (see Before you start), then copy the values into the form. Hover the ? icon next to each field in the app for where to find the value in NetSuite.

SettingHow it worksDefault
API EndpointThe web services address of your NetSuite account. In NetSuite go to Setup > Company > Company Information, open the Company URLs subtab and copy the SuiteTalk (SOAP and REST Web Services) URL. It must be a full URL starting with https://. Required.Empty
Account IDYour NetSuite account ID from Setup > Company > Company Information, for example 1234567 for production or 1234567_SB1 for a sandbox. Enter it exactly as NetSuite shows it. Required.Empty
Consumer Key / Client IDShown once when you save the integration record (Setup > Integrations > Manage Integrations > New). Required.Empty
Consumer Secret / Client SecretShown together with the Consumer Key. The field is masked. Required.Empty
Token IDShown once when you create the access token for the integration, user and role. Give the role the recommended permissions (see the NetSuite role). Required.Empty
Token SecretShown together with the Token ID. The field is masked. Required.Empty
Notification EmailThe address that receives an email when an order fails to sync to NetSuite. The email names the Shopify order and the error. Use a shared inbox your team watches. Optional. You can stop these emails with Disable Order Notifications in the Order additional settings (see Orders).Not set: failure emails go to your Shopify store's contact email

Click Establish Connection. The app saves the values and tests them against NetSuite straight away. On success the step shows NetSuite Account is Connected, the app loads your NetSuite price levels, and Step 2 opens. If the test fails, the step shows Invalid Login Credentials; check the values against Common setup mistakes and try again.

Re-check after every connection save

Each time you click Establish Connection, the SKU Mapping Field in Step 2 goes back to its default (Item Name/Number) and the Price level toggle under the Order line item settings is switched off. This keeps old matching rules from being used against a different NetSuite account. After saving the connection, open Step 2 and the Order line item settings and set them again.

How the app checks the connection

The app tests the connection again every time you open the Dashboard or Configurations, and when you open the Orders, Customers, Products, Inventory or Purchase Orders pages. If NetSuite rejects the saved credentials (for example, the token was revoked or the role changed), the app sends you back to Configurations with a Connection Error banner: Please provide valid NetSuite credentials. Fix the values in Step 1 and click Establish Connection again.

Tip

Switching from a sandbox to production (or to another NetSuite account) is done here: enter the other account's values in Step 1, then redo Step 2 and use Clear Temporary Cache in Step 3.

Step 2: General Configuration

This step tells the app how to match Shopify products to NetSuite items and which NetSuite price level to use. Both choices are shared by inventory, price, product and order sync, so set them before you configure anything else. The app's settings pages become available once this step is saved.

SettingHow it worksDefault
SKU Mapping FieldThe NetSuite item field that holds the same value as your Shopify variant SKU. The app looks up items by this field for price, inventory and order sync. Options:
  • Item Name/Number: the item's Name/Number field.
  • UPC Code: the item's UPC Code field.
  • Display Name/Code: the item's Display Name/Code field.
  • Vendor Name/Code: the item's Vendor Name/Code field.
  • Custom Field: an item custom field. A Custom Field box appears; enter the field's ID, for example custitem_shopify_sku. The box is required when this option is selected.
Each Shopify SKU should match exactly one NetSuite item. Recommended: Item Name/Number if your NetSuite item names equal your SKUs.
Item Name/Number
Price Level NameThe NetSuite price level used for your website prices. The list shows the active price levels in your NetSuite account, for example Base Price or Online Price. Price sync sends this price level to Shopify, and order sync uses it on order lines when the Price level toggle is on in the Order line item settings (see Orders). Required: you cannot save this step without it.Not set: must be chosen to finish setup

Click Save Changes. If the price level list is empty, check that the connection in Step 1 is working and that the role can see price levels.

Step 3: Ready To GO!

The final step confirms the connection and links to the Dashboard (sync history), Inventory Settings, Customer Settings and Order Settings. It also has Clear Temporary Cache.

The app keeps a record of which Shopify customers and products it has already matched to NetSuite records, so later syncs don't have to search NetSuite again. Clearing the cache removes those saved matches. It does not delete anything in Shopify or NetSuite. On the next sync the app searches NetSuite again and saves new matches.

SettingHow it worksDefault
Clear Customer DataRemoves the saved links between your Shopify customers and NetSuite customer records. The next time a customer or their order syncs, the app searches NetSuite again (using your customer search settings) and links or creates the customer.Unchecked
Clear Product DataRemoves the saved links between your Shopify products and variants and NetSuite items. The next sync matches them again using the SKU Mapping Field.Unchecked
Clear Cache (button)Runs the clear for the boxes you checked and shows how many records were cleared. The button is disabled until at least one box is checked. The boxes reset after a successful clear.—
Only when needed

Use Clear Temporary Cache only if you switch to a different NetSuite account (for example from sandbox to production), change the SKU Mapping Field, or support asks you to. Clearing customer data when nothing has changed makes the next syncs slower, because every customer is looked up in NetSuite again.

Recommended order

Set up Inventory & prices first and check that stock matches, then Customers, then Orders. Turn on order sync last, once items match by SKU.

04Sync settings

Orders

21 min read

Open Orders Settings from the app menu. This page controls how Shopify orders are written to NetSuite, and how refunds and fulfillments move between the two systems. The page has eight cards: General Settings, Order Tax Settings, Line Item Settings, Refund Settings, Fulfillment Settings, Additional Settings, POS Settings and Fields Conditional Mapping. Each card has its own save bar, so save one card before you move to the next. Most cards can only be saved after Order sync is switched on in General Settings.

Tip

Before you switch on order sync, finish General Configuration (SKU Mapping Field and Price Level Name) and check that your Shopify SKUs match NetSuite items. Then set Sync orders from this date onwards in Additional Settings to your go-live date, so older orders are not sent when they are edited.

How an order syncs

Orders sync when Shopify reports that an order was created or changed, usually within a few seconds. The same order is never created twice: every record the app creates carries the NetSuite External ID shopify_ followed by the Shopify order ID, and the app checks for it before creating anything. Below is what happens to each order, in order.

  1. Checks. The order is skipped if Order sync is off or the order was created before Sync orders from this date onwards.
  2. Record type. The app decides what to create: a Sales Order or a Cash Sale (from Sync order as), an Invoice for fulfilled POS orders when POS Settings say so, or a Purchase Order when your purchase order rules match.
  3. Customer. The app finds the NetSuite customer by email (and phone, if that search is on), or creates one, including for guest checkouts. The rules are in How customers are found and created. You can instead send every order to one customer, or send orders with no email and no phone to a fallback customer (see Additional Settings).
  4. Items. Each Shopify line is matched to a NetSuite item. The app uses the link saved by earlier syncs, or searches NetSuite by your SKU Mapping Field. Gift card products and custom (non-catalog) lines can be mapped to fixed NetSuite items. A line that matches no NetSuite item cannot be added to the order, so make sure every SKU exists in NetSuite.
  5. Prices, discounts, shipping and tax. Line rates, amounts and price levels follow Line Item Settings. Discounts become promotion codes or discount lines (General and Line Item Settings). Shipping goes on the order header or as a shipping item line. Duties and gift card payments can be added as lines. Tax codes follow Order Tax Settings. When your Shopify prices include tax, the app sends pre-tax amounts.
  6. Header fields. Billing and shipping addresses and the email are copied, then your conditional mapping rules fill fields such as subsidiary, location, department, class or custom body fields.
  7. Follow-on records. Depending on General Settings, the app also creates a Customer Deposit, an Invoice or Cash Sale from the Sales Order, and a payment that marks that invoice paid.

When the order changes in Shopify

Edits in Shopify (items, quantities, addresses, notes) update the NetSuite record while it is still open: Pending Approval, Pending Fulfillment, Partially Fulfilled, Pending Billing/Partially Fulfilled or Pending Billing. Once a Sales Order is billed or closed in NetSuite, Shopify edits are no longer written to it. Cash Sales are updated whenever the order changes. If items or quantities change, the app replaces the deposit, invoice or cash sale it created from that Sales Order so they match the new totals. To stop updates entirely, use Disable Order Update Setting.

Cancellations, refunds and fulfillments

  • Cancel: with Cancel Order on, cancelling a Shopify order deletes its NetSuite Sales Order.
  • Refunds, Shopify to NetSuite: a Shopify refund becomes a Cash Refund, or a Return Authorization that is received and refunded in NetSuite. See Refund Settings.
  • Refunds, NetSuite to Shopify: every hour, refunded Return Authorizations in NetSuite are recorded as refunds on the Shopify order.
  • Exchanges: for Cash Sale shops, an exchange can create a new Cash Sale and fully refund the previous one.
  • Fulfillments: choose one direction. Either Shopify fulfillments create Item Fulfillments on the Sales Order, or NetSuite Item Fulfillments become Shopify fulfillments with tracking every hour. See Fulfillment Settings.

Orders that fail are listed on the dashboard with the NetSuite error, and you can resubmit them after fixing the cause (see Dashboard and resubmitting an order). A failure email is also sent unless you turn it off.

Order General Settings

The General Settings card turns order sync on and picks the NetSuite record type, the follow-on records, shipping cost, order-level discounts and cancellation. Some options appear only after you switch on or choose the option above them. Saving this card with Order sync on also tells Shopify to start sending order updates to the app.

SettingHow it worksDefault
Order syncSends Shopify orders to NetSuite when they are created or changed. Nothing is sent while it is off. Shipping cost, customer deposits, order discounts, tax settings and the other order cards need it on before they can be saved. Turn it on only after items match by SKU.Off
Sync order asAppears when Order sync is on. The NetSuite record each order becomes. Options:
  • Sales Order: the usual choice when you fulfill and bill in NetSuite. Fulfillment sync, cancellation and the Invoice/CashSale options below work with Sales Orders.
  • CashSale: a paid-at-checkout record with no separate invoice step. Choosing it hides and clears Invoice/CashSale sync and Customer Deposit. A Cash Sale needs a location; the app uses the location from Line Item Settings, the item's default location, or the first location of the order's subsidiary.
Sales Order (when the card is saved with no choice)
Invoice/CashSale syncShown for Sales Orders. Also creates a billing record from the Sales Order. Options: SO Invoice (an Invoice transformed from the Sales Order) or SO CashSale (a Cash Sale transformed from the Sales Order). Leave it on Select Type to create only the Sales Order. After choosing a type, choose when to create it:
  • On Order Creation: right after the Sales Order is created.
  • On Shopify Order fulfillment: when the Shopify order becomes fully fulfilled.
The record is created once per order. With On Order Creation, NetSuite must allow billing before fulfillment for the items you sell.
Select Type (no invoice or cash sale). On Order Creation is preselected when you pick a type.
Customer DepositShown for Sales Orders when Invoice/CashSale sync is Select Type or SO Invoice. Creates a NetSuite Customer Deposit against the Sales Order for the order's current total, to record the payment taken in Shopify. Choosing SO CashSale turns it off, because the cash sale already records the payment.Off
Mark Invoice as PaidShown when Invoice/CashSale sync is SO Invoice. After the invoice is created, the app records a customer payment against it so the invoice shows as paid in NetSuite.Off
Sync shipping costSends the order's shipping charge (without tax) as the NetSuite shipping cost, and sets the ship method to the Shipping method internal ID you enter (required when on). If Shipping cost as line item is also on, the ship method is still set but the header shipping cost is 0 and the charge goes on the shipping line instead.Off (no shipping cost or ship method on the order)
Apply order total discountsSends Shopify discounts to NetSuite. When on, pick a Discount Item from your NetSuite discount items (required) and one option:
  • Sync dicount as promotion code: for each Shopify discount code (or automatic discount), the app looks for a NetSuite promotion with the same code, creates it with your Discount Item if it does not exist, and applies it to the order. Use this if you report on promotions in NetSuite.
  • Sync dicount as line item: the order-level discount is spread across the order's lines and added as negative lines using the Discount Item. This is the simplest to set up.
Off. Sync dicount as promotion code is preselected when switched on.
Cancel OrderWhen a Shopify order is cancelled, its NetSuite Sales Order is deleted. Saving with it on tells Shopify to send cancellations to the app; turning it off stops that. Applies to orders synced as Sales Orders. The NetSuite order must still be deletable (for example, not yet fulfilled or billed).Off (cancellations are not sent to NetSuite)
Cancel Order deletes records

With Cancel Order on, a cancellation in Shopify removes the Sales Order from NetSuite rather than closing it. Leave it off if you need an audit trail in NetSuite, and close cancelled orders there by hand.

Order Tax Settings

The Order Tax Settings card decides which NetSuite tax codes go on order lines and shipping. Pick one Tax Type; the options below it change with your choice. Order sync must be on to save this card. Your NetSuite tax setup (SuiteTax or legacy tax, nexuses) decides which option fits; if unsure, ask your NetSuite administrator which tax codes your sales orders normally use.

SettingHow it worksDefault
Tax TypeOptions:
  • Sync Shopify Tax: keep the tax Shopify calculated. Each taxable line, and shipping, gets the Tax Code you pick plus the Shopify tax rate for that line, so NetSuite shows the same tax as Shopify.
  • Sync NetSuite Tax: let NetSuite calculate tax from the tax codes you assign with Apply tax on.
Leave it on Select tax type to send no tax codes; NetSuite then applies its own defaults.
Select tax type (no tax codes sent)
Tax CodeShown for Sync Shopify Tax. The NetSuite tax code put on taxable lines and on taxed shipping. The list comes from your NetSuite account and can be searched. Required.Not set
Apply tax onShown for Sync NetSuite Tax. Options:
  • Not Required: no tax codes are set on lines.
  • Apply single Tax Code for entire store: one tax code for every taxable line. Switch on Sync taxes, pick the tax code and, optionally, Tax countries.
  • Apply Tax Code based on product collection/Country: a table of rules (see below).
Not Required
Sync taxesShown for Apply single Tax Code for entire store, and must be on for that option to save. Reveals the tax code list; pick the NetSuite tax code to use on every taxable line and on taxed shipping.Off
Tax countriesShown with Sync taxes. Limits the single tax code to orders shipped to the countries you select. Orders to other countries, and orders with no shipping address, get no tax code. Leave blank to apply the tax code to all countries.Blank (all countries)
Country / Collection / Tax Code / Apply for ShippingShown for Apply Tax Code based on product collection/Country. Click (+)Add to add a rule, and fill in:
  • Country (required): one or more shipping countries the rule applies to.
  • Collection (optional): Shopify collections. A rule with a collection applies to products in that collection and wins over a rule without one.
  • Tax Code (required): the NetSuite tax code to use.
  • Apply for Shipping: also use this tax code for the shipping charge.
Rules are matched against the order's shipping country, so orders with no shipping address get no tax code.
No rules

Order Line Items

The Line Item Settings card controls the price fields on each order line and adds extra lines for discounts, shipping, duties and gift cards. Fields that ask for an internal ID need the number NetSuite shows for that record.

SettingHow it worksDefault
Price levelPuts the Price Level Name from General Configuration on each line, so NetSuite shows which price list the sale came from. You must choose a price level in General Configuration before you can save this on. The Shopify amount is still sent unless Include amount from NetSuite is on. Use either Price level or Include rate, not both.Off
Include rateSends the Shopify unit price as the line rate, with the price level set to Custom. Use it when Shopify prices differ from NetSuite and you want the Shopify price on the order.Off
Include amount from NetSuiteWhen on, the app does not send the line amount, so NetSuite calculates it from the rate or price level and the quantity. When off, the app sends the Shopify line total (less line discounts, unless they go on separate discount lines).Off (the Shopify amount is sent)
Sync line item discounted priceSets each discounted line's rate to its discounted unit price (line total after discount divided by quantity), so the discount is built into the rate. Cannot be on together with Shopify item discount as line item; saving one switches the other off.Off
Shopify item discount as line item EnterpriseAfter each discounted line, adds a negative line for that line's discount using the Discount Item you select (required). Keeps the full price on the product line and shows the discount separately. If an order-level Discount Item is set in General Settings, that item is used for these lines too.Off
Shipping cost as line itemSends the shipping charge as an item line, using the Shipping item internal ID you enter (required), instead of the order's shipping cost field. A line is added only when the order has a shipping charge. Use a NetSuite shipping, service or other charge item available to your subsidiary.Off
Sync duties as line itemAdds the order's import duties as a line, using the Duties item internal ID you enter (required). A line is added only when the order has duties.Off
Sync gift card for purchase as line item EnterpriseShopify gift card products on an order are sent as the NetSuite item whose NetSuite item internal ID you enter (required), at their positive amount, instead of being matched by SKU.Off
Sync gift card for redemption as line item EnterpriseWhen an order is paid fully or partly with a gift card, adds a negative line for the gift card amount, using the NetSuite item internal ID you enter (required), so the order total matches what was paid by other means.Off
LocationThe inventory location set on order lines. Options:
  • Not Required: no line location; NetSuite uses its own defaults.
  • Send Default Item Location with Order Items: each line gets its item's default location in NetSuite.
  • Define Item Location to use with All Order Items: enter one NetSuite location internal ID for every line (required).
The location must belong to the order's subsidiary.
Not Required
Tip: internal IDs

Fields that ask for an internal ID need the number NetSuite shows for that record (turn on Show Internal IDs under Home > Set Preferences to see them in lists). The item must be available to your subsidiary and, for shipping, set up as a shipping or service item.

Order Refund Sync

The Refund Settings card syncs refunds in either or both directions, and handles exchanges for Cash Sale shops. Refunds are recorded against the NetSuite Sales Order or Cash Sale the app created for that order, and each refund is sent only once.

SettingHow it worksDefault
Shopify to NetSuiteWhen a refund is created in Shopify, it is recorded in NetSuite. Saving with it on tells Shopify to send refunds to the app. Pick the refund type:
  • Return Authorization: creates a Return Authorization for the refunded items, receives them back with an Item Receipt, then creates a Cash Refund from it. Use this when returned goods come back into stock. A return authorization is created only if the order has been fulfilled in NetSuite; if it has not been fulfilled, the NetSuite order and invoices are updated instead.
  • Cash Refund: creates a Cash Refund directly from the Sales Order or Cash Sale, for the refunded items and quantities, with no return or receipt.
Applies to orders synced as Sales Orders or Cash Sales.
Off. Return Authorization is preselected when switched on.
Create new order on exchangeAppears when Shopify to NetSuite is on, and only applies when orders sync as Cash Sales. On each Shopify exchange, a new NetSuite Cash Sale is created with the items still kept plus the exchange items, and the previous Cash Sale is fully refunded. The exchange refund itself is not sent as a separate refund. Use it to keep one current Cash Sale that matches what the customer has.Off
NetSuite to ShopifyEvery hour, Return Authorizations with status Refunded in NetSuite are recorded as refunds on the matching Shopify order, for the returned lines and their amount including tax. Applies to paid orders that are fulfilled. Each Return Authorization is sent once.Off
Pick one direction per refund

If both directions are on, a refund made in Shopify is written to NetSuite, and a return refunded in NetSuite is written to Shopify. Make each refund in one system only, or the customer may be refunded twice.

Order Fulfillment

The Fulfillment Settings card keeps shipments in step. Choose one Fulfillment Flow; the options for that direction appear below it. Fulfillment sync applies to orders synced as Sales Orders. Partial fulfillments are supported in both directions: each Shopify fulfillment or NetSuite Item Fulfillment is synced once.

SettingHow it worksDefault
Fulfillment FlowOptions:
  • Shopify to Netsuite Fulfill: when an order is fulfilled in Shopify, an Item Fulfillment is created on the NetSuite Sales Order for the shipped items and quantities, with the Shopify tracking numbers as packages. The order must already be in NetSuite.
  • Netsuite to Shopify Fulfill: every hour, Item Fulfillments created in NetSuite become Shopify fulfillments with the tracking numbers and carrier. A Shopify fulfillment is created once the Sales Order is Partially Fulfilled, Pending Billing, Billed or similar. Items are matched to Shopify through your synced products.
Leave it on Select Fulfillment flow to sync no fulfillments.
Select Fulfillment flow (no fulfillment sync)
Fulfillment Item LocationShown for Shopify to Netsuite Fulfill. The location set on Item Fulfillment lines. Options:
  • Default Location: each line ships from its item's default location.
  • Selected Location: choose one NetSuite location from the list for all lines. Cash Sales and cash refunds also use this location when one is saved.
Default Location
Notify Customer on Fulfillment EnterpriseShown for Netsuite to Shopify Fulfill. Shopify sends its shipping confirmation email to the customer when the app creates the fulfillment.Off (no email)
Sync shipping carrier from EnterpriseShown for Netsuite to Shopify Fulfill. Which Item Fulfillment field becomes the tracking company in Shopify. Options: Shipping carrier (the carrier, for example UPS or FedEx) or Shipping method (the ship method name). Choose Shipping method if your ship method names match carriers Shopify recognizes, so tracking links work.Shipping carrier
Netsuite To Shopify Update (button)Shown for Netsuite to Shopify Fulfill after the card is saved. Runs the NetSuite-to-Shopify fulfillment check now instead of waiting for the hourly run.—
Tip

For Netsuite to Shopify Fulfill, the NetSuite role used by the app needs permission to view Item Fulfillments and their packages, and the item ship carrier and ship method. If tracking does not reach Shopify, ask your NetSuite administrator to check the role.

Order Additional Settings

The Additional Settings card covers free shipping coupons, fixed customers, custom items, the start date and notifications. Each toggle that asks for an ID cannot be saved until the ID is entered.

SettingHow it worksDefault
Enable Free Shipping Coupon SyncLinks a Shopify free-shipping coupon to a NetSuite promotion. Enter the Netsuite Free Shipping Promotion Internal Id and the Shopify coupon code (Enter Shopify Coupon Code). When an order uses that code, or a Shopify free-shipping discount, the NetSuite promotion is applied to the order.Off
Map all orders to single customerEvery order is created under one NetSuite customer (enter its Customer Internal Id) and no customers are looked up or created. Useful for a single "Web Customer" or "Cash Customer" setup.Off (each order gets its own customer)
Default Customer for Missing DetailsOrders with neither an email nor a phone number go to this NetSuite customer (enter its Customer Internal Id). Without it, those orders fail with a missing customer error.Off
Map custom item to one productShopify custom items (lines added by hand that are not catalog products) are sent as one NetSuite item, whose Product Internal Id you enter. Without it, custom lines cannot be matched and are left off the NetSuite order.Off
Sync orders from this date onwardsOnly orders created on or after this date sync. Older orders are ignored, even when they are edited. Leave blank to sync all. Set it to your go-live date so historic orders are not sent.Blank (all orders)
Disable Order Update SettingAfter an order is created in NetSuite, later Shopify edits no longer change it. Fulfillments from Shopify, the invoice or cash sale on fulfillment, the customer deposit and exchange cash sales still sync. Use it when your team edits orders in NetSuite.Off (Shopify edits update the order)
Disable Order NotificationsStops the email sent when an order fails to sync. Failures still appear on the dashboard. The email address is set in Notification Email.Off (emails are sent)

POS Settings

Shopify POS orders sync like online orders, using the settings above. The POS Settings card lets you create fulfilled POS sales as invoices instead.

SettingHow it worksDefault
Enable POS Order SyncTurns on separate handling for orders placed in Shopify POS. When off, POS orders are treated like any other order.Off
Create POS asShown when Enable POS Order Sync is on. Options: Sales Order (same as online orders) or Invoice. With Invoice, a fulfilled POS order (the usual over-the-counter sale) is created as a NetSuite Invoice. A POS order that is not fulfilled yet, such as a ship-to-customer sale, is created as your usual record type.Sales Order
Mark Invoice as PaidShown when Create POS as is Invoice. Records a payment against each POS invoice so it shows as paid in NetSuite.Off

Order Conditional Mapping

Use Fields Conditional Mapping to set NetSuite order header fields that the other cards do not cover, such as subsidiary, department, class, location, sales rep, memo, terms or your own custom body fields. Each rule is a card; click (+)Add More to add one and Remove to delete it. Rules apply when the order is created and each time it is updated.

SettingHow it worksDefault
OperationWhat the rule does. Options:
  • Map NetSuite Field to Fixed Value: always set a field to the same value, for example a subsidiary or a sales channel.
  • Map NetSuite Field to Shopify Field: copy a value from the Shopify order or customer into a NetSuite field, for example the Shopify order number into otherRefNum.
  • Map Netsuite Field to Fixed Value Based on Shopify Field Value: set a value only when a Shopify field matches a condition, for example a different location when the order's Shipping Country Code IS CA.
—
Shopify Field SourceFor the two Shopify-based operations. Where the value comes from: Customer Field, Customer Meta Field, Order Field, Order Meta Field or Order Notes Attribute. Then pick the field from the list (customer and order fields, such as email, order number, coupon code, shipping method, payment gateway, PO number or address parts), or type the metafield key (the key only, without the namespace) or the note attribute name.—
Where and Shopify Field ValueFor the condition-based operation. The comparison (IS, IS NOT, CONTAINS, DOES NOT CONTAINS) and the value to compare the Shopify field with.—
Prefix to appendFor Map NetSuite Field to Shopify Field. Optional text added before the copied value, for example SHOP-.None
Attribute TypeDefault Netsuite Field (pick a standard order field from the list, such as subsidiary, location, department, class, salesRep, memo or terms) or Custom Netsuite Field (type the field ID, such as custbody_sales_channel).—
NS FieldThe NetSuite field to set. For list fields such as subsidiary, location, department or class, the value must be the internal ID of the list entry.—
NS Field TypeFor custom fields. Must match the field's type in NetSuite: Custom String Field, Custom Select Field (value is the internal ID of the list value), Custom Multi-Select Field, Custom boolean, Custom CurrDate Field, Custom Date Time or Custom Record Ref.—
NS Field ValueFor the fixed-value operations. The value written to the NetSuite field.—
Exclude in updateSets the field only when the order is first created. Later Shopify edits leave it alone, so changes your team makes in NetSuite are kept.Off (the field is set again on every update)
Tip

Check the field ID and type on the NetSuite form (Customization > Lists, Records & Fields > Transaction Body Fields). A wrong type or a list value that is not available to the order's subsidiary makes NetSuite reject the whole order, and the error shows on the dashboard.

05Sync settings

Customers

13 min read

Open Customers Settings from the app menu. The page has three cards: Customer Export Settings (Shopify to NetSuite), Customer Import Settings (NetSuite to Shopify, including B2B companies) and Fields Conditional Mapping (extra NetSuite customer fields). Each card has its own save bar, so save one card before you move on to the next. Before the app creates any NetSuite customer it looks for an existing one, so the same shopper is not created twice.

Customer Export Settings

These settings control how Shopify customers are created and updated in NetSuite. They apply in two places: when a customer is edited in Shopify (only while Customer sync is on), and every time an order syncs, because each NetSuite order needs a customer. Some options only appear after you switch on the option above them.

SettingHow it worksDefault
Customer syncSends customer changes from Shopify to NetSuite whenever a customer is created or edited in Shopify. Switching it on and saving also tells Shopify to start notifying the app about customer changes; switching it off stops that. This toggle does not affect orders: the customer on every synced order is still found or created in NetSuite, using the rest of the settings on this card.Off
Sync as companyCreates NetSuite customers as company records instead of individuals. When on, choose one option:
  • When company name is present on billing address: a customer whose default address has a company name becomes a NetSuite company with that name. Customers without a company name are created as individuals.
  • Send all customers as company: every customer becomes a NetSuite company. The company name comes from the address, or from the customer's first and last name when the address has none.
Switching this off also clears the Customer Search Method and Sync customer info as contact options below.
Off. When switched on, When company name is present on billing address is preselected.
Customer Search MethodAppears only when Sync as company is on. Picks the extra way the app looks for an existing NetSuite customer. Only one method can be active:
  • Allow company based search: before searching by email, the app searches NetSuite for a customer with the shopper's company name (the Shopify B2B company the customer belongs to, or the company on their default address). If one is found, the shopper is added, or updated, as a contact under that NetSuite company instead of becoming a new customer.
  • Search customer by domain in email: the app looks for NetSuite company customers whose email uses the same domain as the shopper (for example @acme.com). If a company's email matches exactly, that company is updated. Otherwise the shopper is matched to, or created as, a contact under the matching company. If no company uses the domain, a new company is created. This only works when your NetSuite customers for these businesses are company records.
With neither selected, customers are searched by email only (plus phone, if that is switched on).
Neither selected (email search)
Sync customer info as contactAppears only when Allow company based search is selected. After the NetSuite customer is created or updated, the shopper's name, email and phone are also saved as a contact record under that customer. Useful when you keep one NetSuite company per business and want each buyer listed as a contact.Off
Allow phone based searchWhen no NetSuite customer matches the email, or the customer has no email, the app searches by phone number before creating a new customer. Without it, a customer who has no email cannot be created in NetSuite.Off
Auto generation enabled on NetSuite Customer Entity IDTurn this on if your NetSuite account numbers customers automatically (Set Up Auto-Generated Numbers). Turn it off to have the app fill the NetSuite Customer ID with the shopper's email. You can still set the Customer ID another way with a conditional mapping rule on entityId. The ID is only set when a customer is created, never on update.Off in the form. Until this card is saved for the first time, the app leaves the Customer ID for NetSuite to fill.
Disable customer updateWhen the app finds an existing NetSuite customer (or contact), it links to it and uses it for orders, but never changes its name, email, phone, addresses or mapped fields. New customers are still created. Turn this on when NetSuite is your master record for customer details.Off (existing customers are updated)
Domain search and public email providers

Domain search matches on the part after the @. If any NetSuite company customer uses a public address such as @gmail.com, unrelated shoppers with Gmail addresses can be attached to that company. Use domain search only when your NetSuite company customers use their own business domains.

How customers are found and created in NetSuite

Each time a Shopify customer is sent to NetSuite, from a customer edit or from an order, the app works through the steps below. The first match wins. The table lists each step and the setting that controls it.

StepHow it worksDefault
1. Already linkedIf this Shopify customer was synced before, the app reuses the NetSuite customer it is linked to, after checking that the record still exists in NetSuite.Always on
2. Company nameWith Allow company based search, a NetSuite customer with the same company name is matched, and the shopper becomes a contact under it.Off
3. EmailSearches active NetSuite customers by exact email. With Search customer by domain in email, the domain search described above is used instead. With Sync customer info as contact, contacts with that email are checked too.Always on
4. PhoneWith Allow phone based search, searches by phone when the email finds nothing or is missing.Off
5. CreateNo match: a new NetSuite customer (individual or company, per Sync as company) is created with name, email, phone (when longer than 6 characters), addresses and your conditional mapping fields.—
UpdateA match is updated with the latest Shopify details and mapping fields, unless Disable customer update is on.Updates on

Guests, addresses and special cases

  • Guest checkouts: an order placed without a customer account still gets a NetSuite customer. The app uses the email or phone on the order and the name and address from the order, and runs the same search steps before creating one.
  • No email and no phone: the app cannot search or create a customer. Set Default Customer for Missing Details in Order Additional Settings so these orders go to a NetSuite customer you choose; otherwise they fail with a missing customer message.
  • One customer for all orders: with Map all orders to single customer in Order Additional Settings, orders go to that one NetSuite customer, and Shopify edits to customers who have placed an order are not sent to NetSuite.
  • Addresses: when a customer is edited in Shopify, their Shopify addresses are sent to NetSuite. When a customer syncs with an order, the order's billing and shipping addresses are added to the NetSuite customer if they are not already in its address book.
  • Inactive or lead records: the email search only looks at active NetSuite customers. A shopper whose email is only on an inactive customer or a lead gets a new customer record.

Customer Import Settings

These settings bring customers from NetSuite into Shopify. The import runs automatically on the app's schedule while any of Sync customer, Customer update or Sync Company is on, and on demand with the Import Customers button at the top of the page. The button appears once one of those three toggles is on. The import reads your whole Shopify customer list first, so a large store can take a while; progress and errors show on the Logs page.

SettingHow it worksDefault
Sync customerCreates Shopify customers for NetSuite individual customers whose email is not in Shopify yet. A NetSuite customer is imported only if it has an email and at least one address, and has no contacts attached. The app copies the email, phone, first and last name and addresses (address lines, city, zip, country and company name). Each imported customer gets the Shopify tag ns_customer_id_ followed by its NetSuite internal ID, so you can find it later. Existing Shopify customers are never changed by this toggle.Off
Sync CompanyFor Shopify B2B stores: creates Shopify companies from NetSuite company customers. See Company (B2B) import for details. Switching it on shows Add catalog.Off
Add catalogAppears when Sync Company is on. Choose one of your Shopify B2B catalogs from the list. Every company location the import creates is added to that catalog, so the new company sees the right products and prices straight away. The list shows catalogs already used by company locations in your store; if it is empty, assign a catalog to at least one company location in Shopify and reload the page. Companies that already exist in Shopify are not changed.Off, no catalog
Customer updateUpdates existing Shopify customers from NetSuite. Customers are matched by email, and the Shopify first and last name are overwritten with the NetSuite values. When Sync customer is also on, new customers are created first and existing ones updated after.Off
NetSuite Checkbox Field for Customer SyncAppears once any import toggle is on. Enter the ID of a checkbox field on the NetSuite customer record, for example isonline or your own custentity_sync_to_shopify. Only NetSuite customers with that box checked are imported, updated or created as companies. Use the field ID exactly as NetSuite shows it, not its label. Leave blank to include every customer.Blank (all customers)
Tip

Use a checkbox field (for example a custom "Sync to Shopify" box) to control which NetSuite customers reach Shopify, rather than importing your whole customer list. Tick it on a few test customers, click Import Customers and check the result before ticking the rest.

Customer notes on synced customers

The app writes to the Shopify customer Note on customers it imports or updates from NetSuite, to keep track of its own changes. Keep any notes you need on those customers somewhere else, such as a customer metafield or tag.

Company (B2B) import

With Sync Company on, each import also creates Shopify companies from your NetSuite company customers. It needs Shopify's B2B features on your store. Companies are matched by name: a NetSuite company whose name already exists as a Shopify company is skipped. The import creates companies only; it does not update companies that already exist in Shopify.

What is createdHow it worksDefault
Which NetSuite recordsNetSuite customers saved as companies (not individuals) whose name is not yet a Shopify company. If NetSuite Checkbox Field for Customer Sync is filled in, only companies with that box checked.All NetSuite company customers
CompanyA Shopify company named after the NetSuite company name (or its first and last name, when those are filled in on the NetSuite record).—
LocationOne company location with the same name, using the NetSuite customer's default shipping and billing addresses.—
ContactsEach contact on the NetSuite company that has an email is added as a contact of the Shopify company. Contacts without an email are skipped.—
CatalogThe new location is added to the catalog chosen in Add catalog, when that is on.No catalog
Tip

Because companies are matched by name, keep company names identical in NetSuite and Shopify. Renaming a company on one side only leads to a second company being created on the next import.

Company catalog prices Enterprise

To give B2B companies NetSuite pricing, map their catalogs to NetSuite price levels. This setting lives on the Inventory page under Price Sync, as Price Mapping for Company Catalog (see Price Mapping for Company Catalog). It appears once Price Sync is on. Catalog prices are refreshed after each product price update from NetSuite.

SettingHow it worksDefault
Price Mapping for Company CatalogTurns catalog price mapping on and shows the mapping table. Click (+)Add for each row and the trash icon to remove one.Off
Company CatalogsOne or more Shopify company catalogs that share the same pricing. A catalog can be used in one row only.—
NetSuite CurrencyThe NetSuite currency whose prices are used for these catalogs. Required.—
NetSuite Price LevelThe NetSuite price level (for example Wholesale) whose prices are written to the catalogs' price lists. Required.—

Customer Conditional Mapping

The Fields Conditional Mapping card sets extra fields on the NetSuite customer record, such as subsidiary, category, price level, terms, sales rep or your own custom entity fields. It works like Order Conditional Mapping. Rules are applied every time a customer is created or updated in NetSuite, from a customer edit or from an order. Add as many rule cards as you need; Remove deletes one.

SettingHow it worksDefault
OperationWhat the rule does:
  • Map NetSuite Field to Fixed Value: always sets the field to a value you enter, for example a subsidiary.
  • Map NetSuite Field to Shopify Field: copies a value from Shopify into the field.
  • Map Netsuite Field to Fixed Value Based on Shopify Field Value: sets a value only when a Shopify field meets a condition, for example a "Wholesale" category for customers tagged wholesale.
—
Shopify Field SourceFor the two Shopify-based operations: where the value comes from. Customer Field (email, name, phone, note, tax exempt, default or shipping address parts, payment terms and similar), Customer Meta Field, Order Field, Order Meta Field or Order Notes Attribute. Order sources only have a value when the customer syncs as part of an order; on a plain customer edit they are empty and the rule is skipped.—
Customer Field / Order FieldPick the Shopify field from the list.—
Customer Meta Field / Order Meta Field / Order Notes AttributeType the metafield key or the note attribute name exactly as it appears in Shopify.—
Where and Shopify Field ValueFor the conditional operation: compare the Shopify field with a value using IS, IS NOT, CONTAINS or DOES NOT CONTAINS.—
Prefix to appendFor Map NetSuite Field to Shopify Field: optional text added in front of the copied value, for example WEB-.None
Attribute TypeDefault Netsuite Field for standard customer fields, or Custom Netsuite Field for your own entity fields.—
NS FieldFor default fields, pick the NetSuite customer field (for example subsidiary, category, priceLevel, terms, salesRep, entityId). For custom fields, enter the field ID, for example custentity_channel.—
NS Field TypeFor custom fields: the field's type in NetSuite (Custom String Field, Custom boolean, Custom Select Field, Custom Multi-Select Field, Custom CurrDate Field, Custom Date Time or Custom Record Ref.). It must match the field's real type or NetSuite rejects the value.—
NS Field ValueThe value to set. For list and record fields (subsidiary, category, terms, select fields) enter the NetSuite internal ID of the value, not its name.—
Exclude in updateWhen on, the rule is applied only when the customer is first created in NetSuite and left alone on later updates. Use it for values your team may change in NetSuite afterwards, such as terms or sales rep.Off (applied on create and update)
Tip

If your NetSuite account uses OneWorld, add a fixed-value rule for subsidiary so new customers are created in the right subsidiary.

06Sync settings

Products

Enterprise 12 min read

Product Import Settings creates products in Shopify from your NetSuite items and, if you choose, keeps existing Shopify products up to date from NetSuite. It is available on the Enterprise plan. Product sync only reads from NetSuite; nothing is written back to NetSuite.

  • Items whose SKU (your SKU Mapping Field) is not on any Shopify variant are created as new products. Matrix items become one product with options and variants.
  • With Enable Product Update on, products that already exist in Shopify are updated from NetSuite as well.
  • Only items that have a price in your selected Price Level Name are included.
  1. Check the SKU Mapping Field and Price Level Name in General Configuration. Product sync uses both.
  2. Turn on Enable Product Sync, fill in the mapping sections below, and click Save in the save bar.
  3. Click Test Sync. It adds the first two new products from your catalog to Shopify so you can check them.
  4. When they look right, click Import Product to run the full import. After that, product sync also runs once a day on its own while Enable Product Sync is on.

How product sync works

Each run (Test Sync, Import Product or the daily run) works in the background. It reads the SKUs of all your Shopify variants, reads the eligible items from NetSuite, then updates the products that already exist and creates the ones that don't.

SettingHow it worksDefault
Which NetSuite items are readItems whose checkbox in NetSuite Checkbox Field for Product Sync is checked and that have a price in your Price Level Name. Matrix child items are not read on their own; they come in as variants of their parent.Items with Display in Web Store (isonline) checked
Matching to ShopifyThe value of your SKU Mapping Field on the NetSuite item is compared with Shopify variant SKUs. A NetSuite item counts as already in Shopify if its own value, or the value of any of its matrix child items, is the SKU of a Shopify variant. Items with no value in the SKU Mapping Field are skipped. Shopify variants with no SKU are ignored.SKU Mapping Field from General Configuration
CreateItems not found in Shopify are created as new products with the mapped fields, price, images and metafields. Inventory tracking is turned on for each variant and its quantity starts at 0; stock levels then come from Inventory sync.Always, while Enable Product Sync is on
UpdateWith Enable Product Update on, items found in Shopify are updated first, then new items are created. The Shopify product is rewritten from NetSuite: title, description, product type, vendor, variants, prices, images, status and metafields.On
PriceEach variant's price is the item's price in your Price Level Name, in your Shopify store currency.—
PublishingCreated and updated products are published to the sales channels chosen in Shopify Sales Channels for Synced Products.No channel: products are not published to any sales channel
Edit products in NetSuite, not in Shopify

With Enable Product Update on, each run sets the product back to what NetSuite has. Changes made in Shopify to the synced fields, images or status are overwritten on the next run. If you want to manage some products by hand in Shopify, turn Enable Product Update off or uncheck the NetSuite checkbox field on those items.

Tip

Use the same SKU values in NetSuite and Shopify before the first import. A product that exists in Shopify under a different SKU is not recognised and is created again.

Product sync options

These settings are in the General Settings card at the top of the page. The options below Enable Product Sync can only be changed while it is on.

SettingHow it worksDefault
Enable Product SyncMaster switch for product sync. On: the daily run includes your store and the Test Sync and Import Product buttons work. Off: nothing runs and the buttons reply "Product Sync is not enabled". When it is on, at least one row in Product fields mapping must be filled in before you can save.Off
NetSuite Checkbox Field for Product SyncThe ID of a checkbox field on the NetSuite item record that marks which items go to Shopify, for example isonline or your own custitem_sync_to_shopify. Only items with this box checked are read. For a matrix item, check it on the parent item. Enter the field ID exactly as NetSuite shows it.Blank: isonline (Display in Web Store)
Default Product Status on ShopifyActive: products are live in the sales channels they are published to. Draft: products are created hidden until you set them to Active in Shopify. The status is applied when a product is created and, with Enable Product Update on, again on every update. Choose Active or Draft; leave it on Select Status only if you want Shopify's own default. Recommended: Draft until you have reviewed the first import.Not chosen: Active (Shopify's default)
Shopify Sales Channels for Synced ProductsThe sales channels (Online Store, Point of Sale, and others installed in your store) that created and updated products are published to. You can pick several. The list is loaded from your Shopify store each time the page opens. Select at least one channel, usually Online Store, or the products will not appear in any channel until you publish them yourself.None: products are not published to any channel
Enable Product UpdateOn: products already in Shopify (matched by SKU) are updated from NetSuite on every run, then new products are created. Off: only new products are created and existing products are left untouched. Test Sync never updates; it only creates.On

Product fields mapping

Choose which Shopify product fields are filled from NetSuite. For each row, tick the Shopify field, type the NetSuite field ID in Mapped NetSuite Field, and pick its NS Field Type. The grey text in each box is only a hint; a field is used only when its box is ticked and a field ID is entered. Every ticked row needs a field ID, and every row with a field ID must be ticked, or the page will not save.

SettingHow it worksDefault
TitleThe Shopify product title. Common choices: itemid (Item Name/Number), displayname (Display Name) or storedisplayname (Store Display Name).Not mapped: the item's full name in NetSuite
Append uom to titleShown under the Title field. Adds the item's stock unit name to the end of the title, for example "Coffee Beans Case". Useful when the same product is sold in several units.Off
DescriptionThe Shopify product description. HTML in the NetSuite field is kept. Common choices: storedetaileddescription, salesdescription or a custom field.Not mapped: empty
Product TypeThe Shopify product type. Use a text field such as itemtype, or a custom list field with Select Field so the list value's name is used.Not mapped: empty
VendorThe Shopify vendor. Use a text field that holds the brand or vendor name, or a custom list field with Select Field.Not mapped: empty
WeightThe variant weight, usually weight. The unit is taken from the item's NetSuite weight unit (lb, kg, oz or g).Not mapped: no weight. Unit not set in NetSuite: kilograms
BarcodeThe variant barcode (UPC, EAN, ISBN), usually upccode.Not mapped: no barcode
HS codeThe Harmonized System code used for customs, set on the variants of matrix items. Map the NetSuite field that holds it, often a custom field.Not mapped: no HS code
Country code of originThe country of origin used for customs, set on the variants of matrix items. The value must be a two-letter country code such as US, for example from countryofmanufacture.Not mapped: none

NS Field Type

SettingHow it worksDefault
String FieldThe field's value is used as it is. Use it for text, number and free-form fields such as itemid, description or weight.Select Type (value used as it is)
CurrDate Field, Date Time, BooleanThe value is used as NetSuite stores it, the same as String Field.—
Select Field, Record RefFor list fields, where NetSuite stores an internal ID. The app looks up the list value's name instead. This works for the class field and for custom list fields whose list ID matches the field ID (field custitem_brand uses list customlist_brand). For other fields, choose String Field.—

Media Mapping

Map the NetSuite item field that holds the product's image. Images are added when a product is created and sent again on each update. Tick the row, enter the field ID in Mapped NetSuite Field, and choose the NS Field Type.

SettingHow it worksDefault
Main product imageThe first image of the Shopify product, read from the parent item. Use storedisplayimage or a custom image field.Not mapped: no image
NS Field Type (for images)Record Ref or Select Field: the field points to a file in the NetSuite File Cabinet (image fields such as storedisplayimage work this way). The app builds the file's address from your NetSuite account. String Field: the field already holds a full image address (URL), for example an image on your own CDN.Select Type (the value is used as an address)
Tip

Shopify downloads each image from its address, so the image must be reachable without logging in to NetSuite. For File Cabinet images, mark the file (or its folder) Available Without Login. File Cabinet images are read from the account in your connection settings, so the API Endpoint must be the SuiteTalk URL of that same account.

Metafield mapping

Copy NetSuite item fields into Shopify metafields. Turn on Add metafields in product, then click Add mapping for each metafield. Each mapping is written to the product (from the parent item) and to every variant (from each matrix child item). A metafield is skipped for an item when the NetSuite field is empty. Rows with a blank key or field ID are ignored.

SettingHow it worksDefault
Add metafields in productTurns metafield mapping on. Off: the mappings below are kept but not used.Off
Key nameThe Shopify metafield as namespace.key, for example netsuite.sku_uk. If you enter only key (for example netsuite_sku_uk), the custom namespace is used, which matches metafield definitions created in Shopify admin.Namespace custom
NS field IDThe NetSuite item field to read, for example custitem_sku. The value is read as plain text.—
Shopify metafield typesingle_line_text_field, multi_line_text_field, decimal, integer, date, date_time or boolean. If a metafield definition already exists in Shopify, choose the same type, or Shopify rejects the value. The NetSuite value must already be in the format the type needs; checkbox fields come through as T/F and dates in your NetSuite date format, so map those as text unless the field already holds true/false or an ISO date (2026-10-23).single_line_text_field

Matrix items and variants

A NetSuite matrix item (a parent with child items, for example a shirt in several sizes and colours) becomes one Shopify product. Each child item becomes a variant. An item without children becomes a product with a single variant.

SettingHow it worksDefault
OptionsThe Shopify options (for example Size, Colour) come from the matrix option fields in the parent item's Matrix Item Name Template. Each option's name is the label of the matrix option field in NetSuite, and its values are the list values the child items use. Standard fields in the template (such as Item Name, Class, Department, Location) are not turned into options. Make sure every matrix option field is in the template.—
Variant SKUEach variant's SKU is the child item's value in your SKU Mapping Field. Child items without a value are left out.—
Variant detailsPrice, weight, barcode, HS code, country of origin and metafields are read from each child item. The title, description, product type, vendor and main image come from the parent.—
Which children are includedOnly child items with a price in your Price Level Name, in your store currency, become variants.—
Tip

The option names and values of each matrix option list are remembered for up to a day. If you add a value to a matrix option list in NetSuite, it may take until the next day to appear on new variants.

Test Sync, Import Product and the daily run

The buttons at the top of the Products page start a run straight away. Save your settings first; a run uses the last saved settings. A run takes from a few minutes to much longer for large catalogs, and its progress and result are shown on the Logs page.

SettingHow it worksDefault
Test SyncCreates only the first two new products found, so you can check titles, variants, prices, images and metafields in Shopify. It never updates existing products. The products are published to your selected sales channels. Delete them in Shopify if you want to change the mapping and test again; otherwise they count as existing on the next run.—
Import ProductRuns the full sync: updates existing products (when Enable Product Update is on), then creates all new products, then publishes them.—
Daily runWhile Enable Product Sync is on, the full sync runs automatically once a day on Enterprise plans. There is nothing else to switch on.Runs once a day when Enable Product Sync is on
Waiting between runsAfter you start a run, the same button can't be used again for 15 minutes. It shows "Product sync is currently processing please try after some time". Wait for the current run to finish before starting another.15 minutes
Before the first full import

Run Test Sync and check the two products. Then confirm the SKU Mapping Field matches your existing Shopify SKUs: any NetSuite item whose SKU is not found in Shopify is created as a new product.

07Sync settings

Inventory & prices

10 min read

Inventory & Price Settings (the page is titled Price & Inventory Settings) keeps Shopify stock levels and variant prices in line with NetSuite. The sync goes one way, from NetSuite to Shopify: NetSuite is the source of truth and the Shopify values are overwritten. The page has two cards, Price Sync and Inventory Sync, and each has its own save bar. Save one card before you change the other.

How the sync runs

Stock and prices are updated in the same run. A run reads every variant in your Shopify store, matches each variant's SKU to a NetSuite item using the SKU Mapping Field from General Configuration, reads the stock and prices of the matched items from NetSuite, and writes them back to Shopify. Variants whose SKU has no matching NetSuite item are left unchanged.

SettingHow it worksDefault
Automatic syncRuns on its own about every four hours once Update Stock Levels from NetSuite to Shopify or Update Product Price from NetSuite to Shopify is on. Nothing needs to be scheduled by you. The automatic run is skipped while your NetSuite connection fails or your app subscription is not active, so fix those first if stock stops updating.Runs every few hours when either sync is on
Process Inventory SyncThe button at the top of the page starts a run now, with the settings you last saved. At least one of the two syncs must be on; otherwise you see a message asking you to enable Price Sync or Inventory Sync. Inventory Processed Successfully means the run has started: it continues in the background and can take several minutes on a large catalog. Check the result under Logs > Inventory Sync. Save your settings before you click it.—
What is overwrittenStock: the quantity at each Shopify location the sync covers is replaced with the NetSuite value (not added to or subtracted from). Price: the variant's Price is replaced with the NetSuite price. Market and company catalog prices are written to the price lists of the catalogs you map. Shopify products, titles, images and other fields are not changed by this sync.—
Tip: keep orders flowing to NetSuite

Each run replaces the Shopify quantity with what NetSuite has at that moment. A Shopify sale only lowers the NetSuite quantity once the order reaches NetSuite, so keep order sync on and working. Then NetSuite, and the next inventory run, already account for the units sold online.

Inventory Sync

The Inventory Sync card controls which NetSuite items are read, how quantities are converted, and whether stock is held back. Click Save in the save bar labelled Inventory Sync to apply your changes; they are used from the next run.

SettingHow it worksDefault
Item TypeThe NetSuite item types whose stock is read. Pick Inventory Item, Assembly Item, or both. Select Assembly Item if you sell items that NetSuite builds from components (assemblies) and want their built stock in Shopify. Variants whose NetSuite item is another type (for example non-inventory or kit items) get no stock update. At least one type is always kept: if you clear both, Inventory Item is saved.Inventory Item
Update Stock Levels from NetSuite to ShopifyTurns the stock sync on. When on, every run sets the stock of matched variants from NetSuite. When off, stock is not touched (prices still sync if Price Sync is on). Override Track Quantity, Enable Units and the quantity field can only be saved while this is on.Off
Override Track QuantityOn: the sync turns on Track quantity for matched variants in Shopify and sets the NetSuite quantity on them, including variants that were not tracked before. Off: variants with Track quantity turned off in Shopify are skipped and keep selling without a stock limit. Turn it on if you want NetSuite to control stock for every matched product. Leave it off if some products (for example made-to-order items) should stay untracked.Off
Enable UnitsTurn on if your NetSuite account uses Units of Measure and your items are stocked in a unit other than the base unit. The NetSuite quantity is then converted using the unit's conversion rate from NetSuite. See the quantity field options below for which number is sent.Off
Inventory Quantity Buffer EnterpriseHolds back reserve stock so it is not offered in Shopify, which helps prevent overselling. Choose the buffer type, Fixed (a number of units) or Percent (a percentage of the stock), and enter the amount in Set buffer quantity. The buffer is applied to every synced variant and location. Leave the amount at 0 for no buffer.Fixed, 0 (no buffer)

Which variants are updated

  • Only variants whose SKU matches a NetSuite item of a selected Item Type.
  • Shopify bundle variants (products made from other products) are skipped, because Shopify works out their stock from their components.
  • Untracked variants are skipped unless Override Track Quantity is on.
  • Fractional NetSuite quantities are rounded to a whole number of units.

Inventory Location Mapping

This setting decides which NetSuite locations feed which Shopify locations. It is part of the Inventory Sync card and is saved with it. The NetSuite and Shopify location lists are loaded from both accounts each time you open the page.

SettingHow it worksDefault
Inventory Location MappingOff: the stock of each item is added up across all your NetSuite locations and set as the On hand quantity at your primary (default) Shopify location. Other Shopify locations are not changed. Use this when you sell from one Shopify location. On: you add mapping rows (below) and each Shopify location gets stock only from the NetSuite locations you map to it.Off
Quantity field (shown when mapping is off)The NetSuite quantity to send: Quantity Available, Quantity On Hand, Quantity Available(BaseUnit) or Quantity On Hand(BaseUnit). Available is what NetSuite can still sell (on hand minus stock already committed to NetSuite orders). On Hand is the physical stock. With Enable Units on, Quantity Available and Quantity On Hand are converted with the unit conversion rate, and the (BaseUnit) options send the quantity in the base unit without conversion. Without units, each pair gives the same number. You must pick a field to save with stock sync on.None selected (Select Quantity Field)

Mapping rows (when mapping is on)

Click (+)Add to add a row, and use the delete action to remove one. You must add at least one row to save.

SettingHow it worksDefault
Shop LocationThe Shopify location this row updates. Each Shopify location can be used in one row only; a second row for the same location gives Duplicate Shop Location found.Required, none selected
NetSuite LocationOne or more NetSuite locations. Pick several to add their quantities together into the one Shopify location, for example two warehouses that ship online orders. Remove a location by clicking the x on its tag.Required, none selected
NetSuite Quantity FieldThe NetSuite quantity to read for this row, with the same options and meaning as the quantity field above.Required, none selected
Shopify QuantityWhich Shopify quantity is set. Quantity Available sets the Shopify Available quantity, the number customers can buy. Quantity On Hand sets the Shopify On hand quantity, and Shopify then works out Available by subtracting its own unfulfilled orders.Quantity On Hand when left empty
Map every location that sells

With location mapping on, Shopify locations without a row are not updated. A product is updated at a mapped Shopify location only if it is already stocked there in Shopify, so add the product to that location in Shopify first. Check that each NetSuite location you map holds stock for the items you sell online.

Price Sync

The Price Sync card sets Shopify variant prices from a NetSuite price level. Click Save in the save bar labelled Price Sync to apply your changes. The market and company catalog mappings below appear inside this card once price sync is on.

SettingHow it worksDefault
Update Product Price from NetSuite to ShopifyOn: every run sets each matched variant's Price to the NetSuite price for a quantity of 1 in the Price Level Name chosen in General Configuration, in your Shopify store's currency. Variants whose item has no price in that level and currency keep their current price. Set the price level first: saving with no price level shows Please Select Price Level Name First From Configurations Settings. To change which price level is used, change it in General Configuration; the next run uses the new level. Off: Shopify prices are not touched.Off
Tip: check the currency

The variant price only comes from NetSuite prices in your store's currency. If your store sells in USD, the item needs a USD price in the chosen price level. Prices for other currencies and markets are set with Price Mapping for Markets.

Price Mapping for Markets Enterprise

Use this to give Shopify markets their own prices from NetSuite, for example a EUR price level for your Europe market. Market prices are written in the same run as the variant prices, right after them, into the price list of each market catalog you map. Your Shopify markets and their catalogs are loaded each time you open the page. This section appears when Update Product Price from NetSuite to Shopify is on.

SettingHow it worksDefault
Price Mapping for MarketsTurns market price mapping on. When on, add at least one row (Please Add Markets Mapping otherwise). When off, market prices are not written and the rows are not kept.Off
Shop MarketThe Shopify market the row is for.Required, none selected
Market CatalogsShown when your store uses Shopify's market catalogs. The catalog of the selected market whose price list receives the prices. The list only shows catalogs of the market chosen in the row. Each market catalog can be used in one row only (Duplicate Market Catalog found).Required when shown
NetSuite CurrencyThe NetSuite currency of the prices to read. Pick the currency the market's catalog sells in.Required, none selected
NetSuite Price LevelThe NetSuite price level to read for this market. It can differ from the store's main price level.Required, none selected

Price Mapping for Company Catalog Enterprise

For B2B stores using Shopify companies: map company catalogs to a NetSuite price level and currency, so each catalog's price list follows NetSuite. Company catalog prices are written in the same run, after the variant and market prices. The catalog list is refreshed from Shopify each time you open the page; a catalog you delete in Shopify is removed from the mapping. Give each catalog a price list in Shopify before you map it. This section appears when Update Product Price from NetSuite to Shopify is on.

SettingHow it worksDefault
Price Mapping for Company CatalogTurns company catalog price mapping on. When off, the rows are cleared on save and catalog prices are not written.Off
Company CatalogsOne or more Shopify company catalogs that get the same NetSuite prices. Each catalog can be used in one row only; catalogs already used in another row are not offered (All catalogs are selected in other rows).Required, none selected
NetSuite CurrencyThe NetSuite currency of the prices to read. Pick the currency of the catalogs' price list.Required, none selected
NetSuite Price LevelThe NetSuite price level to read, for example a wholesale level.Required, none selected

All three fields are required in every row. If one is missing, saving shows Please complete all fields in Price Mapping for Company Catalog.

08Sync settings

Purchase orders

3 min read

Purchase Order Settings creates selected Shopify orders in NetSuite as Purchase Orders instead of Sales Orders or Cash Sales. It uses the same order sync, so it runs when an order is created or updated in Shopify. There is no separate sync button. The page has its own save bar for each card (PO General and PO Line Items); save one card before you change the next.

How purchase orders are created

  • When a Shopify order reaches the order sync, the app checks the Condition you chose. If the order matches, it is created in NetSuite as a Purchase Order. If it does not match, it is synced as usual, using Sync order as from Order General Settings.
  • A purchase order uses the same customer, items (matched by the SKU Mapping Field) and order settings as a normal order. The line options come from the Line Item Settings card on this page instead of Order Line Items.

General Settings

Choose whether purchase orders are created, and for which orders. Click Save in the PO General save bar; the change applies to the next order that syncs.

SettingHow it worksDefault
Sync order as purchase orderTurns purchase order creation on. When on, the Condition field appears. Order sync must also be on (see the note below).Off
ConditionWhich orders become purchase orders. All: every synced order. Customer has particular metafield: only orders whose Shopify customer has the metafield and value you enter. Orders without a customer then sync as normal orders.All
Customer Metafield KeyShown for Customer has particular metafield. The key of the customer metafield, without the namespace: for a metafield custom.account_type, enter account_type.Empty
Metafield ValueShown for Customer has particular metafield. The value the customer's metafield must have, for example wholesale. Upper and lower case are treated the same.Empty

Line Item Settings

These options work like Order Line Items but apply to purchase orders only. Click Save in the PO Line Items save bar.

SettingHow it worksDefault
Price levelSends the Price Level Name from General Configuration with each line. Set the price level there first; otherwise saving shows Please select the price level name first from the configuration settings.Off
Include rateSends the Shopify unit price as the line rate. When prices in Shopify include tax, the tax is taken out of the rate first.Off
Include amountOn: the line amount is left for NetSuite to work out from the rate or price level. Off: the line amount is the Shopify line total after line discounts.Off
Shopify item discount as line item Higher plansSends line discounts as a separate discount line, using the Discount Item you pick from your NetSuite discount items. A discount item is required to save.Off
Shipping cost as line itemSends shipping as a line, using the NetSuite item you enter in Shipping item internal ID (required to save).Off
Sync duties as line itemSends duties as a line, using the NetSuite item you enter in Duties item internal ID (required to save).Off
LocationNot Required: no location is sent on the lines. Send Default Item Location with Order Items: each line uses the item's default location in NetSuite. Define Item Location to use with All Order Items: enter the internal ID of one NetSuite location to use on every line (required to save).None selected (no location is sent)
Tip: internal IDs

Fields that ask for an internal ID need the number NetSuite shows for that record. Turn on Show Internal IDs under Home > Set Preferences to see them in lists.

Order sync must be on

Purchase orders are created by the order sync, so also turn on Order sync under Orders Settings. Purchase orders in NetSuite usually need a vendor; ask support to confirm the setup for your account before going live. The page also has a Purchase Order Conditional Mapping section; ask support before you rely on it.

09Manage

Import / export settings

3 min read

You can save your app settings to a file and load them back later, into the same store or into another store. Use this as a backup before large changes, or to copy a tested setup from a development store to your live store.

The More Actions menu

More Actions is the button at the top right of the Dashboard, Orders, Customers, Products, Inventory, Purchase Orders and Logs pages. It is the same menu on every page. The Dashboard itself has no settings: it shows Total Orders Synchronized, Total Customers Synchronized, Inventory Last Synced and the sync history table (see Dashboard).

SettingHow it worksDefault
Import SettingsOpens a window where you upload a settings file exported from this app. See Import Settings.—
Export SettingsOpens a window that downloads your current settings as a file. See Export Settings.—
Help & SupportShows the support email address and links to the setup documentation. See Support.—

Export Settings

Export downloads one file, netsuite_setting.json, with the settings you have saved in the app for customers, orders, inventory, prices and products, including your conditional mappings. Nothing in Shopify or NetSuite changes when you export.

SettingHow it worksDefault
Export Settings (button)Downloads the file to your computer and closes the window. Settings you have never saved are not in the file; the store that imports it keeps its own value for those. Cancel closes the window without downloading.—

Import Settings

Import loads a file made with Export Settings and saves its values in this store, replacing the matching settings. Settings that are not in the file stay as they are.

SettingHow it worksDefault
File (drop zone)Drop the exported .json file here or click to choose it. One file at a time.No file
Import Settings (button)Uploads the file and saves its settings straight away. On success the app shows Setting saved successfully. and takes you to the Dashboard. If no file was chosen you see File is not Uploaded.
  • Values are saved as they are in the file; they are not checked against your NetSuite account.
  • If the file has order sync, customer sync, inventory sync, price sync or product sync turned on, the import turns it on here too, and the app starts listening for the matching Shopify changes, just as if you had switched it on in settings.
  • SKU Mapping Field and Price Level Name (Step 2 of setup) are not imported. Set them in General Configuration.
  • Not every setting is included in an import, so review each settings page afterwards.
—
Imported sync switches take effect at once

If the file has order sync turned on, new and updated Shopify orders start syncing to NetSuite as soon as the import finishes. When copying a setup to your live store, turn order sync off in the source store before exporting, or turn it off in the target store right after importing, and switch it back on once you have reviewed the settings.

After importing, open each settings page (Orders, Customers, Products, Inventory, Purchase Orders), review it and click save before moving to another tab.

Keep the file private

The export describes your store's NetSuite configuration. Store it securely and share it only with people you trust. After importing into another store, check the NetSuite API Connection step and any account-specific values (internal IDs, locations, price levels, tax codes, custom field IDs), because they differ between NetSuite accounts.

10Manage

Logs & troubleshooting

3 min read

Dashboard and resubmitting an order

The Dashboard shows Total Orders Synchronized, Total Customers Synchronized and Inventory Last Synced, then a table of orders with tabs All, Synced and Not Synced. Each row has the Order Number, Order Date, NetSuite Type and Order Status, with links to View on Shopify and View on NetSuite.

  1. Open the Not Synced tab and find the order.
  2. Read the error on the Logs page (below) and fix the cause, for example a missing item or a permission.
  3. Click Re-Submit on the order, then Refresh and check that it moved to Synced.

Logs page

TabShows
Customer & Order SyncEach order and customer sync attempt: Log ID, Created Date, Operation, Status, Message and Object ID (the Shopify ID).
Product SyncEach product import run, with its status and message.
Inventory SyncEach inventory and price run, with its status and message.

Filter by All, Success or Failed, and search by ID or text. The Message column carries NetSuite's own error text, which usually names the field or record at fault. Active Webhooks lists the Shopify events the app is listening to (for example order, customer and refund events once those syncs are on).

Tip

Use Clear Logs sparingly and not while a product or inventory sync is running. Keep recent logs available when you contact support.

Common setup mistakes

SymptomLikely causeFix
Connection error on Establish ConnectionAccount ID format, sandbox and production mixed, or a token for a different role or integration.Copy the Account ID exactly (1234567_SB1 for a sandbox) and the SuiteTalk URL from the same account. Recreate the token for the right integration, user and role.
"Invalid login" or permission errors in LogsThe role lacks a permission, or TBA / web services are not enabled.Re-check Enable features and the role. Add the permission for the record named in the message.
Order fails with item not foundThe Shopify SKU does not match the NetSuite SKU Mapping Field, or the item is inactive or not available to the subsidiary.Correct the SKU on one side, or choose a different SKU Mapping Field. Then resubmit the order.
Stock not updating for some productsSKU mismatch, the item type is not selected, or the Shopify location has no mapping row.Check SKUs, Item Type and Inventory Location Mapping, then click Process Inventory Sync.
Prices not updatingNo Price Level chosen, or the item has no price in that level for your store currency.Set the Price Level Name in Configurations and add the price in NetSuite.
Products not importedCheckbox field not checked on the item, no price in the selected level, or the SKU already exists in Shopify (and product update is off).Check the item in NetSuite and run Test Sync.
Fulfillments not reaching ShopifyFulfillment Flow not set to Netsuite to Shopify Fulfill, or the order was synced as a Cash Sale.Set the flow, then click Netsuite To Shopify Update.
Order rejected for a required fieldYour NetSuite form requires a field (subsidiary, department, custom field) the app does not set.Add a rule in Order Conditional Mapping.
11Manage

Plans & billing

1 min read

Plans are billed through Shopify, monthly or yearly (yearly saves up to 17%). Current prices are shown on the app's Plans page.

PlanIncludes
BasicUnlimited orders, automatic inventory pulls, two-way fulfillment flow, two-way refund flow, implementation support.
EnterpriseEverything in Basic, plus custom workflows, priority support, Product Sync, market price mapping and company catalog mapping.

Downgrading from Enterprise to Basic disables Product Sync and stops market and company catalog price mappings from applying. Settings marked Higher plans in this guide are not shown on every plan. For plan questions, email support@techmarbles.com.

12Help

FAQ

1 min read
Q
Can I connect a NetSuite sandbox first?

Yes. Enter the sandbox Account ID (for example 1234567_SB1) and the sandbox SuiteTalk URL. When you move to production, update the connection and use Clear Temporary Cache in Configurations.

Q
Will old Shopify orders be sent to NetSuite?

Orders sync when they are created or updated. To keep older orders out, set Sync orders from this date onwards in Order Additional Settings to your go-live date.

Q
Does editing an order in Shopify update NetSuite?

Yes, while the NetSuite order can still be changed. Turn on Disable Order Update Setting if you prefer NetSuite to keep the first version.

Q
Will the app create duplicate customers?

The app searches NetSuite before creating a customer: by email by default, or by company name, phone or email domain if you choose that search method. Choose the method that matches how your customers are stored.

Q
How often do stock levels update?

Automatically every few hours. Click Process Inventory Sync any time to run it immediately.

Q
Can I sync stock per warehouse?

Yes. Turn on Inventory Location Mapping and map each Shopify location to one or more NetSuite locations.

Q
Which plan do I need for product sync?

Product Sync is part of the Enterprise plan.

Q
Who gets an email when a sync fails?

The Notification Email from the connection step. You can stop these emails with Disable Order Notifications.

Q
An order failed. What should I do?

Read the message on the Logs page, fix the cause in NetSuite or in the app's settings, then click Re-Submit on the Dashboard. If the message is unclear, send it to support with the order number.

13Help

Support

1 min read

We help with setup and troubleshooting. When you write, include your store's myshopify domain, the order number or record, and the message from the Logs page. Never send your NetSuite secrets by email.

NetSuite Integration by TechMarbles. NetSuite is a trademark of Oracle; Shopify is a trademark of Shopify Inc. Back to top ↑