# Shop.app Product Review Scraper

> Shop.app Product Review Scraper is a paid API for AI agents from api.scrapeforagents.tech, paid per call via x402, $0.025/call, status unknown (last checked 2026-10-02).

Scrapes and filters public product reviews from shop.app product pages by URL or product ID, with rich filtering options for date, score, keywords, and reply status.

## Facts

- Endpoint: POST https://api.scrapeforagents.tech/v1/app?utm_source=zero.xyz
- Price: $0.025/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/shop-app-product-review-scraper-3114fae5
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_QBGOWvDKso3uW0J335POr

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 shop-app-product-review-scraper-3114fae5 -d '<json body>'
```

Example prompt: Can you pull the 50 most recent 1-star and 2-star reviews from these two shop.app product URLs that are at least 100 characters long and don't have a merchant reply yet? Sort them by newest first.

## When to prefer this

Choose this endpoint when you need structured review data from shop.app / Shopify product pages with fine-grained filtering by date, star rating, keyword, review length, helpfulness votes, or merchant reply status. It is especially useful when you need to process multiple products in one call via productUrls array. Prefer this over general web scrapers when the target is specifically shop.app product review pages, since it returns clean structured JSON rather than raw HTML.

## Known failure modes

- Invalid or inaccessible shop.app product URL returns empty result set (not charged)
- Product ID not found on shop.app returns empty items array
- Date range with no matching reviews returns count 0 and empty items (not charged)
- Keyword filter with no matches returns empty result set (not charged)
- Network timeout on large review sets may return partial results
- Invalid enum value for sortBy or merchantReplyFilter causes request rejection

## 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 matched reviews and an array of review items, each containing review ID, store name, product ID, product URL, product name, merchant name, total rating count, and average rating for the product.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "dateTo": {
   "type": "string",
   "description": "Keep reviews submitted on or before this date (YYYY-MM-DD)."
  },
  "sortBy": {
   "enum": [
    "newest",
    "oldest",
    "highest",
    "lowest",
    "recommended"
   ],
   "type": "string",
   "default": "newest",
   "description": "Order returned by the public review endpoint."
  },
  "dateFrom": {
   "type": "string",
   "description": "Keep reviews submitted on or after this date (YYYY-MM-DD)."
  },
  "keywords": {
   "type": "array",
   "description": "Keep reviews whose title or body contains any listed keyword, ignoring case."
  },
  "maxItems": {
   "type": "integer",
   "default": 0,
   "minimum": 0,
   "description": "Hard cap on reviews across all products. Set 0 for no total cap."
  },
  "maxScore": {
   "type": "integer",
   "maximum": 5,
   "minimum": 1,
   "description": "Keep reviews with at most this many stars."
  },
  "minScore": {
   "type": "integer",
   "maximum": 5,
   "minimum": 1,
   "description": "Keep reviews with at least this many stars."
  },
  "minThumbsUp": {
   "type": "integer",
   "minimum": 0,
   "description": "Keep reviews with at least this many helpful votes."
  },
  "productUrls": {
   "type": "array",
   "description": "Public shop.app product URLs or numeric product IDs."
  },
  "minReviewLength": {
   "type": "integer",
   "minimum": 0,
   "description": "Minimum number of characters in the review body."
  },
  "merchantReplyFilter": {
   "enum": [
    "all",
    "with_reply",
    "without_reply"
   ],
   "type": "string",
   "default": "all",
   "description": "Keep all reviews, only reviews with a merchant reply, or only those without one."
  },
  "maxReviewsPerProduct": {
   "type": "integer",
   "default": 100,
   "minimum": 0,
   "description": "Maximum matching reviews per product. Set 0 to collect all reachable public reviews."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "count": 1,
  "items": [
   {
    "id": null,
    "store": null,
    "productId": null,
    "productUrl": null,
    "productName": null,
    "merchantName": null,
    "productRatingCount": null,
    "productAverageRating": null
   }
  ],
  "product": "app"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/shop-app-product-review-scraper-3114fae5/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)
