A Shopify store needs an ERP integration when the work behind the checkout (buying stock, holding it in more than one place, making or bundling products, selling through other channels and closing the books) has outgrown what Shopify and an accounting app can record without people retyping things. The usual signs are orders keyed in twice, stock counts that disagree between channels, and a month-end that depends on one person's spreadsheet. If none of that describes your store, the honest answer is "not yet", and an ERP bought early mostly adds a second system to keep in step.
This guide is about the decision, not the build: what Shopify already covers, the signals that justify an ERP, how to scope a first integration and what breaks after go-live.
What Shopify Already Covers
Before deciding you need an ERP, check what the platform does on its own. It has grown well past a storefront.
- Several stock locations. Shopify tracks inventory per location, which it defines as any physical place where you sell products, fulfil orders or stock inventory. How many you can have depends on your plan.
- Purchase orders. You can create purchase orders in the Shopify admin listing products, quantities, costs, payment terms and supplier details, then receive the incoming goods against them.
- Automation. Shopify Flow is a free app on the Basic, Grow, Advanced and Plus plans, so tagging, routing and alerting rules do not need another system.
- Payout detail. Every Shopify Payments balance transaction carries the gross amount, the fee, the net amount and the payout it belongs to, which is what an accounting app needs to reconcile against the bank.
A single-brand store with one or two warehouses, straightforward purchasing and a bookkeeper who reconciles payouts in an accounting app is often well served by exactly this. My rule of thumb is simple: do not buy an ERP to fix a process problem. If orders are being retyped because nobody set up the accounting app's Shopify connector, fix that first. It is a far smaller project.
Seven Signals That Justify an ERP
Each signal below is about work Shopify was not designed to hold. One on its own is a reason to look closer. Two or three together usually mean the business already runs on a shadow ERP made of spreadsheets.
1. Orders are retyped somewhere
If someone copies Shopify orders into another system to pick, invoice or report on them, you are already paying for an integration, in time and in errors. The remaining signals decide whether the destination should be an accounting app or an ERP.
2. The same stock sells in more than one place
Marketplaces, a wholesale portal, retail counters or a second storefront all draw on the same physical units. Shopify can hold stock for the channels it runs, but once orders also arrive from places Shopify does not see, one system has to own the available quantity and every channel has to read from it. That is an ERP's job.
3. You make, kit or bundle what you sell
A bundle that consumes three components, a product assembled to order, or raw material bought by weight and sold by the unit all need bills of materials and component stock. Shopify sells the finished item; it does not record what was consumed to make it.
4. Purchasing has become a discipline
Reorder points based on supplier lead times, partial receipts, landed costs such as freight and duty that change your unit cost, and supplier bills matched to what actually arrived. Shopify's purchase orders record the order; an ERP also carries the real cost into stock valuation and the accounts.
5. Wholesale customers buy on account
Customer-specific price lists, credit limits, payment terms and statements are accounting-heavy work. If your trade buyers pay by invoice rather than at checkout, the receivables ledger has to live somewhere that can age it and chase it.
6. More than one entity, currency or warehouse operator
A second company for another market, books kept in a currency other than the one you sell in, or a third-party warehouse running alongside your own. Each adds a dimension that spreadsheets handle badly and ERPs are built for.
7. Nobody can tell you the margin on an order
If no one can say what an order earned after product cost, payment fees, shipping and returns, the data exists but sits in three places. An ERP that receives the order, the landed cost and the payout is usually where that number first becomes visible.
If the signals you recognise are mostly financial (reconciliation, receivables, tax), compare an ERP with a stronger accounting setup before committing; I wrote a separate guide on ERP vs accounting software and when to move on.
Reasons That Only Sound Like Reasons
Some triggers feel like ERP problems and are not:
- "We are growing fast." Volume alone is something Shopify handles well. Growth matters only when it brings one of the seven signals with it.
- "We need better reports." Reporting across systems is usually a data warehouse or BI project. An ERP does not improve reports on data it never receives.
- "The catalogue is a mess." Duplicate SKUs and inconsistent variants are copied faithfully into any ERP. Clean the catalogue first, because SKUs are the key every integration matches on.
A Quick Scorecard
Answer for how the business runs today, not next year.
| Question | Stay with Shopify and an accounting app | Plan an ERP integration |
|---|---|---|
| Where do orders come from? | Shopify only | Shopify plus marketplaces, wholesale or retail |
| What do you sell? | Finished goods bought ready to sell | Kits, bundles, made or assembled products |
| How do you buy? | Simple reorders from a few suppliers | Lead times, partial receipts, landed costs |
| How do customers pay? | At checkout | On account, with terms and credit limits |
| How many entities and warehouses? | One company, one or two locations | Several, or a third-party warehouse alongside your own |
| Who reconciles payouts? | A bookkeeper, monthly, without drama | One person, with a spreadsheet nobody else understands |
If three or more of your answers sit in the right-hand column, start scoping. If only one does, fix that one thing with the smallest tool that works and run the scorecard again in six months.
Scope the First Integration by Flows, Not Features
Once the answer is yes, do not sync everything on day one. Phase the work by the flows that remove the most retyping:
- Orders in, stock out, shipments back. Shopify orders become ERP sales orders, available stock goes from the ERP to Shopify, and the fulfilment and tracking number go back so Shopify sends the customer their shipping email. This one loop removes most of the manual work.
- Refunds, returns and payouts. Refunds become credit notes, returned goods go back into stock, and each payout is posted with its fees so the bank reconciles.
- Products, prices and wholesale. Catalogue sync, price lists and trade accounts come last, once the transactional loop is trusted.
For each phase, write down which system owns each fact before anyone writes code. Two systems that can both change the same stock number will eventually disagree, and the integration will be blamed for a decision nobody made.
Then size it. Three numbers drive most of the design: orders on your busiest day rather than your average one, SKUs multiplied by locations (the number of stock levels you keep in step), and how many channels write to the same stock.
What Shopify's API Means for the Design
You will not write the integration yourself, but these constraints explain most of the failures that come later.
API capacity is per app and per store, and depends on your plan. Shopify's GraphQL Admin API rate limits are 100 points per second on Standard plans, 200 on Advanced, 1,000 on Plus and 2,000 on Commerce Components, measured by calculated query cost, and a single query may not exceed 1,000 points. The same page recommends bulk operations for large reads such as a full catalogue or order history; they return a JSONL file and do not carry the per-query cost and rate limits. You do not need Plus to integrate an ERP, but a busy store on a standard plan needs a connector that budgets its calls.
Webhooks are fast signals, not a ledger. Shopify's webhook troubleshooting guide says a delivery fails if your endpoint does not respond within five seconds, failed deliveries are retried up to eight times over four hours, and if failures persist the subscription is removed. Its webhooks overview adds that delivery is not always guaranteed, ordering is not guaranteed within a topic, duplicate deliveries should be ignored using the X-Shopify-Webhook-Id header, and apps should run reconciliation jobs that fetch data from Shopify periodically. In practice that means: acknowledge quickly, queue the work, and run a scheduled job that compares both sides.
Stock writes need compare-and-set. The inventorySetQuantities mutation applies an update only when the stored quantity still matches the value you expected, and returns an error when it does not; Shopify warns that opting out of that check can leave stock inaccurate when requests overlap. Since API version 2026-04, Shopify has also made idempotency keys mandatory for its inventory adjustment and refund mutations, so that a retried request is not applied twice. A connector written for earlier versions needs updating before it moves to 2026-04.
The API moves every quarter. Shopify releases a new API version every three months and supports each for at least 12 months; a request to a retired version is answered by the oldest version still available, which can change behaviour without anyone touching the connector. The REST Admin API has been a legacy API since 1 October 2024, and new public apps must be built on the GraphQL Admin API only. So an integration is never a one-off build; it needs an owner who reads the changelog.
Questions to Ask Before You Buy or Commission a Connector
Whether you choose an off-the-shelf connector, middleware or a custom build, ask whoever will own it:
- Which Shopify API and version does it use, and who upgrades it each quarter?
- What happens when a webhook is missed? Is there a reconciliation job, how often does it run, and who reads its report?
- How are duplicate deliveries and retried writes kept from creating duplicate records?
- Which system owns stock, prices and customers, and can that be set per flow?
- How are payouts posted: one entry per order, or one per payout with its fees and refunds?
- Where do failed records go, and can operations re-run one without a developer?
- How does it behave on your busiest day, given your plan's API capacity?
A vendor who answers these clearly has run integrations in production. One who answers with a feature list has built a demo.
What Goes Wrong in the First Months, and How to Spot It
Most integration failures are quiet: nothing errors on screen, and numbers drift apart until someone notices at month-end.
| Symptom | Likely cause | First check |
|---|---|---|
| Orders missing in the ERP after a quiet spell | Webhook subscription removed after repeated failed deliveries, with no reconciliation job behind it | List the app's webhook subscriptions; compare yesterday's order count on both sides |
| The same order appears twice | Duplicate deliveries not ignored, or no unique Shopify order ID stored on the ERP record | Search the ERP for the Shopify order ID |
| Overselling on busy days | Two systems writing stock, or stock pushed without compare-and-set | Which system last changed the quantity, and when |
| Payouts never match the bank | Fees, refunds and adjustments posted per order instead of per payout | Rebuild one payout from its balance transactions |
| Refunds in Shopify but no credit note in the ERP | Refund flow left out of scope | Sample last week's refunds on both sides |
| Sync slows or stalls at peak | Query cost running into the plan's rate limit | Throttle errors in the connector's log |
| Behaviour changes with no deploy | The API version the connector pins has been retired | The API version in the connector's configuration |
Ask for one daily report from the first day: orders, refunds and payouts counted on both sides, with every difference listed. When that report has stayed clean for a full month, including a busy week, the integration has earned your trust.
A Sound Order of Work
A sound approach starts with the scorecard and the ownership decisions on paper, before any connector is chosen, because those decisions outlive whichever tool you pick. Then build or configure the first loop (orders, stock and shipments), run it alongside the existing manual process, and switch the manual work off only once the daily reconciliation has been clean for long enough to trust.
If you are at the point where the signals are real, my e-commerce integration service covers the architecture, the connector, the data mapping, the reconciliation report and the monitoring.
Frequently Asked Questions
Do I need Shopify Plus to integrate an ERP?
No. The Admin API is available on every plan. Plus raises the GraphQL Admin API limit to 1,000 points per second against 100 on Standard plans, according to Shopify's rate-limit documentation, which matters for busy stores keeping many stock levels in step. A well-built connector on a standard plan works within its budget and uses bulk operations for large reads.
Which system should own inventory once an ERP is connected?
Usually the ERP, because it holds purchasing, receipts, transfers and every channel's demand; Shopify then shows the available quantity the ERP sends. The exception is a store whose only channel is Shopify and whose ERP is used mainly for accounting. There, keeping stock in Shopify and syncing only orders and payouts can be simpler and safer.
Can I connect Shopify to an accounting app instead of an ERP?
Yes, and if your signals are mostly financial it is often the right first step. Accounting apps with a Shopify connector handle sales, fees and payouts well. They start to struggle once you need bills of materials, multi-location purchasing or several sales channels drawing on the same stock.
How do I know the integration is healthy?
Three checks: a daily count of orders, refunds and payouts on both sides with every difference listed; a queue of failed records that someone actually empties; and a quarterly look at the Shopify API version the connector uses. Silence is not health, because a removed webhook subscription is silent too.
Weighing whether your store needs an ERP yet? Run the scorecard above, then send your answers through the contact form and you will get a straight answer on which column you are really in.
Written by
Muhammad Amir
Electrical Engineer and founder of ECOSIRE Holdings. Began his career on JF-17 fighter jet avionics; now ships ERP, AI, and ad-tech systems — including 215+ Odoo modules, an autonomous SEO platform, and AI agent fleets.
Need consulting help?
I offer productized consulting services for ERP, integrations, and AI.
View ServicesRelated Articles
ERP Total Cost of Ownership Worksheet
ERP price is three numbers, not one. A worksheet that fixes the inputs first, normalises vendor pricing models, lists the five-year lines and prices the exit.
15 min readerpHow to Evaluate an ERP Implementation Partner
How to evaluate an ERP implementation partner: questions with answers you can check, a paid discovery before you sign, and the answers that end the talk.
11 min readerpConstruction ERP: Job Costing Requirements
Construction ERP job costing requirements: cost codes, commitments, change orders, labour burden, retainage, WIP and one real job to run through every demo.
12 min read