Skip to main content
shopify icon

Shopify Connector

SourceAPI DocsAPI ChangelogConnector Changelog

Description

Shopify is a multinational e-commerce company. They offer a subscription-based software that allows anyone to set up an online store and sell their products. This component allows managing the products and customers connected to a Shopify account.

API Documentation

This component was built using the Shopify GraphQL Admin API Reference.

Example Shopify Integration

An example Shopify integration is available in the GitHub examples repository. Import the integration definition to try it out.

Example Integration

The example integration consists of four flows that demonstrate how to interact with the Shopify API:

  • Initial Product Sync runs when an instance of the integration is deployed. It loops over Shopify's paginated API, fetching pages of products and sending all products to an "Acme API" (replace with the desired API endpoint).

  • Product Update Listener subscribes to product/create, product/update and product/delete events from Shopify. When a product is created, updated, or deleted in Shopify, the integration receives a webhook request from Shopify and sends the create, update, or delete to the "Acme API".

  • List Inventory Levels fetches inventory levels for all products in Shopify at a particular location specified as part of the deployment process. The flow is triggered synchronously, so the caller receives a response with a JSON body containing the inventory levels.

  • Create New Product is a flow that creates a new product in Shopify. To invoke the flow, send a POST request to the flow's webhook endpoint with a format that looks like this:

    {
    "name": "Green T-Shirt",
    "description": "A green t-shirt",
    "product_type": "T-Shirt",
    "vendor": "Acme"
    }

Connections

Access Token

key: adminApiAccessToken

An admin API access token from an admin-created custom app can be used for testing purposes during integration development.

Admin API access tokens are recommended for testing only. For production integrations, use OAuth 2.0 to allow users to authenticate with their own credentials.

New Admin-Created Custom Apps Can No Longer Be Created

Shopify stopped allowing new admin-created custom apps on January 1, 2026. The Develop apps flow in a store's settings can no longer create one. Existing admin-created custom apps are unaffected and their tokens continue to work.

To create a new app, use the Dev Dashboard or the Shopify CLI and authenticate with the OAuth 2.0 connection instead.

Prerequisites

  • A Shopify store with an existing admin-created custom app (for testing purposes)
  • A staff or collaborator account with the Develop apps permission

Setup Steps

To copy the admin API access token from an existing custom app:

  1. Log in to the Shopify admin dashboard.
  2. Navigate to Apps > Develop apps.
  3. Click the name of the app.
  4. Navigate to the API credentials tab.
  5. Copy the Admin API access token.

The token is shown only once, when it is generated, so it may no longer be retrievable. Shopify does not support rotating the token in place: generating a new one means uninstalling and reinstalling the app from the Shopify admin, which keeps the app itself intact but disrupts its requests and webhooks until the new token is entered here.

The token will have a format similar to shpat_00000000000000000000000000000000.

Refer to Shopify's admin-created custom apps documentation for more information.

Configure the Connection

Create a connection of type Access Token and configure the following fields:

  • Enter the Admin API Access Token into the connection configuration.
  • Enter the Host (the Shopify domain without https://, e.g., example-store.myshopify.com).
  • Optionally set the API Version. It defaults to the version this component ships with, currently 2026-07. Refer to Shopify API versioning for the versions Shopify currently accepts and how long each remains available.
Production Use

Admin API access tokens are tied to admin-created custom apps and recommended for testing only. For production integrations, OAuth 2.0 authentication provides a better user experience and allows users to authenticate with their own credentials.

InputNotesExample
Admin API Access Token

Generate from the 'API credentials' tab of an admin-created custom app. Learn more at Shopify admin-created custom apps.

shpat_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
API Version

Shopify API version to use. See Shopify API versioning for available versions.

2026-07
Host

The domain of the Shopify store without https:// (e.g., my-store.myshopify.com).

my-store.myshopify.com

OAuth 2.0 (Deprecated)

key: oauth2
InputNotesExample
API Version

Shopify API version to use. See Shopify API versioning for available versions.

2026-07
Authorize URL

The OAuth 2.0 Authorization URL for Shopify.

https://YOUR-SHOPIFY-DOMAIN.myshopify.com/admin/oauth/authorize
Client ID (API Key)

The Client ID (also called API Key) from the Shopify app credentials.

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
Client Secret (API Secret)

The Client Secret (also called API Secret) from the Shopify app credentials.

shpss_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
Host

The domain of the Shopify store without https:// (e.g., my-store.myshopify.com).

my-store.myshopify.com
Scopes

Space-separated list of OAuth permission scopes. See Shopify access scopes for all available scopes.

read_customers read_draft_orders read_fulfillments read_orders
Token URL

The OAuth 2.0 Token URL for Shopify.

https://YOUR-SHOPIFY-DOMAIN.myshopify.com/admin/oauth/access_token?expiring=1

OAuth 2.0

key: oauth2-dynamic-inputs

Shopify uses OAuth 2.0 for app authentication. This connection type simplifies configuration by using a single Shop Name input to automatically construct the authorization and token URLs.

Prerequisites

Legacy Custom App Deprecation

As of January 1, 2026, merchants can no longer create new legacy custom apps. Existing apps are not affected. Partners can still create new custom apps and transfer stores to merchants, but once transferred, new custom app creation is disabled on the store. Use the Partner Dashboard or Shopify CLI to create apps going forward.

Creating a Shopify App

Choose one of the following methods to create a Shopify app.

Create App from Dev Dashboard

For backend-focused apps (API utilities, webhook handlers, sync jobs), create an app directly through the Dev Dashboard without scaffolding code.

  1. Log in to the Dev Dashboard, or navigate from the Partner Dashboard via App Distribution > Visit Dev Dashboard.

  2. Click Create app.

  3. Select Create app manually and provide an app name.

  4. Navigate to the Configuration section of the created app.

  5. Under App URL, enter a valid URL (this is required but can be a placeholder).

  6. Under Allowed redirection URL(s), enter:

    https://oauth2.prismatic.io/callback
  7. Click Save.

Refer to the Dev Dashboard documentation for more details.

Create App with Shopify CLI

The Shopify CLI scaffolds a complete app project with best practices built in. This method is suitable for apps that need embedded UI, checkout extensions, or full-stack capabilities.

  1. Install the Shopify CLI if not already installed.
  2. Navigate to the desired project directory and run:
    shopify app init
  3. When prompted, provide an app name and select a template (the React Router template is recommended for most use cases).
  4. Navigate to the new app directory and start the development server:
    cd my-new-app
    shopify app dev
  5. The CLI prompts for login to a developer account, creates the app in the Dev Dashboard, and establishes a connection to a dev store.
  6. Once the dev server is running, press p to open the preview URL and install the app on the dev store.

Refer to Shopify's scaffold app documentation for detailed instructions.

Retrieve App Credentials

Regardless of the creation method, retrieve the OAuth credentials:

  1. Open the app in the Dev Dashboard.
  2. Navigate to the Configuration section.
  3. Scroll to the Client credentials section.
  4. Copy the Client ID (labeled as API key in Shopify).
  5. Copy the Client secret (labeled as API secret key in Shopify).

Configure the Connection

Create a connection of type OAuth 2.0 and configure the following fields:

  • Client ID (API Key): Enter the Client ID copied from the Shopify app credentials (Shopify labels this as "API key").
  • Client Secret (API Secret): Enter the Client secret copied from the Shopify app credentials (Shopify labels this as "API secret key").
  • Shop Name: Enter the Shopify domain without .myshopify.com (e.g., example-store).
  • Scopes: Configure based on the required permissions. Default scopes include:
    read_customers read_draft_orders read_fulfillments read_inventory
    read_orders read_products read_locations write_customers
    write_draft_orders write_fulfillments write_inventory
    write_orders write_products write_locations
    Refer to Shopify's access scopes documentation for a complete list of available scopes.
  • API Version (optional): Specify the Shopify API version to use. Defaults to the version this component ships with, currently 2026-07. Shopify keeps each version available for at least 12 months, so refer to Shopify API versioning for the versions it currently accepts and how long each remains available.

Save the integration to connect and authenticate to Shopify.

Shop Name Format

The Shop Name should be the subdomain portion of the Shopify store URL. For example, if the store URL is example-store.myshopify.com, enter example-store as the Shop Name.

App Distribution

Shopify vets all apps intended for distribution to multiple merchants through a formal App Store review to ensure quality and security standards. The distribution type (custom or public) is chosen at app creation and is permanent. Understanding the difference upfront avoids having to rebuild the app later.

Shopify app distribution determines which merchants can install the app and is a permanent, non-reversible choice.

Custom apps are installed on a single Shopify store, on multiple stores belonging to the same Plus organization, or on transfer-disabled development stores. They do not appear in the Shopify App Store and cannot be installed by other merchants, which makes them the appropriate choice for single-merchant integrations. New custom apps are created through the Dev Dashboard or the Shopify CLI; the older path of creating one directly in a merchant's Shopify admin was closed on January 1, 2026.

Public apps are created through the Shopify Partners program and can be distributed to multiple merchants. Public apps must be submitted for review and listed in the Shopify App Store before other merchants can install them.

No Unlisted Distribution

Shopify offers no option to distribute an app to many merchants without an App Store listing. For multi-merchant distribution, create a public app and submit it for App Store review.

For information on the App Store review process, refer to Shopify's app distribution documentation.

InputNotesExample
API Version

Shopify API version to use. See Shopify API versioning for available versions.

2026-07
Authorize URL

The OAuth 2.0 Authorization URL for Shopify.

https://{{#domain}}.myshopify.com/admin/oauth/authorize/
Client ID (API Key)

The Client ID (also called API Key) from the Shopify app credentials.

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
Client Secret (API Secret)

The Client Secret (also called API Secret) from the Shopify app credentials.

shpss_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
Shop Name

The Shopify shop name without the .myshopify.com suffix (e.g., my-store).

my-store
Host

The domain of the Shopify store without the https:// prefix.

{{#domain}}.myshopify.com
Scopes

Space-separated list of OAuth permission scopes. See Shopify access scopes for all available scopes.

read_customers read_draft_orders read_fulfillments read_orders
Token URL

The OAuth 2.0 Token URL for Shopify.

https://{{#domain}}.myshopify.com/admin/oauth/access_token?expiring=1

Triggers

Event Topic Subscription

Receive event notifications from Shopify. Automatically creates and manages a webhook subscription for selected event topics when the instance is deployed, and removes the subscription when the instance is deleted. | key: eventTopicWebhookGql

InputNotesExample
Secret Key

The Shopify app's client secret, viewable from the Partner Dashboard.

Connection

The Shopify connection to use.

Webhook Topic

The topic for the webhook. This is the event that will trigger the webhook.

APP_PURCHASES_ONE_TIME_UPDATE

The Event Topic Webhook trigger manages Shopify webhook subscriptions for an instance. Unlike manual webhook configuration, this trigger handles the entire webhook lifecycle automatically using the Shopify GraphQL API.

When the trigger is used in a flow:

  • On Instance Deploy: The trigger automatically creates webhook subscriptions in the Shopify store for the selected event topics (customer creation, order updates, product changes, etc.). The webhook callback URL is set to the instance's unique webhook URL. If subscriptions for the same topics and URL already exist, they are reused to prevent duplication.
  • On Instance Deletion: The trigger automatically removes webhook subscriptions from the Shopify store that match the instance's webhook URL. This ensures no orphaned webhook configurations remain after instance cleanup.

Configuration Requirements

This trigger requires:

  • Connection: A Shopify connection with appropriate API access permissions
  • Secret Key: The Shopify app's client secret for HMAC signature verification, viewable from the app's Configuration section in the Shopify Partner Dashboard
  • Webhook Topics: One or more event types to subscribe to (see Event Topics below)

Signature Verification

The trigger includes built-in HMAC-SHA256 signature verification to ensure webhook requests are authentic. When a webhook is received:

  1. The trigger extracts the X-Shopify-Hmac-SHA256 header from the request
  2. Computes the expected signature using the configured Secret Key
  3. Compares the computed signature with the received signature
  4. Rejects requests with mismatched signatures

The signature is computed over the raw request body, base64-encoded:

const crypto = require("node:crypto");

const signature = crypto
.createHmac("sha256", secretKey) // the app's client secret
.update(rawRequestBody, "utf8") // the raw body, before JSON parsing
.digest("base64"); // Shopify sends base64, not hex

The computed value is compared against the header using a constant-time comparison, so a mismatch takes the same time to detect regardless of where the two values first differ.

The trigger automatically returns a 200 OK response with the parsed JSON body for verified webhooks.

Event Topics Configuration

Select which Shopify events should trigger the flow.

Available Event Topics (67)

Customer Events:

  • CUSTOMERS_CREATE, CUSTOMERS_UPDATE, CUSTOMERS_DELETE
  • CUSTOMERS_ENABLE, CUSTOMERS_DISABLE, CUSTOMERS_MERGE
  • CUSTOMERS_EMAIL_MARKETING_CONSENT_UPDATE, CUSTOMERS_MARKETING_CONSENT_UPDATE

Order Events:

  • ORDERS_CREATE, ORDERS_UPDATED, ORDERS_DELETE, ORDERS_CANCELLED
  • ORDERS_FULFILLED, ORDERS_PARTIALLY_FULFILLED, ORDERS_PAID, ORDERS_EDITED
  • ORDERS_RISK_ASSESSMENT_CHANGED, ORDERS_SHOPIFY_PROTECT_ELIGIBILITY_CHANGED

Product Events:

  • PRODUCTS_CREATE, PRODUCTS_UPDATE, PRODUCTS_DELETE
  • PRODUCT_LISTINGS_ADD, PRODUCT_LISTINGS_REMOVE, PRODUCT_LISTINGS_UPDATE
  • PRODUCT_PUBLICATIONS_CREATE, PRODUCT_PUBLICATIONS_UPDATE, PRODUCT_PUBLICATIONS_DELETE

Fulfillment Events:

  • FULFILLMENTS_CREATE, FULFILLMENTS_UPDATE
  • FULFILLMENT_ORDERS_CANCELLED, FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_ACCEPTED
  • FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_REJECTED, FULFILLMENT_ORDERS_HOLD_RELEASED

Inventory Events:

  • INVENTORY_ITEMS_CREATE, INVENTORY_ITEMS_UPDATE, INVENTORY_ITEMS_DELETE
  • INVENTORY_LEVELS_CONNECT, INVENTORY_LEVELS_DISCONNECT, INVENTORY_LEVELS_UPDATE

Collection Events:

  • COLLECTIONS_CREATE, COLLECTIONS_UPDATE, COLLECTIONS_DELETE
  • COLLECTION_LISTINGS_ADD, COLLECTION_LISTINGS_REMOVE, COLLECTION_LISTINGS_UPDATE

Company Events (B2B):

  • COMPANIES_CREATE, COMPANIES_UPDATE, COMPANIES_DELETE
  • COMPANY_CONTACTS_CREATE, COMPANY_CONTACTS_UPDATE, COMPANY_CONTACTS_DELETE
  • COMPANY_LOCATIONS_CREATE, COMPANY_LOCATIONS_UPDATE, COMPANY_LOCATIONS_DELETE

Draft Order Events:

  • DRAFT_ORDERS_CREATE, DRAFT_ORDERS_UPDATE, DRAFT_ORDERS_DELETE

Other Events:

  • App lifecycle: APP_UNINSTALLED, APP_SUBSCRIPTIONS_UPDATE, APP_SCOPES_UPDATE
  • Cart: CARTS_CREATE, CARTS_UPDATE
  • Checkout: CHECKOUTS_CREATE, CHECKOUTS_UPDATE, CHECKOUTS_DELETE
  • Disputes: DISPUTES_CREATE, DISPUTES_UPDATE
  • Refunds: REFUNDS_CREATE
  • Shop: SHOP_UPDATE
  • Themes: THEMES_CREATE, THEMES_UPDATE, THEMES_DELETE, THEMES_PUBLISH
  • Subscriptions: SUBSCRIPTION_CONTRACTS_CREATE, SUBSCRIPTION_CONTRACTS_UPDATE, SUBSCRIPTION_BILLING_ATTEMPTS_SUCCESS

A complete list of webhook topics and their payloads is available in the Shopify Webhook Topics documentation.

Webhook Payload Example

When a webhook is received, the trigger provides the parsed JSON body.

Example: CUSTOMERS_CREATE Event
{
"id": 5940139491234,
"email": "john.doe@example.com",
"created_at": "2024-11-10T10:30:00-05:00",
"updated_at": "2024-11-10T10:30:00-05:00",
"first_name": "John",
"last_name": "Doe",
"phone": "+18005555454",
"state": "enabled",
"tags": "VIP",
"note": null,
"verified_email": true,
"multipass_identifier": null,
"tax_exempt": false,
"accepts_marketing": true,
"addresses": [],
"admin_graphql_api_id": "gid://shopify/Customer/5940139491234"
}

New and Updated Customers

Retrieves existing and ongoing customer changes from Shopify. Load history once, check for changes on a schedule, or both. | key: customersPollingTrigger

InputNotesExample
Look-back Date

The date the initial sync starts from, in YYYY-MM-DD format. Cannot be a future date. Leave empty to start from the first recurrence with no backfill. When set, the initial sync reports every record updated on or after this date.

2026-01-01
Connection

The Shopify connection to use.

Retrieves existing and ongoing customer changes from a Shopify store. Load history once, check for changes on a schedule, or both.

How It Works

The trigger operates by:

  1. Running on the configured schedule (e.g., every 5 minutes)
  2. Querying the Shopify GraphQL API for customers whose updated_at falls inside the window this round covers, sorted by updated_at so the filter and the sort key match
  3. Categorizing customers as "created" or "updated" by comparing their createdAt timestamp against the start of that window, which stays frozen for the whole window so one customer is classified the same way on every page
  4. Reading a single page per round and remembering where that page ended, rather than holding an entire window in memory at once
  5. Advancing its committed position only once a window is fully drained, so an interrupted drain resumes instead of skipping what it had not reported yet

If more customers changed than one page holds, the trigger continues from where the page ended instead of dropping the rest. With batching enabled it drains the remaining pages inside the same recurrence; without batching it continues on each following scheduled recurrence.

The first recurrence

  • Look-back Date empty: the trigger records the current time and reports nothing. Incremental polling begins on the next recurrence.
  • Look-back Date set: the trigger begins a one-time initial sync covering every customer updated on or after that date, then hands off to incremental polling. An instance that already carries a committed position is never sent back through an initial sync, so setting the date on a running instance does not replay its history.

The initial sync seeds each customer exactly once. The window it covers is half-open, so a customer whose updated_at falls on the window's upper bound belongs to the next window rather than this one, and no customer is reported twice across the handoff. That upper bound is fixed at the moment the sync begins and does not move as the sync progresses, so a sync spanning several recurrences covers the range it started with rather than growing to follow the clock.

No field in the payload marks the handoff from the initial sync to incremental polling. A downstream step cannot distinguish a backfilled customer from one picked up by ordinary polling, and does not need to: the shape is identical in both phases.

Batching

Batching is enabled per flow on this trigger. Once enabled, each changed record is dispatched as its own execution, or grouped by the configured batch size. Batch size and the number of batches dispatched concurrently can both be overridden per instance. Raising concurrency increases the request volume sent to Shopify.

To turn it on, select the flow's trigger, open the Flow control tab, and switch on Enable Batching. Under Batch Size, keep Trigger default to use the size this trigger ships with, or choose Custom batch size to set a specific size. Batch Concurrency is optional; leave it blank to use the limit this trigger ships with, which dispatches one batch at a time.

Enabling batching changes the payload a downstream step receives. With batching off a step reads data.created and data.updated; with batching on those arrays do not exist and data is a single changeType/record item, or an array of them (see Returned Data). Any step reading the older shape must be updated before batching is turned on. Because batching is per flow, this affects only that flow, not the component or other flows using the same trigger.

Returned Data

Fields shown are representative. The full response object includes additional properties.

What arrives in data depends on whether batching is enabled on the flow.

Without batching, data is a single object holding the customers categorized by change type.

Example Payload: batching disabled
{
"data": {
"created": [
{
"id": "gid://shopify/Customer/5940139491234",
"displayName": "John Doe",
"email": "john.doe@example.com",
"phone": "+18005555454",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z",
"state": "ENABLED",
"tags": ["VIP"]
}
],
"updated": [
{
"id": "gid://shopify/Customer/5940139491235",
"displayName": "Jane Smith",
"email": "jane.smith@example.com",
"phone": "+18005555455",
"createdAt": "2024-11-08T09:00:00Z",
"updatedAt": "2024-11-10T14:22:00Z",
"state": "ENABLED",
"tags": []
}
]
}
}

With batching enabled, data holds one slice of the batch instead of those two arrays. Every customer becomes its own item, shaped as changeType plus record. changeType is created or updated, and record is the polled customer.

With a batch size of 1, data is a single item.

Example Payload: batching enabled, batch size 1
{
"data": {
"changeType": "created",
"record": {
"id": "gid://shopify/Customer/5940139491234",
"displayName": "John Doe",
"email": "john.doe@example.com",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z",
"state": "ENABLED"
}
}
}

With a batch size greater than 1, data is an array of those items.

Example Payload: batching enabled, batch size greater than 1
{
"data": [
{
"changeType": "created",
"record": {
"id": "gid://shopify/Customer/5940139491234",
"displayName": "John Doe",
"email": "john.doe@example.com",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z",
"state": "ENABLED"
}
},
{
"changeType": "updated",
"record": {
"id": "gid://shopify/Customer/5940139491235",
"displayName": "Jane Smith",
"email": "jane.smith@example.com",
"createdAt": "2024-11-08T09:00:00Z",
"updatedAt": "2024-11-10T14:22:00Z",
"state": "ENABLED"
}
}
]
}

New and Updated Orders

Retrieves existing and ongoing order changes from Shopify. Load history once, check for changes on a schedule, or both. | key: ordersPollingTrigger

InputNotesExample
Look-back Date

The date the initial sync starts from, in YYYY-MM-DD format. Cannot be a future date. Leave empty to start from the first recurrence with no backfill. When set, the initial sync reports every record updated on or after this date.

2026-01-01
Connection

The Shopify connection to use.

Retrieves existing and ongoing order changes from a Shopify store. Load history once, check for changes on a schedule, or both.

How It Works

The trigger operates by:

  1. Running on the configured schedule (e.g., every 5 minutes)
  2. Querying the Shopify GraphQL API for orders whose updated_at falls inside the window this round covers, sorted by updated_at so the filter and the sort key match
  3. Categorizing orders as "created" or "updated" by comparing their createdAt timestamp against the start of that window, which stays frozen for the whole window so one order is classified the same way on every page
  4. Reading a single page per round and remembering where that page ended, rather than holding an entire window in memory at once
  5. Advancing its committed position only once a window is fully drained, so an interrupted drain resumes instead of skipping what it had not reported yet

If more orders changed than one page holds, the trigger continues from where the page ended instead of dropping the rest. With batching enabled it drains the remaining pages inside the same recurrence; without batching it continues on each following scheduled recurrence.

The first recurrence

  • Look-back Date empty: the trigger records the current time and reports nothing. Incremental polling begins on the next recurrence.
  • Look-back Date set: the trigger begins a one-time initial sync covering every order updated on or after that date, then hands off to incremental polling. An instance that already carries a committed position is never sent back through an initial sync, so setting the date on a running instance does not replay its history.

The initial sync seeds each order exactly once. The window it covers is half-open, so a order whose updated_at falls on the window's upper bound belongs to the next window rather than this one, and no order is reported twice across the handoff. That upper bound is fixed at the moment the sync begins and does not move as the sync progresses, so a sync spanning several recurrences covers the range it started with rather than growing to follow the clock.

No field in the payload marks the handoff from the initial sync to incremental polling. A downstream step cannot distinguish a backfilled order from one picked up by ordinary polling, and does not need to: the shape is identical in both phases.

Batching

Batching is enabled per flow on this trigger. Once enabled, each changed record is dispatched as its own execution, or grouped by the configured batch size. Batch size and the number of batches dispatched concurrently can both be overridden per instance. Raising concurrency increases the request volume sent to Shopify.

To turn it on, select the flow's trigger, open the Flow control tab, and switch on Enable Batching. Under Batch Size, keep Trigger default to use the size this trigger ships with, or choose Custom batch size to set a specific size. Batch Concurrency is optional; leave it blank to use the limit this trigger ships with, which dispatches one batch at a time.

Enabling batching changes the payload a downstream step receives. With batching off a step reads data.created and data.updated; with batching on those arrays do not exist and data is a single changeType/record item, or an array of them (see Returned Data). Any step reading the older shape must be updated before batching is turned on. Because batching is per flow, this affects only that flow, not the component or other flows using the same trigger.

Returned Data

Fields shown are representative. The full response object includes additional properties.

What arrives in data depends on whether batching is enabled on the flow.

Without batching, data is a single object holding the orders categorized by change type.

Example Payload: batching disabled
{
"data": {
"created": [
{
"id": "gid://shopify/Order/10079785100",
"name": "#1001",
"email": "customer@example.com",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z",
"displayFinancialStatus": "PAID",
"displayFulfillmentStatus": "UNFULFILLED",
"totalPriceSet": {
"shopMoney": {
"amount": "199.99",
"currencyCode": "USD"
}
}
}
],
"updated": [
{
"id": "gid://shopify/Order/10079785101",
"name": "#1002",
"email": "customer2@example.com",
"createdAt": "2024-11-08T09:00:00Z",
"updatedAt": "2024-11-10T14:22:00Z",
"displayFinancialStatus": "PAID",
"displayFulfillmentStatus": "FULFILLED",
"totalPriceSet": {
"shopMoney": {
"amount": "299.99",
"currencyCode": "USD"
}
}
}
]
}
}

With batching enabled, data holds one slice of the batch instead of those two arrays. Every order becomes its own item, shaped as changeType plus record. changeType is created or updated, and record is the polled order.

With a batch size of 1, data is a single item.

Example Payload: batching enabled, batch size 1
{
"data": {
"changeType": "created",
"record": {
"id": "gid://shopify/Order/10079785100",
"name": "#1001",
"email": "customer@example.com",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z",
"displayFinancialStatus": "PAID"
}
}
}

With a batch size greater than 1, data is an array of those items.

Example Payload: batching enabled, batch size greater than 1
{
"data": [
{
"changeType": "created",
"record": {
"id": "gid://shopify/Order/10079785100",
"name": "#1001",
"email": "customer@example.com",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z",
"displayFinancialStatus": "PAID"
}
},
{
"changeType": "updated",
"record": {
"id": "gid://shopify/Order/10079785101",
"name": "#1002",
"email": "customer2@example.com",
"createdAt": "2024-11-08T09:00:00Z",
"updatedAt": "2024-11-10T14:22:00Z",
"displayFinancialStatus": "PAID"
}
}
]
}

New and Updated Products

Retrieves existing and ongoing product changes from Shopify. Load history once, check for changes on a schedule, or both. | key: productsPollingTrigger

InputNotesExample
Look-back Date

The date the initial sync starts from, in YYYY-MM-DD format. Cannot be a future date. Leave empty to start from the first recurrence with no backfill. When set, the initial sync reports every record updated on or after this date.

2026-01-01
Connection

The Shopify connection to use.

Retrieves existing and ongoing product changes from a Shopify store. Load history once, check for changes on a schedule, or both.

How It Works

The trigger operates by:

  1. Running on the configured schedule (e.g., every 5 minutes)
  2. Querying the Shopify GraphQL API for products whose updated_at falls inside the window this round covers, sorted by updated_at so the filter and the sort key match
  3. Categorizing products as "created" or "updated" by comparing their createdAt timestamp against the start of that window, which stays frozen for the whole window so one product is classified the same way on every page
  4. Reading a single page per round and remembering where that page ended, rather than holding an entire window in memory at once
  5. Advancing its committed position only once a window is fully drained, so an interrupted drain resumes instead of skipping what it had not reported yet

If more products changed than one page holds, the trigger continues from where the page ended instead of dropping the rest. With batching enabled it drains the remaining pages inside the same recurrence; without batching it continues on each following scheduled recurrence.

The first recurrence

  • Look-back Date empty: the trigger records the current time and reports nothing. Incremental polling begins on the next recurrence.
  • Look-back Date set: the trigger begins a one-time initial sync covering every product updated on or after that date, then hands off to incremental polling. An instance that already carries a committed position is never sent back through an initial sync, so setting the date on a running instance does not replay its history.

The initial sync seeds each product exactly once. The window it covers is half-open, so a product whose updated_at falls on the window's upper bound belongs to the next window rather than this one, and no product is reported twice across the handoff. That upper bound is fixed at the moment the sync begins and does not move as the sync progresses, so a sync spanning several recurrences covers the range it started with rather than growing to follow the clock.

No field in the payload marks the handoff from the initial sync to incremental polling. A downstream step cannot distinguish a backfilled product from one picked up by ordinary polling, and does not need to: the shape is identical in both phases.

Batching

Batching is enabled per flow on this trigger. Once enabled, each changed record is dispatched as its own execution, or grouped by the configured batch size. Batch size and the number of batches dispatched concurrently can both be overridden per instance. Raising concurrency increases the request volume sent to Shopify.

To turn it on, select the flow's trigger, open the Flow control tab, and switch on Enable Batching. Under Batch Size, keep Trigger default to use the size this trigger ships with, or choose Custom batch size to set a specific size. Batch Concurrency is optional; leave it blank to use the limit this trigger ships with, which dispatches one batch at a time.

Enabling batching changes the payload a downstream step receives. With batching off a step reads data.created and data.updated; with batching on those arrays do not exist and data is a single changeType/record item, or an array of them (see Returned Data). Any step reading the older shape must be updated before batching is turned on. Because batching is per flow, this affects only that flow, not the component or other flows using the same trigger.

Returned Data

Fields shown are representative. The full response object includes additional properties.

What arrives in data depends on whether batching is enabled on the flow.

Without batching, data is a single object holding the products categorized by change type.

Example Payload: batching disabled
{
"data": {
"created": [
{
"id": "gid://shopify/Product/108828309",
"title": "Example Product",
"handle": "example-product",
"vendor": "Burton Inc.",
"productType": "T-shirt",
"status": "ACTIVE",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z",
"tags": ["Style", "New"],
"variants": {
"nodes": [
{
"id": "gid://shopify/ProductVariant/1070325177",
"price": "19.99",
"sku": "EXAMPLE-SKU"
}
]
}
}
],
"updated": [
{
"id": "gid://shopify/Product/108828310",
"title": "Updated Product",
"handle": "updated-product",
"vendor": "Acme Corp.",
"productType": "Shoes",
"status": "ACTIVE",
"createdAt": "2024-11-08T09:00:00Z",
"updatedAt": "2024-11-10T14:22:00Z",
"tags": ["Sale"],
"variants": {
"nodes": [
{
"id": "gid://shopify/ProductVariant/1070325178",
"price": "49.99",
"sku": "UPDATED-SKU"
}
]
}
}
]
}
}

With batching enabled, data holds one slice of the batch instead of those two arrays. Every product becomes its own item, shaped as changeType plus record. changeType is created or updated, and record is the polled product.

With a batch size of 1, data is a single item.

Example Payload: batching enabled, batch size 1
{
"data": {
"changeType": "created",
"record": {
"id": "gid://shopify/Product/108828309",
"title": "Example Product",
"handle": "example-product",
"status": "ACTIVE",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z"
}
}
}

With a batch size greater than 1, data is an array of those items.

Example Payload: batching enabled, batch size greater than 1
{
"data": [
{
"changeType": "created",
"record": {
"id": "gid://shopify/Product/108828309",
"title": "Example Product",
"handle": "example-product",
"status": "ACTIVE",
"createdAt": "2024-11-10T10:30:00Z",
"updatedAt": "2024-11-10T10:30:00Z"
}
},
{
"changeType": "updated",
"record": {
"id": "gid://shopify/Product/108828310",
"title": "Another Product",
"handle": "another-product",
"status": "ACTIVE",
"createdAt": "2024-11-08T09:00:00Z",
"updatedAt": "2024-11-10T14:22:00Z"
}
}
]
}

Webhook

Receive and validate webhook requests from Shopify for manually configured webhook subscriptions. | key: webhook

InputNotesExample
Secret Key

The Shopify app's client secret, viewable from the Partner Dashboard.

A Shopify webhook can be configured manually to send information to a flow's webhook URL when specific events occur (a customer is created, an order is shipped, etc.).

This trigger receives and validates webhook requests from Shopify for manually configured webhook subscriptions.

How It Works

When a webhook request is received, the trigger performs HMAC-SHA256 signature verification to ensure the request originated from Shopify:

  1. The trigger extracts the X-Shopify-Hmac-SHA256 header from the incoming request
  2. It computes the expected signature using the configured Secret Key and the request body
  3. If the signatures match, the trigger returns a 200 OK response with the parsed JSON body
  4. If the signatures do not match, the request is rejected

The signature is computed over the raw request body, base64-encoded:

const crypto = require("node:crypto");

const signature = crypto
.createHmac("sha256", secretKey) // the app's client secret
.update(rawRequestBody, "utf8") // the raw body, before JSON parsing
.digest("base64"); // Shopify sends base64, not hex

The computed value is compared against the header using a constant-time comparison, so a mismatch takes the same time to detect regardless of where the two values first differ.

Configuration

  • Secret Key: The Shopify app's client secret, used for HMAC signature verification. This value is available in the app's credentials section of the Shopify Dev Dashboard.

Event Types

A full list of configurable webhook topics is available in the Shopify Webhook Topics documentation.


Data Sources

Select Collection

Selects a collection from a list of all collections. | key: listCollections | type: picklist

InputNotesExample
Connection

The Shopify connection to use.


Select Customer

Selects a customer from a list of all customers. | key: listCustomers | type: picklist

InputNotesExample
Connection

The Shopify connection to use.


Select Draft Order

Selects a draft order from a list of all draft orders. | key: listDraftOrders | type: picklist

InputNotesExample
Connection

The Shopify connection to use.


Select Fulfillment

Selects a fulfillment from a list of all fulfillments. | key: listFulfillments | type: picklist

InputNotesExample
Order ID

The unique ID of the order.

450789469
Connection

The Shopify connection to use.


Select Fulfillment Order

Selects a fulfillment order from a list of all fulfillment orders. | key: listFulfillmentOrders | type: picklist

InputNotesExample
Order ID

The unique ID of the order.

450789469
Connection

The Shopify connection to use.


Select Fulfillment Service

Selects a fulfillment service from a list of all fulfillment services. | key: listFulfillmentServices | type: picklist

InputNotesExample
Connection

The Shopify connection to use.


Select Inventory Item

Selects an inventory item from a list of all inventory items. | key: listInventoryItems | type: picklist

InputNotesExample
Connection

The Shopify connection to use.


Select Location

Selects a location from a list of all locations. | key: listLocations | type: picklist

InputNotesExample
Connection

The Shopify connection to use.


Select Order

Selects an order from a list of all orders. | key: listOrders | type: picklist

InputNotesExample
Connection

The Shopify connection to use.


Select Product

Selects a product from a list of all products. | key: listProducts | type: picklist

InputNotesExample
Connection

The Shopify connection to use.


Select Product Image

Selects a product image from a list of images for the specified product. | key: listProductImages | type: picklist

InputNotesExample
Product ID

The unique ID of the product.

74020090
Connection

The Shopify connection to use.


Select Variant

Selects a product variant from a list of variants for the specified product. | key: listVariants | type: picklist

InputNotesExample
Product ID

The unique ID of the product.

74020090
Connection

The Shopify connection to use.


Actions

Cancel Order

Cancels an existing order. | key: cancelOrderGql

InputNotesExample
Notify Customer

Whether the customer should be notified of the cancellation.

false
Order ID

The unique identifier for the order.

10079785100 or gid://shopify/Order/10079785100
Reason

The reason for the cancellation.

CUSTOMER
Refund

Whether to refund the amount paid by the customer.

false
Restock

Whether to restock the inventory committed to the order.

false
Connection

The Shopify connection to use.

Staff Note

A staff-facing note about the order cancellation. This is not visible to the customer.

This is a staff note.
Example Payload for Cancel Order
Loading…

Close Order

Closes an existing order. | key: closeOrderGql

InputNotesExample
Order ID

The unique identifier for the order.

10079785100 or gid://shopify/Order/10079785100
Connection

The Shopify connection to use.

Example Payload for Close Order
Loading…

Complete Draft Order

Marks a draft order as complete. | key: completeDraftOrderGql

InputNotesExample
Draft Order Id

The unique identifier for the draft order.

916042021234 or gid://shopify/DraftOrder/916042021234
Connection

The Shopify connection to use.

Example Payload for Complete Draft Order
Loading…

Connect Inventory Item To Location

Connects an existing inventory item to a location. | key: connectInventoryLevelGql

InputNotesExample
Inventory Item Id

The unique identifier for the inventory item.

gid://shopify/InventoryItem/43933612241234
Location ID

The ID of the location that the inventory level belongs to.

346779380 or gid://shopify/Location/346779380
Connection

The Shopify connection to use.

Example Payload for Connect Inventory Item To Location
Loading…

Count Collections

Returns a count of all collections. | key: countCollectionsGql

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for Count Collections
Loading…

Count Customers

Returns a count of all customers. | key: countCustomersGql

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for Count Customers
Loading…

Count Draft Orders

Returns a count of all draft orders. Note: this action currently utilizes an unstable version of the Shopify Admin GraphQL API and is subject to change. | key: countDraftOrdersGql

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for Count Draft Orders
Loading…

Count Locations

Returns a count of all locations. | key: countLocationsGql

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for Count Locations
Loading…

Count Orders

Returns a count of all orders. | key: countOrdersGql

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for Count Orders
Loading…

Count Product Images

Returns a count of all product images for the specified product. | key: countProductImagesGql

InputNotesExample
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Connection

The Shopify connection to use.

Example Payload for Count Product Images
Loading…

Count Products

Returns a count of all products. | key: countProducts

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for Count Products
Loading…

Count Variants

Returns a count of all product variants. | key: countVariantsGql

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for Count Variants
Loading…

Create Account Activation URL

Creates an account activation URL for an existing customer. | key: createAccountActivationURLGql

InputNotesExample
Customer

The unique identifier for the customer.

5940139491234 or gid://shopify/Customer/5940139491234
Connection

The Shopify connection to use.

Example Payload for Create Account Activation URL
Loading…

Create Customer

Creates a new customer. | key: createCustomer

InputNotesExample
Additional Fields

Additional optional fields: includes Phone, Notes, Currency Format, Tax Exempt, and Metafields.

Address List

A JSON array of address objects for the customer. Each object should include fields like address1, city, province, country, and zip.

[
  {
    "first_name": "Mother",
    "last_name": "Lastnameson",
    "company": null,
    "address1": "123 Oak St",
    "address2": null,
    "city": "Ottawa",
    "province": "Ontario",
    "country": "Canada",
    "zip": "123 ABC",
    "phone": "555-1212",
    "name": "Mother Lastnameson",
    "province_code": "ON",
    "country_code": "CA",
    "country_name": "Canada"
  }
]
Email

The email address of the customer.

john.doe@example.com
Values

Key-value pairs for creating or updating a record. Specify any property key and value.

First Name

The first name of the customer.

John
Last Name

The last name of the customer.

Doe
Connection

The Shopify connection to use.

Tags

Tags for the product. Each list item is a tag string.

Style
Verified Email

When true, emails will be sent to the customer.

false
Example Payload for Create Customer
Loading…

Create Draft Order

Creates a new draft order. | key: createDraftOrderGql

InputNotesExample
Additional Fields

Additional fields that might not be covered by the standard inputs. This is a JSON object.

{"note":"This is an example note.","tags":["Style"]}
Customer

The unique identifier for the customer.

5940139491234 or gid://shopify/Customer/5940139491234
Line items

Provide a JSON array containing line item objects.

[
  {
    "title": "Custom product",
    "originalUnitPrice": 14.99,
    "quantity": 5,
    "appliedDiscount": {
      "description": "wholesale",
      "value": 5,
      "amount": 3.74,
      "valueType": "PERCENTAGE",
      "title": "Fancy"
    },
    "weight": {
      "value": 1,
      "unit": "KILOGRAMS"
    },
    "customAttributes": [
      {
        "key": "color",
        "value": "Gold"
      },
      {
        "key": "material",
        "value": "Plastic"
      }
    ]
  }
]
Note

A note on the draft order.

Test draft order
Connection

The Shopify connection to use.

Tags

Provide a list of tags for the draft order.

Style
Tax Exempt

Whether or not taxes are exempt for the draft order.

false
Use Customer Address

This flag determines if the order will use the customers default address.

true
Example Payload for Create Draft Order
Loading…

Create Fulfillment Service

Creates a new fulfillment service. | key: createFulfillmentServiceGql

InputNotesExample
Callback URL

The callback URL that the fulfillment service has registered for request.

https://example.com
Fulfillment Service Name

The name of the fulfillment service.

MyFulfillmentService
Inventory Management

Whether the fulfillment services tracks product inventory and provides updates to Shopify.

false
Connection

The Shopify connection to use.

Tracking Support

Whether the fulfillment service supports tracking numbers for packages.

false
Example Payload for Create Fulfillment Service
Loading…

Create Order

Creates a new order. | key: createOrderGql

InputNotesExample
Order Data

JSON data to be sent as the Order payload.

{
  "currency": "EUR",
  "lineItems": [
    {
      "title": "Big Brown Bear Boots",
      "priceSet": {
        "shopMoney": {
          "amount": 74.99,
          "currencyCode": "EUR"
        }
      },
      "quantity": 3,
      "taxLines": [
        {
          "priceSet": {
            "shopMoney": {
              "amount": 10.2,
              "currencyCode": "EUR"
            }
          },
          "rate": 0.06,
          "title": "State tax"
        }
      ]
    }
  ],
  "transactions": [
    {
      "kind": "SALE",
      "status": "SUCCESS",
      "amountSet": {
        "shopMoney": {
          "amount": 238.47,
          "currencyCode": "EUR"
        }
      }
    }
  ]
}
Connection

The Shopify connection to use.

Example Payload for Create Order
Loading…

Create Product

Creates a new product. | key: createProductGql

InputNotesExample
Additional Fields

Additional fields that might not be covered by the standard inputs. This is a JSON object.

{"note":"This is an example note.","tags":["Style"]}
Description HTML

Provide an HTML string for the description of the product.

<p>This is an example product.</p>
Image Alt Text

Provide the alt text for the image of the product.

Alt text
Image URL

Provide a URL for the image of the product.

https://example.com/image.jpg
Product Status

Specify the status of the product.

Product Type

Provide a value for the type of product.

T-shirt
Connection

The Shopify connection to use.

Tags

Provide a list of tags for the product.

Style
Title

Provide a string value for the title of the product.

Example Product
Vendor

Provide a value for the vendor of the product.

Burton inc.
Example Payload for Create Product
Loading…

Create Product Image

Creates a new image for an existing product. | key: createProductImageGql

InputNotesExample
Image Alt Text

Provide the alt text for the image.

Alt text
Image URL

Provide the URL of the image.

https://example.com/image.jpg
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Connection

The Shopify connection to use.

Example Payload for Create Product Image
Loading…

Create Variant

Creates a new variant for the specified product. | key: createVariantGql

InputNotesExample
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Connection

The Shopify connection to use.

Variant

Provide a JSON object containing the variant data.

{
  "price": 14.99,
  "compareAtPrice": 19.99,
  "optionValues": [
    {
      "name": "Golden",
      "optionId": "gid://shopify/ProductOption/328272167"
    }
  ]
}
Example Payload for Create Variant
Loading…

Create Webhook

Creates a webhook for the specified topic. | key: createWebhook

InputNotesExample
Post URL

The URL where the newly created webhook will post to. Used to configure the Shopify trigger.

https://example.com/webhook
Connection

The Shopify connection to use.

Webhook Format

The format for the webhook response.

json
Webhook Topic

The event topic for the webhook. See Shopify webhook topics for all available topics.

products/create
Example Payload for Create Webhook
Loading…

Delete Collection

Deletes a collection by ID. | key: deleteCollectionGql

InputNotesExample
Collection ID

The unique identifier for the collection.

gid://shopify/Collection/841564295
Connection

The Shopify connection to use.

Example Payload for Delete Collection
Loading…

Delete Customer

Deletes an existing customer. | key: deleteCustomerGql

InputNotesExample
Customer

The unique identifier for the customer.

5940139491234 or gid://shopify/Customer/5940139491234
Connection

The Shopify connection to use.

Example Payload for Delete Customer
Loading…

Delete Draft Order

Deletes an existing draft order. | key: deleteDraftOrderGql

InputNotesExample
Draft Order Id

The unique identifier for the draft order.

916042021234 or gid://shopify/DraftOrder/916042021234
Connection

The Shopify connection to use.

Example Payload for Delete Draft Order
Loading…

Delete Fulfillment Service

Deletes an existing fulfillment service. | key: deleteFulfillmentServiceGql

InputNotesExample
Fulfillment Service ID

The unique identifier for the fulfillment service.

gid://shopify/FulfillmentService/18961920?id=true
Connection

The Shopify connection to use.

Example Payload for Delete Fulfillment Service
Loading…

Delete Instance Webhooks

Deletes all webhooks related to the current instance. | key: deleteInstanceWebhooks

InputNotesExample
Connection

The Shopify connection to use.


Delete Inventory Levels

Deletes an inventory level. | key: deleteInventoryLevelsGql

InputNotesExample
Inventory Level Id

The unique identifier for the inventory level.

gid://shopify/InventoryLevel/820859520?inventory_item_id=826867926
Connection

The Shopify connection to use.

Example Payload for Delete Inventory Levels
Loading…

Delete Metafield

Deletes a resource metafield. Note: This action currently utilizes an unstable version of the Shopify Admin GraphQL API and is subject to change. | key: deleteMetafieldGql

InputNotesExample
Key

Provide the key of the metafield to delete.

myKey
Namespace

Provide the namespace of the metafield to delete.

global
Owner ID

Provide the owner ID of the metafield to delete.

gid://shopify/Product/20995642
Connection

The Shopify connection to use.

Example Payload for Delete Metafield
Loading…

Delete Order

Deletes an existing order by ID. | key: deleteOrderGql

InputNotesExample
Order ID

The unique identifier for the order.

10079785100 or gid://shopify/Order/10079785100
Connection

The Shopify connection to use.

Example Payload for Delete Order
Loading…

Delete Product

Deletes an existing product. | key: deleteProductGql

InputNotesExample
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Connection

The Shopify connection to use.

Example Payload for Delete Product
Loading…

Delete Product Image

Deletes a product image. | key: deleteProductImageGql

InputNotesExample
Image ID

The unique identifier for the product image.

gid://shopify/MediaImage/916933471
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Connection

The Shopify connection to use.

Example Payload for Delete Product Image
Loading…

Delete Variant

Deletes an existing variant by ID. | key: deleteVariantGql

InputNotesExample
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Connection

The Shopify connection to use.

Variant ID

The unique identifier for the product variant.

gid://shopify/ProductVariant/1070325177
Example Payload for Delete Variant
Loading…

Delete Webhook

Deletes a webhook by ID. | key: deleteWebhook

InputNotesExample
Connection

The Shopify connection to use.

Webhook ID

The ID of an existing webhook.

450789469
Example Payload for Delete Webhook
Loading…

Get Collection

Retrieves a collection by ID. | key: getCollectionGql

InputNotesExample
Collection ID

The unique identifier for the collection.

gid://shopify/Collection/841564295
Connection

The Shopify connection to use.

Example Payload for Get Collection
Loading…

Get Customer

Retrieves a customer by ID. | key: getCustomer

InputNotesExample
Customer

The unique ID of the customer.

207119551
Connection

The Shopify connection to use.

Example Payload for Get Customer
Loading…

Get Draft Order

Retrieves a draft order by ID. | key: getDraftOrderGql

InputNotesExample
Draft Order Id

The unique identifier for the draft order.

916042021234 or gid://shopify/DraftOrder/916042021234
Connection

The Shopify connection to use.

Example Payload for Get Draft Order
Loading…

Get Fulfillment

Retrieves a fulfillment by ID. | key: getFulfillmentGql

InputNotesExample
Fulfillment Id

The unique identifier for the fulfillment.

5154544124321 or gid://shopify/Fulfillment/5154544124321
Connection

The Shopify connection to use.

Example Payload for Get Fulfillment
Loading…

Get Fulfillment Order

Retrieves a specific fulfillment order by ID. | key: getFulfillmentOrder

InputNotesExample
Fulfillment Order ID

The unique identifier for the fulfillment order.

1046000820
Connection

The Shopify connection to use.

Example Payload for Get Fulfillment Order
Loading…

Get Fulfillment Service

Retrieves a fulfillment service by ID. | key: getFulfillmentServiceGql

InputNotesExample
Fulfillment Service ID

The unique identifier for the fulfillment service.

gid://shopify/FulfillmentService/18961920?id=true
Connection

The Shopify connection to use.

Example Payload for Get Fulfillment Service
Loading…

Get Inventory Item

Retrieves an inventory item by ID. | key: getInventoryItemsGql

InputNotesExample
Inventory Item Id

The unique identifier for the inventory item.

gid://shopify/InventoryItem/43933612241234
Connection

The Shopify connection to use.

Example Payload for Get Inventory Item
Loading…

Get Inventory Levels

Retrieves an inventory level by ID. | key: getInventoryLevelsGql

InputNotesExample
Inventory Level Id

The unique identifier for the inventory level.

gid://shopify/InventoryLevel/100340760123?inventory_item_id=43933612245123
Connection

The Shopify connection to use.

Example Payload for Get Inventory Levels
Loading…

Get Location

Retrieves a location by ID. | key: getLocationsGql

InputNotesExample
Location ID

The ID of the location that the inventory level belongs to.

346779380 or gid://shopify/Location/346779380
Connection

The Shopify connection to use.

Example Payload for Get Location
Loading…

Get Order

Retrieves an order by ID. | key: getOrderGql

InputNotesExample
Order ID

The unique identifier for the order.

10079785100 or gid://shopify/Order/10079785100
Connection

The Shopify connection to use.

Example Payload for Get Order
Loading…

Get Order (Deprecated)

Get the information and metadata about an order. This version of the action is being deprecated. Please replace action with Get Order. | key: getOrder

InputNotesExample
Order ID

The unique ID of the order.

450789469
Connection

The Shopify connection to use.

Example Payload for Get Order (Deprecated)
Loading…

Get Product

Retrieves a product by ID. | key: getProduct

InputNotesExample
Product ID

The unique ID of the product.

74020090
Connection

The Shopify connection to use.

Example Payload for Get Product
Loading…

Get Product Image

Retrieves a product image by ID. | key: getProductImageGql

InputNotesExample
Image ID

Provide a unique ID of a product image. Use only the ID number.

916933471
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Connection

The Shopify connection to use.

Example Payload for Get Product Image
Loading…

Get Shop Configuration

Retrieves the shop configuration. | key: getShopConfig

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for Get Shop Configuration
Loading…

Get Variant

Retrieves a product variant by ID. | key: getVariantGql

InputNotesExample
Connection

The Shopify connection to use.

Variant ID

The unique identifier for the product variant.

gid://shopify/ProductVariant/1070325177
Example Payload for Get Variant
Loading…

List Collections

Lists all collections. | key: listCollectionsGql

InputNotesExample
Fetch All

When true, automatically fetches all pages of results using pagination. The API is limited to 250 records per page max.

false
Pagination

Page and page-size controls.

Connection

The Shopify connection to use.

Example Payload for List Collections
Loading…

List Currencies

Lists all enabled currencies. | key: listCurrenciesGql

InputNotesExample
Fetch All

When true, automatically fetches all pages of results using pagination. The API is limited to 250 records per page max.

false
Pagination

Page and page-size controls.

Connection

The Shopify connection to use.

Example Payload for List Currencies
Loading…

List Customers

Lists all customers. | key: listCustomers

InputNotesExample
Fetch All

When true, fetches all pages of results instead of a single page. The API returns up to 250 records per page, and the Limit input is ignored.

false
Pagination

Page and page-size controls.

Connection

The Shopify connection to use.

Example Payload for List Customers
Loading…

List Draft Orders

Lists all draft orders. | key: listDraftOrders

InputNotesExample
Fetch All

When true, fetches all pages of results instead of a single page. The API returns up to 250 records per page, and the Limit input is ignored.

false
Pagination

Page and page-size controls.

Connection

The Shopify connection to use.

Example Payload for List Draft Orders
Loading…

List Fulfillment Orders

Lists all fulfillment orders for a specific order. | key: listFulfillmentOrders

InputNotesExample
Order ID

The unique ID of the order.

450789469
Connection

The Shopify connection to use.

Example Payload for List Fulfillment Orders
Loading…

List Fulfillment Services

Lists all fulfillment services. | key: listFulfillmentServicesGql

InputNotesExample
Connection

The Shopify connection to use.

Example Payload for List Fulfillment Services
Loading…

List Fulfillments

Lists all fulfillments for a specified order. | key: listFulfillments

InputNotesExample
Fetch All

When true, fetches all pages of results instead of a single page. The API returns up to 250 records per page, and the Limit input is ignored.

false
Order ID

The unique ID of the order.

450789469
Pagination

Page and page-size controls.

Connection

The Shopify connection to use.

Example Payload for List Fulfillments
Loading…

List Inventory Items

Lists all inventory items. | key: listInventoryItemsGql

InputNotesExample
Fetch All

When true, automatically fetches all pages of results using pagination. The API is limited to 250 records per page max.

false
Pagination

Page and page-size controls.

Query

The query to filter the inventory items.

id:>=30322695
Connection

The Shopify connection to use.

Example Payload for List Inventory Items
Loading…

List Inventory Levels At Location

Lists all inventory levels at a specified location. | key: listInventoryLevelsGql

InputNotesExample
Fetch All

When true, automatically fetches all pages of results using pagination. The API is limited to 250 records per page max.

false
Location ID

The ID of the location that the inventory level belongs to.

346779380 or gid://shopify/Location/346779380
Pagination

Page and page-size controls.

Connection

The Shopify connection to use.

Example Payload for List Inventory Levels At Location
Loading…

List Locations

Lists all locations. | key: listLocationsGql

InputNotesExample
Fetch All

When true, automatically fetches all pages of results using pagination. The API is limited to 250 records per page max.

false
Pagination

Page and page-size controls.

Connection

The Shopify connection to use.

Example Payload for List Locations
Loading…

List Metafields

Lists resource metafields. Note: This action currently utilizes an unstable version of the Shopify Admin GraphQL API and is subject to change. | key: listMetafieldsGql

InputNotesExample
Fetch All

When true, automatically fetches all pages of results using pagination. The API is limited to 250 records per page max.

false
Pagination

Page and page-size controls.

Resource

The unique identifier for the resource.

gid://shopify/Product/20995642
Connection

The Shopify connection to use.

Example Payload for List Metafields
Loading…

List Orders

Lists all orders. | key: listOrdersGql

InputNotesExample
Fetch All

When true, automatically fetches all pages of results using pagination. The API is limited to 250 records per page max.

false
Pagination

Page and page-size controls.

Query

The query to filter the orders.

updated_at:>2019-12-01
Connection

The Shopify connection to use.

Example Payload for List Orders
Loading…

List Product Images

Lists all product images for the specified product. | key: listProductImages

InputNotesExample
Product ID

The unique ID of the product.

74020090
Connection

The Shopify connection to use.

Example Payload for List Product Images
Loading…

List Products

Lists all products. | key: listProducts

InputNotesExample
Fetch All

When true, fetches all pages of results instead of a single page. The API returns up to 250 records per page, and the Limit input is ignored.

false
Pagination

Page and page-size controls.

Connection

The Shopify connection to use.

Example Payload for List Products
Loading…

List Variants

Lists all variants for the specified product. | key: listVariantsGql

InputNotesExample
Fetch All

When true, automatically fetches all pages of results using pagination. The API is limited to 250 records per page max.

false
Pagination

Page and page-size controls.

Product ID

The unique identifier for the product.

108828309
Connection

The Shopify connection to use.

Example Payload for List Variants
Loading…

List Webhooks

Lists all webhooks or webhooks for the current instance. | key: listWebhooks

InputNotesExample
Connection

The Shopify connection to use.

Show Only Instance Webhooks

When true, only webhooks that point to this instance are returned.

true
Example Payload for List Webhooks
Loading…

Raw Request

Sends a raw GraphQL request to Shopify. | key: graphQlRawRequest

InputNotesExample
API Version

Shopify versions its API. See Shopify API release notes for a list of available versions.

2026-07
Connection

The Shopify connection to use.

Query or Mutation

GraphQL query or mutation. See Shopify's GraphQL API documentation for examples. Ex: { shop { name } }

{
    products(first: 3) {
      edges {
        node {
          id
          title
        }
      }
    }
  }
Variables

Variables to pass to the query or mutation.

key1: value1, key2: value2
Variables Object

Variables to pass to the query or mutation.

{
  "key1": "value1",
  "key2": "value2"
}

Raw Request (Deprecated)

Send raw HTTP request to Shopify. This version of the action uses REST and is being deprecated. Please replace action with the Raw Request utilizing GraphQL. | key: rawRequest

InputNotesExample
API Version

Shopify versions its API. See Shopify API release notes for a list of available versions.

2026-07
Connection

The Shopify connection to use.

Data

The HTTP body payload to send to the URL.

{"exampleKey": "Example Data"}
Debug Request

Enabling this flag will log out the current request.

false
File Data

File Data to be sent as a multipart form upload.

[{key: "example.txt", value: "My File Contents"}]
File Data File Names

File names to apply to the file data inputs. Keys must match the file data keys above.

Form Data

The Form Data to be sent as a multipart form upload.

[{"key": "Example Key", "value": new Buffer("Hello World")}]
Header

A list of headers to send with the request.

User-Agent: curl/7.64.1
Max Retry Count

The maximum number of retries to attempt. Specify 0 for no retries.

0
Method

The HTTP method to use.

Query Parameter

A list of query parameters to send with the request. This is the portion at the end of the URL similar to ?key1=value1&key2=value2.

Response Type

The type of data you expect in the response. You can request json, text, or binary data.

json
Retry On All Errors

If true, retries on all erroneous responses regardless of type. This is helpful when retrying after HTTP 429 or other 3xx or 4xx errors. Otherwise, only retries on HTTP 5xx and network errors.

false
Retry Delay (ms)

The delay in milliseconds between retries. This is used when 'Use Exponential Backoff' is disabled.

0
Return Headers

When true, response headers will be included in the output object.

false
Timeout

The maximum time that a client will await a response to its request

2000
URL

Input the path only (/users/current.json), The base URL is already included (https://YOUR-DOMAIN.myshopify.com/admin/api/API-VERSION). For example, to connect to https://YOUR-DOMAIN.myshopify.com/admin/api/API-VERSION/users/current.json, only /users/current.json is entered in this field.

/users/current.json
Use Exponential Backoff

Specifies whether to use a pre-defined exponential backoff strategy for retries. When enabled, 'Retry Delay (ms)' is ignored.

false

Set Metafield

Sets a resource metafield. Note: This action currently utilizes an unstable version of the Shopify Admin GraphQL API and is subject to change. | key: setMetafieldGql

InputNotesExample
Key

The key for the metafield.

myKey
Namespace

The namespace for the metafield.

global
Owner ID

The unique ID of the owner of the metafield.

gid://shopify/Product/20995642
Connection

The Shopify connection to use.

Type

Provide a type for the metafield. Required when there is no corresponding definition for the given namespace, key, and owner resource type.

single_line_text_field
Value

The value for the metafield.

myValue
Example Payload for Set Metafield
Loading…

Update Customer

Updates an existing customer by ID. | key: updateCustomerGql

InputNotesExample
Additional Fields

Additional fields that might not be covered by the standard inputs. This is a JSON object.

{"note":"This is an example note.","tags":["Style"]}
Address List

Provide a JSON array containing address objects.

[{"address1":"","address2":"","city":"","company":"","countryCode":"","firstName":"","lastName":"","phone":"","provinceCode":"","zip":""}]
Customer

The unique identifier for the customer.

5940139491234 or gid://shopify/Customer/5940139491234
Email

The email address of the customer.

someone@example.com
First Name

The first name of the customer.

John
Last Name

The last name of the customer.

Doe
Metafields

Provide a JSON array containing metadata objects.

[{"key":"myKey","value":"myValue","type":"single_line_text_field","namespace":"global"}]
Notes

A note about the customer.

This is an example note.
Phone

The phone number of the customer.

+18005555454
Connection

The Shopify connection to use.

Tags

For each list item, provide a string to tag the product with.

Style
Tax Exempt

Determines if the customer is tax exempt.

Example Payload for Update Customer
Loading…

Update Fulfillment Service

Updates an existing fulfillment service. | key: updateFulfillmentServiceGql

InputNotesExample
Callback URL

The callback URL that the fulfillment service has registered for request.

https://example.com
Fulfillment Service ID

The unique identifier for the fulfillment service.

gid://shopify/FulfillmentService/18961920?id=true
Fulfillment Service Name

The name of the fulfillment service.

MyFulfillmentService
Inventory Management

Whether the fulfillment services tracks product inventory and provides updates to Shopify.

Connection

The Shopify connection to use.

Tracking Support

Whether the fulfillment service supports tracking numbers for packages.

Example Payload for Update Fulfillment Service
Loading…

Update Inventory Item

Updates an existing inventory item. | key: updateInventoryItemsGql

InputNotesExample
Cost

Unit cost associated with the inventory item, the currency is the shop's default currency.

1.00
Inventory Item Id

The unique identifier for the inventory item.

gid://shopify/InventoryItem/43933612241234
Connection

The Shopify connection to use.

SKU

The SKU (stock keeping unit) of the inventory item.

97802837847
Tracked

Whether the inventory item is tracked.

Example Payload for Update Inventory Item
Loading…

Update Product

Updates an existing product by ID. | key: updateProductGql

InputNotesExample
Additional Fields

Additional fields that might not be covered by the standard inputs. This is a JSON object.

{"note":"This is an example note.","tags":["Style"]}
Description HTML

Provide an HTML string for the description of the product.

<p>This is an example product.</p>
Image Alt Text

Provide the alt text for the image of the product.

Alt text
Image URL

Provide a URL for the image of the product.

https://example.com/image.jpg
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Product Status

Specify the status of the product.

Product Type

Provide a value for the type of product.

T-shirt
Connection

The Shopify connection to use.

Tags

For each list item, provide a string to tag the product with.

Style
Title

Provide a string value for the title of the product.

Example Product
Vendor

Provide a value for the vendor of the product.

Burton inc.
Example Payload for Update Product
Loading…

Update Variant

Updates an existing product variant by ID. | key: updateVariantGql

InputNotesExample
Product ID

The unique identifier for the product.

108828309 or gid://shopify/Product/108828309
Connection

The Shopify connection to use.

Update Variant

Provide a JSON object containing the variant data to update.

{
  "id": "gid://shopify/ProductVariant/1",
  "barcode": "12345",
  "price": "100.57"
}
Example Payload for Update Variant
Loading…

Changelog

2026-09-14

Removed the List Orders (Deprecated) action and the Event Topic Webhook (Deprecated) trigger that are no longer in use; use List Orders and Event Topic Subscription instead

2026-09-03

  • Added opt-in batching across all polling triggers, dispatching each changed record individually or in configured batches so large backlogs drain in one recurrence; enabling it changes the shape a downstream step receives
  • Added an optional Look-back Date input for performing an initial sync of records across all polling triggers. The initial sync backfills every record modified on or after the specified date, seeding each once; later recurrences are unaffected. Leave it empty to start from the first recurrence with no backfill
  • Updated all polling triggers to deliver a large backlog across recurrences, continuing from where the previous recurrence left off rather than holding every changed record before any of it reaches a flow
  • Updated the default Shopify API version to 2026-07
  • Fixed the Secret Key input on the Event Topic Subscription trigger displaying the app's client secret in plain text; it is now masked, matching the other webhook triggers

2026-07-15

Updated the OAuth 2.0 connections to request expiring access tokens so authentication continues to work with newer Shopify apps

2026-07-06

Restructured action inputs into structured objects for an improved user experience.

  • The GraphQL list actions (List Currencies, List Collections, List Customers, List Draft Orders, List Fulfillment Orders, List Inventory Items, List Inventory Levels At Location, List Locations, List Orders, List Product Images, List Products, List Variants, List Webhooks, and List Metafields) group their Limit and Page Offset Cursor inputs into a Pagination structured object
  • Create Customer groups its Phone, Notes, Currency Format, Tax Exempt, and Metafields inputs into an Additional Fields structured object; the required Address List input moves up beside the other required inputs

2026-04-30

Updated spectral version

2026-03-31

Various modernizations and documentation updates

2026-03-05

Added inline data sources for draft orders, collections, and fulfillment services to enable dynamic dropdown selection

2026-02-26

Added inline data sources for variants, product images, and inventory items to enhance data selection capabilities

2026-01-27

Added New and Updated Customers, New and Updated Orders, and New and Updated Products polling triggers.

2025-10-17

Enhanced webhook lifecycle management with improved event topic webhook handling and automated cleanup

2025-05-05

Added inline datasources and global debug to all actions for improved integration capabilities