Skip to content
SyncMyShop

BigCommerce and NetSuite

BigCommerce NetSuite integration

BigCommerce orders, companies and PO numbers go into NetSuite. Price levels, credit, payment terms, stock and tracking come back, for one storefront or several. The integration works across the BigCommerce API and the separate B2B Edition API, within both rate limits, and is hosted and run for you.

What moves between BigCommerce and NetSuite

BigCommerce takes the order, for consumers and for company accounts. NetSuite owns items, prices, credit and the books. With B2B Edition in use the data sits in two BigCommerce APIs, and the integration reads both.

BigCommerce, B2B Edition and NetSuite: two store APIs and one ERP The integration reads orders and customers from the BigCommerce API, limited to 150 requests per 30 seconds, and PO numbers and companies from the separate B2B Edition API, limited to 150 requests per minute. It writes sales orders to NetSuite and brings back stock, price lists, tracking, credit and payment terms. BigCommerce API 150 requests per 30 seconds B2B Edition API 150 requests per minute Integration queue and retries NetSuite 5 to 20 concurrent orders, customers stock, price lists, tracking PO number out, credit and terms back sales order, customer items, price levels, credit limit
A B2B order sits in two BigCommerce APIs with two rate limits. The integration joins them before NetSuite sees the order.
Flow Direction BigCommerce side NetSuite side
Orders to NetSuite /v2/orders, order products, addresses Sales Order
PO number to NetSuite poNumber on the B2B Edition order PO # on the sales order
Companies and users both ways B2B Edition companies, users, roles Customer, subcustomer, Contact
Price lists to BigCommerce /v3/pricelists/{id}/records price levels, quantity pricing
Credit and terms to BigCommerce company credit, payment terms credit limit, balance, terms
Stock to BigCommerce /v3/inventory/adjustments/absolute quantity available per location
Shipments to BigCommerce /v2/orders/{id}/shipments Item Fulfillment with tracking
Invoices to BigCommerce B2B Edition invoices, externalId Invoice
Refunds both ways /v3/orders/{id}/payment_actions/refunds Credit Memo, Customer Refund

The sales order keeps the BigCommerce order ID as its external ID. In the other direction BigCommerce has a field for it: external_order_id, with external_source naming the ERP.

Which system owns what

Data System of record Direction Sync behavior
Items, SKUs, variants NetSuite NetSuite to BigCommerce 10 products or 50 variants per request
Product content, categories BigCommerce stays in BigCommerce not touched
Price lists NetSuite price levels NetSuite to BigCommerce 1,000 records per request, in sequence
Stock per location NetSuite NetSuite to BigCommerce absolute adjustments, changed items
Company accounts NetSuite once approved both ways company to customer, user to contact
Credit limit and hold NetSuite NetSuite to BigCommerce recalculated after each invoice and payment
Payment terms NetSuite NetSuite to BigCommerce mapped to the allowed values
Orders and PO numbers BigCommerce until import BigCommerce to NetSuite webhook plus poll
Tax one side, set once with the order amounts written, or recalculated

What BigCommerce and NetSuite store differently

Companies and the customer hierarchy

A B2B Edition company has users with roles: admin, senior buyer, junior buyer. A hierarchy holds up to 5 layers and 500 companies. NetSuite's customer hierarchy holds up to 10,000 customers. A NetSuite parent with 800 ship-to subcustomers therefore does not fit as one B2B Edition hierarchy. The mapping decides per customer: a subcustomer that orders for itself becomes a company, one that is only a delivery point becomes an address.

A company links to one customer group, and a BigCommerce customer belongs to exactly one group. That group is what price lists attach to.

Price lists and price levels

A price list record holds price, sale_price, retail_price, map_price and bulk_pricing_tiers per variant and currency:

{
  "sku": "TS-BLK-M",
  "currency": "usd",
  "price": 36.00,
  "bulk_pricing_tiers": [
    { "quantity_min": 10, "quantity_max": 49, "type": "fixed", "amount": 31.50 },
    { "quantity_min": 50, "type": "fixed", "amount": 28.00 }
  ]
}

NetSuite stacks: a customer has a price level and can have item prices of their own on top. In BigCommerce that customer needs a price list and a customer group of their own. Without layers that list holds every price, resolved in advance. Cascading price lists, in open beta and available to all stores, add up to five fallback lists to a primary list: BigCommerce checks the primary list, then each layer in order, then the catalog price. The customer's own list then holds only their item prices, with the price level's list as its layer in layers. For 3 price levels and 8,000 SKUs the load is 24,000 records: 24 requests of 1,000, sent one after the other, since more parallel upserts than BigCommerce allows on one store return a 429. Price list changes fire no product webhook, so nothing else in your stack hears about them. See customer-specific pricing.

Payment terms and credit

From a NetSuite credit limit to available credit in B2B Edition A NetSuite customer has a credit limit of 25,000. The open balance is 18,400 and orders not yet billed total 2,100. The available credit written to the B2B Edition company is 4,500. NetSuite customer 2291, credit limit 25,000 25,000 Open balance 18,400 Available 4,500 Unbilled orders 2,100 availableCredit on the B2B Edition company 4,500
Available credit is calculated in NetSuite and written to the company in B2B Edition: 25,000 minus 18,400 minus 2,100 is 4,500.

B2B Edition accepts six payment term values: 0, 5, 15, 30, 45 and 60 days. NetSuite terms are free records: Net 30, Net 90, 2% 10 Net 30. Net 90 and any discount term have no equal on the BigCommerce side. They need a mapping table and a decision for each term without a match.

Credit is calculated in NetSuite. From the customer's credit limit the integration subtracts the open balance and the unbilled orders and writes the result to availableCredit. NetSuite's credit hold becomes creditHold, and limitPurchases decides whether checkout blocks an order above the available amount. More in B2B terms.

The PO number

The buyer's PO number is on the B2B Edition order as poNumber, not on the /v2/orders record. One B2B order therefore takes four reads: the order, its products, its shipping addresses, and the B2B Edition order. The webhook that announces it carries only the order ID.

Tax

A BigCommerce order arrives with total_tax, subtotal_ex_tax and a tax_provider_id: BasicTaxProvider for manual tax rules, AvaTaxProvider for automatic tax. If NetSuite calculates tax again on the sales order, every order where the two differ carries the wrong amount into the books. One side is the source and the other takes its numbers. A total_tax of 0 also does not mean the customer is exempt: exemption is on the customer record, in tax_exempt_category, and maps to the customer's tax status in NetSuite.

Variants

BigCommerce allows 600 SKUs per product and 250 values per option. A NetSuite matrix allows 2,000 combinations. A matrix of 12 sizes and 60 colors has 720 children and has to be split into two products. Details in variant mapping.

The technical reality of this pair

Limit BigCommerce NetSuite
Throttle 150 requests per 30 seconds on Standard and Plus, 450 on Pro 5, 15 or 20 concurrent requests
Scope of the limit shared by all apps on the store shared by all integrations on the account
B2B data B2B Edition API: 150 requests per minute same account limit
Batch sizes 10 products, 50 variants, 1,000 price records, 2,000 inventory items 1,000 rows per SuiteQL page
Over the limit HTTP 429, wait for X-Rate-Limit-Time-Reset-Ms HTTP 429 CONCURRENCY_LIMIT_EXCEEDED
Webhooks ID only; 11 retries over 48 hours none; polled or pushed by script

The plan names are those of BigCommerce's developer documentation. Enterprise limits are set per plan.

Orders, worked through. At 4 reads per B2B order and 150 requests per 30 seconds, the BigCommerce API carries 37 orders per window if nothing else uses the quota. It rarely has the quota alone: a reviews app, a search app and a shipping app draw on the same 150. The B2B Edition call is the tighter one: 150 a minute is 150 B2B orders a minute at most. NetSuite then writes at its own rate: 2 slots at 3 seconds per sales order is 40 orders a minute. The integration reads X-Rate-Limit-Requests-Left on every response and slows down before the quota runs out.

Catalog, worked through. An update of 4,000 products at 10 per request is 400 requests: three windows of 30 seconds on Standard, if the quota is free. The same 4,000 as 12,000 variant updates at 50 per request is 240 requests. Stock for those 12,000 SKUs is 6 inventory requests of 2,000, each sent after the previous one returned 200. BigCommerce's documentation warns against running bulk inventory updates in parallel with bulk catalog or order updates, so the integration runs them in turn.

Webhooks. A webhook payload holds the ID and nothing else. BigCommerce retries a failed delivery after 60 seconds, then at growing intervals up to 24 hours, 11 times in all, and deactivates the webhook after 48 hours with an email to the store. If fewer than 90 percent of deliveries to a domain succeed within two minutes, the domain is blocked for three minutes. An endpoint that does its work before answering runs into that on a busy day. Ours answers 200 and queues.

The BigCommerce side is on the BigCommerce page. The NetSuite side of these numbers is on the NetSuite page and in NetSuite concurrency limits; the retry pattern is in API throttling and backoff.

Where standard connectors stop

The standard path of a packaged connector is the consumer store: orders in, shipments out, one price and one quantity out. The B2B half of this pair adds four things to that path.

  • The second API. PO numbers, companies, payment terms and credit are in the B2B Edition API, with its own token headers (X-Auth-Token plus X-Store-Hash since September 30, 2025) and its own limit. A connector built on /v2/orders alone delivers the order without the PO number.
  • Price lists as a model. A price list per price level, with quantity tiers, per channel and per customer group, is a model, not a field mapping. So is a price list per customer.
  • Six payment terms. A fixed mapping breaks on the first NetSuite term outside 0, 5, 15, 30, 45 and 60 days.
  • Several storefronts. channel_id has to become a subsidiary, class or location in NetSuite, and one buyer with an account on two storefronts has to become one customer.

A built integration carries these as rules written for your account. The technical comparison is in custom integration vs iPaaS.

When it goes wrong

What fails What the integration does What you see
BigCommerce answers 429 waits for the reset header, continues nothing
Price list upsert answers 429 sends batches strictly in sequence nothing
Webhook deactivated after 48 hours poll on min_date_modified finds the orders; webhook is recreated an alert with the time
B2B Edition order not yet readable order waits in the queue, read again nothing, unless it lasts
Payment term without a mapping holds the company update the company and the term
NetSuite answers 429 retries with a growing pause nothing, unless it lasts
Tax differs between the two writes the source side's amount, logs the difference a line in the run diff

An order that still fails after its retries is kept with its payload and can be sent again after the cause is fixed. Nothing is dropped without a trace.

Before go-live the integration runs as a dry run: it reads both BigCommerce APIs and NetSuite and shows the sales orders, price lists and credit amounts it would write, without writing. From then on every run leaves a diff per record in the dashboard. We host and monitor it as part of an e-commerce ERP integration, and adjust it when BigCommerce or Oracle changes an interface. Sibling pages: Shopify NetSuite integration, Magento NetSuite integration and WooCommerce NetSuite integration. Tell us how your BigCommerce store and NetSuite account are set up.

Frequently asked questions

Does the integration support BigCommerce B2B Edition?

Yes. B2B Edition has its own API with its own limit of 150 requests per minute. The integration reads companies, company users and the PO number of each order from it, and writes payment terms, credit and invoices back. A company maps to a NetSuite customer, a child company to a subcustomer, and a company user to a contact.

How do NetSuite price levels get into BigCommerce?

Each price level becomes a price list, assigned to a customer group and, with several storefronts, to a channel. Records go in batches of 1,000 per request, one batch at a time. Quantity pricing becomes bulk_pricing_tiers on the record. A customer with individual prices in NetSuite gets a price list and customer group of their own. With cascading price lists (open beta) that list holds only the exceptions and falls back to the price level's list.

Who calculates tax, BigCommerce or NetSuite?

One of the two, set once. The BigCommerce order arrives with total_tax and a tax_provider_id. If NetSuite also calculates tax on the sales order, the two amounts differ on some orders and the invoice no longer matches the payment. The integration either writes BigCommerce's tax amounts to NetSuite and switches recalculation off for web orders, or sends net amounts and lets NetSuite calculate.

Does it work with several storefronts?

Yes. Every order carries a channel_id, and the integration maps each channel to a NetSuite subsidiary, class or location. Customer email addresses are unique per channel in BigCommerce, not per store, so the same buyer can exist once per storefront. The integration matches them to one NetSuite customer. Stock is one quantity for all storefronts: the Inventory API is not channel aware.

How does stock from NetSuite reach BigCommerce?

Through absolute inventory adjustments, up to 2,000 items per request, sent one request after the other. NetSuite locations map to BigCommerce locations, of which a store has 4 to 100 depending on the plan. A buffer goes into safety_stock per location; BigCommerce then shows available_to_sell as on hand minus that buffer.

What happens when a webhook from BigCommerce is missed?

BigCommerce retries a failed webhook 11 times over 48 hours and then deactivates it. The integration answers every webhook with 200 at once and processes it from a queue, so failures are rare. It also polls orders by min_date_modified and checks that its webhooks are still active.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com