Short answer
Shopify integrates with ERPs through the GraphQL Admin API for reading and writing data and webhooks for change notifications, delivered over HTTPS or to Amazon EventBridge or Google Cloud Pub/Sub. A dependable integration uses webhooks as triggers, fetches current data through the API, writes to the ERP idempotently, and runs reconciliation jobs, because Shopify documents that webhook delivery and ordering are not guaranteed.
Shopify integration surface at a glance (documented capabilities; see sources)
- Primary API
- GraphQL Admin API. Shopify labels the REST Admin API as legacy; new public apps must use GraphQL exclusively since April 1, 2025.
- Versioning
- Quarterly API versions; each stable version supported for at least 12 months.
- Change notifications
- Webhooks over HTTPS, Amazon EventBridge, or Google Cloud Pub/Sub.
- Webhook delivery
- Respond within 5 seconds; up to 8 retries over 4 hours; subscription removed if failures persist; ordering not guaranteed.
- Rate limiting
- Cost-based leaky bucket for GraphQL; limits vary by API and plan.
- Large data sets
- Bulk operations return query results as a JSONL file.
- Shopify Orders
- Integration service Queue
- ERP Stock
Shopify is the platform most often connected to custom ERPs, and it has a well-documented integration surface. This page summarizes how that surface works and what it means for ERP synchronization. Statements marked as documented come from Shopify’s developer documentation (see sources); statements marked as recommendation are our architectural guidance.
How Shopify connects to an ERP
An ERP integration is built as a Shopify app — a custom app for a single store, or a distributed app for many. The app authenticates with an access token and uses two mechanisms:
- The GraphQL Admin API to read and write orders, products, inventory, customers, fulfillments, and refunds. Documented: Shopify labels the REST Admin API as legacy and has required new public apps to use GraphQL exclusively since April 1, 2025.
- Webhooks to be notified of changes. Documented: webhooks can be delivered over HTTPS, to Amazon EventBridge, or to Google Cloud Pub/Sub.
Recommendation: place a small integration service between Shopify and the ERP rather than calling Shopify directly from the ERP. It isolates retry logic, rate-limit handling, and mapping from both systems. See the architecture guide.
Common integration use cases
- Exporting web orders to the ERP for fulfillment, invoicing, and accounting.
- Publishing stock levels from the ERP or warehouse system to the store.
- Publishing products, variants, and prices from the ERP or a PIM.
- Sending shipment confirmations and tracking numbers back to Shopify.
- Recording refunds as credit notes in the ERP.
- Synchronizing B2B customers, price lists, and payment terms (often on Shopify Plus).
Order synchronization
Documented: order-related webhook topics include orders/create, orders/paid, orders/updated, and orders/cancelled, plus refunds/create. The orders query supports filtering by updated_at, which enables checkpoint-based reconciliation.
Recommendation: choose the export trigger based on when your ERP should see the order (on creation or on payment), fetch the full order through the API before mapping, and store the Shopify order ID as a unique external reference in the ERP. Detailed steps are in How to Synchronize Shopify Orders with an ERP.
Inventory synchronization
Documented: Shopify tracks inventory per inventory item (one per variant) per location, in states including available, on_hand, committed, reserved, incoming, damaged, safety_stock, and quality_control. on_hand is the sum of available, committed, reserved, damaged, safety stock, and quality control. The committed state is managed by Shopify and cannot be adjusted through the API. The inventorySetQuantities mutation supports compare-and-swap, and from API version 2026-04 requires an idempotency key through the @idempotent directive.
Recommendation: treat the ERP as the owner of physical stock, publish a calculated sellable quantity, and account for orders Shopify has accepted that have not yet reached the ERP. See inventory synchronization.
Product and variant synchronization
Documented: products have variants; each variant has an associated inventory item, which carries the SKU and inventory tracking settings.
Recommendation: map each Shopify variant to one ERP article through a unique, stable SKU, and store Shopify’s product, variant, and inventory item IDs in a cross-reference table. If the ERP is the product master, create and update products from it and keep merchandising fields (descriptions, images, SEO) owned by Shopify. See mapping products to ERP SKUs.
Customer data synchronization
Documented: orders reference a customer, and customers can be read and written through the Admin API. Shopify Plus includes B2B features such as companies and company locations.
Recommendation: for B2C stores, many ERPs work best with a single generic web customer and addresses stored on each order, which avoids duplicate customer records. For B2B, match customers on a stable ID stored in both systems, never on email alone. Treat customer data as personal data: sync only the fields the ERP needs.
Fulfillment and shipment updates
Documented: Shopify models fulfillment work through fulfillment orders — groups of items to be fulfilled from the same location. Fulfillments are created against fulfillment order line items with fulfillmentCreate, which accepts tracking company, numbers, and URLs, and a notifyCustomer flag.
Recommendation: create fulfillments when the warehouse confirms shipment, use the ERP shipment ID to make the call idempotent, and choose one system to send shipping notifications. See shipment tracking sync.
API and webhook considerations
Documented:
- Webhooks must be answered within five seconds; failed deliveries are retried up to eight times over four hours, after which the subscription is removed if failures persist.
- Webhook ordering is not guaranteed, duplicates should be ignored using
X-Shopify-Webhook-Id, and Shopify recommends reconciliation jobs instead of relying solely on webhooks. - Webhooks are signed with an HMAC in the
X-Shopify-Hmac-Sha256header. - The GraphQL Admin API is rate-limited by calculated query cost in a leaky-bucket model; the bucket size and restore rate vary by API and plan. A single query has a maximum cost.
- The GraphQL Admin API can return HTTP 200 for requests that failed, including throttled requests, so errors must be read from the response body.
- API versions are released quarterly; each stable version is supported for at least 12 months.
Recommendation: see handling Shopify webhooks reliably and webhooks vs. polling for Shopify.
Common implementation challenges
- Overselling because sync overwrites Shopify stock without accounting for in-flight orders.
- Duplicate ERP orders from duplicate webhooks or retries after timeouts.
- Tax and discount differences when the ERP recalculates rather than copies Shopify’s values.
- Removed webhook subscriptions after an outage, discovered only when orders stop arriving.
- Rate-limit pressure during catalog-wide updates; use bulk operations and request minimal fields.
- API version upgrades missed until a version is retired.
Direct integration vs. middleware
Shopify integrations are commonly built three ways: a custom integration service, an iPaaS or middleware platform, or a prebuilt connector for a specific ERP. For a custom ERP, prebuilt connectors rarely exist, so the choice is usually between a custom service and middleware with custom adapters. The direct vs. middleware comparison explains the trade-offs, and the architecture planner suggests a starting point for your situation.
Frequently asked questions
Does Shopify have a built-in ERP integration?
Shopify does not include a generic ERP connector in the core platform. Integrations are built as apps using the Admin API and webhooks, either custom-built or installed from third-party providers. Some ERP vendors and integration providers publish Shopify connectors.
Which Shopify plan do I need for an ERP integration?
The Admin API and webhooks are available on standard plans. Shopify Plus adds capabilities some integrations rely on, including B2B features and higher API limits. Check whether any of your workflows depend on a Plus-only feature.
Can I use the REST Admin API for a new integration?
Shopify describes the REST Admin API as legacy and requires new public apps to be built with GraphQL. Custom apps can technically still call REST, but newer features may only be available in GraphQL, so new integrations should use GraphQL.
How should multi-location inventory be handled?
Map each ERP warehouse to a Shopify location and sync quantities per inventory item and location. Shopify tracks inventory per location in several states, including available, on hand, and committed.
Can an ERP integration create orders in Shopify?
Yes, the Admin API supports creating orders, for example to import offline or B2B orders. Most ERP integrations, though, flow orders from Shopify to the ERP and flow stock, prices, and shipments back.
Sources and further reading
Platform-specific statements on this page were checked against these sources on . Vendor APIs change; confirm details in the current documentation before you build.
- [1] GraphQL Admin API reference — Shopify
- [2] REST Admin API (legacy notice) — Shopify
- [3] API versioning — Shopify
- [4] Webhook best practices — Shopify
- [5] Troubleshooting webhooks — Shopify
- [6] API rate limits — Shopify
- [7] Manage inventory quantities and states — Shopify
- [8] Fulfillment service apps and fulfillment orders — Shopify
- [9] Bulk operations — Shopify
Related reading
- Guides How to Integrate Shopify with a Custom ERP A step-by-step plan for connecting Shopify to an in-house ERP — scoping workflows, the Admin GraphQL API, webhooks, queues, data mapping, testing, and go-live.
- Guides Shopify ERP Integration Architecture: A Practical Guide The components of a dependable Shopify-to-ERP integration — receivers, queues, workers, outbox, reconciliation, and monitoring — and when to use each pattern.
- Guides How to Synchronize Shopify Orders with an ERP How to export Shopify orders to an ERP reliably — choosing the trigger, mapping lines, taxes, discounts and payments, handling edits, and avoiding duplicates.
- Guides How to Synchronize Inventory Between Shopify and an ERP Keep Shopify stock levels aligned with your ERP — choosing which quantity to publish, mapping locations, using compare-and-swap updates, and reconciling drift.
- Guides How to Handle Shopify Webhooks Reliably Build a Shopify webhook receiver that never loses events — HMAC verification, the five-second rule, deduplication, ordering, retries, and subscription removal.
- Guides How to Synchronize Shipment Tracking Between Shopify and an ERP Send shipments and tracking numbers from an ERP or WMS to Shopify using fulfillment orders — partial shipments, multiple packages, carriers, and customer notifications.