Data Tooly logo Data Tooly
Guide · E-commerce Intelligence

Scrape Product Reviews from Walmart, Target and Amazon

Scrape product reviews from Walmart, Target, Amazon and Shopify stores: inputs, sort order, real review fields, site limits and a Python complaint summary.

Published · Updated · By Omar Eldeeb

To scrape product reviews, collect them from the product's own review source with a fixed sort and a cap: one row per review with its rating, text, date, verified flag and the variant bought. Walmart and Target expose every review page; Amazon shows only its top reviews (8–13) to signed-out visitors. Sort by "Lowest rated" to get complaints first.

This guide covers what each site lets you reach, the inputs of an Apify actor that does it, a real review row, and a short Python script that turns the lowest-rated reviews into complaint counts without a paid AI model. Everything below was run on 2026-10-20 unless a date says otherwise.

What you can reach on each site

The table is from the actor's supported-sites list and our October 2026 cloud tests:

Source Reviews you get Sort honored in our tests
Walmart (walmart.com) All pages Lowest rated, Most recent
Target (target.com) All pages Lowest rated, Most recent
Amazon (24 storefronts) Only the top reviews on the product page, about 8 to 13 per product No: Amazon's own order (sortApplied = "Most relevant")
Shopify stores with Yotpo, Judge.me, Okendo or Stamped Reviews from the review widget All five sorts on a Yotpo store; "Most recent" seen on Judge.me and Okendo stores
WooCommerce stores From the store's own Store API not tested
AliExpress (best-effort site) All pages; some reviews are a rating with no text No: fell back to "Most relevant"
Flipkart (best-effort site) All pages not tested
Mercado Libre (best-effort site) Catalog URLs (/p/MLM…) only not tested

Amazon's full review pages ask visitors to sign in. A scraper that respects that limit only gets the reviews printed on the product page. When Amazon shows "Sign in to see customer reviews" instead, the actor reports the product as restricted rather than as an empty success.

Not reachable with this actor: Google Shopping reviews, Loox and Reviews.io widgets (the page's structured reviews are used instead), and sites the actor marks unsupported, such as eBay, Best Buy, Home Depot and Etsy.

The inputs

The E-commerce Product Scraper Pro actor has a review section with these fields:

Field What it does
reviewDetailsUrls Product pages to read reviews from
reviewListingUrls Category or search pages: reviews for the products listed on the first page
keywordReviews + marketplacesReviews A keyword searched on the chosen marketplaces; reviews for the products found on the first results page
sortReview Most recent, Most relevant, Most helpful, Highest rated or Lowest rated
maxReviewResults Cap for the whole run
maxItemsPerStartUrl Cap per input, so one product can't use up the run's cap
additionalReviewProperties Adds extra per-site fields

If a site doesn't support the sort you asked for, its default order is used. The row's sortApplied says which order the reviews really follow, and the input's status row says so too.

A keyword review search, as run today:

json
{
  "keywordReviews": "usb c cable",
  "marketplacesReviews": ["www.target.com", "www.walmart.com"],
  "sortReview": "Lowest rated",
  "maxItemsPerStartUrl": 2,
  "maxReviewResults": 4
}

The status row for each marketplace explained what happened:

text
Keyword "usb c cable" on www.target.com: 24 product(s) found on the first page; reviews read for 1, 1 had reviews; 2 review(s) delivered. Sort applied per source — Target: Lowest rated. Stopped at maxItemsPerStartUrl (2) for this input. Only the first listing page is read for reviews.
Keyword "usb c cable" on www.walmart.com: 60 product(s) found on the first page (first 60 used); reviews read for 1, 1 had reviews; 2 review(s) delivered. Sort applied per source — Walmart: Lowest rated. Stopped at maxReviewResults (4). Only the first listing page is read for reviews.

What a review row contains

A real Walmart row from today, with the reviewer's name removed:

json
{
  "recordType": "review",
  "productUrl": "https://www.walmart.com/ip/18928659757",
  "inputUrl": "https://www.walmart.com/ip/ONN-10-C-C-BRD-WHT/18928659757",
  "datePublished": "2026-10-09",
  "reviewBody": "melted sparked barely got fire out but it melted the place on my phone where c plugs in",
  "reviewRating": { "ratingValue": 1, "bestRating": 5 },
  "additionalProperties": { "verified": true, "helpfulVotes": 0, "unhelpfulVotes": 0, "variant": "Multipack quantity: 1", "syndicatedFrom": "bazaarvoice" },
  "reviewId": "443517198",
  "rating": 1,
  "title": null,
  "verified": true,
  "helpfulVotes": 0,
  "images": [],
  "variant": "Multipack quantity: 1",
  "productId": "18928659757",
  "productName": "Onn 10ft USB-C to USB-C Braided Charging Cable, USB-IF Certified, White - Compatible with iPhone, Samsung, Pixel, iPad Pro",
  "position": 1,
  "sortApplied": "Lowest rated",
  "site": "walmart-us",
  "source": "walmart",
  "scrapedAt": "2026-10-20T09:30:03.526Z"
}

Fields worth knowing:

  • rating is on the scale in bestRating (5 on these sites).
  • variant is the size, color or pack the reviewer bought, when the site says. It's how you tell whether complaints cluster on one variant. See scraping product variants for the variant data itself.
  • datePublished keeps the precision the site gives. Walmart gives a day, Target a full timestamp, and relative dates like "3 months ago" become a month (2026-07), never an invented day.
  • additionalProperties carries site extras: Target's incentivized and recommended flags, and Walmart's syndicatedFrom (reviews shown on Walmart but collected elsewhere).
  • author holds the reviewer's display name. You rarely need it; drop it before you store reviews.

Python: summarize complaints from the lowest-rated reviews

This script collects the lowest-rated reviews of a Walmart product and a Target product, then counts complaint themes with keyword lists. There's no AI model involved, so it costs nothing beyond the run and gives the same answer every time.

python
import os
import re
from collections import Counter
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("constructive_calm/ecommerce-product-scraper-pro").call(run_input={
    "reviewDetailsUrls": [
        {"url": "https://www.walmart.com/ip/ONN-10-C-C-BRD-WHT/18928659757"},
        {"url": "https://www.target.com/p/3-39-usb-c-to-usb-c-charging-cable-dealworthy-8482-white/-/A-89698753"},
    ],
    "sortReview": "Lowest rated",
    "maxItemsPerStartUrl": 3,     # per product, so one product can't use up the run cap
    "maxReviewResults": 5,        # run-wide cap; raise both for real analysis
})
reviews = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items()
           if r.get("recordType") == "review"]

# Complaint themes: a keyword list per theme. Edit these for your category.
THEMES = {
    "stopped working": r"stopp?ed working|no longer works?|didn.t work|doesn.t work|not working|died|dead",
    "physical damage": r"crack|fray|broke|wires? (?:visible|showing|exposed)|fell apart",
    "short lifespan": r"lasted|weeks?|months? ago|already",
    "fit / length": r"\bfit\b|loose|too? short|length",
    "overheating / safety": r"\bhot\b|overheat|melt|spark|smoke|fire",
    "wrong item": r"wrong item|received a|not as described|different (?:item|product)|ordered .{0,40}received",
    "general quality": r"cheap|flimsy|crap|junk|poor quality",
}

low = [r for r in reviews if (r.get("rating") or 5) <= 2]
counts = Counter()
for r in low:
    text = f"{r.get('title') or ''} {r.get('reviewBody') or ''}".lower()
    for theme, pattern in THEMES.items():
        if re.search(pattern, text):
            counts[theme] += 1

print(f"{len(reviews)} reviews, {len(low)} rated 1-2 stars")
for r in reviews:
    print(f"  {r['site']:<11}{r['rating']}* sort={r['sortApplied']:<13}{(r.get('reviewBody') or '')[:70]!r}")
print("Complaint themes in 1-2 star reviews:")
for theme, n in counts.most_common():
    print(f"  {theme:<26}{n}/{len(low)}")

Output on 2026-10-20 (pip install apify-client, APIFY_TOKEN set):

text
5 reviews, 5 rated 1-2 stars
  target     1* sort=Lowest rated 'Bought 3 months ago and it’s already cracked with wires visible in mul'
  target     1* sort=Lowest rated "piece of crap. don't buy!!"
  target     1* sort=Lowest rated 'to short of a cord'
  walmart-us 1* sort=Lowest rated 'melted sparked barely got fire out but it melted the place on my phone'
  walmart-us 1* sort=Lowest rated 'Ordered Braided USB-C to USB Cable. Received Braided USB-C Cable'
Complaint themes in 1-2 star reviews:
  physical damage           1/5
  short lifespan            1/5
  general quality           1/5
  fit / length              1/5
  overheating / safety      1/5
  wrong item                1/5

Five reviews is a demonstration, not a finding. For a real read, raise maxItemsPerStartUrl to 100–200 per product. The Target product had 95 reviews and the Walmart one 38, so a few hundred covers them all. Then read a handful of reviews behind each count before you trust it. Keyword themes miss misspellings ("minths") and sarcasm, and one review can hit several themes.

Two ways to make the counts more useful:

  • Split by variant. If most "too short" complaints are on the 3 ft version, that's a sizing problem, not a quality one.
  • Compare against "Most recent". Run the same products sorted by Most recent every week. A theme that grows in recent reviews points to a new batch or a supplier change, while the lowest-rated sort mostly shows the worst reviews of all time.

Holiday season: check the 1-star reviews before the deal

Black Friday is Friday, November 27, 2026, and Cyber Monday is November 30. Before you feature a product in a promotion, or buy a heavily discounted one, pull its lowest-rated reviews and look for safety or failure themes. A deep discount on an item with a cluster of "melted" or "stopped working" reviews isn't a deal. If you sell, a weekly Most recent run through November and December catches new complaints while there's still time to act, for example by fixing a listing or pausing a promotion. The holiday sales calendar has the 2026–2027 sale dates. To check the discount itself, see how to spot fake Black Friday discounts.

Cost

Pay per event, from the actor's pricing table: one review row is $0.0016 on Apify's FREE plan tier and $0.00056 on GOLD, plus $0.005 per run start. The README's example of 500 Target reviews is 500 × $0.00056 + $0.005 = $0.285 on GOLD; on FREE it's 500 × $0.0016 + $0.005 = $0.805. Review pages that need a residential proxy add a per-MB traffic fee. Apify's free plan includes $5 of usage every month, with no credit card required. There's no free trial inside the actor.

Do it without code

The free e-commerce price tracker builder creates a ready-to-run input for the actor's product section and shows a fixed example of the output. For reviews, use the review fields above in the actor's input form on Apify.

Disclosure: I built the actor and this site.

Sources: actor runs on 2026-10-20 (review sort and status text), our cloud test runs between 2026-10-17 and 2026-10-20 (per-site sort behavior and Amazon review counts), and the actor's README (supported-sites table, limitations, pricing).

Quick answers

Can you scrape all Amazon reviews of a product?

Not without signing in. Amazon shows only a set of top reviews on the product page (8 to 13 per product in our October 2026 tests) and asks visitors to sign in for the full review pages. A scraper that doesn't log in gets those top reviews, in Amazon's own order.

How do I get only the negative reviews of a product?

Sort by lowest rating at the source, so the 1- and 2-star reviews come first, then cap the number you collect. With the E-commerce Product Scraper Pro actor that's "sortReview": "Lowest rated" plus maxReviewResults. Walmart, Target and Yotpo-based Shopify stores honored that sort in our tests; Amazon and AliExpress fell back to their default order.

Is it legal to scrape product reviews?

Reviews are publicly visible, but they're written by people and often carry a name, so they can be personal data. Read each site's terms, collect only what you need, and drop reviewer names you don't need. This isn't legal advice; ask a lawyer if you're unsure.

How do I analyze product reviews without an LLM?

Group the 1- and 2-star reviews into themes with keyword lists (for example 'stopped working', 'cracked', 'too short') and count how many reviews mention each theme. It's free, repeatable and easy to check by reading the matching reviews.

Open the free E-commerce price tracker tool →

Written by Omar Eldeeb, who also builds the tools and Apify actors mentioned here. Links to apify.com carry an affiliate parameter — see the disclosure.