Most Shopify ERP sync issues begin with one of five problems: conflicting data ownership, incorrect product or location mappings, failed event delivery, rejected ERP data or unsafe retry logic.
Do not begin by changing several settings or running a full resync. Select one affected SKU, order or shipment and trace it across Shopify, the integration layer and the ERP. Compare record IDs, timestamps and system responses until you identify exactly where the expected workflow stopped.
| Problem | Inspect first |
|---|---|
| Shopify and ERP inventory differ | Inventory definition and location mapping |
| Order is missing from the ERP | Event, queue and ERP response logs |
| ERP order appears twice | Retry and duplicate-prevention logic |
| Fulfillment is not updating | Fulfillment order and assigned location |
| Only some variants fail | Variant, inventory-item and ERP IDs |
| The entire connection has stopped | Authentication, permissions and system health |
Start With One Failed Record
A spreadsheet containing thousands of inventory differences is not a useful starting point. Choose one record that clearly demonstrates the problem.
Good test records include:
-
One SKU with different quantities in Shopify and the ERP
-
One paid Shopify order that never reached the ERP
-
One order that was created twice
-
One partial shipment that fulfilled the entire order
-
One shipment with missing tracking information
Record the available evidence before changing the integration.
| Field | What to capture |
|---|---|
| Shopify record | Order, variant or inventory-item ID |
| ERP record | Item, sales-order or shipment ID |
| Reference | SKU or order number |
| Location | Shopify location and ERP warehouse |
| Expected result | What should have happened |
| Actual result | What happened instead |
| Last correct update | Exact timestamp and timezone |
| First failed update | Exact timestamp and timezone |
| Integration method | App, middleware or custom API |
| Error response | Complete original message |
Use one timezone throughout the investigation. Mixing UTC with local timestamps can make events appear to have occurred in the wrong order.
Next, describe the expected workflow in one sentence:
When a paid Shopify order is created, the integration should create an ERP sales order, reserve the correct inventory and return fulfillment updates to Shopify.
Now trace that record through the complete path:
Shopify record → webhook or scheduled job → integration queue → data transformation → ERP request → ERP response → Shopify update
Look for proof at every stage. A valid Shopify order does not prove that the integration received it. A request reaching the ERP does not prove that the ERP accepted it.
Confirm Which System Owns the Data
Before correcting an inventory quantity, price or shipment status, identify which system is authorised to control that value.
Different platforms can own different fields:
| Data | Typical source of truth |
|---|---|
| Product descriptions | Shopify, ERP or PIM |
| Sellable inventory | ERP or WMS |
| Online order creation | Shopify |
| Product cost | ERP |
| Checkout information | Shopify |
| Fulfillment status | ERP, WMS or 3PL |
| Tracking information | ERP, WMS or carrier platform |
| Retail inventory | POS or ERP |
Recurring errors appear when two systems independently update the same field.
For example, an ERP may set an absolute stock quantity every 15 minutes while a marketplace connector adjusts the same Shopify location after every sale. Both connections may be working as configured, but the later update repeatedly replaces the earlier value.
Shopify’s inventory-management documentation distinguishes between setting an absolute quantity and adjusting an existing quantity. Absolute quantity-setting is appropriate when the connected system acts as the authoritative source.
Document:
-
Which system owns each field
-
Which direction the data should travel
-
Which other systems may update it
-
How simultaneous updates are handled
-
How missed events are reconciled
For broader architecture and ownership planning, see the EcomHeroes Shopify Plus implementation guide.
Why Shopify Inventory Is Not Syncing With Your ERP
“The inventory is wrong” describes the visible symptom, not the root cause.
Shopify connects a product variant to an inventory item. That inventory item can have a separate inventory level at each location, with quantities such as available, on-hand, incoming and committed.
A valid quantity can therefore be applied to the wrong inventory state, product or location.
Compare the same inventory definition
Do not compare ERP on-hand inventory with Shopify available inventory unless both systems define those values in the same way.
Consider this example:
| Inventory value | Quantity |
|---|---|
| Physical stock on hand | 100 |
| Allocated to open orders | 18 |
| Safety stock | 5 |
| Under quality review | 3 |
| Available for sale | 74 |
If the ERP exports 100 while Shopify should make only 74 available for sale, the integration is sending a valid number with the wrong business meaning.
For the affected item, confirm:
-
Which ERP quantity field is being exported
-
Which reservations or deductions are applied
-
Which Shopify inventory quantity is updated
-
Whether both systems reserve stock for open orders
-
How returns and damaged items are treated
-
Whether safety stock is excluded
Avoid applying an unexplained manual adjustment. It may make the storefront look correct until the next ERP job overwrites it.
Validate warehouse and Shopify location mapping
Each Shopify inventory level connects an inventory item to a specific location. Your integration therefore needs an accurate relationship between ERP warehouse IDs and Shopify location IDs.
| ERP warehouse | Shopify location | Status |
|---|---|---|
WH-UK-01 |
UK Main Warehouse | Correct |
WH-EU-02 |
EU Fulfillment Centre | Incorrectly mapped to UK |
3PL-US |
US 3PL | Missing |
RET-LON |
London Retail Store | Location inactive |
A mapping error can make total company stock appear correct while the inventory available to online customers is wrong.
Check whether:
-
The intended Shopify location is active
-
The inventory item is stocked at that location
-
The connector uses the current location ID
-
A location was deleted and recreated
-
Two ERP warehouses are being combined accidentally
-
Retail stock is being exposed online
-
Order routing uses a different fulfillment location
Validate system IDs, not only visible location names. Names can be changed or duplicated without correcting the underlying relationship.
Check product, variant and inventory-item identity
A matching SKU is useful, but it does not always prove that two records represent the same item.
Look for:
-
Blank or duplicate SKUs
-
Extra spaces or inconsistent letter casing
-
Recently changed SKUs
-
Deleted and recreated Shopify variants
-
Old ERP records mapped to new variants
-
Parent products mapped to individual variants
-
Product titles being used as identifiers
-
Archived records remaining active in the connector
A dependable mapping table should preserve:
-
Shopify variant ID
-
Shopify inventory-item ID
-
ERP item ID
-
Operational SKU
-
Date of the most recent mapping update
For a related mapping example, see the EcomHeroes guide to syncing Plytix data with Shopify metafields.
Find every system that can change inventory
List every system that can write inventory to Shopify:
-
ERP or WMS
-
3PL connector
-
Marketplace integration
-
POS
-
Subscription or bundle app
-
Returns platform
-
Custom automation
-
Manual Shopify adjustments
Choose one low-risk SKU. Update it once in the authorised system, then compare the timestamps and logs from every inventory writer.
The investigation should answer one question:
Which system wrote the final incorrect quantity?
Until you know that, increasing the sync frequency or installing another app is likely to create more conflicting updates.
A practical diagnostic example
Assume Shopify receives the correct sellable quantity of 74 at 10:02.
At 10:15, a scheduled ERP job sends the physical on-hand quantity of 100. The team initially blames a delayed real-time sync, but the real-time update worked correctly. A later batch process replaced it with a different inventory definition.
Increasing the real-time sync frequency would not fix this issue. The permanent solution is to define which quantity represents sellable inventory and stop the competing process from overwriting it.
Why Shopify Orders Are Not Syncing to the ERP
A missing ERP order does not prove that Shopify failed to send it.
Trace one order through the complete sequence:
-
Shopify created the order.
-
The order met the export conditions.
-
A webhook or scheduled query detected it.
-
The integration received it.
-
The record was transformed into the ERP format.
-
The ERP accepted or rejected it.
-
The integration recorded the result.
-
A failed record entered a retry or exception queue.
Shopify webhooks notify subscribed applications when selected store events occur. The receiving system must still verify, process, log and retry those deliveries safely.
Collect evidence at each stage:
| Stage | Evidence |
|---|---|
| Shopify creation | Order ID and timestamp |
| Export eligibility | Payment, risk and status rules |
| Event delivery | Webhook or event ID |
| Integration receipt | Request or queue log |
| Transformation | ERP-ready payload |
| ERP processing | Status code and complete response |
| Retry | Queue entry and attempt count |
| Completion | ERP sales-order ID |
Confirm the order qualified for export
Some integrations export only:
-
Paid orders
-
Orders below a fraud threshold
-
Supported currencies
-
Selected sales channels
-
Orders assigned to particular locations
-
Orders without exclusion tags
-
Orders containing recognised products
An order can be valid in Shopify but excluded by the connector’s own business rules.
Read the complete ERP response
“Order failed” is not a diagnosis.
An ERP may reject an order because of:
-
An invalid tax code
-
An unknown customer account
-
An unmapped shipping method
-
A missing product record
-
An unsupported currency
-
An invalid address
-
A duplicate external reference
-
A missing mandatory field
The integration should retain the complete response and associate it with the Shopify order ID. If only a generic failure status is stored, inadequate logging is part of the problem.
Inspect the queue before assuming the order was lost
During busy periods, orders may be delayed rather than missing.
Check:
-
Current queue depth
-
Age of the oldest pending record
-
Failed or dead-letter jobs
-
Retry intervals
-
Worker status
-
Whether one failed job blocks later jobs
-
Whether temporary and permanent errors are separated
A queue containing hundreds of pending records can look like a complete synchronization outage to the operations team.
When the order status, delivery log, queue and ERP response all appear correct, the failure may be inside a transformation rule or retry process. EcomHeroes provides Shopify integration services for existing ERPs, middleware platforms and custom system connections.
Why Duplicate ERP Orders Are Being Created
Duplicate ERP orders usually mean that one business event was processed more than once.
Common causes include:
-
A webhook was delivered again after a timeout
-
The ERP created the order but its response was lost
-
A worker retried an already completed job
-
Two active connectors exported the same order
-
A team member manually resent it
-
An old queue was replayed
-
The integration did not check a stable external reference
Shopify notes that the same webhook can be delivered more than once. Its delivery-verification guidance recommends idempotent processing or using the unique webhook ID to detect duplicates.
Compare:
-
Shopify order ID
-
ERP external reference
-
Webhook ID
-
Integration job ID
-
Request timestamp
-
ERP creation timestamp
-
Retry reason
-
Response received by the integration
A timeout does not prove that the ERP failed to create the order. Before repeating a create request, the integration should check whether a corresponding ERP record already exists.
The solution is not to remove retries. The retry process needs to be duplicate-safe.
Why Shopify Fulfillment Is Not Updating Correctly
A Shopify fulfillment order represents items expected to be fulfilled from an assigned location. One customer order can have multiple fulfillment orders when items ship separately or from different locations.
That creates problems when an ERP assumes every Shopify order has one shipment from one warehouse.
Common symptoms include:
-
ERP shows “shipped” but Shopify remains unfulfilled
-
Tracking information is missing
-
A partial shipment fulfills the complete order
-
The shipment is associated with the wrong location
-
A second package replaces the first tracking number
-
Cancelled items are included
-
The ERP and 3PL both send fulfillment updates
Map operational statuses to Shopify actions:
| ERP or WMS status | Expected Shopify action |
|---|---|
| Allocated | Do not create a fulfillment |
| Picked | Keep as an internal operational status |
| Packed | Prepare for shipment |
| Partially shipped | Fulfill only shipped quantities |
| Shipped | Create or update the fulfillment |
| Cancelled | Stop the pending workflow |
Shopify’s FulfillmentOrder documentation explains how fulfillment work is assigned to locations, while a fulfillment represents work that is underway or completed.
For the affected shipment, confirm:
-
The correct fulfillment order is being updated
-
It is assigned to the expected location
-
The app has the required Shopify API scopes and fulfillment permissions
-
Exact shipped quantities are included
-
Multiple packages are supported
-
Carrier details use an accepted format
-
Another system is not sending the same update
Do not mark the complete order as fulfilled simply because one package has shipped.
When the Complete Shopify–ERP Sync Stops
If inventory, orders and fulfillment updates all stop, begin with connection health rather than individual record mappings.
Check:
-
Expired or revoked credentials
-
Changed application permissions
-
Disabled webhook subscriptions
-
Middleware or queue-worker outages
-
ERP endpoint availability
-
Recent code deployments
-
Firewall, certificate or allow-list changes
-
Errors affecting every integration job
Use the last successful record as your starting point. Compare its timestamp with recent deployments, permission changes and system outages.
A complete outage usually has a shared cause. Confirm the connection is healthy before troubleshooting individual products or orders.
Shopify ERP Sync Root-Cause Guide
Inventory resets at the same time every day
Likely area: Scheduled ERP batch
Evidence: Job timestamps and exported quantity field
Safe first action: Verify whether the batch sends on-hand or sellable inventory.
Only one warehouse has incorrect stock
Likely area: Location mapping
Evidence: ERP warehouse ID and Shopify location ID
Safe first action: Correct and test one mapping before changing all locations.
Only some variants fail
Likely area: Product identity mapping
Evidence: Variant, inventory-item, SKU and ERP item IDs
Safe first action: Compare one successful and one failed record.
Orders appear twice in the ERP
Likely area: Retry or duplicate handling
Evidence: Webhook IDs, job IDs and ERP creation times
Safe first action: Pause manual resends while checking existing records.
Orders never leave Shopify
Likely area: Export eligibility or event delivery
Evidence: Order status, tags and webhook logs
Safe first action: Test one order that clearly meets every export rule.
ERP receives but rejects orders
Likely area: Data transformation
Evidence: Complete ERP response
Safe first action: Correct the rejected field instead of resending unchanged data.
Fulfillment remains missing
Likely area: Status or location mapping
Evidence: Shipment ID, fulfillment-order ID and location
Safe first action: Test one shipment with known quantities.
The entire integration stops
Likely area: Authentication, permissions or infrastructure
Evidence: Connection logs, deployment history and endpoint status
Safe first action: Restore connection health before replaying jobs.
Contain the Problem Without Making It Worse
Temporary containment may include:
-
Pausing one confirmed conflicting inventory writer
-
Reauthorising an expired connection
-
Releasing high-priority blocked orders
-
Correcting one verified location mapping
-
Reconciling essential SKUs
-
Monitoring queue age and failures
Containment reduces immediate business impact. It is not the permanent fix.
Long-term improvements may require:
-
Documented data ownership
-
Stable identifier mappings
-
Duplicate-safe retries
-
An exception or dead-letter queue
-
Automated reconciliation
-
Complete ERP response logging
-
Alerts for repeated failures
-
Separation of temporary and permanent errors
Avoid replaying the entire order queue or resetting all production inventory until the root cause is known. A bulk operation can multiply incorrect quantities, duplicate orders and misleading timestamps.
When the Integration Needs an Architectural Review
A configuration correction may solve one incorrect warehouse ID. A wider review is needed when:
-
The same problem returns after repeated fixes
-
Staff manually reconcile inventory every day
-
Multiple systems control the same fields
-
Logs cannot show where a record failed
-
Failed records disappear instead of entering a queue
-
Peak periods produce long delays
-
Fixing one workflow breaks another
-
The integration depends on undocumented code
-
No one can explain the complete data flow
A structured review should document:
-
Participating systems and responsibilities
-
Field-level data ownership
-
Product and order identifiers
-
Warehouse and location mappings
-
Data transformations
-
Queue and retry behaviour
-
Duplicate protection
-
Monitoring and reconciliation
EcomHeroes supports ERP, inventory, accounting and custom Shopify connections, including troubleshooting and ongoing optimisation through its Shopify integration services.
What to Prepare Before Requesting Technical Help
Provide:
-
Shopify store URL
-
ERP, WMS, PIM or 3PL name
-
Connector or middleware name
-
Affected workflow
-
Shopify and ERP record IDs
-
Example SKU or order number
-
Exact timestamps and timezone
-
Original error message
-
Request and response logs
-
Current location mapping
-
Last successful sync
-
Recent code or configuration changes
-
Expected result
-
Business impact
“One order is not syncing” is not enough. One well-documented failed record is more useful than thousands of unexplained discrepancies.
For accounting-specific workflows, see the EcomHeroes guide to integrating Shopify with Xero.
Frequently Asked Questions
Why does Shopify inventory differ from the ERP?
The systems may be comparing different inventory definitions, updating different locations or receiving changes from multiple writers. Compare the exact ERP quantity field with the Shopify inventory state and location being updated.
Why are Shopify orders not appearing in the ERP?
The order may not meet the export rules, its event may not have reached the integration, it may be waiting in a queue or the ERP may have rejected a required field.
Can Shopify and an ERP both manage inventory?
Both systems can participate in the workflow, but one system should normally own the authoritative quantity for each defined process. Independent absolute updates can repeatedly overwrite one another.
Why are duplicate ERP orders created?
The same event may have been processed twice because of a retry, timeout, overlapping connector or manual resend. Compare webhook IDs, job IDs and ERP external references.
Can a bulk resync make the issue worse?
Yes. A bulk resync can overwrite correct quantities, replay completed orders and hide the original failure beneath thousands of new updates. Diagnose and test a limited set of records first.
What logs should a Shopify ERP integration retain?
Retain the Shopify record ID, event or job ID, timestamp, transformed request, destination response, retry count, final status and related ERP record ID. Customer information and authentication credentials should be protected or redacted.
Why is fulfillment not updating in Shopify?
The shipment may be connected to the wrong fulfillment order, location or quantity. Multiple packages and competing ERP or 3PL updates can also create incorrect statuses.
When should a Shopify ERP integration be rebuilt?
Consider redesigning it when failures cannot be traced, manual reconciliation has become routine, multiple systems control the same fields or the workflow lacks safe retries, useful logging and reconciliation.
Stop Patching the Visible Symptom
A Shopify ERP sync issue is a broken data flow not only an incorrect quantity, missing order or delayed fulfillment status.
Start with one affected record. Confirm which system owns the value. Trace its identifiers, locations, timestamps, events, transformations and responses.
Once you know where the workflow failed, you can decide whether the solution is a mapping correction, queue repair, safer retry process, improved monitoring or an architectural redesign.
Need Help Diagnosing a Shopify Integration?
Share one affected SKU or order, the connected systems and the available logs. EcomHeroes can review the workflow and help identify the most likely failure point.