---
title: "Shopify"
description: "Shopify stores through the shared marketplace schema: search across stores, list one store's catalog, and read a product and its reviews."
---

## Operations

| Operation | Endpoint | Returns | Price |
|---|---|---|---|
| [Search](/docs/api-reference/shopify/search) | `GET \| POST /v1/shopify/search` | `SearchResult` | $0.001 |
| [Image Search](/docs/api-reference/shopify/image-search) | `POST /v1/shopify/image-search` | `SearchResult` | $0.001 |
| [Catalog](/docs/api-reference/shopify/catalog) | `GET \| POST /v1/shopify/catalog` | `SearchResult` | $0.001 |
| [Product](/docs/api-reference/shopify/product) | `GET \| POST /v1/shopify/product` | `Product` | $0.001 |
| [Reviews](/docs/api-reference/shopify/reviews) | `GET \| POST /v1/shopify/reviews` | `ReviewPage` | $0.001–$0.007 |

**No `browse`.** The other marketplaces let you list a category with no keyword; Shopify cannot.
Shopify search requires `query`. And there is no category to browse *by*: Shopify is millions of independent stores rather than one taxonomy, so a collection id
means something only inside a single shop. `/v1/shopify/browse` therefore 404s rather than serving an
empty page that would read as "this category is out of stock". To list **one store's** products — its whole
catalog or one collection — use [`catalog`](/docs/api-reference/shopify/catalog).

**No `categories` either.** It exists to hand you ids for `browse`; with no `browse` there is
nothing for them to do, and no cross-merchant tree to build them from.

Shopify is not one store. Search results span many independent shops; `catalog` lists one shop's products, and
`product` and `reviews` address one shop's product.

**Shopify search is always live.**

## The ID Format

Shopify ids are composite — `shop/handle`:

```
us.giesswein.com/wool-sneaker-women
```

A search item's `id` is already in this form, so search chains straight into `product` and `reviews`
with no store-discovery step. A full product URL is accepted too.

## What Actually Arrives

**search items**

| Field | Fill |
|---|---|
| `title` | ~99% |
| `price` `url` | ~95% |
| `imageUrl` `seller` | ~90% |
| `rating` | ~85% |

**product**

| Field | Fill |
|---|---|
| `title` `price` `brand` | ~100% |
| `inStock` `variants` `seller` `media.images` | ~98% |
| `options` | ~60–78% |

`seller` is effectively always present because it is derived from the shop host. `options` is lower
because single-variant products carry a placeholder axis that is excluded rather than reported.

Shopify is the densest marketplace here for `brand`, `inStock` and `variants`, and the thinnest for the
detail-page extras Amazon carries — there is no `reviewSummary`, `reviewAspects` or `offers`.

## Things Specific to Shopify

**Variants are not separately fetchable.** A colour is a SKU inside one product, not its own product, so
`variant.productId` is absent — you already have everything after one call.

**Results span many merchants.** Two items in one search result can come from two unrelated shops with
different shipping, returns and currencies. `seller` tells you which.

**Shipping is not priced until checkout**, so `delivery.cost` is absent. That is "not stated", not free.
