# Shopify Reviews Scraper

> Shopify Reviews Scraper is a paid API for AI agents from api.scrapeforagents.tech, paid per call via x402, $0.03/call, status unknown (last checked 2026-10-02).

Extracts and filters customer reviews from Shopify store pages or individual product URLs, returning structured review data with rich filtering options.

## Facts

- Endpoint: POST https://api.scrapeforagents.tech/v1/shopify-reviews?utm_source=zero.xyz
- Price: $0.03/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/shopify-reviews-scraper-cc01eb39
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_--xlsTf_tOxlK_Re-WYrJ

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability shopify-reviews-scraper-cc01eb39 -d '<json body>'
```

Example prompt: Pull the 100 most recent verified reviews for https://gymshark.com/products/mens-flex-training-shorts, only include ones with written text, sorted newest first, and stop if a review is older than 2024-01-01.

## When to prefer this

Choose this endpoint when you need structured, filtered review data specifically from Shopify-powered stores, with fine-grained control over sort order, date ranges, ratings, media presence, and keyword matching. It is ideal for competitive intelligence, sentiment analysis pipelines, or review monitoring workflows where manual scraping is impractical. Prefer this over generic web scrapers when the target is confirmed to be a Shopify store, as it returns semantically typed fields (productHandle, storeDomain, verified status) rather than raw HTML.

## Known failure modes

- Non-Shopify URLs return empty or error results but are not charged
- Private or password-protected Shopify stores cannot be scraped
- Invalid URL format causes request rejection
- Overly restrictive filter combinations (e.g. verified + media + keyword + date) may return zero results
- Rate limiting or bot protection on the target store may cause partial or empty results
- Truncated or malformed product pages may yield incomplete review data

## How this service works

Pay-per-call structured web data. Failed or empty runs are not charged.

## Output

Returns a JSON object with a count of results and an array of review items, each containing fields such as input URL, store URL, store domain, product ID, product handle, row type, status, and error. Individual review items include review text, rating, reviewer details, date, media URLs, verified purchase flag, and merchant reply when available.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "sortBy": {
   "enum": [
    "newest",
    "oldest",
    "highest_rating",
    "lowest_rating",
    "most_helpful",
    "pictures_first",
    "videos_first",
    "media_first"
   ],
   "type": "string",
   "default": "newest",
   "description": "Order the collected reviews. Product summaries retain catalog order."
  },
  "maxItems": {
   "type": "integer",
   "default": 0,
   "minimum": 0,
   "description": "Stop after this many rows across all URLs. Zero means no overall cap."
  },
  "startUrls": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Public Shopify store homepages return product summaries; product URLs return individual reviews. Add one URL per line."
  },
  "verifiedOnly": {
   "type": "boolean",
   "default": false,
   "description": "Keep only reviews explicitly marked as verified purchases."
  },
  "filterEndDate": {
   "type": "string",
   "description": "Keep reviews published on or before this date, inclusive."
  },
  "filterKeyword": {
   "type": "string",
   "description": "Keep reviews whose title or body contains this phrase, ignoring case."
  },
  "filterRatings": {
   "type": "array",
   "items": {
    "enum": [
     "1",
     "2",
     "3",
     "4",
     "5"
    ],
    "type": "string"
   },
   "description": "Keep reviews with these ratings. Leave empty for all ratings."
  },
  "onlyWithMedia": {
   "type": "boolean",
   "default": false,
   "description": "Keep only reviews with a photo or video URL."
  },
  "reviewContent": {
   "enum": [
    "all",
    "with_text",
    "rating_only"
   ],
   "type": "string",
   "default": "all",
   "description": "Include all reviews, reviews with written text, or ratings without text."
  },
  "onlyWithPhotos": {
   "type": "boolean",
   "default": false,
   "description": "Keep only reviews with customer photo URLs."
  },
  "onlyWithVideos": {
   "type": "boolean",
   "default": false,
   "description": "Keep only reviews with customer video URLs."
  },
  "filterStartDate": {
   "type": "string",
   "description": "Keep reviews published on or after this date, inclusive."
  },
  "maxResultsPerUrl": {
   "type": "integer",
   "default": 50,
   "maximum": 1500,
   "minimum": 1,
   "description": "Maximum product summaries for each store URL or reviews for each product URL."
  },
  "merchantReplyOnly": {
   "type": "boolean",
   "default": false,
   "description": "Keep only reviews with a public merchant reply."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "count": 1,
  "items": [
   {
    "error": null,
    "status": null,
    "rowType": null,
    "inputUrl": null,
    "storeUrl": null,
    "productId": null,
    "storeDomain": null,
    "productHandle": null
   }
  ],
  "product": "shopify-reviews"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/shopify-reviews-scraper-cc01eb39/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.scrapeforagents.tech](https://www.zero.xyz/host/api.scrapeforagents.tech/llms.txt)
