<!-- BusyBot node reference — https://busybot.net/tools/shopify/ -->

> Node: Shopify (`shopify`) · Action · v1
> Category: Sales · Credentials: Shopify API (`shopifyApi`)
> Updated: 2026-08-16

# Shopify

> Manage Shopify orders and products

## Overview

Shopify is an e-commerce platform that enables businesses to create online stores. This tool connects to the Shopify Admin REST API to manage orders (create, read, update, delete) and products (create, read, update, delete). It supports filtering, pagination, and all standard CRUD operations for both resources.

**Category:** Sales  
**Tool Name:** `shopify`  
**Version:** 1

**Appearance:** Icon: `si-shopify` | Color: `#96bf48`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Shopify API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/shopify-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Order | `order` |
| Product | `product` |

### Operations

Which operations are available depends on the selected resource — see the parameter subsections below.

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create an order or a product |
| Delete | `delete` | Delete an order or a product |
| Get | `get` | Get a single order or product |
| Get Many | `getAll` | Get many orders or products |
| Update | `update` | Update an order or a product |

### Parameters

#### Order: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Line Items (`limeItemsUi`) | `fixedCollection` | No | `{}` | Line items for the order. At least one is required. |
| — Product ID (`productId`) | `string` | No | — | The ID of the product. Find in Shopify Admin: Products > click product > ID is in the URL. |
| — Variant ID | `string` | No | — | The ID of the product variant. |
| — Title | `string` | No | — | The title of the product. |
| — Grams | `string` | No | — | The weight of the item in grams. |
| — Quantity | `number` | No | `1` | The number of items that were purchased. |
| — Price | `string` | No | — | The price of the line item. |
| Additional Fields | `collection` | No | `{}` | — |
| — Billing Address | `fixedCollection` | No | `{}` | — |
| — — First Name | `string` | No | — | — |
| — — Last Name | `string` | No | — | — |
| — — Company | `string` | No | — | — |
| — — Country | `string` | No | — | — |
| — — Address Line 1 | `string` | No | — | — |
| — — Address Line 2 | `string` | No | — | — |
| — — City | `string` | No | — | — |
| — — Province | `string` | No | — | — |
| — — Zip Code | `string` | No | — | — |
| — — Phone | `string` | No | — | — |
| — Discount Codes | `fixedCollection` | No | `{}` | — |
| — — Amount | `string` | No | — | The amount that's deducted from the order total. |
| — — Code | `string` | No | — | The discount code. |
| — — Type | `options` | No | `fixedAmount` | The type of discount. |
| | | | | Options: `fixedAmount` (applies amount as a unit of the store's currency), `percentage` (applies a discount of amount as a percentage of the order total), `shipping` (applies a free shipping discount on orders that have a shipping rate less than or equal to amount) |
| — Email | `string` | No | — | The customer's email address. |
| — Fulfillment Status | `options` | No | — | The order's status in terms of fulfilled line items. |
| | | | | Options: `fulfilled` (every line item in the order has been fulfilled), `null` (none of the line items in the order have been fulfilled), `partial` (at least one line item in the order has been fulfilled), `restocked` (every line item in the order has been restocked and the order canceled) |
| — Inventory Behaviour | `options` | No | `bypass` | The behaviour to use when updating inventory. |
| | | | | Options: `bypass` (do not claim inventory), `decrementIgnoringPolicy` (ignore the product's inventory policy and claim inventory), `decrementObeyingPolicy` (follow the product's inventory policy and claim inventory, if possible) |
| — Location ID | `string` | No | — | The ID of the physical location where the order was processed. Find in Shopify Admin: Settings > Locations. |
| — Note | `string` | No | — | An optional note that a shop owner can attach to the order. |
| — Send Fulfillment Receipt | `boolean` | No | `false` | Whether to send a shipping confirmation to the customer. |
| — Send Receipt | `boolean` | No | `false` | Whether to send an order confirmation to the customer. |
| — Shipping Address | `fixedCollection` | No | `{}` | — |
| — — First Name | `string` | No | — | — |
| — — Last Name | `string` | No | — | — |
| — — Company | `string` | No | — | — |
| — — Country | `string` | No | — | — |
| — — Address Line 1 | `string` | No | — | — |
| — — Address Line 2 | `string` | No | — | — |
| — — City | `string` | No | — | — |
| — — Province | `string` | No | — | — |
| — — Zip Code | `string` | No | — | — |
| — — Phone | `string` | No | — | — |
| — Source Name | `string` | No | — | Where the order originated. Can be set only during order creation, and is not writeable afterwards. |
| — Tags | `string` | No | — | Tags attached to the order, formatted as a string of comma-separated values. |
| — Test | `boolean` | No | `false` | Whether this is a test order. |

#### Order: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Order ID | `string` | Yes | — | — |

#### Order: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Order ID | `string` | Yes | — | — |
| Options (`options`) | `collection` | No | `{}` | — |
| — Fields | `string` | No | — | Fields the order will return, formatted as a string of comma-separated values. By default all the fields are returned. |

#### Order: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |
| Options (`options`) | `collection` | No | `{}` | — |
| — Attribution App ID | `string` | No | — | Show orders attributed to a certain app, specified by the app ID. |
| — Created At Min (`createdAtMin`) | `string` | No | — | Show orders created at or after date (ISO 8601). |
| — Created At Max (`createdAtMax`) | `string` | No | — | Show orders created at or before date (ISO 8601). |
| — Financial Status | `options` | No | `any` | Filter orders by their financial status. |
| | | | | Options: `any`, `authorized`, `paid`, `partiallyPaid`, `partiallyRefunded`, `pending`, `refunded`, `unpaid`, `voided` |
| — Fulfillment Status | `options` | No | `any` | Filter orders by their fulfillment status. |
| | | | | Options: `any`, `partial`, `shipped`, `unfulfilled`, `unshipped` |
| — Fields | `string` | No | — | Fields the orders will return, formatted as a string of comma-separated values. |
| — IDs | `string` | No | — | Retrieve only orders specified by a comma-separated list of order IDs. |
| — Processed At Max | `string` | No | — | Show orders imported at or before date (ISO 8601). |
| — Processed At Min | `string` | No | — | Show orders imported at or after date (ISO 8601). |
| — Status | `options` | No | `open` | Filter orders by their status. |
| | | | | Options: `any`, `cancelled`, `closed`, `open` |
| — Since ID | `string` | No | — | Show orders after the specified ID. |
| — Updated At Max (`updatedAtMax`) | `string` | No | — | Show orders last updated at or before date (ISO 8601). |
| — Updated At Min (`updatedAtMin`) | `string` | No | — | Show orders last updated at or after date (ISO 8601). |

#### Order: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Order ID | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Email | `string` | No | — | The customer's email address. |
| — Location ID | `string` | No | — | The ID of the physical location where the order was processed. Find in Shopify Admin: Settings > Locations. |
| — Note | `string` | No | — | An optional note that a shop owner can attach to the order. |
| — Shipping Address | `fixedCollection` | No | `{}` | — |
| — — First Name | `string` | No | — | — |
| — — Last Name | `string` | No | — | — |
| — — Company | `string` | No | — | — |
| — — Country | `string` | No | — | — |
| — — Address Line 1 | `string` | No | — | — |
| — — Address Line 2 | `string` | No | — | — |
| — — City | `string` | No | — | — |
| — — Province | `string` | No | — | — |
| — — Zip Code | `string` | No | — | — |
| — — Phone | `string` | No | — | — |
| — Source Name | `string` | No | — | Where the order originated. |
| — Tags | `string` | No | — | Tags attached to the order, formatted as a string of comma-separated values. |

#### Product: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | The name of the product. |
| Additional Fields | `collection` | No | `{}` | — |
| — Body HTML | `string` | No | — | A description of the product. Supports HTML formatting. |
| — Handle | `string` | No | — | A unique human-friendly string for the product. Automatically generated from the product's title. |
| — Images | `collection` | No | `{}` | A list of product image objects. |
| — — Created At | `string` | No | — | — |
| — — ID | `number` | No | — | — |
| — — Position | `number` | No | — | — |
| — — Product ID (`product_id`) | `number` | No | — | — |
| — — Source | `string` | No | — | Specifies the location of the product image URL. |
| — — Width | `number` | No | — | — |
| — — Height | `number` | No | — | — |
| — — Updated At | `string` | No | — | — |
| — Options (`productOptions`) | `fixedCollection` | No | `{}` | The custom product property names like Size, Color, and Material. You can add up to 3 options of up to 255 characters each. |
| — — Name | `string` | No | — | Option's name. |
| — — Value | `string` | No | — | Option's values. |
| — Product Type | `string` | No | — | A categorization for the product used for filtering and searching products. |
| — Published At | `string` | No | — | The date and time (ISO 8601 format) when the product was published. |
| — Published Scope | `options` | No | — | — |
| | | | | Options: `global` (published to both Online Store and Point of Sale), `web` (published to the Online Store only) |
| — Tags | `string` | No | — | A string of comma-separated tags for filtering and search. |
| — Template Suffix | `string` | No | — | The suffix of the Liquid template used for the product page. |
| — Vendor | `string` | No | — | The name of the product's vendor. |

#### Product: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Product ID (`productId`) | `string` | Yes | — | — |

#### Product: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Product ID (`productId`) | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Fields | `string` | No | — | Fields the product will return, formatted as a string of comma-separated values. |

#### Product: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |
| Additional Fields | `collection` | No | `{}` | — |
| — Collection ID | `string` | No | — | Filter results by product collection ID. |
| — Created At Max (`created_at_max`) | `string` | No | — | Show products created before date (ISO 8601). |
| — Created At Min (`created_at_min`) | `string` | No | — | Show products created after date (ISO 8601). |
| — Fields | `string` | No | — | Show only certain fields, specified by a comma-separated list of field names. |
| — Handle | `string` | No | — | Filter results by product handle. |
| — IDs | `string` | No | — | Return only products specified by a comma-separated list of product IDs. |
| — Presentment Currencies | `string` | No | — | Return presentment prices in only certain currencies (ISO 4217 codes, comma-separated). |
| — Product Type | `string` | No | — | Filter results by product type. |
| — Published At Max | `string` | No | — | Show products published before date (ISO 8601). |
| — Published At Min | `string` | No | — | Show products published after date (ISO 8601). |
| — Published Status | `options` | No | `any` | Return products by their published status. |
| | | | | Options: `any` (show all products), `published` (show only published products), `unpublished` (show only unpublished products) |
| — Title | `string` | No | — | Filter results by product title. |
| — Updated At Max (`updated_at_max`) | `string` | No | — | Show products last updated before date (ISO 8601). |
| — Updated At Min (`updated_at_min`) | `string` | No | — | Show products last updated after date (ISO 8601). |
| — Vendor | `string` | No | — | Filter results by product vendor. |

#### Product: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Product ID (`productId`) | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Body HTML | `string` | No | — | A description of the product. Supports HTML formatting. |
| — Handle | `string` | No | — | A unique human-friendly string for the product. |
| — Images | `collection` | No | `{}` | A list of product image objects. |
| — — Created At | `string` | No | — | — |
| — — ID | `number` | No | — | — |
| — — Position | `number` | No | — | — |
| — — Product ID (`product_id`) | `number` | No | — | — |
| — — Source | `string` | No | — | Specifies the location of the product image URL. |
| — — Width | `number` | No | — | — |
| — — Height | `number` | No | — | — |
| — — Updated At | `string` | No | — | — |
| — Options (`productOptions`) | `fixedCollection` | No | `{}` | The custom product property names like Size, Color, and Material. |
| — — Name | `string` | No | — | — |
| — — Value | `string` | No | — | — |
| — Product Type | `string` | No | — | A categorization for the product. |
| — Published At | `string` | No | — | The date and time (ISO 8601 format) when the product was published. |
| — Published Scope | `options` | No | — | — |
| | | | | Options: `global` (published to both Online Store and Point of Sale), `web` (published to the Online Store only) |
| — Tags | `string` | No | — | A string of comma-separated tags for filtering and search. |
| — Template Suffix | `string` | No | — | The suffix of the Liquid template used for the product page. |
| — Title | `string` | No | — | The name of the product. |
| — Vendor | `string` | No | — | The name of the product's vendor. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

The Shopify response is **merged onto the input item JSON** — the incoming fields stay on the item, and any field whose name also appears in the Shopify record is overwritten by Shopify's value. Binary data on the input item is forwarded unchanged.

- **Create, Get and Update** produce one output item per input item, carrying the order or product object exactly as Shopify returned it.
- **Get Many** fans out: one output item per record returned, each one a copy of the input item merged with that record. When the store returns nothing, a single item is emitted with `results` set to an empty array instead. Turning **Return All** on follows Shopify's pagination until every page has been read; leaving it off returns at most **Limit** records in one request.
- **Delete** returns no body, so the item is merged with a fixed success flag:

```json
{
  "success": true
}
```

- **Order: Create** submits the order as a test order unless you add **Test** to Additional Fields and set it yourself — the created order then comes back with `test` set to `true`. Add **Test** and set it to `false` to create a live order.

The tool does not reshape the record it receives, so the available fields are whatever the Shopify Admin API returns for that resource:

| Resource / Operation | What lands on the output item |
|----------------------|-------------------------------|
| Order: Create, Get, Update | The order object returned by Shopify |
| Order: Get Many | One item per order, each carrying that order's object |
| Order: Delete | `success: true` |
| Product: Create, Get, Update | The product object returned by Shopify |
| Product: Get Many | One item per product, each carrying that product's object |
| Product: Delete | `success: true` |

When **Fields** is set, Shopify returns only the fields you asked for, so only those land on the item.

Reference the result downstream by expression, e.g. `{{ $json.id }}`.

## Usage Examples

- Create a new order in Shopify with line items
- Get all open orders from a Shopify store
- Update product details in Shopify
- Delete a product from Shopify

## Example Configuration

Create an order from an upstream item, with a shipping address and an order confirmation email:

```json
{
  "type": "shopify",
  "parameters": {
    "resource": "order",
    "operation": "create",
    "limeItemsUi": {
      "lineItemValues": [
        {
          "variantId": "{{ $json.variantId }}",
          "title": "{{ $json.productTitle }}",
          "quantity": 2,
          "price": "29.99"
        }
      ]
    },
    "additionalFields": {
      "email": "{{ $json.customerEmail }}",
      "note": "Rush delivery",
      "sendReceipt": true,
      "test": false,
      "shippingAddressUi": {
        "shippingAddressValues": {
          "firstName": "John",
          "lastName": "Doe",
          "address1": "123 Main St",
          "city": "New York",
          "province": "NY",
          "zip": "10001",
          "country": "United States"
        }
      }
    }
  }
}
```

List the 50 most recent open, paid orders and return only a few fields:

```json
{
  "type": "shopify",
  "parameters": {
    "resource": "order",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "options": {
      "status": "open",
      "financialStatus": "paid",
      "createdAtMin": "2024-01-01T00:00:00Z",
      "fields": "id,email,total_price,created_at"
    }
  }
}
```

Update an existing order's note, tags and contact email:

```json
{
  "type": "shopify",
  "parameters": {
    "resource": "order",
    "operation": "update",
    "orderId": "{{ $json.orderId }}",
    "updateFields": {
      "note": "Updated delivery instructions",
      "tags": "priority,expedited",
      "email": "{{ $json.email }}"
    }
  }
}
```

Create a product with a description, vendor and two custom options:

```json
{
  "type": "shopify",
  "parameters": {
    "resource": "product",
    "operation": "create",
    "title": "{{ $json.name }}",
    "additionalFields": {
      "body_html": "<p>{{ $json.description }}</p>",
      "product_type": "Electronics",
      "vendor": "Tech Corp",
      "tags": "electronics,gadget,new",
      "published_scope": "global",
      "productOptions": {
        "option": [
          { "name": "Color", "value": "Blue" },
          { "name": "Size", "value": "Large" }
        ]
      }
    }
  }
}
```

Page through every published product from one vendor:

```json
{
  "type": "shopify",
  "parameters": {
    "resource": "product",
    "operation": "getAll",
    "returnAll": true,
    "additionalFields": {
      "product_type": "Electronics",
      "vendor": "Tech Corp",
      "published_status": "published",
      "fields": "id,title,handle,product_type,created_at"
    }
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Manage Shopify store orders and products (CRUD) via the Admin REST API.

### Common Patterns

### Basic Order Management
1. **Create Order:** Set `resource` to `"order"`, `operation` to `"create"`, and provide `limeItemsUi`
2. **Get Order:** Use `operation` `"get"` with specific `orderId`
3. **List Orders:** Use `operation` `"getAll"` with appropriate filters in `options`
4. **Update Order:** Use `operation` `"update"` with `orderId` and `updateFields`

### Basic Product Management
1. **Create Product:** Set `resource` to `"product"`, `operation` to `"create"`, and provide `title`
2. **Get Product:** Use `operation` `"get"` with specific `productId`
3. **List Products:** Use `operation` `"getAll"` with filters in `additionalFields`
4. **Update Product:** Use `operation` `"update"` with `productId` and `updateFields`

### Key Structure Rules
- **fixedCollection types** (like `limeItemsUi`): Always use the documented groupKey
- **collection types** (like `additionalFields`, `options`, `updateFields`): Use flat object structure
- **Conditional parameters**: Parameters are only available when their display conditions are met
- **Required vs Optional**: `limeItemsUi` is required for order creation, `title` is required for product creation