Shopify B2B ERP & CRM sync.
Shopify ships the APIs, not the connector. The ERP & CRM module supplies the sync engine: orders out, invoices in, quotes into your CRM, remittance into your AR.
Shopify B2B has no built-in ERP or CRM connector: Shopify's own documentation points merchants to App Store apps, iPaaS platforms, or custom builds on the B2B APIs. B2B Supercharge's ERP & CRM module closes the gap with two-way sync for Dynamics 365, NetSuite, Sage, HubSpot, and Salesforce: orders flow out, invoices and inventory flow in, quotes become CRM deals, and remittance posts to your AR. Your ERP stays the source of truth.
Does Shopify B2B include a native ERP or CRM integration?
No. Shopify's help documentation is direct about it: to connect Shopify B2B to an ERP or CRM, merchants get three paths, and every one of them is something you buy or build. The external integrations page lists pre-built connector apps from the App Store, iPaaS platforms, and custom integrations built on the B2B APIs, and recommends "having a technical resource assist in setting up and launching the integration."
| Path | What it means | Who owns the sync |
|---|---|---|
| App Store connector | A separate per-system app (Shopify names Acumatica, Dynamics 365 Business Central, NetSuite ERP Connector, Fulfil, QuickBooks Online) | The app vendor, one subscription per system |
| iPaaS platform | A middleware layer (Shopify names Pipe17, Patchworks, Webgility, OmnifiCX) you configure and pay for | You, plus the iPaaS bill |
| Custom build | Your developers write a sync service against the GraphQL Admin API | You, entirely |
The pattern repeats across Shopify's developer docs: the B2B API documentation exposes a complete object model, and the sync engine that moves data through it is your problem.
What Shopify provides, and what it leaves to you
The raw material is genuinely good. The gap is everything between your ERP and those endpoints.
| Capability | Status | Detail |
|---|---|---|
| B2B object model in the Admin API | NATIVE | Company, CompanyLocation, and CompanyContact objects, plus catalogs, price lists, payment terms, and B2B draft orders |
| ERP account mapping field | NATIVE | Company.externalId holds "a unique externally-supplied ID for the company" |
| Contract price push | NATIVE | priceListFixedPricesAdd sets exact per-variant prices, 250 per request |
| Historical B2B order import | NATIVE | orderCreate with a company location attaches ERP orders to Shopify companies |
| Change-event webhooks | NATIVE | Order and company topics exist, with delivery caveats covered below |
| Two-way ERP connector | NOT NATIVE | No built-in sync in any direction; apps, iPaaS, or custom code only |
| CRM sync | NOT NATIVE | Shopify's admin extension docs list CRM integration as an app use case |
| Catalog and price list webhooks | NOT NATIVE | "There are no webhooks that are associated with changes to catalogs or price lists": pricing sync must poll |
| Live external pricing at checkout | NOT NATIVE | Functions network access is enterprise-plan only, and responses cache up to 300 seconds |
Why is building your own Shopify ERP sync harder than it looks?
Teams that take the custom-build path hit the same walls, all of them documented by Shopify itself.
- Webhooks are not a delivery guarantee. Shopify's guidance is blunt: "Your app shouldn't rely solely on receiving data from Shopify webhooks." Delivery is not guaranteed, ordering is not guaranteed (an update can arrive before its create), and after 8 consecutive failed deliveries over 4 hours an API-created subscription is automatically deleted. Shopify's own webhook docs require reconciliation jobs on top.
- Price pushes are batched and rate-limited.
priceListFixedPricesAddaccepts at most 250 prices per call and acts as add-and-replace, per the catalog build docs. A 100,000-SKU contract price book works out to more than 400 sequential calls per price list, inside a budget of 100 query-cost points per second on standard plans and 1,000 on Plus (API limits). - Pricing changes must be polled. With no catalog or price list webhooks, your sync cannot react to pricing edits; it has to poll on a schedule.
- Order attribution has a documented trap. B2B orders must be read via
purchasingEntity, notOrder.customer. Reading the customer field misattributes B2B revenue to the individual contact, which Shopify documents as a common integration bug in accounting and ERP syncs. - Order import has strict prerequisites. Importing ERP orders requires every company, location, contact, and product to exist in Shopify first, and if a line item's
priceSetis omitted, Shopify silently fills in the current variant price, mispricing historical orders (import docs). - Live pricing from the ERP is off the table. On standard and Plus plans, Shopify Functions cannot call external systems; prices must be pre-synced into price lists. See contract and live pricing for the full picture.
- Inventory is push-only, with concurrency rules. The ERP can push absolute quantities via
inventorySetQuantities, which Shopify says to use "only if calling on behalf of a system that acts as the source of truth," with compare-and-swap checks and, since API 2026-04, a required idempotency key (mutation docs).
None of this is a criticism of the APIs. It is the job description of a sync engine, and Shopify does not ship one.
The fix: the ERP & CRM Integrations module
ERP & CRM Integrations is the fifth B2B Supercharge module. Your ERP stays the source of truth: quotes, orders, invoices, and remittance flow between Shopify and the systems your business runs on, both ways. One connector per system, both directions.
The module covers three sync surfaces:
- ERP sync: orders out, invoices in. Orders push from Shopify to the ERP, invoices pull back in, and inventory syncs, with the ERP holding the master record.
- CRM sync: quotes become deals. Quote line items and status sync to HubSpot or Salesforce, so the pipeline your sales team lives in reflects what buyers actually do. Pairs with the quoting fix.
- Financial sync: payments post themselves. Remittance lands in your AR per invoice, so batch payments made through the Payments module reconcile without manual rows.
Which systems does it connect?
| System | Type | Direction |
|---|---|---|
| Dynamics 365 | ERP | Two-way |
| NetSuite | ERP | Two-way |
| Sage | ERP | Two-way |
| HubSpot | CRM | Two-way |
| Salesforce | CRM | Two-way |
How the module answers each native gap
| Native gap | Module answer |
|---|---|
| No built-in connector, three buy-or-build paths | One connector per system, maintained as part of the suite |
| Webhook delivery not guaranteed, reconciliation required | The sync engine, including reconciliation, is the module's job, not your team's |
| No CRM sync | Quotes sync to HubSpot or Salesforce as deals, with line items and status |
| Invoices and remittance live outside Shopify | Invoices pull in; remittance posts to AR per invoice |
| Inventory push mechanics (idempotency, concurrency) | Handled inside the connector, ERP as source of truth |
For the full picture of what native Shopify B2B does and does not include, see the constraints ledger, the price lists chapter, and the rest of the fixes series.
Frequently asked questions
Does Shopify B2B include a native ERP or CRM integration?
No. Shopify provides the APIs but no built-in connector. Its documentation points to App Store connector apps, iPaaS platforms, or a custom integration built on the B2B Admin APIs.
Which ERPs and CRMs does B2B Supercharge connect?
The ERP & CRM Integrations module connects Dynamics 365, NetSuite, and Sage, plus HubSpot and Salesforce. One connector per system, both directions.
Is the sync one-way or two-way?
Two-way. Orders push out of Shopify, invoices and inventory pull in, quotes sync to the CRM with line items and status, and remittance posts to your AR per invoice. Your ERP stays the source of truth.
Can my ERP serve live contract pricing into Shopify checkout?
Not on standard or Plus plans. Prices must be pre-synced into Shopify price lists, because Shopify Functions cannot make external network calls except on enterprise plans, and even there responses cache up to 300 seconds. See the live pricing chapter.
How do orders get from Shopify into an ERP without a connector?
Via webhooks plus API polling. Shopify states webhook delivery is not guaranteed and requires reconciliation jobs; after 8 consecutive failed deliveries over 4 hours, an API-created webhook subscription is automatically deleted.
Is there a field to map Shopify companies to ERP account numbers?
Yes. Company.externalId is documented as "a unique externally-supplied ID for the company" and appears in company webhook payloads. It is the standard hook for ERP and CRM account mapping.
How many contract prices can a sync push per API call?
250 fixed prices per priceListFixedPricesAdd request, inside the plan's rate limit of 100 query-cost points per second on standard plans and 1,000 on Plus.
See the ERP & CRM module running against your stack.
Book a demo and watch orders, invoices, quotes, and remittance move both ways between Shopify and the systems you already run.