On most of our larger Shopify projects, the storefront is the easy part. The project succeeds or fails on whether Shopify and the ERP agree about prices, stock, customers and orders, every minute of every day, including the minutes when one of them is down.
This guide covers how a Shopify ERP integration is actually put together: what moves between the systems, the four ways to connect them, where integrations fail, and what drives the time and cost. It is written for the person who has to sign off on the project, not the person who writes the code.
TL;DR: Write down which system owns each piece of data before choosing any tool. Pick the lightest integration approach that genuinely fits: a prebuilt connector if your processes are standard, an integration platform if you have several systems, custom middleware if your rules are unusual or your ERP is old. Design for failure from the start, because every integration will eventually see a duplicate, a delay and an outage.
What Actually Moves Between Shopify and an ERP
Almost every integration moves the same handful of things. The questions are which direction, how often, and which system wins when they disagree:
| Data | Usual direction | How often |
|---|---|---|
| Products and SKUs | ERP (or PIM) to Shopify | On change |
| Inventory | ERP or warehouse to Shopify | Near real time |
| Prices and B2B price lists | ERP to Shopify | On change |
| Orders | Shopify to ERP | Real time |
| Fulfillment and tracking | ERP or warehouse to Shopify | Real time |
| Customers and B2B companies | Depends on who creates them | On change |
| Payment terms and credit limits | ERP to Shopify | On change |
| Refunds, returns and cancellations | Shopify to ERP | Real time |
| Payouts and fees | Shopify to ERP (finance) | Daily |
| Orders from other channels and open invoices (optional) | ERP to Shopify | On change |
| Invoice payments (optional) | Shopify to ERP | Real time |
Not everything needs to be instant. Stock and orders do, because delays there create overselling and angry customers. Product descriptions updated overnight are usually fine. Matching the sync speed to the business risk of each item keeps the integration simpler and cheaper than making everything real time.
The table also hides the most important decision: when two systems both hold a price, a stock figure or a customer record, only one of them can be in charge. Our guide to whether you need a PIM introduces this idea of one owner per field, and it is the foundation of everything below.
The Four Ways to Connect Them
1. A prebuilt connector
Some ERPs now come with a Shopify connector from the ERP vendor itself. Microsoft Dynamics 365 Business Central includes one that synchronizes products, stock, customers, B2B companies and orders. Oracle sells NetSuite Connector for the same job. Shopify also runs a certified ERP program covering Business Central, NetSuite, Infor, Acumatica and Brightpearl.
Right when your processes are close to what the connector expects. Wrong when you start bending your business to fit the connector, or stacking workarounds on top of it.
2. An integration platform (iPaaS)
A hosted platform such as Celigo or Patchworks, with prebuilt flows you configure and extend. Good when several systems are involved, such as an ERP, a warehouse and a marketplace, and you want them managed in one place.
3. Custom middleware
A layer built for your business that sits between Shopify and the ERP, handling queueing, transformation, retries and alerts. This is how we connected KOL Foods' AS400 system to its store through ECX, our own middleware platform, including real-time pricing for products sold by the pound. It is the right answer for older ERPs, unusual pricing rules, or when you expect to change ERP.
4. Home-made glue
Scripts and automation tools wired together by whoever was available. One prospect's setup sent each Shopify order through a webhook to a hosted workflow tool, where custom JavaScript matched products and created invoices in their accounting system. It worked, in one direction only, and nobody could extend it when they needed orders to flow the other way. Glue is fine for a prototype. It is rarely fine as the thing your revenue depends on.
Our comparison of these approaches goes into the trade-offs in more detail, including how each one behaves when you change ERP.
Start With the Integration Contract, Not the Tool
Every integration we build starts with a written contract between the systems. It answers four questions for every piece of data in the table above:
- Which system owns it? Exactly one.
- Which way does it flow? From the owner to everyone else.
- How quickly? Real time, every few minutes, or nightly, based on business risk.
- What happens when either side is down? Queue, retry, alert, or block.
This document is where most of the project's real decisions happen, and it is what makes quotes comparable. If two vendors quote you without one, they are pricing different projects.
Where Shopify ERP Integrations Fail
The failures are remarkably consistent, which is good news: they can be designed for.
- Ignores duplicates using a unique IDStops: the same order arriving twice
- Uses timestamps, not arrival orderStops: updates landing before the create
- Queues work and retries when a side is downStops: orders lost during ERP maintenance
- Paces requests under API limitsStops: failures during flash sales and big updates
- Syncs in real time, not in batchesStops: overselling in the gap between syncs
- Alerts a person when something failsStops: finding out from a customer
The ERP is down when an order arrives
Shopify keeps taking orders when the ERP is offline for maintenance. A well-built integration queues those orders and delivers them when the ERP returns. A poorly built one drops them, and someone finds out when a customer asks where their order is.
The same order arrives twice
Shopify delivers webhooks, its notifications of events like a new order, at least once rather than exactly once. It retries failed deliveries up to eight times over four hours, and the same event can arrive more than once. Its documentation is explicit that integrations must handle duplicates. If yours does not, a retry creates a second sales order in the ERP. Shopify now requires an idempotency key, a unique token that makes a repeated request safe, on inventory adjustments and refunds from API version 2026-04, for exactly this reason.
Events arrive out of order
Shopify does not guarantee the order in which webhooks arrive, so an update can land before the create it refers to. Integrations should use the timestamps on each event, not arrival order, to decide what is current.
Events go missing altogether
Shopify's own guidance is not to rely on webhooks alone, and to run regular reconciliation jobs that compare the two systems and fix drift. An integration without reconciliation is one that is quietly wrong and does not know it.
Batch sync creates gaps
When we moved QC Supply from Magento to Shopify Plus, the old ERP sync ran in batches and failed roughly 12% of the time, leaving stock figures wrong between runs. Replacing it with real-time, two-way sync through Node.js middleware on Shopify's GraphQL Admin API removed that failure class. Overselling almost always traces back to the gap between syncs.
Rate limits under load
Shopify's GraphQL Admin API meters usage in points per second: 100 on standard plans, 200 on Advanced, 1,000 on Shopify Plus and 2,000 on Shopify for enterprise. A large catalog update or a flash sale can hit these limits. The ERP side has limits too; NetSuite, for example, caps concurrent requests by service tier. Integrations need to queue and pace work rather than fail when they hit a limit.
B2B Adds a Layer
For wholesale businesses the ERP usually owns more than stock and orders. It owns which customers can buy on terms, their credit limits, their negotiated prices and their ship-to addresses. On Shopify those map to B2B companies, company locations, catalogs and payment terms, and the integration has to keep them in step. One manufacturer we spoke to had about 800 products and a clear requirement that only some customers could pay on terms. That single rule touches pricing, checkout and the ERP at once. Our Shopify B2B implementation guide covers the storefront side of this.
Many B2B clients also want orders to travel the other way. Their customers buy by phone, through a sales rep or by EDI as well as online, and they expect to log in and see all of it, not only what they ordered on the website. That means sending orders from every channel back from the ERP to Shopify, so each customer's account shows one complete history. The natural next step is letting them pay there too: open invoices sync from the ERP to Shopify, the customer pays from their account, and the payment flows back to the ERP and is applied to the right invoice. For a wholesale buyer, that replaces emailed PDF invoices and calls to accounts receivable.
Both flows are optional, and both need care. Orders sent back from the ERP must be marked so the integration never sends them to the ERP again as new orders, and so Shopify does not email the customer a second confirmation or deduct the stock twice. Payments need the same duplicate protection as orders: a retried payment must never be applied to an invoice twice.
When the ERP Is Unfamiliar or About to Change
Two situations change the approach more than any other:
- An ERP nobody on the project has used. One distributor we scoped ran Epicor Eclipse, a distribution-focused ERP. The first task was not design, it was confirming exactly which product and version they ran and what its interfaces actually allow. With older or in-house systems, how the data can be reached decides the whole architecture.
- An ERP change on the horizon. The manufacturer above planned to replace its ERP within two years. Wiring Shopify directly into a system that is about to be retired means building the integration twice. A middleware layer between them means only one side needs rebuilding when the ERP changes.
How Long It Takes and What Drives the Cost
A standard integration with a well-documented modern ERP such as NetSuite, recent SAP or Microsoft Dynamics typically takes 8 to 14 weeks. Older or custom systems, such as AS400 or undocumented in-house ERPs, typically take 14 to 24 weeks. Both include a discovery phase of two to three weeks that produces the integration contract.
What moves the cost is consistent:
- How many kinds of data flow, and in which directions. Two-way sync costs more than one-way, for every entity.
- How standard your rules are. Customer-specific pricing, kits, units of measure and products sold by weight all add work.
- How accessible the ERP is. A modern API is cheap to work with. A legacy system with file exports is not.
- How many systems are involved. Each warehouse, marketplace or PIM adds another contract.
- The ongoing costs: connector or platform subscriptions, hosting, and maintenance when either system updates its API.
Questions to Ask Before You Sign
- Will you write down which system owns each field before building anything?
- What happens to orders placed while the ERP is offline?
- How does the integration prevent a retry from creating a duplicate order?
- How will we know when data has drifted, before a customer tells us?
- What will it take to change ERP later?
- Who fixes it at 2am, and how do they find out it is broken?
Planning a Shopify ERP Integration?
Bring us your ERP, your systems list and the rules that make your business different. We will tell you which approach fits and what the integration contract needs to cover. See our Shopify app and API integration services or talk to us directly.
Frequently Asked Questions
What is a Shopify ERP integration?
It is the connection that keeps Shopify and your ERP in agreement about products, inventory, prices, customers, orders, fulfillment and refunds. Typically the ERP sends products, stock and prices to Shopify, and Shopify sends orders, refunds and payouts back to the ERP.
How do you connect Shopify to an ERP?
There are four approaches: a prebuilt connector from the ERP vendor or Shopify's certified ERP program, an integration platform (iPaaS) such as Celigo or Patchworks, custom middleware built for your business, or home-made scripts. The right one depends on how standard your processes are, how many systems are involved, and whether you expect to change ERP.
How long does a Shopify ERP integration take?
A standard integration with a well-documented modern ERP such as NetSuite, recent SAP or Microsoft Dynamics typically takes 8 to 14 weeks. Older or custom systems such as AS400 or in-house ERPs typically take 14 to 24 weeks. Both include a two to three week discovery phase that defines which system owns each piece of data.
What drives the cost of a Shopify ERP integration?
The number of data types and directions that sync, how standard your pricing and product rules are, how accessible the ERP's interfaces are, how many other systems are involved, and ongoing connector, hosting and maintenance costs.
What happens if the ERP goes down?
Shopify keeps taking orders. A well-built integration queues them and delivers them when the ERP returns, without creating duplicates, and alerts your team. A poorly built one can drop orders or duplicate them on retry, so this should be asked explicitly of anyone quoting the work.
Should Shopify or the ERP be the source of truth?
Neither, as a whole. Each piece of data should have exactly one owner. Typically the ERP owns SKUs, cost, price, stock and payment terms, Shopify owns storefront merchandising and the order as placed, and a PIM, if you have one, owns product content.