Shopify Store API — Product Catalog as JSON
Documentation menu
FetchLayer FetchLayer API

List a store's products

Walk a store's catalog. Each product comes back with its title, handle, vendor, product type, tags, description as plain text and as HTML, publish and update timestamps, every image with its dimensions, the full option matrix, and every variant with price, compare-at price, SKU, barcode, option values, weight and availability — plus the product's price range, currency and whether anything on it is discounted. Collect several pages in one request with pages, or resume with a previous response's nextCursor. Per-unit stock is not published here; use /product-detail for that.

POST /products Catalog
https://api.fetchlayer.dev/shopify-stores/products
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

store string required

Store domain, or any URL on the store — for example example.com, https://example.com/products/foo, or a myshopify.com domain.

limit number optional

Maximum items returned (max 2000), or -1 for everything available. (default: 30)

pages number optional

Pages of results to collect in one request (max 40), or -1 for the maximum allowed. Each page counts as one request.

cursor string optional

Resume from a previous response's nextCursor.

format string optional

json or markdown. Markdown returns the same result rendered for a model to read. (default: json)

timeoutMs number optional

Per-request time limit in milliseconds (max 120000).

Response Fields

products

List a store's products

requestedUrl string

The store URL this result corresponds to.

scrapedAt string

When the store was read, as an ISO timestamp.

transport string

Always shopify-storefront — the upstream source this data came from.

notes string[]

Caveats about this specific result: a truncated walk, an upstream limit, or a field this store does not publish. Read it before treating a result as complete.

pagesScraped number

Pages actually collected. Each page counts as one request against your plan.

pagesRequested number

Pages the request asked for.

nextCursor string

Pass back as cursor to continue, or null when the listing is exhausted.

hasNextPage boolean

Whether more results are available beyond this response.

resultType string

Always product-list.

domain string

The store the products came from.

products object[]

The products, in the order the store publishes them.

products[].id string

The product's id on the store.

products[].handle string

The product's identifier in its store URL — what product-detail takes.

products[].title string

Product title.

products[].productUrl string

Canonical product page URL on the store.

products[].vendor string

Vendor or brand the store attributes the product to.

products[].productType string

The store's own product type for this item.

products[].tags string[]

Merchandising tags, often the store's internal taxonomy.

products[].description string

Description as plain text; descriptionHtml carries the original markup.

products[].publishedAt string

When the product was published, and createdAt / updatedAt alongside it.

products[].images object[]

Every image, each with url, downloadUrl, width, height, position, altText and the variants it belongs to.

products[].options object[]

The choices a buyer makes — for example Size and the sizes available.

products[].variants object[]

Every buyable version, with price, compareAtPrice, sku, barcode, optionValues, grams, requiresShipping, taxable and available.

products[].variants[].inventoryQuantity number

Units on hand. Published only by product-detail, and only by stores that track inventory.

products[].variantsTruncated boolean

True when the product has more variants than the store publishes; the first 250 are returned.

products[].priceMin string

Lowest variant price, with priceMax and currency alongside it.

products[].available boolean

True when at least one variant can be bought.

products[].onSale boolean

True when at least one variant carries a compareAtPrice above its price.

productCount number

Number of products in this response.

Request

curl -X POST "https://api.fetchlayer.dev/shopify-stores/products" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"store":"allbirds.com","limit":50,"pages":2}'

Response

{
  "resultType": "product-list",
  "domain": "allbirds.com",
  "productCount": 50,
  "pagesScraped": 2,
  "hasNextPage": true,
  "nextCursor": "cGFnZT0z",
  "products": [
    {
      "handle": "mens-tree-runners",
      "title": "Men's Tree Runners",
      "vendor": "Allbirds",
      "priceMin": "98.00",
      "priceMax": "98.00",
      "currency": "USD",
      "onSale": false,
      "variants": [
        {
          "sku": "TR-M-10-NAT",
          "title": "10 / Natural White",
          "price": "98.00",
          "compareAtPrice": null,
          "available": true
        }
      ]
    }
  ],
  "notes": []
}