Workflow blocks
Shopify
Look up products, orders, and customers in your Shopify store — including a customer's full order history — or run a raw GraphQL query
shopify/manage — Look up products, orders, and customers in your Shopify store — including a customer's full order history — or run a raw GraphQL query.
Where it appears
The Shopify block lives in the Integrations group of the Workflow Builder. Connect the Shopify integration before adding it.
Fields
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
storeKey | integration-store-select | Yes | — | Which connected Shopify store this block runs against. Populated from the selected connection's configured stores. |
resource | select | Yes | product | Which Shopify resource to work with. Options: product, order, customer, advanced. |
operation | select | Yes | — | Which action to perform on the selected resource. |
productId | text (supports references) | No | — | The product to fetch. |
orderId | text (supports references) | No | — | The order to fetch. |
customerId | text (supports references) | No | — | The customer to fetch. |
customerLookup | text (supports references) | No | — | The customer to look up. An email (contains @) is resolved to the customer automatically; otherwise it's treated as a customer ID. Returns the customer plus their recent orders. |
customerQuery | text | No | — | Shopify customer search syntax, e.g. email:jane@example.com, phone:+15551234567, or a name. |
productStatus | select | No | any | Only return products with this status. Options: any, active, draft, archived. |
orderStatus | select | No | open | Only return orders with this status. Options: open, closed, cancelled, any. |
returnAll | toggle | No | false | Fetch every matching record by paginating automatically. When on, Limit is ignored. |
limit | number | No | 50 | Maximum number of records to return (for Customer Context, how many recent orders). Ignored when Return All is on. |
query | code | No | — | Raw Shopify Admin GraphQL query. |
variables | code | No | — | Optional variables for the GraphQL query. |
Inputs and outputs
Inputs are the configurable fields above. The block produces these outputs:
Outputs
Reference an output downstream with <Shopify.field>.
| Name | Type | Description |
|---|---|---|
success | boolean | Operation success status |
product | json | Single product (Get Product) (object — fields: id, title, handle, status, vendor, product_type, tags, variants, images, created_at, updated_at) |
products | array | Products (List Products) |
order | json | Single order (Get Order) (object — fields: id, name, email, financial_status, fulfillment_status, total_price, currency, line_items, note, tags, created_at, updated_at) |
orders | array | Orders (List Orders, or recent orders in Customer Context). Shopify only returns orders from the last 60 days unless the app holds the read_all_orders scope — check ordersSummary to know whether older orders were omitted. |
ordersSummary | json | Coverage for the returned orders (Customer Context). Flags when older orders are hidden by Shopify's 60-day window or capped by the Limit, so agents don't mistake a truncated list for 'no orders.' (object — fields: returned, lifetimeCount, complete, note, reason) |
customer | json | Single customer (Get Customer / Customer Context) (object — fields: id, email, first_name, last_name, phone, orders_count, total_spent, last_order_id, last_order_name, tags, note, created_at, updated_at) |
customers | array | Matching customers (Search Customers) |
error | string | Error message if failed |
Example
A minimal configuration for this block:
{
"type": "shopify/manage",
"config": {
"storeKey": "...",
"resource": "product",
"operation": "...",
"productStatus": "any",
"orderStatus": "open",
"returnAll": false,
"limit": 50
}
}Limits and failure modes
- Requires a connected Shopify integration. Calls fail if that integration is disconnected or its authorization has expired.
- Required fields (
storeKey,resource,operation) must be set, or the block fails validation before it runs. - On failure the
erroroutput is populated; downstream blocks that reference other outputs may not receive values.