Skip to main content

Shopify

Our Shopify integration allows you to sync orders, products and inventory with as many Shopify stores as you like.

Configuring the integration

To configure the Shopify integration, you will need to create a custom app in your Shopify admin and copy the API credentials to Endless. An Endless Admin can help you with this if you'd prefer. To get a general overview of how Shopify's custom app system works, please visit https://help.shopify.com/en/manual/apps/app-types/custom-apps

Permissions needed for Endless Commerce to interact with Shopify

The private app that you create will need to have the following permissions selected:

Customers

  • write_customers
  • read_customers

Assigned fulfillment orders

  • write_assigned_fulfillment_orders
  • read_assigned_fulfillment_orders

Fulfillments

  • write_fulfillments
  • read_fulfillments

Inventory

  • write_inventory
  • read_inventory

Locations

  • write_locations
  • read_locations

Merchant managed fulfillment orders

  • read_merchant_managed_fulfillment_orders
  • write_merchant_managed_fulfillment_orders

Orders

  • write_orders
  • read_orders

Products

  • write_products
  • read_products

Third party fulfillment orders

  • write_third_party_fulfillment_orders
  • read_third_party_fulfillment_orders

Importing products from Shopify

If you have an integration configured with Shopify, you can run a one time product import action. This will import all of your Shopify product data into Endless. To run this bulk import, navigate to Integrations and use the actions menu.

How the import tool works?

The Shopify product import tool processes each product variant as a separate product in Endless. For each variant, the following rules apply:

  • Each variant becomes its own product in Endless
  • The product name is constructed by combining the Shopify product title with the variant title
  • Every variant must have a unique SKU assigned in Shopify to be imported
  • If a variant is missing a SKU, it will be skipped during import

Shopify Product variants with the following attributes will also be skipped during import:

  • Gift cards
  • Shopify Product variants that do not require shipping
  • Shopify Product variants with a Draft or Archive status.
  • Shopify Product variants that meet the skip_by_tag or skip_by_type criteria as entered through the app.

Understanding which data fields are mapped

Which fields are populated

When products are imported from Shopify into Endless, the following fields are populated:

FieldDescriptionSource
product_idUnique identifier for the productGenerated UUID
nameProduct titleShopify product title
brand_idBrand identifierFrom Shopify integration settings
skuStock keeping unitFrom Shopify variant
upcUniversal product codeFrom Shopify barcode
priceProduct priceFrom Shopify variant price
statusProduct statusSet to 'active'
weightProduct weightConverted from Shopify's weight measurement
product_typeType of productFrom Shopify product type
descriptionProduct descriptionFrom Shopify product's HTML description
sourceSource of the productSet to 'SHOPIFY'
source_idSource system identifierShopify variant ID
source_updated_atLast update timestampShopify variant's updated timestamp
supplierProduct supplierFrom Shopify product vendor

Product images

Product images including featured image from Shopify

Fields Not Populated

The following Endless product fields are explicitly set to nil or false during import:

length, width, height, parent, size, style, color, inner_pack (set to false), master_carton (set to false), pallet (set to false), customs_data, inner_pack_data, master_carton_data, pallet_data, bullet_points, shipping_data, categories

Inventory Data

After products have been imported, the tool will

  • Initialize inventory for each location found in Shopify
  • Track physical quantity available at each location
  • Create an inventory item with a generated UUID

Additional Import Details

Products are imported in batches of 50 at a time. If a last import timestamp exists in the integration logs, only products created after that timestamp will be imported. The import process is idempotent - existing products with the same SKU will be skipped.

  1. Duplicate Prevention: The system checks for duplicate SKUs before importing
  2. Timestamp Tracking: Updates the last import and sync timestamps in the Shopify integration settings
  3. Warehouse Management: Creates warehouses if they don't exist for Shopify locations
  4. External Data: Sets up external product data to maintain the connection with Shopify

Importing a single product

You can also import a single product at a time. To import a single product, open the integration and use the Import Product action. You will be prompted to enter the product ID and should use the product ID that is found in the URL of your Shopify admin.

Processing Shopify Orders

Endless provides a robust system for processing orders from Shopify through a combination of real-time webhooks and scheduled reconciliation jobs. This dual approach ensures that no orders are missed while maintaining system reliability.

How Order Processing Works

Real-time Webhook Processing

When an order is created or updated in Shopify, our system receives webhooks for the following events:

  • ORDERS_CREATE: When a new order is created
  • ORDERS_PAID: When an order is paid
  • ORDERS_FULFILLED: When an order is fulfilled
  • ORDERS_UPDATED: When an order is updated

Each webhook is processed through the following steps:

  1. Webhook Verification: The system verifies the webhook's authenticity using Shopify's HMAC signature
  2. Order Processing: Based on the webhook type, the system:
    • Creates new orders
    • Updates order status
    • Processes payments
    • Handles fulfillment updates

Scheduled Reconciliation

To ensure no orders are missed, we run an hourly check to check for new orders. This job:

  • Includes safeguards against duplicate processing
  • Handles pagination for large order volumes