Shopify B2B and NetSuite — Integration Architecture for Wholesale in 2026
- Shopify B2B (launched 2022, significantly expanded in 2023–2026) provides company accounts, customer-specific price lists, net payment terms, and draft orders — all requiring distinct NetSuite integration handling.
- Company accounts in Shopify B2B map to NetSuite Customer records with subsidiary, class, and payment terms correctly set — not the same as a standard retail Customer record.
- Customer-specific price lists in Shopify B2B must sync bidirectionally: NetSuite price levels drive the Shopify B2B price list, not the other way.
- Net 30/60/90 terms in Shopify B2B create Invoice records in NetSuite, not Cash Sales — a fundamental difference from retail order sync.
Shopify B2B is now a credible wholesale channel, used by brands to run self-service portals for wholesale buyers alongside their retail DTC storefront. Integrating it with NetSuite is more complex than retail Shopify integration because B2B introduces concepts — company accounts, tiered pricing, payment terms, draft orders — that require different NetSuite record types and sync logic. Here is the architecture.
Company Account Sync: Shopify B2B Company → NetSuite Customer
When a Shopify B2B company is created (or when an existing Shopify customer is upgraded to a company), trigger a NetSuite Customer record creation. Map: Company name → Customer name, Contact person → Contact record (linked), Billing address → Billing address, Payment terms → Terms field (Net 30 → custrecord_terms = “Net 30”).
NetSuite Customer records have a priceLevel field. Set this based on the Shopify B2B price list assigned to the company. If a company has the “Wholesale” price list in Shopify, the corresponding NetSuite Customer should have priceLevel = “Wholesale”. This ensures that manually created NetSuite orders for the same customer use the correct pricing.
Add a custom field custentity_shopify_company_id to the NetSuite Customer record. Store the Shopify Company ID there. This is the primary key for your integration lookup — when a B2B order arrives, use this field to match it to the correct NetSuite Customer without ambiguity.
B2B Order Sync: Draft Orders and Net Terms
| Shopify B2B scenario | NetSuite record to create | Key differences from retail |
|---|---|---|
| Immediate payment order (credit card) | Sales Order → Invoice → Payment | Same as retail — Cash Sale or SO+payment |
| Net 30/60/90 order | Sales Order → Invoice (open) | No payment at order time — Invoice left open until paid |
| Draft order (pending approval) | Sales Order in “Pending Approval” status | Do not create invoice until Shopify draft is approved |
| Partial payment order | Invoice with Deposit applied | Record the deposit against the invoice, leave balance open |
A Cash Sale in NetSuite assumes immediate payment and posts directly to the revenue account. A B2B order with Net 30 terms should be: Sales Order (on Shopify B2B placement) → converted to Invoice on fulfilment → Payment applied when the customer pays. Creating a Cash Sale for a Net 30 order will incorrectly recognise revenue before payment and misrepresent your AR balance.
References
- Shopify B2B Company APIShopify GraphQL Admin API — Company object reference including price lists, contacts, and payment terms.
- NetSuite Customer Record ReferenceOracle NetSuite Help — Customer record fields including price level, terms, and subsidiary fields relevant to B2B setup.
- Shopify B2B DocumentationShopify Help — company management, price lists, and payment terms in Shopify B2B.
Leave a Reply