N Nexus Docs
Marketplace Adapters

Shopify Adapter

NexusCommerce integration with the Shopify Admin API for storefront and channel management.

Overview

The Shopify adapter connects NexusCommerce to the Shopify Admin API, enabling bidirectional sync of products, inventory, and orders between NexusCommerce and a Shopify storefront. This adapter is designed for sellers who use Shopify as their primary storefront and NexusCommerce for centralized multi-channel management.

Unlike marketplace adapters (Amazon, eBay), the Shopify adapter treats Shopify as a storefront channel, not a third-party marketplace. Products pushed to Shopify appear in your own branded store.

The adapter targets the Shopify Admin API version 2024-10 and uses GraphQL for bulk operations and REST for real-time reads/writes.

Key Concepts

Custom App — NexusCommerce connects to Shopify via a custom app installed on your store. Custom apps use scoped access tokens instead of OAuth user flows, making them stable and non-expiring.

Shopify Product vs. Variant — A Shopify Product is a top-level entity with one or more Variants. NexusCommerce maps its products to Shopify Products and its SKUs to Shopify Variants. A single NexusCommerce product with multiple variants creates one Shopify Product with multiple Variants.

Location — Shopify supports multiple fulfillment locations. Inventory levels are tracked per location. NexusCommerce syncs inventory to a configured primary location by default, with optional multi-location support.

Fulfillment Order — Shopify wraps each order in a Fulfillment Order structure. The adapter uses the Fulfillment Order API to mark shipments, which is required for orders processed after Shopify's transition away from the legacy Fulfillment API.

Getting Started

Required Credentials

FieldDescription
Shop DomainYour store's .myshopify.com domain (e.g., your-store.myshopify.com)
Admin API Access TokenGenerated when creating the custom app

Creating the Custom App

  1. In your Shopify admin, go to Settings > Apps and sales channels
  2. Click Develop apps (enable developer preview if prompted)
  3. Click Create an app and name it NexusCommerce
  4. Under Configuration, click Configure Admin API scopes
  5. Grant these scopes:
ScopePurpose
read_products, write_productsSync product catalog
read_inventory, write_inventoryManage inventory levels
read_orders, write_ordersSync and update orders
read_fulfillments, write_fulfillmentsSubmit shipment confirmations
read_locationsRead fulfillment location IDs
read_shippingRead shipping zones and rates
  1. Click Save then Install app
  2. Copy the Admin API access token — it is shown only once

Entering Credentials in NexusCommerce

Navigate to Connections > Add Connection > Shopify, enter the shop domain and access token, then click Test Connection. The test verifies the token and returns the shop name and plan.

Synced Data

Data TypeDirectionShopify APINotes
ProductsRead / WriteAdmin REST /productsCreates/updates products and variants
Product ImagesRead / WriteAdmin REST /products/{id}/imagesSyncs up to 10 images per product
CollectionsReadAdmin REST /custom_collectionsReads collection assignments
InventoryRead / WriteAdmin REST /inventory_levelsPer-location inventory levels
OrdersReadAdmin REST /ordersAll financial and fulfillment statuses
FulfillmentsWriteAdmin GraphQL fulfillmentCreateMarks orders as shipped with tracking
CustomersReadAdmin REST /customersOrder customer data
MetafieldsRead / WriteAdmin REST /metafieldsCustom product attributes

Configuration Options

KeyTypeDefaultDescription
shop_domainstringrequired.myshopify.com domain
primary_location_idstringauto-detectedShopify location ID for inventory sync
sync_interval_minutesinteger30Polling frequency
order_lookback_daysinteger30Historical order import window
inventory_buffer_pctinteger0Safety stock reserve
publish_statusstringactiveDefault product status on Shopify (active / draft)
sync_collectionsbooleanfalseMirror NexusCommerce categories to Shopify collections
multi_locationbooleanfalseSync inventory to all locations instead of primary only

Supported Features

FeatureSupportedNotes
Product syncYesFull bidirectional sync
Variant syncYesMaps NexusCommerce SKUs to Shopify Variants
Image syncYesUp to 10 images per product
Inventory updatesYesPrimary location by default
Multi-location inventoryYesEnable multi_location config option
Order syncYesREST polling + webhooks
Shipment confirmationYesFulfillment Order API
MetafieldsYesCustom attributes stored as metafields
WebhooksYesReal-time order and product events
Shopify MarketsNoMulti-currency pricing requires Shopify Plus
POS ordersYesSynced alongside online orders
Draft ordersNoExcluded from sync by default

Webhooks

The Shopify adapter registers webhooks automatically on connection setup. NexusCommerce subscribes to:

TopicTrigger
orders/createNew order placed
orders/updatedOrder status changes
orders/cancelledOrder cancelled
products/updateProduct edited in Shopify admin
inventory_levels/updateInventory changed in Shopify
fulfillments/createFulfillment created outside NexusCommerce

Webhook payloads are verified using HMAC-SHA256 with the X-Shopify-Hmac-SHA256 header and the shared secret from the custom app.

Webhook URL format:

https://your-nexuscommerce-domain.com/api/webhooks/shopify/<connection-id>

Rate Limits & Quotas

Shopify uses a leaky bucket rate limiting model. Standard (non-Plus) limits:

Limit TypeValue
REST API bucket size40 requests
REST API refill rate2 req/s
GraphQL query cost1,000 points/s
Bulk operation concurrency1 active operation at a time

The adapter reads the X-Shopify-Shop-Api-Call-Limit header and throttles when the bucket is above 80% capacity. For large catalog syncs, the adapter switches to GraphQL bulk operations which bypass per-request rate limits.

Shopify Plus stores have higher limits (500 REST bucket, 10 req/s). No configuration is needed — the adapter detects the plan from the shop response.

Troubleshooting

401 Unauthorized — Invalid API key or access token

Access tokens for custom apps do not expire, but they are invalidated if the app is uninstalled and reinstalled. Go to Connections > Edit Credentials and paste the new access token from the reinstalled app.

Products syncing but not appearing on storefront

Check the publish_status config option. If set to draft, products are created but not visible. Change to active and re-sync, or manually publish from the Shopify admin.

Inventory not updating at correct location

The primary_location_id may be pointing to a location that is not the default fulfillment location. Go to Shopify admin > Settings > Locations to find the correct location ID, then update the connection config.

Duplicate products appearing after sync

This happens when the external ID mapping is lost (e.g., after a connection was deleted and recreated). NexusCommerce matches products by SKU on re-sync. Ensure SKUs are unique and consistent across both systems before re-connecting.

Webhooks not firing

Verify that NexusCommerce's webhook endpoint is reachable from the internet. Shopify requires the endpoint to return 200 OK within 5 seconds. Check Shopify admin > Settings > Notifications > Webhooks for delivery failure logs.