Judge.me Reviews Scraper — Shopify Store & Product Reviews avatar

Judge.me Reviews Scraper — Shopify Store & Product Reviews

Pricing

from $1.20 / 1,000 reviews

Go to Apify Store
Judge.me Reviews Scraper — Shopify Store & Product 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

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

4 days ago

Last modified

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.

How the Judge.me Reviews Scraper works


Why use this scraper

  • It works on headless storefronts. Most judge.me scrapers resolve a product through Shopify's classic /products/{handle}.json endpoint — 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_helpful are 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:

typeWhat it isHow many
reviewA single judge.me reviewOne per review collected
store_summaryReview counts + 1–5 star histogram for a storeOne per whole-store target, only when includeStoreSummary is on

Filter on type downstream if you want them separated.


Supported inputs

Input shapeExampleWhat you get
Store homepage / any store pagehttps://deathwishcoffee.comThe store's shop-wide review feed (store-level and product-level reviews mixed)
Bare domaindeathwishcoffee.comSame — https:// is added for you
*.myshopify.com hostowala.myshopify.comSame, and it skips the domain-resolution fetch entirely
Product URLhttps://owalalife.com/products/freesipOnly that product's reviews
Explicit shopDomains entryowala.myshopify.comSame 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 brandPull your own store's reviews into BI, a warehouse or a CRM without a paid judge.me API tier
Competitive analystSnapshot a rival's rating histogram, then read their newest and their 1-star reviews
Agency or consultantBulk-export reviews across a client's catalogue for a UGC or testimonial audit
Product / CX teamFeed real customer wording into a sentiment or topic model
Lead-gen researcherPair with a Shopify-store discovery tool: find stores → measure review volume and sentiment

How it works

  1. Classify. Each input is sorted into a product target (/products/{handle}) or a store target (everything else). shopDomains entries are always store targets.
  2. Resolve. One fetch of the target page yields both the judge.me shop_domain and — for product URLs — the numeric product id, taken from the review widget's own data-id attribute. A *.myshopify.com input skips this fetch entirely.
  3. 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.
  4. 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.
  5. Filter. Rating and verified-buyer rules are applied before a row is emitted — dropped rows cost nothing.
  6. Emit. One row per review, deduplicated by judge.me's review id, plus the optional store-summary row.

Input configuration

FieldTypeDefaultNotes
startUrlsarray of strings[]Store or product URLs, auto-classified. Mix freely.
shopDomainsarray of strings[]Advanced. Explicit xxx.myshopify.com values; skips resolution. Always whole-store.
maxItemsinteger100Per URL, not per run — each target gets its own allowance.
sortByselectnewestnewest, highest_rating, lowest_rating, most_helpful. Applied by judge.me.
ratingFilterarray of strings[]Keep only these exact star ratings, e.g. ["1"]. Empty = all ratings.
verifiedOnlybooleanfalseKeep only judge.me verified-buyer reviews.
includeStoreSummarybooleantrueEmit the extra summary row per whole-store target.
maxConcurrencyinteger5Store/product targets processed in parallel.
proxyobjectnoneLeave 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

FieldNotes
reviewIdjudge.me's own id for the review — stable, use it as your primary key
rating1–5
titleOften null — judge.me does not require a title
bodyThe review text
reviewDateISO 8601 UTC, normalised from two different widget date formats
reviewLanguageTwo-letter code where judge.me records one, else null

The reviewer and trust signals

FieldNotes
reviewerNameFirst name or display name as shown on the widget
reviewerLocationPopulated only on stores that collect it
verifiedBuyerjudge.me's verified-purchase flag
sourceBadgejudge.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 / thumbsDownHelpfulness votes

Media and merchant response

FieldNotes
photosArray of full-size image URLs on review-images.judgeme.com
videosArray of video URLs; best-effort — most stores have none
merchantReplyThe store's public reply text, or null

Context

FieldNotes
productTitle / productUrlThe reviewed product. null on store-level reviews, which judge.me supports alongside product reviews
storeUrlThe URL you supplied for this target
shopDomainThe resolved xxx.myshopify.com domain
scrapedAtISO timestamp of collection

Store summary

FieldNotes
totalShopReviewsCount of store-level (not product-specific) reviews
totalProductReviewsCount of product reviews across the whole catalogue
ratingHistogramPer-star frequency and percentage
averageRatingWeighted 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.

EventCharged whenPrice
Actor startOnce, when a run starts$0.00005
Review recordPer row written to the dataset$0.0012
Store summary recordExtra 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:

  • maxItems is per input URL, not per run. Budget accordingly.
  • Empty startUrls and empty shopDomains → the run exits immediately, writes an INPUT_GUARD record 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 targetsFailed in 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