10 min read
Shopify ERP Integration: What Breaks, and How to Build It So It Doesn't
Most Shopify ERP integrations do not fail on day one. They fail on day 60, quietly, on a field nobody agreed the direction of. Here is how to build one that survives.
Decide direction per field, not per system
The single most expensive mistake in ERP integration is calling it 'two-way sync' and moving on. Two-way sync without per-field ownership is a race condition with a marketing name.
Write the ownership table before any code. A workable default for Odoo and Shopify:
- Product name, SKU, cost, stock → ERP owns, pushes to Shopify.
- Retail price, images, SEO fields, collections → Shopify owns, ERP never overwrites.
- Orders and customers → Shopify owns, pushes to ERP.
- Fulfilment and tracking numbers → ERP owns, pushes back to Shopify.
Every field appears exactly once, with exactly one owner. If a field needs two owners, it actually needs two fields.
Match on SKU, never on name
Product titles get edited by whoever is closest to the marketing calendar. SKUs are operational and stable. Every mapping — products, variants, inventory — keys on SKU, and unmatched SKUs go into a review queue rather than creating duplicates.
Keep an explicit mapping table of ERP ID ↔ Shopify ID. Deriving the match at runtime works until someone renames a product mid-sync and you create 400 duplicate listings.
Webhooks for events, polling only for drift
Orders and inventory movements are events: use webhooks and react in seconds. A cron job that polls the whole catalog every five minutes is how you find your Shopify API rate limit and your ERP's CPU ceiling on the same afternoon.
Keep one slow reconciliation pass — every few hours — whose only job is to catch drift from missed webhooks. Hasil Sync runs exactly this shape: webhook-driven writes plus a catalog refresh on a schedule.
Retries, idempotency, and the failure you will actually get
Your ERP will be down for maintenance. The Shopify API will rate-limit you at exactly the wrong moment. Neither is an exception — both are Tuesday.
- Every write must be idempotent — replaying it must not create a second record.
- Retry with exponential backoff, not a tight loop that turns one outage into a rate-limit ban.
- Queue failed jobs with the payload attached so a retry does not need the original trigger.
- Log every run with counts: attempted, succeeded, failed, and why.
If you cannot answer 'what happened in the 03:00 sync' from a UI, you do not have an integration, you have a cron job and some hope.
The middleware tax
Zapier and Make are excellent for low-volume glue and terrible for catalog sync. Pricing is per task, so 4,000 products × 4 fields is a per-month invoice that grows with your catalog, and neither tool gives you a mapping table, a reconciliation pass, or a real error queue.
Purpose-built connectors cost a flat fee and own the hard parts. The break-even is usually somewhere under 1,000 monthly operations.
What to demand from any connector before you buy
- A visible run history with per-run success and failure counts.
- Field-level direction control, not a single two-way toggle.
- Stress-test evidence — Hasil Sync is tested at 1,000 requests/hour.
- A stated data-retention policy. Hasil purges sync payloads after 30 days.
- No theme access and no app-store dependency: an Admin API token is enough.
Frequently asked
- How long does a Shopify ERP integration take to set up?
- A purpose-built connector is credentials plus field mapping — under an hour for a standard catalog. A custom build is typically four to twelve weeks, most of it spent on retries, mapping, and reconciliation rather than the API calls themselves.
- Should inventory sync be real-time?
- Inventory should be event-driven from the ERP side and reconciled on a schedule. Real-time polling of a whole catalog will hit Shopify API rate limits long before it improves accuracy.
- What is the most common cause of overselling after an ERP integration?
- Stock written from a stale cache, or two systems both believing they own the inventory field. Assign a single owner per field and reconcile on a fixed schedule.
- Can Zapier handle ERP to Shopify sync?
- For a handful of monthly events, yes. For catalog and inventory sync it becomes expensive per task and offers no mapping table, reconciliation pass, or error queue — which is where sync reliability actually lives.
Want this working on your store?
Hasil ships wholesale portals and Odoo ↔ Shopify sync. 14-day free trial.
Start free trial