Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The NetSuite Pro

The NetSuite Pro Logo The NetSuite Pro Logo

The NetSuite Pro Navigation

  • Home
  • About Us
  • Tutorials
    • NetSuite Scripting
    • NetSuite Customization
    • NetSuite Integration
    • NetSuite Advanced PDF Templates
    • NetSuite Reporting & Analytics Guide
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask A Question
  • Home
  • About Us
  • Tutorials
    • NetSuite Scripting
    • NetSuite Customization
    • NetSuite Integration
    • NetSuite Advanced PDF Templates
    • NetSuite Reporting & Analytics Guide
  • Blog
  • Contact Us
Home/ NetSuite Integration/ Shopify–NetSuite Integration: The Complete Beginner’s Guide/Shopify–NetSuite Products & Variants Integration

Shopify–NetSuite Products & Variants Integration

Introduction

After setting up customers, the next building block in your Shopify–NetSuite integration is products and variants.

Every order in Shopify references a product and a variant (size, color, etc.), which must match a NetSuite item record. Without proper product synchronization:

  • Orders will fail because SKUs don’t match.
  • Inventory sync breaks.
  • Wrong prices get pushed into orders.

This guide covers everything you need to integrate Shopify Products/Variants with NetSuite Items, including:

  • Differences between Shopify products and NetSuite items.
  • Mapping products, variants, and SKUs.
  • Handling matrix items.
  • Syncing pricing and currencies.
  • Managing images and attributes.
  • Inventory sync considerations.
  • Best practices for product governance.

1. Shopify Product & Variant Model

Shopify’s structure is product-centric.

1.1. Shopify Product Object

  • id: Unique product ID.
  • title: Product name.
  • body_html: Description.
  • vendor: Brand/manufacturer.
  • product_type: Category.
  • tags: Custom tags for filtering.
  • variants[]: Each variant = separate purchasable SKU.
  • options[]: Attributes (e.g., Color, Size).
  • images[]: Product + variant-level images.

👉 Example Shopify Product JSON:

{
  "id": 123456789,
  "title": "Classic T-Shirt",
  "vendor": "MyBrand",
  "product_type": "Apparel",
  "variants": [
    {
      "id": 111,
      "sku": "TSHIRT-BLK-S",
      "option1": "Black",
      "option2": "Small",
      "price": "25.00",
      "inventory_quantity": 50
    },
    {
      "id": 112,
      "sku": "TSHIRT-BLK-M",
      "option1": "Black",
      "option2": "Medium",
      "price": "25.00",
      "inventory_quantity": 30
    }
  ]
}

2. NetSuite Item Model

NetSuite has multiple item record types.

2.1. Common Item Types

  • Inventory Item – Tracks stock, used for physical products.
  • Non-Inventory Item – For services or items not tracked in stock.
  • Matrix Item – Parent product with child variants (like Shopify’s product + variants).
  • Kit/Assembly Item – Bundle of multiple items.

2.2. Key Fields in NetSuite

  • itemid: SKU / Item Name.
  • displayname: User-friendly name.
  • parent: If matrix child, parent matrix item.
  • matrixoption: Attribute like Color/Size.
  • baseprice and pricing: Pricing details.
  • isinactive: Item status.
  • custom fields: Map tags, metafields, etc.

3. Field Mapping Between Shopify & NetSuite

Shopify FieldNetSuite FieldNotes
id (Product)custitem_shopify_product_idStore in custom field for traceability
variants[].idcustitem_shopify_variant_idUnique per variant
skuitemidMust match for order lines
titledisplaynameProduct name
body_htmldescriptionRich text may require sanitization
vendormanufacturer or custom field
product_typeclass or custitem_category
tagsCustom field or classification
variants[].pricebaseprice or price level
options[]Matrix options (Color, Size)
images[]Media field / custom integration

4. Matrix Items (Variants)

4.1. Shopify Variants = NetSuite Matrix Child Items

  • Shopify’s options → NetSuite matrix attributes.
  • Example:
    • Product: Classic T-Shirt.
    • Variants: Black-S, Black-M, White-S, White-M.
    • In NetSuite → Parent Item “Classic T-Shirt” with 4 matrix children.

4.2. Best Practice

  • Always map Shopify variant SKU → NetSuite itemid.
  • Store Shopify variant ID in a custom field for debugging.

5. Pricing Synchronization

Shopify supports a single price per variant (unless using advanced apps).

NetSuite supports:

  • Multiple currencies.
  • Price levels (Wholesale, Retail, etc.).

👉 Recommended:

  • Sync Shopify price → NetSuite base price.
  • If using NetSuite price levels, define mapping:
    • Shopify retail → NetSuite Base Price.
    • Shopify wholesale app → NetSuite Wholesale Price Level.

6. Images and Media

Shopify → NetSuite image sync is optional.

  • Shopify supports multiple product + variant images.
  • NetSuite allows file attachments in the File Cabinet.

👉 Best Practice:

  • Store product images in Shopify only (customer-facing).
  • In NetSuite, store reference URL from Shopify → reduces storage.

7. Inventory Synchronization

While inventory has its own page later, note that product sync is tied to inventory:

  • Shopify variant has inventory_quantity.
  • NetSuite inventory items track stock per location.

👉 Inventory mapping requires a location table (Shopify location ID → NetSuite location ID).


8. Authentication & Data Push

8.1. Shopify → NetSuite Product Push

  • Trigger: Shopify webhook (products/create, products/update).
  • Payload → middleware (Celigo, Boomi, Lambda).
  • Auth: NetSuite TBA → push to RESTlet.
  • RESTlet → creates/updates Inventory Item or Matrix child.

8.2. NetSuite → Shopify Product Push

  • Trigger: Scheduled Map/Reduce script or Workflow.
  • Collect new/updated items.
  • Auth: Shopify Admin API token.
  • Push via REST call: POST /admin/api/2025-01/products.json

9. Common Challenges

ChallengeFix
Duplicate SKUsUse Shopify ID + NetSuite internalId mapping
Rich text in descriptionsStrip unsupported HTML before sync
Price mismatchStandardize currency + rounding rules
Variant limitShopify max 100 variants per product
Matrix item creation in NetSuiteMust define attributes before import

10. Testing Plan

  • ✅ Sync 5 products with single variant.
  • ✅ Sync 5 products with multiple variants (matrix).
  • ✅ Update pricing in Shopify → confirm NetSuite update.
  • ✅ Update description in NetSuite → confirm Shopify update.
  • ✅ Test inventory sync for one product across two locations.

11. Best Practices

  • Always use SKU as primary key between systems.
  • Store Shopify Product ID + Variant ID in NetSuite custom fields.
  • Keep product creation one-directional (e.g., NetSuite → Shopify).
  • Use webhooks + scheduled reconciliation.
  • Don’t sync images unless required.
  • Automate inactive product handling (archive in both systems).

Summary

You’ve now learned how to integrate Shopify products and variants with NetSuite items:

  • Mapping fields between both systems.
  • Handling matrix items (variants).
  • Pricing, images, and inventory considerations.
  • How to authenticate and push data both ways.
  • Best practices for reliable product governance.

👉 Next in the series: Shopify–NetSuite Inventory Synchronization

Share
  • Facebook

Leave a ReplyCancel reply

Sidebar

Ask A Question

Stats

  • Questions 6
  • Answers 6
  • Best Answers 0
  • Users 2
  • Popular
  • Answers
  • Rocky

    Issue in running a client script in NetSuite SuiteScript 2.0 ...

    • 1 Answer
  • admin

    How can I send an email with an attachment in ...

    • 1 Answer
  • admin

    How do I avoid SSS_USAGE_LIMIT_EXCEEDED in a Map/Reduce script?

    • 1 Answer
  • admin
    admin added an answer The issue is usually caused by following Wrong script file… September 14, 2025 at 10:33 pm
  • admin
    admin added an answer Steps to send an Invoice PDF by email: define(['N/email', 'N/render',… August 28, 2025 at 3:05 am
  • admin
    admin added an answer This error means your script hit NetSuite’s governance usage limit… August 28, 2025 at 3:02 am

Top Members

Rocky

Rocky

  • 1 Question
  • 22 Points
Begginer
admin

admin

  • 5 Questions
  • 2 Points

Trending Tags

clientscript netsuite scripting suitescript

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help

Footer

© 2025 The NetSuite Pro. All Rights Reserved