List Products
shopify.list_products
ActionBusiness appsconnection required
Calls the Shopify API with the connection's credentials.
List a page of products in a Shopify store, filtered by title or type.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- API key
- Providers
- Shopify
- Secret shape
- the Shopify Admin API access token
- Config it needs
- shop
- Resolved by
- config.connection_id, else node.connection_id
Configuration
14 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
limit How many records to return in one page. Shopify's own default is 50 and its maximum is 250. | number | No | — | 1–250 | 50 |
page_info Cursor from a previous call's 'page_info' output. Set it to fetch the next page; leave it empty for the first page. | string | No | — | — | — |
ids Comma-separated list of ids to restrict the result to. | string | No | — | — | 450789469,450789470 |
since_id Return only records with an id greater than this one — a cheap way to poll for what is new. | string | No | — | — | — |
title Only products with exactly this title. | string | No | — | — | — |
vendor Only products from this vendor. | string | No | — | — | — |
handle Comma-separated product handles (the storefront URL slug). | string | No | — | — | — |
product_type Only products of this product type. | string | No | — | — | — |
status Only products in this state. | string | No | — | one of "active", "archived", "draft" | — |
collection_id Only products in this collection. | string | No | — | — | — |
published_status Filter on whether the product is published to a sales channel. | string | No | — | one of "published", "unpublished", "any" | — |
created_at_min Only records created at or after this ISO 8601 timestamp. | string | No | — | iso8601 format | 2026-01-01T00:00:00Z |
updated_at_min Only records last updated at or after this ISO 8601 timestamp. | string | No | — | iso8601 format | 2026-01-01T00:00:00Z |
fields Comma-separated list of fields to return instead of the whole resource. | string | No | — | — | id,email,created_at |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"created_at_min": "2026-01-01T00:00:00Z",
"fields": "id,email,created_at",
"ids": "450789469,450789470",
"limit": 50,
"updated_at_min": "2026-01-01T00:00:00Z"
}Output
One shape.
result
| Field | Type | Example |
|---|---|---|
products The products on this page, exactly as Shopify returned them. | array | — |
count How many products are on this page. | number | — |
page_info Cursor for the next page, or empty when this was the last page. | string | — |
has_more True when another page exists. | boolean | — |
{
"count": 0,
"has_more": false,
"page_info": "",
"products": []
}Notes
- The store and the API version come from the connection: 'shop' (your-store.myshopify.com) and an optional 'api_version' that defaults to 2026-07. Auth is the Admin API access token, sent as X-Shopify-Access-Token.
- Lists page on an opaque cursor from Shopify's Link header, not on page numbers. Pass the 'page_info' a call returns back into the next call while 'has_more' is true; a request carrying page_info may only carry 'limit' and 'fields', so every other filter is ignored once you are paging.
- Shopify rate-limits with a leaky bucket (X-Shopify-Shop-Api-Call-Limit). A 429 fails the step with the bucket state and the Retry-After seconds in the message: put a control.delay in front of the node or lower 'limit'.
- Each write node also accepts the raw resource object for fields it does not model; that object is merged last and wins on a conflict.
See List Products run in a workflow.
In a technical demo we add the Shopify connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.