Scrappa's GET /api/shopify/products returns the public catalog of a Shopify store as JSON.
Input
store is the store domain, for example allbirds.com. collection is a collection handle and returns only products of that collection. An unknown handle answers 422. limit is 1-250 (default 30). page times limit can not exceed 25000.
What you get
Per product: id, title, handle, url, vendor, product_type, tags, description_html, dates, available, price_min, price_max, options, variants (sku, price, compare_at_price, available, grams, taxable, featured_image) and images with variant_ids. currency is the store currency or null.
Stock
Shopify publishes only a stock flag. available is true or false. There is no quantity.
Pagination
next_page is set whenever the page has products, so a short page does not end the list. An empty page ends it (next_page is null). The page you get is always the page you asked for.
Credits
1 credit per successful request. Stores without a public catalog answer 422 (CATALOG_UNAVAILABLE) and cost nothing.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
1 required parameter needed before sending a request.
3 optional filters available.
string
Required
Store domain, for example allbirds.com.
allbirds.com
integer
Optional
Page number. Default 1.
1
integer
Optional
Products per page, 1-250. Default 30.
1
string
Optional
Collection handle to filter by.
example
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
data
meta
success
{
"data": {
"page": 1,
"count": 1,
"limit": 1,
"store": "allbirds.com",
"currency": "USD",
"products": [
{
"id": 1234567890,
"url": "https://allbirds.com/products/wool-runner",
"tags": [
"mens"
],
"title": "Wool Runner",
"handle": "wool-runner",
"images": [
{
"id": 1,
"alt": null,
"src": "https://cdn.shopify.com/example.jpg",
"width": 800,
"height": 800,
"position": 1,
"variant_ids": []
}
],
"vendor": "Allbirds",
"options": [
{
"name": "Size",
"values": [
"9",
"10"
],
"position": 1
}
],
"variants": [
{
"id": 1,
"sku": "WR-9",
"grams": 800,
"price": 98,
"title": "9",
"option1": "9",
"option2": null,
"option3": null,
"taxable": true,
"position": 1,
"available": true,
"featured_image": null,
"compare_at_price": null,
"requires_shipping": true
}
],
"available": true,
"price_max": 98,
"price_min": 98,
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-10-01T00:00:00Z",
"product_type": "Shoes",
"published_at": "2026-01-01T00:00:00Z",
"description_html": "<p>Everyday sneaker</p>"
}
],
"next_page": 2,
"collection": null
},
"meta": {
"credits": 1
},
"success": true
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Validation Error
A parameter is missing or invalid, or the url points to a private, local or non-public address. Not charged.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The request validation failed"
},
"success": false
}Site Unreachable Or Blocked
The site could not be fetched after several tries, or it blocked the request. Not charged.
{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The site could not be reached. Please retry shortly."
},
"success": false
}Catalog Unavailable Or Unknown Collection
The store has no public catalog (`CATALOG_UNAVAILABLE`), or the collection handle does not exist (`UNKNOWN_COLLECTION`). Not charged.
{
"error": {
"code": "CATALOG_UNAVAILABLE",
"message": "The store does not publish a public catalog."
},
"success": false
}Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Try It Live
Test this endpoint in our interactive playground with real data.