ResellerRatings Merchant Reviews Scraper
Pricing
from $1.50 / 1,000 reviews
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
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 actor | Typical alternative | |
|---|---|---|
| Reads past page 1 | Yes, to the merchant's real page count | Often page 1 only |
| Pagination | Path-based, verified disjoint | ?page=N silently repeats |
| Repeat runs | Stops at first seen review | Re-bills full history |
| Empty rows | Never billed | Commonly billed |
| Filters | Applied before billing | Often applied after |
| Missing data | Stays null | Sometimes 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.
| Field | Fill |
|---|---|
reviewId, comment, starRating, date, userName | 100% |
title | ~60% (many reviews have a body but no headline) |
city | ~20% |
merchantReplyText | only 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
| Event | Price |
|---|---|
| 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, orincrementalrather than pulling everything in one run. - Star-only ratings exist. Many reviews carry a rating and no text.
onlyWithCommentis 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 installnpm 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.