Judge.me Reviews Scraper — Shopify Store & Product Reviews
Pricing
from $1.20 / 1,000 reviews
Judge.me Reviews Scraper — Shopify Store & Product Reviews
Judge.me reviews scraper — export every review from any Shopify store running judge.me. Whole store or a single product URL, server-side sort, rating and verified-buyer filters, photos, merchant replies, plus an optional store summary with a 1-5 star histogram. Pure HTTP, no API key
Pricing
from $1.20 / 1,000 reviews
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
Judge.me Reviews Scraper · Shopify Store & Product Reviews
Export judge.me reviews from any Shopify store — the whole store or a single product — straight from judge.me's own public review widget. Rating, title, body, reviewer, verified-buyer flag, date, photos, merchant reply and product link, one flat row per review.
Pure HTTP. No API key, no browser, no proxy, no CAPTCHA solver.

Why use this scraper
- It works on headless storefronts. Most judge.me scrapers resolve a product through Shopify's classic
/products/{handle}.jsonendpoint — which returns 404 on a Hydrogen / custom storefront. This actor reads the product id out of judge.me's own widget markup instead, so it resolves stores the others simply skip. Verified live:owalalife.com/products/freesip.json→ 404, this actor → 15 reviews in 18 seconds. - Whole store or one product, auto-detected. Paste a homepage, a collection page or a bare domain to walk the store's review feed; paste a
/products/{handle}URL to scope to that product. Mix both in one run. - Sorting happens on judge.me's side.
newest,highest_rating,lowest_rating,most_helpfulare passed through to the API — so "give me this store's 200 worst reviews" is one cheap run, not a full export you filter afterwards. - Filters are free. Rating and verified-buyer filtering runs before a row is written, so filtered-out reviews never count toward your item cap and are never billed.
- The fields people actually want. Photos, merchant replies, thumbs up/down, the verified-buyer flag and judge.me's transparency badge (which marks reviews imported from another provider) — not just a star count and a string.
- Optional store summary. One extra row per store with total review counts and a 1–5 star frequency histogram: a competitor's whole reputation profile without paging through 60,000 reviews.
- No wasted spend. A run started with no usable input stops before the first HTTP request and writes nothing to the dataset, so it bills no rows.
Overview
The output is flat, one row per review — not one row per store with a nested reviews array. That makes it drop straight into a spreadsheet, a warehouse table or a sentiment pipeline without unnesting.
Two row shapes land in the same dataset, tagged by a type field:
type | What it is | How many |
|---|---|---|
review | A single judge.me review | One per review collected |
store_summary | Review counts + 1–5 star histogram for a store | One per whole-store target, only when includeStoreSummary is on |
Filter on type downstream if you want them separated.
Supported inputs
| Input shape | Example | What you get |
|---|---|---|
| Store homepage / any store page | https://deathwishcoffee.com | The store's shop-wide review feed (store-level and product-level reviews mixed) |
| Bare domain | deathwishcoffee.com | Same — https:// is added for you |
*.myshopify.com host | owala.myshopify.com | Same, and it skips the domain-resolution fetch entirely |
| Product URL | https://owalalife.com/products/freesip | Only that product's reviews |
Explicit shopDomains entry | owala.myshopify.com | Same as a store URL, resolution skipped |
One thing worth knowing about headless stores. A store URL is resolved by reading the shop's myshopify.com identity out of the page. Classic Liquid themes publish it on every page, including the homepage. Fully headless storefronts (Hydrogen and friends) publish it only where judge.me's widget renders — the product pages. So for a headless store, hand it a product URL or the store's *.myshopify.com domain rather than the marketing homepage.
Not supported: stores that do not have judge.me installed (each such target is reported in the log with the reason and skipped, rather than silently returning zero rows), judge.me's separate Q&A feature, and anything behind a judge.me merchant login — this actor only reads the public widget.
Use cases
| You are a… | Use it to… |
|---|---|
| DTC / ecommerce brand | Pull your own store's reviews into BI, a warehouse or a CRM without a paid judge.me API tier |
| Competitive analyst | Snapshot a rival's rating histogram, then read their newest and their 1-star reviews |
| Agency or consultant | Bulk-export reviews across a client's catalogue for a UGC or testimonial audit |
| Product / CX team | Feed real customer wording into a sentiment or topic model |
| Lead-gen researcher | Pair with a Shopify-store discovery tool: find stores → measure review volume and sentiment |
How it works
- Classify. Each input is sorted into a product target (
/products/{handle}) or a store target (everything else).shopDomainsentries are always store targets. - Resolve. One fetch of the target page yields both the judge.me
shop_domainand — for product URLs — the numeric product id, taken from the review widget's owndata-idattribute. A*.myshopify.cominput skips this fetch entirely. - Walk. The public review endpoint is paginated (20 reviews per page, judge.me's own server-side cap) until the store's review ceiling, a page with no unseen reviews, or your per-URL cap is reached.
- Parse. Each review block is turned into a flat row. Two different judge.me widget generations are handled, so both older and current stores parse correctly.
- Filter. Rating and verified-buyer rules are applied before a row is emitted — dropped rows cost nothing.
- Emit. One row per review, deduplicated by judge.me's review id, plus the optional store-summary row.
Input configuration
| Field | Type | Default | Notes |
|---|---|---|---|
startUrls | array of strings | [] | Store or product URLs, auto-classified. Mix freely. |
shopDomains | array of strings | [] | Advanced. Explicit xxx.myshopify.com values; skips resolution. Always whole-store. |
maxItems | integer | 100 | Per URL, not per run — each target gets its own allowance. |
sortBy | select | newest | newest, highest_rating, lowest_rating, most_helpful. Applied by judge.me. |
ratingFilter | array of strings | [] | Keep only these exact star ratings, e.g. ["1"]. Empty = all ratings. |
verifiedOnly | boolean | false | Keep only judge.me verified-buyer reviews. |
includeStoreSummary | boolean | true | Emit the extra summary row per whole-store target. |
maxConcurrency | integer | 5 | Store/product targets processed in parallel. |
proxy | object | none | Leave empty. No proxy is used by default — the endpoint has no anti-bot. |
At least one of startUrls or shopDomains must be set. If both are empty the run stops immediately, writes a INPUT_GUARD record to the key-value store explaining what was missing, and bills no rows.
Example input
{"startUrls": ["https://owalalife.com","https://owalalife.com/products/freesip"],"maxItems": 200,"sortBy": "lowest_rating","ratingFilter": ["1", "2"],"verifiedOnly": true,"includeStoreSummary": true}
Output overview
Every review row carries the review itself, its author, its engagement signals, its media, the merchant's reply, and the product and store it belongs to. Every value below comes from a real run — no invented samples.
Output samples
type: "review" — a real 1-star review with a merchant reply
{"type": "review","reviewId": "58bdca57-7160-4c09-889b-9f6b38c51fde","rating": 1,"title": "Shipping concerns","body": "Since seeing these bottles online i decided to order my own with 2-3 days shipping i was excited to receive my bottle however after a week since ordering my bottle my tracking is still waiting on owala to give the bottle to the shipping company. I am very disappointed with this issue as it has been difficult to submit a real complaint as the ai helper seems to offer no real solution","reviewerName": "Adam","reviewerLocation": null,"verifiedBuyer": true,"reviewDate": "2026-08-11T09:58:40.000Z","reviewLanguage": null,"photos": [],"videos": [],"merchantReply": "We are sorry to hear about any issues you have run into with order! For shipping or fulfillment related concerns, we recommend filing a claim through Order Protection directly to receive an immediate resolution...","thumbsUp": 5,"thumbsDown": 3,"sourceBadge": "review_collected_from_store_visitor","productTitle": "FreeSip UK","productUrl": "https://checkout.owalalife.com/products/freesip-uk","storeUrl": "https://owalalife.com/products/freesip","shopDomain": "owala.myshopify.com","scrapedAt": "2026-08-12T20:20:27.435Z"}
type: "store_summary" — one per whole-store target
{"type": "store_summary","totalShopReviews": 408,"totalProductReviews": 67351,"averageRating": 4.55,"ratingHistogram": {"1": { "frequency": 4157, "percentage": 6 },"2": { "frequency": 1704, "percentage": 3 },"3": { "frequency": 2359, "percentage": 3 },"4": { "frequency": 3829, "percentage": 6 },"5": { "frequency": 55727, "percentage": 82 }},"storeUrl": "https://owala.myshopify.com","shopDomain": "owala.myshopify.com","scrapedAt": "2026-08-12T20:16:36.735Z"}
Key output fields
The review
| Field | Notes |
|---|---|
reviewId | judge.me's own id for the review — stable, use it as your primary key |
rating | 1–5 |
title | Often null — judge.me does not require a title |
body | The review text |
reviewDate | ISO 8601 UTC, normalised from two different widget date formats |
reviewLanguage | Two-letter code where judge.me records one, else null |
The reviewer and trust signals
| Field | Notes |
|---|---|
reviewerName | First name or display name as shown on the widget |
reviewerLocation | Populated only on stores that collect it |
verifiedBuyer | judge.me's verified-purchase flag |
sourceBadge | judge.me transparency badge — e.g. review_collected_from_store_visitor, review_written_in_shop_app, review_collected_from_another_provider (imported from AliExpress/Amazon/etc), or null for a plain organic review |
thumbsUp / thumbsDown | Helpfulness votes |
Media and merchant response
| Field | Notes |
|---|---|
photos | Array of full-size image URLs on review-images.judgeme.com |
videos | Array of video URLs; best-effort — most stores have none |
merchantReply | The store's public reply text, or null |
Context
| Field | Notes |
|---|---|
productTitle / productUrl | The reviewed product. null on store-level reviews, which judge.me supports alongside product reviews |
storeUrl | The URL you supplied for this target |
shopDomain | The resolved xxx.myshopify.com domain |
scrapedAt | ISO timestamp of collection |
Store summary
| Field | Notes |
|---|---|
totalShopReviews | Count of store-level (not product-specific) reviews |
totalProductReviews | Count of product reviews across the whole catalogue |
ratingHistogram | Per-star frequency and percentage |
averageRating | Weighted average across the histogram's numeric buckets (judge.me's unrated bucket is excluded from the average but kept in ratingHistogram) |
Pricing
Pay per event. No monthly rental.
| Event | Charged when | Price |
|---|---|---|
| Actor start | Once, when a run starts | $0.00005 |
| Review record | Per row written to the dataset | $0.0012 |
| Store summary record | Extra charge on top of the review-record price when a store-summary row is emitted | $0.002 |
So 1,000 reviews cost about $1.20, and each store-summary row costs $0.0032 in total. Turn includeStoreSummary off if you only want the reviews.
Reviews dropped by ratingFilter or verifiedOnly are never written and never billed. A run with no usable input writes no rows at all.
FAQ
Do I need judge.me API credentials? No. This reads the same public, unauthenticated widget endpoint that every storefront's review widget calls in a visitor's browser. There is no api_token anywhere in the actor.
Do I need a proxy? No. The endpoint showed no anti-bot behaviour in testing and works from ordinary datacenter IPs, so no proxy is used by default. The proxy input is there if you ever want to route through your own pool.
What if the store does not use judge.me? That target is skipped with an explicit reason in the log ("could not resolve a judge.me shop_domain") instead of silently returning nothing. Other targets in the same run continue normally.
My store has a custom domain and a headless frontend. Will it work? Yes — that is the case this actor is built for. The product id comes from judge.me's own widget block, which renders regardless of whether the storefront is Liquid, Hydrogen or fully custom. Point it at a product URL or the store's *.myshopify.com domain; a headless marketing homepage often carries no Shopify identity at all, so it is the one input shape that can fail to resolve.
Why is productTitle sometimes null? judge.me supports store-level reviews that are not attached to any product. Those rows have no product context. Product-scoped runs always have it.
Can I get only the 1-star reviews? Yes. Set ratingFilter: ["1"], and set sortBy: "lowest_rating" so judge.me serves them first. Filtered-out reviews are free.
Is maxItems per run or per URL? Per URL. Five store URLs with maxItems: 100 can produce up to 500 review rows. The run's overall charge limit, set in the Apify console, is the global ceiling that always wins.
Are reviews deduplicated? Yes, by judge.me's review id within each target, and pagination stops as soon as a page contains nothing new.
Support
Found a store it cannot resolve, or a field you need added? Open an issue on the actor's Issues tab in Apify Console with the store URL you tried — that is the fastest path to a fix.
Additional services
Need this shaped to your pipeline — a different row schema, a scheduled incremental feed, a webhook into your warehouse, or the same data joined with another source? Custom scraper work is available; open an issue or message through the Apify platform to discuss it.
Explore more scrapers
More review and directory scrapers from the same developer on the Apify Store — apify.com/memo23:
- Capterra Scraper — software products, reviews, categories and alternatives
- G2 Scraper — B2B software reviews and category rankings
- Yelp Scraper — local business listings and reviews
- Kununu Scraper — DACH employer reviews, salaries and jobs
- ReclameAqui Scraper — Brazilian consumer complaints
🤖 For AI Agents & LLM Apps
Purpose: Extracts judge.me product and store reviews from any Shopify storefront that has the judge.me app installed. Whole-store or single-product.
Minimal tested input:
{ "shopDomains": ["owala.myshopify.com"], "maxItems": 25 }
Input fields: startUrls (string[], store or /products/{handle} URLs), shopDomains (string[], *.myshopify.com), maxItems (int, per URL, default 100), sortBy (newest | highest_rating | lowest_rating | most_helpful), ratingFilter (string[] of "1"–"5"), verifiedOnly (bool), includeStoreSummary (bool, default true), maxConcurrency (int), proxy (object, optional).
Output fields — type: "review": type, reviewId, rating, title, body, reviewerName, reviewerLocation, verifiedBuyer, reviewDate, reviewLanguage, photos[], videos[], merchantReply, thumbsUp, thumbsDown, sourceBadge, productTitle, productUrl, storeUrl, shopDomain, scrapedAt.
Output fields — type: "store_summary": type, totalShopReviews, totalProductReviews, averageRating, ratingHistogram, storeUrl, shopDomain, scrapedAt.
Billing: $0.00005 per run start, $0.0012 per dataset row, plus $0.002 extra on each store_summary row. Rows removed by ratingFilter/verifiedOnly are not written and not billed.
Agent-relevant behaviour:
maxItemsis per input URL, not per run. Budget accordingly.- Empty
startUrlsand emptyshopDomains→ the run exits immediately, writes anINPUT_GUARDrecord to the key-value store, and pushes no dataset rows. - A target with no judge.me installation is skipped, not fatal; check the run log and
targetsFailedin the stats line. - No credentials, no proxy and no browser are required.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Judge.me, Shopify Inc., or any of their subsidiaries or affiliates. All trademarks are the property of their respective owners.
The Actor accesses only judge.me's own public review widget endpoint — the same unauthenticated, publicly served data that every storefront's review widget loads in an ordinary visitor's browser. It does not use private API tokens, authenticated endpoints, or any content behind a login, and it does not bypass access controls.
Users are responsible for ensuring their use complies with judge.me's and Shopify's Terms of Service, applicable data-protection law (GDPR, CCPA and equivalents), copyright in review content, and their own contractual obligations. Review text and reviewer names are personal data in many jurisdictions — handle them accordingly, and do not use the output to identify, profile or contact individual reviewers without a lawful basis. No scraped data is stored by the Actor's authors; results go directly to your own Apify dataset.
SEO Keywords
judge.me scraper, judge.me reviews scraper, scrape judge.me reviews, judge.me api alternative, judge.me export, judgeme review export, shopify reviews scraper, shopify product reviews export, shopify store reviews scraper, shopify review api, hydrogen storefront scraper, ecommerce reviews scraper, product review data extraction, verified buyer reviews, review rating histogram, review sentiment data, ugc review export, competitor review analysis, dtc brand research, judge.me json export, judge.me csv export, apify judge.me scraper