Product Reviews AU [$1π°] Listings and Reviews Scraper
Pricing
from $1.00 / 1,000 results
Product Reviews AU [$1π°] Listings and Reviews Scraper
From $1/1K. Scrape and extract detailed product and business reviews from ProductReview.com.au with advanced filters, business info, and review insights. It supports location/category search, custom queries, proxy rotation, and flexible dataset outputs.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(1)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
49
Total users
5
Monthly active users
20 hours ago
Last modified
Categories
Share
ProductReview.com.au Scraper
A fast, lean scraper for productreview.com.au, Australia's largest consumer reviews portal. Pulls listing summaries (rating, review counts, contact info, FAQs) and full review bodies with author, attachments, and replies. Costs a fraction of typical alternatives and finishes most runs in seconds.
Why This Scraper
- Two input modes. Filter mode lets you pick a category plus filters. URL mode lets you paste explicit URLs (search, category, or direct listing) and ignores filters.
- Two output shapes. Listings output emits one row per listing with up to 10 preview reviews embedded. Reviews output emits one row per review with a
sourceListingpointer. - Multi-URL. URL mode accepts a list. Each URL is auto-routed by shape (
/c/,/search, or/listings/<slug>). - Lightweight. Around 80 to 256 MB peak memory, well below typical scraper resource use.
- Honest per-page cap. productreview.com.au caps category and search results at 30 per URL and doesn't paginate via URL grammar. The actor surfaces this in logs and caps
limitaccordingly in listings output. - Apify-native proxy. Optional Apify residential proxy lets you push concurrency without tripping per-IP throttles.
Data You Get
Sample shape. Values are illustrative placeholders, not from a live listing.
Listings output (one row per listing)
| Field | Example |
|---|---|
id | 00000000-0000-0000-0000-000000000001 |
name | Sample Lighting Co. |
slug | sample-lighting-co |
detailsUrl | https://www.productreview.com.au/listings/sample-lighting-co |
brand.name | Sample Brand |
categories[].name | Lighting Shops |
locations[].name | Victoria |
statistics.rating | 4.5 |
statistics.numberOfReviews | 1234 |
isDiscontinued | false |
featuredReview.title | Sample featured review title |
contact.email | support@example.com |
contact.phone | +61000000000 |
address.formatted | Sample St, Sample Suburb, VIC 0000, Australia |
description | Full company description appears here. |
faqs[].question | Sample question? |
logoUrl | https://cdn.productreview.com.au/resize/brand-logo/00000000 |
pictureUrl | https://cdn.productreview.com.au/resize/listing/00000000 |
totalReviews | 1234 |
pagesScraped | 1 |
reviewPages | 42 |
reviews[] | up to 10 preview reviews from page 1 |
Reviews output (one row per review)
| Field | Example |
|---|---|
id | aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa |
rating | 5 |
title | Sample review title |
body | Sample review body text. |
submittedAt | 2026-01-01T00:00:00.000Z |
hasVerifiedPurchase | true |
images[].url | https://cdn.productreview.com.au/resize/review-attachment/00000000 |
author.displayName | Reviewer Name |
author.locationName | Sample City |
comments[] | array of replies and follow-ups |
sourceListing.id | 00000000-0000-0000-0000-000000000001 |
sourceListing.name | Sample Lighting Co. |
sourceListing.slug | sample-lighting-co |
sourceListing.detailsUrl | https://www.productreview.com.au/listings/sample-lighting-co |
sourceListing.brand | Sample Brand |
sourceListing.rating | 4.5 |
sourceListing.numberOfReviews | 1234 |
How to Use
1. Filter mode + listings output. Preview shops in a category.
{"mode": "search","outputType": "listings","category": "home-garden-shops","limit": 20,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AU" }}
2. Filter mode + reviews output. Top reviews from a filtered category.
{"mode": "search","outputType": "reviews","category": "lighting","location": "victoria_au","sortBy": "rating","limit": 200,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AU" }}
3. URL mode. Every review for one listing.
{"mode": "url","outputType": "reviews","urls": ["https://www.productreview.com.au/listings/sample-lighting-co"],"limit": 1000,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AU" }}
4. URL mode. Multi-URL with mixed shapes.
{"mode": "url","outputType": "listings","urls": ["https://www.productreview.com.au/c/home-garden-shops","https://www.productreview.com.au/search?q=lighting","https://www.productreview.com.au/listings/sample-lighting-co"],"limit": 10}
URLs are auto-routed: /c/<cat> and /search are processed as search-result pages. /listings/<slug> skips straight to a listing detail. Filter-mode fields (category, searchQuery, location, etc.) are ignored in URL mode.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | enum search | url | search | Input dispatch. search builds a URL from filters. url uses the urls[] list. |
outputType | enum listings | reviews | listings | Row shape. Listings is one row per listing with embedded preview reviews. Reviews is one row per review with sourceListing pointer. |
category | string | home-garden-shops | Filter mode only. Category slug. The actor builds /c/<slug>. |
searchQuery | string | (empty) | Filter mode only. Appended as ?q=. |
location | string | (empty) | Filter mode only. Slug like victoria_au. Inserted as /c/<cat>/l/<loc>. |
showDiscontinued | boolean | false | Filter mode only. Include discontinued entries. |
sortBy | enum | (default) | Filter mode only. One of relevance, rating, numberOfReviews, popularity, lowestPrice, highestPrice. |
urls | string[] | one direct listing URL | URL mode only. Each URL auto-routed by shape. |
limit | int | 20 | Universal cap on output rows. Listings: max listings (per-URL hard cap of 30 from the site). Reviews: max review rows. |
maxConcurrency | int (1 to 50) | 4 | Max in-flight requests. With residential proxy you can push 8 to 10. |
proxy | object | (none) | Apify proxy config. Recommended: RESIDENTIAL, country AU. |
resumeFromRunId | string | (empty) | Continue ONE specific interrupted run/dataset without re-returning or re-charging its rows. |
incrementalMode | boolean | false | Recurring monitoring of the same search/URL list. Later runs return only NEW/UPDATED/REAPPEARED rows by default. |
stateKey | string | (auto-derived) | Incremental mode only. Name a monitoring campaign, or leave empty to derive one from the search/URL settings. |
emitUnchanged | boolean | false | Incremental mode only. Also return (and bill) rows unchanged since the last run, marked UNCHANGED. |
emitExpired | boolean | false | Incremental mode only. Also return (and bill) rows no longer found, marked EXPIRED. Only fires after a fully-scanned run (not capped, resumed, or truncated by this site's ~30-result-per-page pagination limit). |
Resume & recurring updates (incremental mode)
Two different features, both under the input's "Resume & recurring updates" section:
resumeFromRunIdcontinues ONE specific interrupted run β paste a previous run or dataset ID and this run appends only rows it hasn't already collected there.incrementalModeis for scheduling this actor again and again against the SAME search or URL list. The actor remembers what it saw last time (keyed on mode + category/searchQuery/location/sortBy/showDiscontinued/urls β never onlimit,proxy, or other connection settings) and classifies every row asNEW,UPDATED,UNCHANGED,REAPPEARED, orEXPIRED. OnlyNEW/UPDATED/REAPPEAREDare returned by default; turn onemitUnchanged/emitExpiredto also get (and be billed for) the rest.
EXPIRED rows are only produced once a run has fully scanned its tracked scope. Note that this site does not support paging a category/search past its first page (~30 results) β for a category larger than that, this actor can only ever see its first page, so EXPIRED will not fire for it regardless of limit; it fires for url mode and for searches small enough to fit on one page.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape β the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record β not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify β Settings β Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Output Example
Sample shape. Values are illustrative placeholders.
Listings output
{"id": "00000000-0000-0000-0000-000000000001","name": "Sample Lighting Co.","slug": "sample-lighting-co","detailsUrl": "https://www.productreview.com.au/listings/sample-lighting-co","brand": { "id": null, "name": "Sample Brand", "slug": "sample-brand", "url": "https://example.com", "isManaged": false },"contact": { "email": "support@example.com", "phone": "+61000000000", "website": "https://example.com" },"categories": [{ "name": "Lighting Shops", "level": "leaf", "hook": null, "ancestors": [] }],"locations": [{ "name": "Victoria", "shortName": "VIC", "slug": "victoria_au", "level": "state" }],"statistics": { "rating": 4.5, "numberOfReviews": 1234, "numberOfQuestions": 12, "ratingDistribution": [700, 300, 100, 80, 54] },"isDiscontinued": false,"featuredReview": null,"highlightedReviews": [],"address": { "streetAddress": "Sample St", "suburb": "Sample Suburb", "state": "VIC", "postcode": "0000", "country": "Australia", "formatted": "Sample St, Sample Suburb, VIC 0000, Australia" },"businessHours": null,"description": "Full company description appears here.","faqs": [],"specifications": {},"logoUrl": "https://cdn.productreview.com.au/resize/brand-logo/00000000","pictureUrl": "https://cdn.productreview.com.au/resize/listing/00000000","pictures": [],"createdAt": "2020-01-01T00:00:00.000Z","totalReviews": 1234,"reviewPages": 42,"pagesScraped": 1,"reviews": [],"scrapedAt": "2026-01-01T00:00:00.000Z"}
Reviews output
{"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa","rating": 5,"title": "Sample review title","body": "Sample review body text.","submittedAt": "2026-01-01T00:00:00.000Z","hasVerifiedPurchase": true,"attachments": [],"images": [],"author": { "id": null, "displayName": "Reviewer Name", "locationName": "Sample City" },"comments": [],"sourceListing": {"id": "00000000-0000-0000-0000-000000000001","name": "Sample Lighting Co.","slug": "sample-lighting-co","detailsUrl": "https://www.productreview.com.au/listings/sample-lighting-co","brand": "Sample Brand","rating": 4.5,"numberOfReviews": 1234}}
Plan Requirement
| Apify plan | Default setup | Recommended for larger runs |
|---|---|---|
| Free | Datacenter proxy (default). Fine for small runs at maxConcurrency: 2 to 4. | (residential not available on free) |
| Paid | Datacenter proxy (default). | Switch to residential for higher throughput: apifyProxyGroups: ["RESIDENTIAL"], apifyProxyCountry: "AU". You can then push maxConcurrency: 8 to 10. |
The site throttles bursts from a single IP, so datacenter (small IP pool) with high concurrency may trigger 403 retries. Residential (large pool) absorbs the burst.