# ProductReview Scraper \[$1/1K💰] | Reviews | Business Data (`ahmed_jasarevic/productreview-scraper`) Actor

\[$1/1K💰] Scrape ProductReview.com.au, Australia's largest review platform, and export business listings, verified-purchase reviews, ratings and business contacts (email, phone, ABN, address). For Australian brand monitoring, competitor review analysis, sentiment research and B2B leads.

- **URL**: https://apify.com/ahmed\_jasarevic/productreview-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ProductReview.com.au Scraper — Australian Business Listings, Reviews & Contacts

Scrape **ProductReview.com.au**, Australia's largest consumer review platform (millions of consumer reviews across 100,000+ products and services), for business listings, verified-purchase reviews, ratings, review text and business contact data. The extracted data powers brand reputation monitoring, competitor review analysis, customer sentiment research and Australian B2B lead generation.

### Main Use Cases

- **Brand reputation monitoring** for Australian businesses, brands and retailers
- **Competitor review analysis** and market benchmarking across AU categories
- **Customer sentiment analysis** and AI/NLP training datasets from Australian consumer reviews
- **Australian B2B lead generation** with business email, phone, ABN and address
- **Category market research** across home builders, cars, insurance, banks, appliances and more
- **Verified-purchase review filtering** for trustworthy, not incentivised, insight

### How It Works

You give the Actor category slugs (e.g. `home-builders`, `car-insurance`, `coffee-machines`), direct listing URLs (e.g. `/listings/great-southern-bank`) or individual review URLs. The Actor calls the same clean JSON API that the productreview.com.au frontend itself uses (`api.productreview.com.au`) — no browser rendering, no DOM parsing — and writes the results into two structured datasets: one for business/product **Listings**, one for **Reviews**.

On Apify you get API access, scheduling, webhooks, proxy rotation and JSON/CSV/Excel export out of the box.

### Scrape ProductReview.com.au Reviews Without the Official API

ProductReview.com.au does not provide a public data API for consumers. Scraping is the only practical way to get its review data in bulk, but the website is a React/Redux SPA served behind Cloudflare. Most generic scrapers render the full HTML in a browser — slow, fragile and expensive.

This Actor takes a different route: reconnaissance of the site's frontend JavaScript revealed that the website loads its data from a clean internal JSON API. The Actor calls those endpoints directly with a realistic browser User-Agent, which makes runs **faster, cheaper and far more stable** than browser-based scraping:

| Purpose | Endpoint |
|---|---|
| Enumerate a whole category | `POST https://api.productreview.com.au/api/search/au/listings` with `{"routeName":"www.public.category_search","categorySlug":"<slug>",...}` |
| Listing details + business info | `GET https://api.productreview.com.au/api/au/listings/<slug>/details` |
| Listing reviews | `GET https://api.productreview.com.au/api/au/listings/<slug>/reviews?page=<n>&limit=100` |
| Individual review | `GET https://www.productreview.com.au/reviews/<id>` → parse embedded `__ssr_data` JSON |

Because it uses JSON endpoints, the Actor can also **paginate through every listing in a category** — while the public category pages cap results at roughly 30 per URL, the search API returns each page of up to 30 listings for as many pages as you need.

### Input: Target Categories, Listings or Individual Reviews

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `categorySlugs` | array | No | `["cars"]` | Category slugs to enumerate, e.g. `cars`, `home-builders`, `car-insurance`, `coffee-machines`, `financial-services`. All listings in each category are discovered via the internal search API. |
| `listingUrls` | array | No | `["https://www.productreview.com.au/listings/great-southern-bank"]` | Direct listing URLs or bare slugs to scrape business info + reviews for. |
| `reviewUrls` | array | No | `[]` | Individual review URLs (`https://www.productreview.com.au/reviews/{reviewId}`) to scrape one review at a time. |
| `includeReviews` | boolean | No | `true` | Also scrape each listing's reviews (title, text, rating, date, author, verified-purchase flag). Set `false` for business/listing data only. |
| `maxListingsPerCategory` | integer | No | `50` | Max listings per category (1–1,000). |
| `maxReviewsPerListing` | integer | No | `100` | Max reviews per listing (1–5,000). |
| `maxItems` | integer | No | `500` | Hard cap on total records (listings + reviews) pushed to datasets (1–100,000). |
| `proxyConfiguration` | object | No | Apify proxy `AUTO` | Proxy setup; keep `useApifyProxy` on for large category runs. |

### Output: Structured Listings and Reviews Datasets

The Actor writes to **two named datasets** — `Listings` (default, one record per business/product) and `Reviews` (one record per individual review).

#### Listings dataset — business & product records

| Field | Type | Description |
|---|---|---|
| `url` / `slug` | string | Canonical listing URL and URL-friendly ID |
| `name` / `fullName` / `shortName` | string | Display name, full legal name, short name |
| `description` / `shortDescription` | string | Business/product blurb from the listing |
| `rating` | number | Overall star rating (0–5) |
| `reviewCount` | number | Total review count |
| `numberOfQuestions` | number | Q\&A section count |
| `ratingDistribution` | array | `[1★, 2★, 3★, 4★, 5★]` counts |
| `category` | string | Deepest category name |
| `categorySlugs` | array | Full category path slugs |
| `sourceCategory` | string | Category slug used to discover the listing |
| `brandName` / `brandUrl` | string | Brand name and official website |
| `officialLink` | string | Official website URL from the listing |
| `abn` | string | Australian Business Number |
| `email` | string | Business contact email |
| `phone` | string | Business phone number |
| `address` | string | Formatted business address |
| `openingHours` | array | Weekly opening hours (`from`/`to` per day, `specialConditions`) |
| `isDiscontinued` | boolean | Whether the product/business is discontinued |
| `tags` | array | Listing tags |

#### Reviews dataset — individual review records

| Field | Type | Description |
|---|---|---|
| `reviewId` / `url` | string | Review UUID and canonical review URL |
| `listingSlug` / `listingName` | string | Parent listing reference |
| `title` / `body` | string | Review title (often `null`) and full review text |
| `rating` | number | Star rating (0–5) |
| `submittedAt` | string | Submission date (ISO 8601) |
| `firstPublishedAt` / `modifiedAt` | string | Publication and last-edit timestamps |
| `authorName` / `authorId` | string | Reviewer display name and ID |
| `authorRegisteredAt` / `authorNumberOfReviews` | string / number | Reviewer account registration date and total review count |
| `hasVerifiedPurchase` | boolean | Verified-purchase flag — the review is tied to a proof of purchase |
| `isVerified` | boolean | Review verified by the platform's moderation team |
| `wasSolicitedByBrand` / `wasSolicitedByCatalog` | boolean | Review solicited via the brand/catalog review program |
| `incentivisedReview` | boolean | Reviewer was offered a reward/incentive |
| `numberOfLikes` / `numberOfDislikes` / `numberOfComments` | number | Reaction and comment counts |
| `approvalStatus` | string | Moderation status (`approved` / `pending` / `rejected`) |
| `visibility` | string | Visibility (`public` / `private`) |

### Example Input

```json
{
  "categorySlugs": ["home-builders"],
  "includeReviews": true,
  "maxListingsPerCategory": 50,
  "maxReviewsPerListing": 100,
  "maxItems": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

Reviews-only run for specific listings:

```json
{
  "listingUrls": [
    "https://www.productreview.com.au/listings/metricon",
    "https://www.productreview.com.au/listings/carlisle-homes"
  ],
  "includeReviews": true,
  "maxReviewsPerListing": 500,
  "maxItems": 1000,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Business-contact-only run (no reviews):

```json
{
  "listingUrls": ["great-southern-bank", "booktopia", "metricon"],
  "includeReviews": false,
  "maxItems": 200,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Example Output

#### Listing record (Listings dataset)

```json
{
  "url": "https://www.productreview.com.au/listings/great-southern-bank",
  "slug": "great-southern-bank",
  "name": "Great Southern Bank",
  "fullName": "Great Southern Bank",
  "shortName": "Great Southern Bank",
  "shortDescription": "Formerly known as CUA (Credit Union Australia).",
  "rating": 2.4,
  "reviewCount": 976,
  "numberOfQuestions": 28,
  "ratingDistribution": [499, 55, 26, 44, 352],
  "category": "Home Loans",
  "categorySlugs": ["services", "finance", "loans", "home-loans"],
  "brandName": "Great Southern Bank",
  "brandUrl": "https://www.greatsouthernbank.com.au/",
  "officialLink": "https://www.greatsouthernbank.com.au/",
  "abn": "44087650959",
  "email": "eaccess@gsb.com.au",
  "phone": "13 32 82",
  "address": "level 27/300 George St, Brisbane City QLD 4000, Australia",
  "openingHours": [
    { "from": { "time": "0800", "dayOfWeek": "monday" }, "to": { "time": "1900", "dayOfWeek": "monday" }, "specialConditions": null }
  ],
  "isDiscontinued": false
}
```

#### Review record (Reviews dataset)

```json
{
  "reviewId": "aefe180e-4403-53ff-aef6-98fc5221ab1b",
  "url": "https://www.productreview.com.au/reviews/aefe180e-4403-53ff-aef6-98fc5221ab1b",
  "listingSlug": "great-southern-bank",
  "listingName": "Great Southern Bank",
  "title": null,
  "body": "15 Sep 2023 - We will never ever forget or forgive what a terrible thing you did to us on this day...all because a staff member was 'offended'",
  "rating": 1,
  "submittedAt": "2026-09-15T22:05:36Z",
  "firstPublishedAt": "2026-09-15T22:39:48Z",
  "modifiedAt": "2026-09-16T07:26:23Z",
  "authorName": "Brian",
  "authorId": "c5864d38-fb7e-49d4-9df1-90495724cd25",
  "authorRegisteredAt": "2020-08-12T23:37:26Z",
  "authorNumberOfReviews": 21,
  "hasVerifiedPurchase": true,
  "isVerified": true,
  "wasSolicitedByBrand": false,
  "wasSolicitedByCatalog": false,
  "incentivisedReview": false,
  "numberOfLikes": 0,
  "numberOfDislikes": 0,
  "numberOfComments": 1,
  "approvalStatus": "approved",
  "visibility": "public"
}
```

### Build an Australian Consumer Reviews Dataset for Market Research

Every listing row carries the full 1–5 star rating distribution, total review count, category path and (where listed) business ABN, email, phone and address. Every review row carries full text, star rating, ISO date, author and verification flags — the fields market researchers need to build dashboards, compare brands within a category, and track rating trends over time. Runs are cheap because there is no browser: a typical listing (business info + 100 reviews) costs only a few cents of platform compute plus the per-result event.

To build a **category-wide dataset**, put the category slug in `categorySlugs` and raise `maxListingsPerCategory` (up to 1,000) and `maxReviewsPerListing` (up to 5,000). The Actor paginates the search API automatically, so you get the whole category — not just the first page of results — and `maxItems` (up to 100,000) caps total spend.

### Extract Verified-Purchase Reviews for Customer Sentiment Analysis

Not all reviews are equal. This Actor exposes two critical flags on every review row:

- `hasVerifiedPurchase` — the review is linked to a proof of purchase, verified by the platform's moderation team before publication.
- `incentivisedReview` — the reviewer was offered a reward, useful for filtering out potentially biased feedback.

For sentiment analysis, NLP pipelines and AI training datasets, these flags let you train on **verified-purchase, non-incentivised reviews only** — a noise filter that generic scrapers don't provide.

### Find Australian Business Contacts for B2B Lead Generation

ProductReview.com.au lists thousands of Australian businesses and brands — banks, home builders, insurers, appliance brands, online shops and more. Each listing record can include the **business email, phone number, ABN, physical address and opening hours**, so a single run yields both reputation data and outreach-ready contact data. Set `includeReviews` to `false` for a pure business-contact dataset, then export to CSV and load straight into your CRM or lead list.

### Competitive Positioning

| Capability | crawlergang/productreview-au-scraper | clootrack/productreview-au-scraper | This actor |
|---|---|---|---|
| Price per 1,000 records | $4.33 | $7.00 | **~$2.97** |
| Verified-purchase flag on reviews | ✓ | not listed | ✓ |
| Incentivised-review flag on reviews | not listed | not listed | **✓** |
| Business ABN / email / phone / address | website only | website only | **✓** |
| Max records per run | 1,000 | — | **100,000** |
| Two clean datasets (listings + reviews) | single flat dataset | single dataset | **✓** |

Switching from an existing ProductReview scraper? The two most common pain points we verified in the current alternatives are solved here:

| Pain point in other ProductReview scrapers | How this Actor handles it |
|---|---|
| Start only from a single listing or one category page, stuck at the site's ~30 results-per-page cap | Full category enumeration via the site's internal search API — every listing in the category, paginated automatically |
| Business data limited to name, rating and website | Full contact block: ABN, email, phone, address, opening hours |
| Everything dumped into one flat dataset | Two named datasets (Listings / Reviews) with clean per-row schemas |

### Integrations & Automation

- **Apify API** — run the Actor programmatically from any language and read the datasets (`/v2/acts/ahmed_jasarevic~productreview-scraper/run-sync-get-dataset-items`).
- **Webhooks** — trigger downstream pipelines when a run finishes.
- **Export** — JSON, CSV, Excel, XML or RSS straight from the Apify dataset.
- **Schedules** — for **brand reputation monitoring**, run a weekly task that scrapes your brand's listing and only the newest reviews; for **price/rating trend tracking**, run monthly category sweeps. Recurring runs also keep the datasets fresh for dashboards and alerts.

### Related Actors

- [memo23/trustpilot-scraper-ppe](https://apify.com/memo23/trustpilot-scraper-ppe) — the most-used Trustpilot review scraper; same consumer-review dataset use cases globally.
- [ahmed\_jasarevic/trustpilot-reviews-scraper](https://apify.com/ahmed_jasarevic/trustpilot-reviews-scraper) — Trustpilot reviews and ratings, the global counterpart to ProductReview.
- [ahmed\_jasarevic/consumeraffairs-reviews-scraper](https://apify.com/ahmed_jasarevic/consumeraffairs-reviews-scraper) — ConsumerAffairs reviews and complaints, the US counterpart.
- [ahmed\_jasarevic/booking-com-hotel-review-scraper](https://apify.com/ahmed_jasarevic/booking-com-hotel-review-scraper) — hotel review and sentiment data for the travel vertical.
- [ahmed\_jasarevic/google-maps-business-data-scraper-free](https://apify.com/ahmed_jasarevic/google-maps-business-data-scraper-free) — Australian local business listings and contact data beyond review platforms.

### FAQ

**Why use this Actor instead of scraping the site manually?**
ProductReview.com.au has no public data API, limits browser scraping behind Cloudflare, and caps public category pages at roughly 30 results per URL. Manual copy-pasting of reviews doesn't scale. This Actor calls the website's own internal JSON API directly: it enumerates whole categories, extracts full review text plus the verified-purchase and incentivised flags, and returns everything as clean structured JSON — with scheduling, proxies and exports handled by Apify.

**What are the alternatives to ProductReview.com.au for Australian consumer reviews?**
For Australian market signals, the main review ecosystems are Google Reviews, Trustpilot (which operates in Australia and is often compared head-to-head with ProductReview), ConsumerAffairs, and category-specific communities. For bulk review data from ProductReview.com.au itself, the Apify Store lists 10+ ProductReview scrapers; this Actor prices below the two most-established ones (crawlergang at ~$4.33/1K and clootrack at ~$7.00/1K for ~$2.97/1K) while adding business contact data and two clean datasets.

**How do I scrape reviews for a specific business or brand on ProductReview.com.au?**
Paste the listing URL (e.g. `https://www.productreview.com.au/listings/metricon`) into `listingUrls` and set `maxReviewsPerListing` up to 5,000 to pull the full review history including the verified-purchase and incentivised flags.

**Does ProductReview.com.au have an API I can use to get review data?**
Not a public one for consumers. ProductReview offers paid tools to businesses for collecting and syndicating *their own* reviews (eShop/eCommerce integrations, XML feeds for Google Shopping) — not bulk access to everyone else's reviews. To build datasets across the platform, a scraper of this kind is the standard approach.

**Is scraping ProductReview.com.au legal?**
Scraping publicly available data for research and analysis is generally acceptable, but you are responsible for complying with the site's Terms of Service and applicable law. This Actor only accesses public pages and the site's own public-facing JSON endpoints, respects the site's rate limits, and requires no login, no CAPTCHA solving and no private credentials.

**Are ProductReview.com.au reviews verified?**
ProductReview verifies reviews tied to a proof of purchase (the `hasVerifiedPurchase` flag on each review row) and its moderation team reviews submissions before publication. This Actor extracts both the verified-purchase flag and the incentivised-review flag so you can separate genuine buyer feedback from incentivised opinions in your analysis.

**What categories can I scrape on ProductReview.com.au?**
Any category the site exposes — verified examples include `cars`, `home-builders`, `project-home-builders`, `car-insurance`, `insurance`, `business-insurance`, `financial-services`, `appliances` (e.g. `coffee-machines`), `electronics` (e.g. `mobile-phones`), `telecommunications`, `food-drink` and `shops`.

### SEO Keywords

productreview.com.au scraper, productreview.com.au api, australian consumer reviews dataset, australian product reviews scraping, productreview.com.au alternative, trustpilot australia alternative, brand reputation monitoring australia, competitor review analysis australia, customer sentiment analysis australia, verified purchase reviews, home builder reviews australia, car insurance reviews australia, health insurance reviews australia, car dealership reviews australia, bank reviews australia, home loan reviews, nbn internet provider reviews, coffee machine reviews australia, australian business leads, abn email phone data, review data for ai training

### For AI Agents & LLM Apps

**Purpose:** Returns structured business/product listings and individual customer reviews from ProductReview.com.au (Australia's largest consumer review platform) as JSON, in two named datasets.

**Minimal working input:**

```json
{
  "listingUrls": ["https://www.productreview.com.au/listings/great-southern-bank"],
  "maxItems": 100
}
```

**Variant — whole-category scrape:**

```json
{
  "categorySlugs": ["car-insurance"],
  "includeReviews": true,
  "maxListingsPerCategory": 50,
  "maxReviewsPerListing": 100,
  "maxItems": 500
}
```

**Variant — business contact data only:**

```json
{
  "listingUrls": ["metricon", "booktopia"],
  "includeReviews": false,
  "maxItems": 200
}
```

**Output fields (Listings dataset):** `url`, `slug`, `name`, `fullName`, `shortName`, `description`, `shortDescription`, `rating`, `reviewCount`, `numberOfQuestions`, `ratingDistribution`, `category`, `categorySlugs`, `sourceCategory`, `brandName`, `brandUrl`, `officialLink`, `abn`, `email`, `phone`, `address`, `openingHours`, `isDiscontinued`, `tags`
**Output fields (Reviews dataset):** `reviewId`, `url`, `listingSlug`, `listingName`, `title`, `body`, `rating`, `submittedAt`, `firstPublishedAt`, `modifiedAt`, `authorName`, `authorId`, `authorRegisteredAt`, `authorNumberOfReviews`, `hasVerifiedPurchase`, `isVerified`, `wasSolicitedByBrand`, `wasSolicitedByCatalog`, `incentivisedReview`, `numberOfLikes`, `numberOfDislikes`, `numberOfComments`, `approvalStatus`, `visibility`

**Behaviors an agent should know:**

- All three input modes — `categorySlugs`, `listingUrls`, `reviewUrls` — are processed together in one run as a union; there is no mode-priority order.
- `maxItems` (default 500, max 100,000) caps the **total** number of records across both datasets — listings and reviews both count toward it. Set it explicitly to control run cost.
- `includeReviews` defaults to `true`; set to `false` to get listing/business data only (much cheaper).
- Proxy: keep `useApifyProxy: true` (works with no further configuration). If you set `apifyProxyGroups`, the group must be one your Apify account actually has access to (e.g. `DATACENTER` requires a proxy add-on).
- `maxReviewsPerListing` default 100, max 5,000; `maxListingsPerCategory` default 50, max 1,000.
- Free Apify accounts are capped at **10 records per run** — for unlimited runs the caller needs a paid Apify plan.
- Bare listing slugs (`"metricon"`) work exactly like full listing URLs.

**Billing:** Pay-per-result — each record pushed to either dataset is billed ~US$0.00297 (≈$2.97 per 1,000 records), plus a small per-GB actor-start event. No browser compute, so runs are cheap.

### Legal & Compliance Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by** ProductReview.com.au Pty Ltd or any business listed on productreview.com.au.

The Actor accesses only publicly available data through productreview.com.au's public-facing web pages and the public JSON endpoints the website itself uses — it does not bypass login walls, doesn't solve CAPTCHAs, and doesn't use private credentials. It respects the site's rate limits.

You are responsible for complying with the productreview.com.au Terms of Service and applicable law when using the extracted data. Review records contain public reviewer display names; treat any personal data in the output responsibly. The listings dataset may include business contact details (email, phone, ABN, address) — do not use these for unsolicited commercial outreach in violation of applicable law (e.g. the Australian Spam Act 2003, or CAN-SPAM/GDPR where they apply). This section is not legal advice.

# Actor input Schema

## `categorySlugs` (type: `array`):

Productreview.com.au category slugs to enumerate listings from (e.g. "cars", "coffee-machines", "home-builders"). All listings in each category are discovered via the internal search API.

## `listingUrls` (type: `array`):

Direct listing URLs (https://www.productreview.com.au/listings/great-southern-bank) or bare slugs (great-southern-bank) to scrape business info + reviews for.

## `reviewUrls` (type: `array`):

Individual review URLs (https://www.productreview.com.au/reviews/{reviewId}) to scrape one review at a time.

## `includeReviews` (type: `boolean`):

Whether to also scrape the reviews of each listing (title, text, rating, date, author, verified-purchase flag).

## `maxListingsPerCategory` (type: `integer`):

Maximum number of listings to scrape per category.

## `maxReviewsPerListing` (type: `integer`):

Maximum number of reviews to scrape per listing.

## `maxItems` (type: `integer`):

Hard cap on the total number of records (listings + reviews) pushed to the dataset.

## `proxyConfiguration` (type: `object`):

Select proxies to be used by the crawler. Enable the Apify proxy to rotate IP addresses and reduce the risk of being blocked by productreview.com.au.

## Actor input object example

```json
{
  "categorySlugs": [
    "cars"
  ],
  "listingUrls": [
    "https://www.productreview.com.au/listings/great-southern-bank"
  ],
  "includeReviews": true,
  "maxListingsPerCategory": 50,
  "maxReviewsPerListing": 100,
  "maxItems": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

## `reviews` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "categorySlugs": [
        "cars"
    ],
    "listingUrls": [
        "https://www.productreview.com.au/listings/great-southern-bank"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/productreview-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "categorySlugs": ["cars"],
    "listingUrls": ["https://www.productreview.com.au/listings/great-southern-bank"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/productreview-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categorySlugs": [
    "cars"
  ],
  "listingUrls": [
    "https://www.productreview.com.au/listings/great-southern-bank"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call ahmed_jasarevic/productreview-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/productreview-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WjdZ6wfst3v3TsBcf/builds/ElcVdU1EPw8cQXYoU/openapi.json
