Epicor Kinetic and Shopify integration
Epicor Kinetic runs your manufacturing and distribution operations. Shopify runs your e-commerce storefront. Connecting the two keeps orders, inventory, and customer data synchronized without manual re-entry. Orders placed on Shopify flow into Epicor as sales records with the correct customer and part information, and inventory adjustments in Epicor can be reflected back to Shopify to prevent overselling. Customer master data stays aligned so fulfillment and billing have a single source of truth.
What moves between them
Orders and customer data flow from Shopify into Epicor Kinetic on a two-way schedule. When orders are placed on Shopify, ml-connector reads them via GraphQL webhooks and creates corresponding sales documents in Epicor with the correct customer, parts, and quantities. Customer records created or updated in Shopify are synced into Epicor's customer master to keep billing and fulfillment aligned. Inventory updates can flow the opposite direction from Epicor into Shopify using Shopify's inventory level endpoints, so stock levels in Epicor reduce available inventory on the storefront. The schedule is tied to order frequency and inventory volatility, with immediate webhook processing for order events and periodic polls for inventory and customer master changes.
How ml-connector handles it
ml-connector parses Shopify GraphQL mutations and queries, validates each webhook signature against the X-Shopify-Webhook-Id header to confirm authenticity, and deduplicates orders using Shopify's unique order IDs. On the Epicor side, it polls OData endpoints using $filter on UpdatedOn and handles the two-step write pattern that Epicor requires for complex objects (GetNewXxx call followed by UpdateMaster call). Bearer token refresh is handled transparently when Epicor returns a 401. Company segment is included in all Epicor API URLs since it is mandatory in v2. The integration respects Shopify API version dates and updates tokens before they expire. Because Epicor Kinetic has no native outbound webhooks, polling is used for inventory and customer changes, while Shopify webhooks provide near-real-time order event notification. Orders are mapped to Epicor customers by email or phone number, and line items are matched to Epicor parts by SKU or part number.
A real-world example
A mid-size wholesale distributor runs Epicor Kinetic for inventory, procurement, and order fulfillment across three warehouses, and maintains a Shopify storefront for direct-to-customer sales. Before the integration, orders from Shopify had to be manually entered into Epicor by hand, and customer information was duplicated across both systems. Inventory discrepancies arose because Shopify inventory was managed independently from Epicor stock levels. With Epicor Kinetic and Shopify connected, each new Shopify order automatically creates a sales document in Epicor with the correct customer and quantities, reducing manual data entry to zero. Inventory levels sync from Epicor into Shopify, so the storefront shows accurate available stock and prevents overselling. Customer records created in either system are mirrored to the other, ensuring billing addresses and contact information are consistent for fulfillment.
What you can do
- Sync orders placed on Shopify into Epicor Kinetic as sales documents with correct customer, parts, and quantities.
- Keep customer master data aligned between Shopify and Epicor so billing and fulfillment use a single source of truth.
- Validate Shopify webhook signatures to confirm authenticity and prevent processing forged events.
- Poll Epicor OData endpoints on a schedule to retrieve customer and inventory updates, since Epicor has no native outbound webhooks.
- Sync inventory levels from Epicor back into Shopify so the storefront reflects accurate available stock.
Questions
- How does ml-connector handle Shopify's GraphQL API and Epicor's OData endpoints?
- ml-connector translates Shopify GraphQL queries and mutations into order and customer records, and parses the response to extract the relevant fields. For Epicor, it uses OData $filter on UpdatedOn to retrieve changed records since the last sync, handles the two-step write pattern that Epicor requires (GetNewXxx followed by UpdateMaster), and includes the mandatory Company segment in all API URLs.
- Does the integration use Shopify webhooks or polling for order events?
- Shopify sends webhooks for orders and customers, which ml-connector processes immediately after validating the X-Shopify-Webhook-Id signature. Epicor Kinetic has no native outbound webhooks, so ml-connector polls Epicor OData endpoints on a schedule to retrieve inventory and customer changes. The combination gives near-real-time order processing while keeping customer and inventory data synchronized.
- How does the integration handle authentication and token refresh?
- Shopify authentication uses long-lived OAuth2 offline tokens (prefix shpat_) that do not expire. Epicor Kinetic uses OAuth2 client credentials (cloud) or Token Resource Service (on-premise), with bearer tokens that expire in approximately one hour. ml-connector stores both credential sets encrypted and refreshes Epicor tokens transparently when a call returns 401, so authentication failures do not interrupt the sync.
Related integrations
More Epicor Kinetic integrations
Other systems that connect to Shopify
Connect Epicor Kinetic and Shopify
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started