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
andpricing
: Pricing details.isinactive
: Item status.custom fields
: Map tags, metafields, etc.
3. Field Mapping Between Shopify & NetSuite
Shopify Field | NetSuite Field | Notes |
---|---|---|
id (Product) | custitem_shopify_product_id | Store in custom field for traceability |
variants[].id | custitem_shopify_variant_id | Unique per variant |
sku | itemid | Must match for order lines |
title | displayname | Product name |
body_html | description | Rich text may require sanitization |
vendor | manufacturer or custom field | |
product_type | class or custitem_category | |
tags | Custom field or classification | |
variants[].price | baseprice 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
Challenge | Fix |
---|---|
Duplicate SKUs | Use Shopify ID + NetSuite internalId mapping |
Rich text in descriptions | Strip unsupported HTML before sync |
Price mismatch | Standardize currency + rounding rules |
Variant limit | Shopify max 100 variants per product |
Matrix item creation in NetSuite | Must 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
Leave a Reply