# Shopify API

> Shopify returns public store products, prices, and availability as a workflow and API.

Shopify lists publicly published store products, prices, and availability; provide a store website or page, with optional name or collection filters. Get store product returns product details, options, and variants; provide a store or product page link and, optionally, a product name.

- Page: https://fous.com/workflows/shopify
- Handle: `@shopify`
- Category: [Commerce](https://fous.com/workflows/category/commerce)
- Source website: https://shop.app
- Last verified: Sep 29, 2026
- Fous is not affiliated with Shopify.

## Methods

### Get store product

Operation `get_store_product`, version 1. 1 credit per call.

Get a public Shopify product by its page link or closest name match within a store. Stores that restrict public product access cannot be read.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `store` | string | yes | `"https://www.allbirds.com/products/mens-tree-runners"` | Store website, such as allbirds.com, or product page link, such as https://www.allbirds.com/products/mens-tree-runners. |
| `product_name` | string | no | `"Floral Heritage Crew"` | Product to find by name, such as Tree Runners; leave blank when store is a product page link. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "store"
  ],
  "properties": {
    "store": {
      "type": "string",
      "description": "Store website, such as allbirds.com, or product page link, such as https://www.allbirds.com/products/mens-tree-runners.",
      "examples": [
        "https://www.allbirds.com/products/mens-tree-runners",
        "tentree.com",
        "allbirds.com"
      ]
    },
    "product_name": {
      "type": "string",
      "default": "",
      "description": "Product to find by name, such as Tree Runners; leave blank when store is a product page link.",
      "examples": [
        "Floral Heritage Crew",
        "Tree Runners"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "store": "https://www.allbirds.com/products/mens-tree-runners"
    },
    {
      "store": "tentree.com",
      "product_name": "Floral Heritage Crew"
    },
    {
      "store": "allbirds.com",
      "product_name": "Tree Runners"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `tags` | array |  | Product tags. |
| `brand` | string or null | `"Allbirds"` | Vendor name. |
| `price` | number or null | `100` | Lowest variant price in the storefront currency. |
| `handle` | string | `"mens-tree-runners"` | Shopify product handle. |
| `options` | array |  | Option names and offered values. |
| `options[].name` | string | `"Size"` | Option name. |
| `options[].values` | array |  |  |
| `currency` | string | `"USD"` | Three-letter storefront currency code. |
| `variants` | array |  | Individual purchasable variants. |
| `variants[].sku` | string or null | `"TR3MJBW080"` | Variant SKU. |
| `variants[].price` | number or null | `100` | Variant price in the storefront currency. |
| `variants[].in_stock` | boolean | `true` | Whether the variant is available. |
| `variants[].variant_id` | integer or null | `33179624669264` | Shopify variant ID. |
| `variants[].option_values` | array |  | Option selections such as Size: 8. |
| `product_id` | integer or null | `4870548979792` | Shopify product ID. |
| `description` | string | `"The Allbirds Tree Runner is a breathable and lightweight sneaker made with responsibly sourced eucalyptus tree fiber th` | Product description in plain text. |
| `image_links` | array |  | Links to product images. |
| `product_link` | string | `"https://www.allbirds.com/products/mens-tree-runners"` | Link to this product on the store. |
| `product_name` | string | `"Men's Tree Runner - Jet Black (White Sole)"` | Product title. |
| `product_type` | string or null | `"Shoes"` | Product category or type. |
| `original_price` | number or null |  | Compare-at price for the lowest-priced variant, when higher than its price. |
| `published_date` | string or null | `"2026-09-25"` | Date the store published this product, YYYY-MM-DD. |

**Example input**

```json
{
  "store": "https://www.allbirds.com/products/mens-tree-runners"
}
```

**Example output**

```json
{
  "tags": [
    "allbirds::carbon-score => 4.52",
    "allbirds::cfId => color-mens-tree-runners-jet-black-white",
    "allbirds::complete => true"
  ],
  "brand": "Allbirds",
  "price": 100,
  "handle": "mens-tree-runners",
  "options": [
    {
      "name": "Size",
      "values": [
        "8",
        "9",
        "10"
      ]
    }
  ],
  "currency": "USD",
  "variants": [
    {
      "sku": "TR3MJBW080",
      "price": 100,
      "in_stock": true,
      "variant_id": 33179624669264,
      "option_values": [
        "Size: 8"
      ]
    },
    {
      "sku": "TR3MJBW090",
      "price": 100,
      "in_stock": false,
      "variant_id": 33179624702032,
      "option_values": [
        "Size: 9"
      ]
    },
    {
      "sku": "TR3MJBW100",
      "price": 100,
      "in_stock": false,
      "variant_id": 33179624734800,
      "option_values": [
        "Size: 10"
      ]
    }
  ],
  "product_id": 4870548979792,
  "description": "The Allbirds Tree Runner is a breathable and lightweight sneaker made with responsibly sourced eucalyptus tree fiber that feels silky smooth and cool on your skin. These shoes are perfect for everyday…",
  "image_links": [
    "https://cdn.shopify.com/s/files/1/1104/4168/files/TR3MJBW080_SHOE_LEFT_GLOBAL_MENS_TREE_RUNNER_JET_BLACK_WHITE.png?v=1751165486",
    "https://cdn.shopify.com/s/files/1/1104/4168/files/TR3MJBW080_SHOE_BACK_GLOBAL_MENS_TREE_RUNNER_JET_BLACK_WHITE.png?v=1751165486",
    "https://cdn.shopify.com/s/files/1/1104/4168/files/TR3MJBW080_SHOE_TOP_GLOBAL_MENS_TREE_RUNNER_JET_BLACK_WHITE.png?v=1751165486"
  ],
  "product_link": "https://www.allbirds.com/products/mens-tree-runners",
  "product_name": "Men's Tree Runner - Jet Black (White Sole)",
  "product_type": "Shoes",
  "original_price": null,
  "published_date": "2026-09-25"
}
```

### List store products

Operation `list_store_products`, version 1. 1 credit per call.

List publicly published products from a Shopify store in catalogue or collection order, including variant prices and availability. Prices and stock reflect the store’s public storefront; some stores restrict catalogue access.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `page` | integer | no | `2` | Page of matching products, for example 1. |
| `store` | string | yes | `"tentree.com"` | Store website or a page on the store, for example allbirds.com or https://www.allbirds.com/collections/mens-shoes. |
| `keywords` | string | no | `"crew"` | Text that each product name must contain, such as runner. Case-insensitive; leave blank for all names. |
| `collection` | string | no | `"Men's Active Shoes"` | Exact collection name to list, such as Men’s Active Shoes. Leave blank for all products. |
| `max_results` | integer | no | `3` | Maximum matching products returned per page, for example 50. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "store"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "minimum": 1,
      "description": "Page of matching products, for example 1.",
      "x-fous-developer": true,
      "examples": [
        2
      ]
    },
    "store": {
      "type": "string",
      "description": "Store website or a page on the store, for example allbirds.com or https://www.allbirds.com/collections/mens-shoes.",
      "examples": [
        "tentree.com",
        "allbirds.com",
        "https://www.allbirds.com/collections/mens-active-shoes"
      ]
    },
    "keywords": {
      "type": "string",
      "default": "",
      "description": "Text that each product name must contain, such as runner. Case-insensitive; leave blank for all names.",
      "examples": [
        "crew",
        "veryunlikelynonexistentzzzx"
      ]
    },
    "collection": {
      "type": "string",
      "default": "",
      "description": "Exact collection name to list, such as Men’s Active Shoes. Leave blank for all products.",
      "examples": [
        "Men's Active Shoes"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 50,
      "maximum": 250,
      "minimum": 1,
      "description": "Maximum matching products returned per page, for example 50.",
      "x-fous-developer": true,
      "examples": [
        3,
        2
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "store": "tentree.com",
      "keywords": "crew",
      "max_results": 3
    },
    {
      "store": "allbirds.com",
      "collection": "Men's Active Shoes",
      "max_results": 3
    },
    {
      "page": 2,
      "store": "https://www.allbirds.com/collections/mens-active-shoes",
      "collection": "Men's Active Shoes",
      "max_results": 2
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `products` | array |  |  |
| `products[].tags` | array |  |  |
| `products[].brand` | string or null | `"tentree"` |  |
| `products[].currency` | string | `"USD"` |  |
| `products[].in_stock` | boolean | `true` |  |
| `products[].variants` | array |  |  |
| `products[].product_id` | integer or null | `8468279460026` |  |
| `products[].lowest_price` | number or null | `78` |  |
| `products[].product_link` | string | `"https://tentree.com/products/floral-heritage-crew-meteorite-black-hazelnut"` |  |
| `products[].product_name` | string | `"Floral Heritage Crew"` |  |
| `products[].product_type` | string or null | `"Womens"` |  |
| `products[].shopify_handle` | string | `"floral-heritage-crew-meteorite-black-hazelnut"` |  |
| `products[].main_image_link` | string or null | `"https://cdn.shopify.com/s/files/1/2341/3995/files/Black-Women_s-Graphic-Sweatshirt-TCW6629-6591_1.png?v=1785365544"` |  |
| `products[].last_updated_date` | string or null | `"2026-09-29"` |  |
| `products[].price_before_discount` | number or null | `140` |  |
| `store_name` | string | `"Tentree"` |  |

**Example input**

```json
{
  "store": "tentree.com",
  "keywords": "crew",
  "max_results": 3
}
```

**Example output**

```json
{
  "products": [
    {
      "tags": [
        "crew-neck"
      ],
      "brand": "tentree",
      "currency": "USD",
      "in_stock": true,
      "variants": [
        {
          "sku": "TCW6629-6591-XS",
          "price": 78,
          "in_stock": true,
          "variant_id": 46235239022778,
          "option_names": "METEORITE BLACK HAZELNUT / XS"
        }
      ],
      "product_id": 8468279460026,
      "lowest_price": 78,
      "product_link": "https://tentree.com/products/floral-heritage-crew-meteorite-black-hazelnut",
      "product_name": "Floral Heritage Crew",
      "product_type": "Womens",
      "shopify_handle": "floral-heritage-crew-meteorite-black-hazelnut",
      "main_image_link": "https://cdn.shopify.com/s/files/1/2341/3995/files/Black-Women_s-Graphic-Sweatshirt-TCW6629-6591_1.png?v=1785365544",
      "last_updated_date": "2026-09-29",
      "price_before_discount": null
    }
  ],
  "store_name": "Tentree"
}
```

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@shopify",
  "visibility": "public",
  "operation": "get_store_product",
  "version": 1,
  "input": {
    "store": "https://www.allbirds.com/products/mens-tree-runners"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@shopify\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_store_product\",\n  \"version\": 1,\n  \"input\": {\n    \"store\": \"https://www.allbirds.com/products/mens-tree-runners\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@shopify",
  "visibility": "public",
  "operation": "get_store_product",
  "version": 1,
  "input": {
    "store": "https://www.allbirds.com/products/mens-tree-runners"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

Or describe the data in plain language: send `{"api":"@shopify","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Compare product prices across stores.
- Track public product availability.
- Find products by name or collection.
- Review product variants and options.
- Build a catalogue of publicly listed products.

## FAQ

### Is Fous affiliated with Shopify?

No. Fous is not affiliated with Shopify. This workflow reads the public shop.app website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a Shopify account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from shop.app when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 29, 2026.

### What products does a store list?

List store products returns publicly published products for a store, optionally filtered by product name or collection.

### What variants and prices does a product have?

Get store product returns variant prices, availability, options, and the lowest variant price.

### Is a product available to buy?

List store products and Get store product return availability for products or their variants.

## Related

- [Sephora API](https://fous.com/workflows/sephora.md): Sephora provides US beauty products, shopping information, product details, and customer reviews; prices and availability may change.
- [Apple Store API](https://fous.com/workflows/apple-store.md): Apple Store shows current public-store prices and configurations, compares prices across up to 15 countries at latest ECB rates, checks local pickup without reservations, and lists currently shown refurbished products.
- [Amazon API](https://fous.com/workflows/amazon.md): Amazon returns publicly shown product listings, prices, details, ratings, reviews, current best sellers, and Today's Deals; availability and content vary by store, location, and access.
- [Nike API](https://fous.com/workflows/nike.md): Nike returns country-specific listings and details, including prices, sizes, availability and reviews, plus publicly shown upcoming or recently stocked SNKRS releases with local launch times.
- [Nordstrom API](https://fous.com/workflows/nordstrom.md): Search clothing, shoes, and beauty products at Nordstrom.
- [Walmart API](https://fous.com/workflows/walmart.md): Walmart helps shoppers find products from Walmart and marketplace sellers, view details, prices, ratings and reviews; availability uses Walmart’s default location, not ZIP codes.
- [H&M API](https://fous.com/workflows/hm.md): H&M offers clothing and home shopping, with country-specific prices and online size stock; product details reflect current catalog information.
- [AliExpress API](https://fous.com/workflows/aliexpress.md): AliExpress returns product listings and selected product details, including prices, variants, reviews, and destination-specific shipping options shown for the displayed variant.
- [All Commerce workflows](https://fous.com/workflows/category/commerce)
