ResellerRatings Merchant Reviews Scraper avatar

ResellerRatings Merchant Reviews Scraper

Pricing

from $1.50 / 1,000 reviews

Go to Apify Store
ResellerRatings Merchant Reviews Scraper

ResellerRatings Merchant Reviews Scraper

Scrape the full review archive for any ResellerRatings merchant — past page 1, with incremental delta runs. HTTP-only, no browser, no proxy. 41 flat fields per review.

Pricing

from $1.50 / 1,000 reviews

Rating

0.0

(0)

Developer

Piquno

Piquno

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

Share

Pull the complete review archive for any ResellerRatings merchant — not just the first page. HTTP-only, no browser, no proxy. 41 flat fields per review, ready for CSV or Excel.

$1.50 per 1,000 reviews. No charge for empty rows.


Why this one

ResellerRatings is a React app. The review list is rendered client-side and is not in the delivered HTML — CSS selectors return zero records, which is why most attempts at this site produce an actor that runs cleanly and collects nothing.

This actor reads the embedded state blob the page ships with, so it gets all 15 reviews per page, every page, with fields the rendered page never shows.

It also handles the trap that quietly breaks the obvious implementation: ?page=2 returns HTTP 200 and silently re-serves page 1. Verified — 15 of 15 identical review ids. Only path pagination (/store/{slug}/page/2) actually advances. An actor built on the query form looks healthy in the log and collects the same page forever.

Built for repeat runs

Reviews are served newest-first, so incremental mode stops as soon as it reaches a review it has already seen. A scheduled run on a merchant with 24,000 reviews costs a page or two, not the whole archive.

This actorTypical alternative
Reads past page 1Yes, to the merchant's real page countOften page 1 only
PaginationPath-based, verified disjoint?page=N silently repeats
Repeat runsStops at first seen reviewRe-bills full history
Empty rowsNever billedCommonly billed
FiltersApplied before billingOften applied after
Missing dataStays nullSometimes inferred

Input

{
"stores": ["TopMags", "Newegg"],
"maxReviewsPerStore": 500,
"onlyWithComment": true,
"maxRating": 2
}

stores accepts a bare slug (TopMags) or a full URL (https://www.resellerratings.com/store/TopMags).

Setting maxRating: 2 with no minimum gives you just the complaints — the most common reason people buy this data.

Monitoring a merchant

Set incremental: true and give each schedule its own stateKey. Only reviews the actor has not seen before are emitted, tagged changeType: "new".


Output

One flat row per review, with the merchant's rating context attached to every row.

{
"reviewId": "31928221",
"storeName": "TopMags",
"storeSlug": "TopMags",
"storeWebsite": "https://www.topmags.com",
"storeLifetimeRating": 4.73,
"storeReviewCount": 5928,
"starRating": 5,
"comment": "Fast & Easy to subscribe - thank you!",
"date": "2026-04-08T00:00:00.000Z",
"userName": "Reviewer557527747",
"badgeType": "Verified",
"usefulVotes": 0,
"merchantReplied": false,
"reviewUrl": "https://www.resellerratings.com/store/TopMags/review/31928221",
"fieldsPopulated": 26
}

Field fill rates

Measured over a live page. Published so you can judge completeness before you buy, not after.

FieldFill
reviewId, comment, starRating, date, userName100%
title~60% (many reviews have a body but no headline)
city~20%
merchantReplyTextonly where the merchant actually replied

storePhone, storeEmail and storePostalCode come from the page's structured-data block and are present only for merchants who published them.


Pricing

EventPrice
Review$0.0015 ($1.50 / 1,000)
Actor start$0.00005

A row is billed only if it has a review id, and it is billed before it is pushed — so you are never charged for a row you did not receive, and never receive one you were not charged for. Rows removed by your filters are never billed. The actor honours the maximum charge per run you set in run options, and stops fetching once that budget is spent rather than burning compute it cannot bill.


Limitations — read before you buy

  • Large merchants are deep. 15 reviews per page means Newegg's 49,590 reviews are 3,306 requests. Use maxReviewsPerStore, date filters, or incremental rather than pulling everything in one run.
  • Star-only ratings exist. Many reviews carry a rating and no text. onlyWithComment is on by default so you are not billed for them; turn it off if you want the full distribution.
  • Individual review permalinks are constructed, not fetched. They are disallowed in robots.txt and unnecessary — every field is already on the store page.
  • Format risk. Reviews are read from the page's embedded state blob. If the site changes its internals the actor stops rather than silently returning partial data, and the log says so explicitly.

Running locally

npm install
npm test

Tests run against captured live pages in test/fixtures/ — no network required. They assert the things that actually break this scraper: 15 records per page, page 2 disjoint from page 1, and newest-first ordering.