---
title: "Review scraping"
description: "Review scraping for product and customer feedback: text, star ratings, dates and replies from Amazon, Google, Yelp, Trustpilot, G2 and app stores as JSON."
canonical: https://www.zenrows.com/use-cases/review-scraping
updated: 2026-10-18
---

# Review scraping

Review scraping is collecting customer reviews from public pages, such as review text, star rating, date, reviewer label and business reply, across every page of results. Zenrows fetches review pages from Amazon, Google, Yelp, Trustpilot, G2 and app stores through protected access, handles pagination and "load more" buttons, and returns reviews as structured JSON.

## Sample output: reviews from one product page

```json
{
  "url": "https://www.example-reviews.com/review/example-software.com?page=3",
  "subject": "Example Software",
  "average_rating": 4.1,
  "total_reviews": 2318,
  "page": 3,
  "reviews": [
    {
      "review_id": "r_6619a0",
      "rating": 2,
      "title": "Export keeps timing out",
      "text": "Reports over 10k rows fail to export. Support replied quickly but the fix took two weeks.",
      "date": "2026-10-11",
      "reviewer": "Verified customer",
      "country": "GB",
      "verified": true,
      "reply": { "date": "2026-10-12", "text": "Thanks for flagging this, a fix shipped in 4.2." }
    },
    {
      "review_id": "r_6619b4",
      "rating": 5,
      "title": "Setup in an afternoon",
      "text": "Connected our CRM and had dashboards the same day.",
      "date": "2026-10-09",
      "reviewer": "Verified customer",
      "country": "US",
      "verified": true,
      "reply": null
    }
  ]
}
```

An illustrative page of reviews with ratings, dates and the business reply kept on each review. Reviewer names are left as labels.

## What teams do with review scraping

Review data feeds voice-of-customer work: what buyers praise, what makes them leave, and how a product compares with its rivals. The jobs differ mostly in which sites they read and how often.

| Job | Data you collect | Typical sources |
|---|---|---|
| Product feedback for product teams | Review text, rating, product variant, date | Amazon, Walmart, Best Buy, MediaMarkt product pages |
| Competitor review tracking | New reviews and rating changes for rival products | G2, Capterra, Trustpilot, App Store, Google Play |
| Local business reputation | Reviews, ratings and owner replies per location | Google Maps, Yelp, Healthgrades, Tripadvisor |
| Online review monitoring | New negative reviews, response times, unanswered reviews | Your own listings on every review site |
| Hospitality and travel feedback | Review scores, stay dates, traveller type, comments | Booking.com, Tripadvisor, Expedia, Google Hotels |
| Review datasets for analysis | Full history of reviews with metadata, deduplicated | Any of the above, backfilled once and then updated |

## Why review scraping breaks

Review sections tend to be well protected, and they usually load after the rest of the page. Scrapers fail in ways that look like success: a page with zero reviews, or the first ten reviews only.

| What breaks | What it looks like | How Zenrows handles it |
|---|---|---|
| Protected review sites | Large review platforms return CAPTCHA pages or a 200 with no reviews | Zenrows' stealth gets through protections such as DataDome and Cloudflare |
| Lazy-loaded reviews | The review section is empty in the HTML until you scroll | A full browser render with page actions that scroll and wait for the reviews to load |
| "Load more" and "Show all" buttons | You collect the first page of reviews and nothing after | Page actions click the button before the page is returned, or Browser sessions page through |
| Deep pagination | Hundreds of pages per product, with page limits on some sites | Generate page URLs and submit them all to Batch |
| Region and language filters | A site shows reviews from your IP's country first | Geotargeting sends the request from the market whose reviews you want |
| Layout changes | Selectors for rating stars break after a redesign | Extract returns structured review fields without selectors |

## How to scrape reviews with Zenrows

1. **Find the review URL pattern.** Open the reviews page and note how page two is addressed, such as `?page=2` or a cursor parameter.
2. **Define your fields.** Map rating, text, date, reviewer label and reply to CSS selectors, or let Extract return them.
3. **Walk the pages.** Request page after page until a page returns no reviews, or click "load more" with page actions when there are no page URLs.
4. **Collect only what is new.** Store review IDs, and on each run stop paging once you reach reviews you already have.
5. **Hand the text on.** Send the deduplicated reviews to your analysis, dashboards or alerting.

```python Python
# pip install requests
import json
import requests

REVIEWS_URL = "REVIEWS_URL"  # the product or business review page

# Example selectors: match them to the review site's markup
def review_page(n):
    params = {
        "apikey": "YOUR_ZENROWS_API_KEY",
        "url": f"{REVIEWS_URL}?page={n}",
        "mode": "auto",  # Adaptive Stealth Mode
        "css_extractor": json.dumps({
            "ratings": "article.review [data-rating] @data-rating",
            "dates": "article.review time @datetime",
            "texts": "article.review p.review-text",
        }),
    }
    return requests.get("https://api.zenrows.com/v1/", params=params).json()

def as_list(v):  # one match comes back as a string, several as a list
    return v if isinstance(v, list) else [v]

page, reviews = 1, []
while True:
    data = review_page(page)
    if not data.get("texts"):
        break
    reviews += zip(*(as_list(data[k]) for k in ("ratings", "dates", "texts")))
    page += 1
print(len(reviews), "reviews")
```

```bash cURL
curl -G "https://api.zenrows.com/v1/" \
  --data-urlencode "apikey=YOUR_ZENROWS_API_KEY" \
  --data-urlencode "url=PRODUCT_URL" \
  --data-urlencode "js_render=true" \
  --data-urlencode "premium_proxy=true" \
  --data-urlencode 'js_instructions=[{"scroll_y":3000},{"wait_for":"#reviews"},{"click":"#reviews button.load-more"},{"wait":1500},{"click":"#reviews button.load-more"},{"wait":1500}]' \
  --data-urlencode 'css_extractor={"ratings":"#reviews .stars @aria-label","texts":"#reviews .review-body"}'
```

```bash CLI
npx -y @zenrows/cli init
# One review page with your own field names
zenrows extract "REVIEWS_URL?page=1" --css '{"ratings":"article.review [data-rating] @data-rating","texts":"article.review p.review-text"}'
# Every page URL as one job: one {"url": "...?page=N"} per line
zenrows batch create review-pages.jsonl --wait
zenrows batch results JOB_ID --out reviews.jsonl
```

```text Claude Code (MCP)
# Connect once
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp

# Then ask:
Use Zenrows to collect the 50 most recent G2 reviews for each of PRODUCT_A, PRODUCT_B and PRODUCT_C. Return a table with product, rating, date and the main complaint in each review, then list the complaints that appear more than once.
```

## Which Zenrows product fits

| If you need to | Use | Why |
|---|---|---|
| Scrape reviews page by page with your own fields | [Fetch](/products/fetch) | You name the fields with CSS selectors; page actions scroll and click |
| Get review fields without maintaining selectors | [Extract](/products/extract) | Automatic structured extraction returns data that follows layout changes |
| Backfill thousands of review pages | [Batch](/products/batch) | Submit every page URL as one job |
| Page through reviews that need many clicks | [Browser](/products/browser) | Playwright or Puppeteer keeps one session across many "load more" clicks |
| Ask questions about reviews in plain language | [MCP Server](/mcp) | An agent fetches the pages and summarises them |

## What success looks like

| Measure | What good looks like | How to check it |
|---|---|---|
| Review completeness | Your review count per product matches the count the site shows | Compare stored reviews with the total on the page |
| Freshness | New reviews reach your data within one run of being posted | Track the gap between review date and collection date |
| Duplicate rate | Each review appears once, even after re-paging | Count repeated review IDs or text hashes |
| Field quality | Rating, date and text present on every review | Report empty fields per source after each run |
| Source coverage | Every site that matters for your category is collected on schedule | List sources with a missed run in the last month |
| Pages per new review | Monitoring runs stop paging soon after the last stored review | Pages fetched per run divided by new reviews stored |

## Review scraping FAQ

### What is review scraping?

Review scraping is the automated collection of customer reviews from websites such as Amazon, Google Maps, Yelp, Trustpilot, G2 and app stores. A review scraper reads each review's text, star rating, date, reviewer label and any reply, follows the pagination, and stores the result as structured data for analysis or monitoring.

### How do I scrape Google reviews?

Google reviews for a place load inside Google Maps as you scroll the review panel. Render the page in a full browser with page actions that scroll the panel and wait for reviews to load, or drive the panel with a Browser session for long histories. Keep the place ID with each review so locations stay separate.

### Can I build an Amazon reviews scraper with Zenrows?

Yes. Fetch the product's review pages with Adaptive Stealth Mode, and use geotargeting for the marketplace you study, such as the US or Germany. Name the rating, title, date, text and verified-purchase fields with CSS selectors, and page through by star filter to reach more reviews.

### Is there a reviews API for every site?

Some platforms offer official APIs to business owners for their own listings, usually with limits on history and fields. A review scraping API reads the public review pages instead, so the same request works for your listings and your competitors' across many sites. A common setup uses the official API for replying to your own reviews and scraping for competitor and cross-site coverage.

### How is review monitoring different from review scraping?

Review monitoring is the ongoing job: checking for new reviews on a schedule and alerting on negative ones or unanswered ones. Review scraping is the data collection underneath it. A monitoring run usually reads only the newest pages and stops at the first review it has already stored.

### Can I use scraped reviews for sentiment analysis?

Yes, and reviews are one of the most common inputs, because each comes with a star rating to check the model against. Keep text, rating, date, product and source together. For building labelled datasets across reviews, forums and social posts, see sentiment analysis data .

### Is it legal to scrape reviews?

Reviews are public, but they are written by people, so they can contain personal data. A safe default is to drop reviewer names and profile links and keep only the text and metadata you need. Respect each site's terms and do not republish reviews as your own content. For your specific use, ask your legal team.

### How do I collect only new reviews on each run?

Sort the review page by newest first, then page forward and stop at the first review ID you already stored. Where a site has no review ID, hash the date, rating and first line of text. A daily run on a busy product then reads one or two pages instead of the full history, and a weekly full pass catches edited or removed reviews.

## Related use cases

- [Sentiment analysis data](https://www.zenrows.com/use-cases/sentiment-analysis-data.md): Review text with ratings, forum threads and comments, cleaned and labeled for sentiment and NLP models.
- [Brand monitoring](https://www.zenrows.com/use-cases/brand-monitoring.md): Every mention of your brand in news, forums, reviews and search, as clean text for sentiment and alerts.
- [Ecommerce web scraping](https://www.zenrows.com/use-cases/ecommerce-web-scraping.md): Product, price, stock, review and seller data from Amazon, Walmart, eBay and Shopify stores, as JSON.
- [Hotel data scraping](https://www.zenrows.com/use-cases/hotel-data-scraping.md): Nightly rates, room types and parity gaps from Booking.com, Expedia, Google Hotels and brand sites.

Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
