# Business Reviews Aggregator - 6 Review Sites, One API (`vonsensey/business-reviews-aggregator-scraper-api`) Actor

Every review of any business or brand from six review sites in one run and one schema: TripAdvisor, Trustpilot, Sitejabber, ResellerRatings, ConsumerAffairs and PissedConsumer. Type a domain or paste a page URL. Full history, not just page one. Re-runs bill only what is new. Failures are free.

- **URL**: https://apify.com/vonsensey/business-reviews-aggregator-scraper-api.md
- **Developed by:** [Blackcube](https://apify.com/vonsensey) (community)
- **Categories:** Business, E-commerce, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Business Reviews Aggregator - 6 Review Sites, One API

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [Shopify Store Intelligence Suite](https://apify.com/vonsensey/shopify-store-leads-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper) · [Amazon Product Data Suite](https://apify.com/vonsensey/amazon-product-scraper-api)

**Every review of a business, from six review sites, in one run and one schema.** TripAdvisor, Trustpilot, Sitejabber, ResellerRatings, ConsumerAffairs and PissedConsumer — six review sites in one run, one schema, full history.

**A run that finds nothing costs nothing.** There is no run-start fee, error rows and the coverage report are free, and a re-run only bills reviews it has not delivered before.

### ⭐ Why this one

Every other review scraper on the Store reads **one** site. Merging six of them yourself means six Actors, six output shapes, six sets of date formats and star scales, and no way to tell whether any of them returned everything.

This returns one schema across all six, with **a star rating always rescaled to 1–5**, **dates as real ISO timestamps**, and — the part nobody else ships — **a per-source coverage row that says whether you got everything or hit a limit**, with the site's own total review count beside what was actually read.

### 🎯 Use cases

- **Reputation monitoring** — watch every site a client is reviewed on and get alerted the morning a one-star review appears.
- **Competitive research** — pull a rival's full review history and read what their customers complain about, in bulk.
- **Due diligence** — check a supplier's real standing across independent sites before signing.
- **Product and CX analytics** — feed thousands of verbatim reviews into a sentiment or topic model with no per-site cleanup.

### 🚀 Recipes

#### Basic: everything about one brand

Type the domain and let it fan out across Trustpilot, Sitejabber and PissedConsumer. No URLs to find.

```json
{ "targets": ["nike.com"], "maxReviewsPerBusiness": 100 }
```

#### A local venue: restaurant, hotel or attraction

Paste the TripAdvisor page URL straight from your address bar. It pages past the first 15 reviews.

```json
{
  "targets": ["https://www.tripadvisor.com/Restaurant_Review-g60713-d446798-Reviews-Eagle_Cafe-San_Francisco_California.html"],
  "maxReviewsPerBusiness": 200
}
```

#### Complaints only

One and two-star reviews across TripAdvisor, Trustpilot, Sitejabber, ResellerRatings, ConsumerAffairs and PissedConsumer. Filtered reviews are never charged.

```json
{
  "targets": ["nike.com"],
  "maxRating": 2
}
```

#### Daily watch: only what is new

Put this on a schedule. Reviews delivered by a previous run are skipped and never charged again.

```json
{
  "targets": ["nike.com", "adidas.com"],
  "onlyNewSinceLastRun": true,
  "stateName": "daily-watch",
  "maxCostUsd": 2
}
```

#### Ratings only, for tracking a score over time

One row per site with the aggregate rating and total review count, and **no review rows at all** — set the per-business depth to 0 and only the profile event fires.

```json
{ "targets": ["nike.com"], "maxReviewsPerBusiness": 0, "includeBusinessProfiles": true }
```

### 📚 Sources and measured coverage

Rivals claim coverage. This publishes it, and every run repeats it per business in a free coverage row.

| Site | What it covers | How deep | Measured field fill | Reviews sampled |
|---|---|---|---|---:|
| **TripAdvisor** | Restaurants, hotels, attractions | Full history — paged past the first 15 | 100% text · 100% rating · 100% reviewer · 100% permalink · 91% date | 163 |
| **Trustpilot** | Companies, by domain | Full history | 100% on text, rating, date, reviewer, headline, permalink and language | 661 |
| **Sitejabber** | Online businesses, by domain | Full history | 100% on text, rating, date, reviewer, headline and permalink | 686 |
| **ResellerRatings** | Retailers | **First 15 reviews only** — measured, and reported in every run | 100% text · 100% rating · 100% date · 100% reviewer · 93% headline | 30 |
| **ConsumerAffairs** | Brands and services | Full history | 100% text · 100% rating · 100% date · 100% reviewer · 100% home city | 125 |
| **PissedConsumer** | Brands, complaint-led | Full history | 100% text · 100% date · 100% permalink · 87% home city · 65% rating · 55% reviewer | 342 |

Those percentages are pooled from **2,007 real review rows** returned by this Actor on the Apify platform on 2026-08-27 — not from one sample page. Each one is also a floor asserted in the test suite, so a site that changes its markup fails a test here before it reaches you.

Owner replies: the `ownerReply` field is on every row, and measured **0% across 2,007 reviews** — none of the six sites published a business reply on the pages sampled. It fills when one appears; it is not claimed as coverage.

**Not covered, and why** — Yelp and Google reviews are deliberately absent. Both were tested and neither can be delivered at a quality worth charging for, so neither is promised. Naming what a tool does *not* do is cheaper than a refund.

#### How to scrape TripAdvisor reviews

The only one of the six that covers physical venues. Reviewer home city present on 64% of reviews; the date is the month of the visit, which TripAdvisor omits on 9% of cards.

**What comes back:** rating, title, text, reviewer, home city, contributions, date of visit, trip type, permalink.

**How to point at it:** paste the TripAdvisor page URL for the business straight from your browser's address bar.

#### How to scrape Trustpilot reviews

The most complete of the six, and the only one that states the language on every review — TripAdvisor states it on 9%, the rest not at all. Reachable from a bare domain, so no URL to find.

**What comes back:** rating, headline, text, reviewer, exact timestamp, language, permalink.

**How to point at it:** type the company's domain — `nike.com` — and Trustpilot is resolved for you.

#### How to scrape Sitejabber reviews

Reachable from a bare domain. 20 reviews per page, and no reviewer location is published.

**What comes back:** rating, headline, text, reviewer, date, permalink.

**How to point at it:** type the company's domain — `nike.com` — and Sitejabber is resolved for you.

#### How to scrape ResellerRatings reviews

The site publishes 15 reviews per store page and serves the rest another way. Runs say so outright — the coverage row reads `source-serves-one-page` and prints how many reviews the site actually holds, instead of implying you got them all.

**What comes back:** rating, headline, text, reviewer, exact timestamp, permalink.

**How to point at it:** paste the ResellerRatings page URL for the business straight from your browser's address bar.

#### How to scrape ConsumerAffairs reviews

The richest reviewer detail of the six — every single review carries a home city, and most carry topic tags such as "Customer Service" or "Staff".

**What comes back:** rating, text, reviewer, home city, date, topic tags, permalink.

**How to point at it:** paste the ConsumerAffairs page URL for the business straight from your browser's address bar.

#### How to scrape PissedConsumer reviews

The site accepts complaints filed without a star rating and without a name. Those come back with `rating` and `authorName` set to null rather than an invented value — which is why the numbers here are honest rather than round.

**What comes back:** headline, text, reviewer, home city, exact timestamp, permalink, rating where given.

**How to point at it:** type the company's domain — `nike.com` — and PissedConsumer is resolved for you.

### 📥 Input

| Field | What it does |
|---|---|
| `targets` | A domain (`nike.com`) or a review page URL. A domain resolves Trustpilot, Sitejabber and PissedConsumer for you; a URL goes to whichever site owns it. |
| `sources` | Narrow to specific sites. Empty means all 6. |
| `maxReviewsPerBusiness` | How deep to read on each site, per business. |
| `maxReviewsTotal` | A ceiling on billable rows for the whole run. |
| `includeBusinessProfiles` | One row per business per site: aggregate rating, total review count, address, category. |
| `onlyNewSinceLastRun` | Skip and never re-charge reviews a previous run already delivered. |
| `stateName` | Name a feed so two schedules track separately. |
| `minRating` / `maxRating` | Keep only a rating band. Filtered reviews are free. |
| `newerThan` | Keep only reviews published on or after a date. |
| `maxCostUsd` | Hard spend ceiling for the run. |

**No proxy settings.** Unblocking is handled and priced in. You never configure infrastructure.

### 📤 Output

Four row types, one dataset. Only `review` and `business` are ever charged.

| Row | What it is |
|---|---|
| `review` | One review: source, business, rating (1–5), title, text, language, ISO date, reviewer with profile link, home city and lifetime review count, helpful votes, the owner's reply where the site publishes one, and for travel reviews the date of visit and trip type. |
| `business` | One business as one site sees it: name, page URL, aggregate rating, total review count, address, category. |
| `coverage` | **Free.** Per business per site: reviews read, how many were new, how many the site holds in total, whether the walk reached the end, and if not, exactly what stopped it. |
| `error` | **Free.** Anything that could not be read, with a stable machine-readable reason. Nothing you typed is ever dropped in silence. |

### 💰 Pricing

Pay per review. **Failures are free and there is no run-start fee.**

| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---|---|---|---|---|---|
| **review** | $10.00 | $8.30 | $6.30 | $5.00 | $4.70 | $4.30 |
| **business profile** | $12.00 | $10.00 | $7.60 | $6.00 | $5.60 | $5.20 |

*Prices are per 1,000. Your tier is your Apify plan.*

On the **Gold** plan, 1,000 reviews cost **$5.00** and 1,000 business profiles **$6.00**. A scheduled run over an unchanged business costs **$0.00** — already-delivered reviews are skipped, not re-billed.

**Free vs paid Apify plan:** this Actor runs on the free plan. The free plan's monthly credit covers a few thousand reviews; beyond that you need a paid plan, as with every Store Actor.

### ⏰ Run it on a schedule

This is what the Actor is built for. Set a daily cron (`0 7 * * *`), leave `onlyNewSinceLastRun` on, and each morning you get the reviews that appeared overnight and nothing else.

Because already-delivered reviews are never charged again, a quiet day costs close to nothing and a busy one bills only the new arrivals. That is what makes a daily watch rational instead of a bill you cancel after a week.

Add `maxRating: 2` and the schedule becomes a negative-review alarm.

### ❓ FAQ

#### How do I scrape all reviews for a business from multiple review sites at once?

Put the company's domain in `targets` and run it — Trustpilot, Sitejabber and PissedConsumer are resolved from the domain automatically. For TripAdvisor, ResellerRatings and ConsumerAffairs, paste the page URL. Everything comes back in one dataset with one schema.

#### Do I need a proxy or an account on any of these sites?

No. Everything is handled for you and priced into the per-review fee. There is no proxy field to configure and no login anywhere.

#### How do I export reviews to CSV, Excel or JSON?

Every run's dataset exports to CSV, Excel, JSON, XML or HTML from the Storage tab, or through the Apify API. The dataset ships with three ready-made views: Reviews, Business profiles and the Coverage report.

#### Can I get only the negative reviews?

Yes — set `maxRating` to 2. Filtering happens before billing, so the reviews you filtered out are not charged.

#### How do I know whether I got every review?

Read the free `coverage` row. It reports how many reviews were read, how many the site says exist in total, whether the walk reached the end, and if not, what stopped it — your own cap, or a limit the site itself imposes.

#### Does a re-run charge me again for reviews I already have?

No. With `onlyNewSinceLastRun` on, reviews delivered by a previous run of the same feed are skipped and never charged a second time.

#### What happens if a business is not on one of the sites?

You get a free `error` row naming the site and the reason. No charge, and the other sites still return normally.

#### Why are Yelp and Google reviews not included?

Both were tested and neither could be delivered at a standard worth charging for, so neither is promised. The six sites this engine reads are the ones that were verified to work.

#### Is this affiliated with any of these review sites?

No. This is an independent tool and is not affiliated with, endorsed by or sponsored by TripAdvisor, Trustpilot, Sitejabber, ResellerRatings, ConsumerAffairs and PissedConsumer. It reads only publicly available pages.

### 🛟 Support

Something not working, or a site you want added? Open an issue on the **Issues** tab — it is read and answered. If the Actor does what you needed, a rating on the listing helps more than you would think.

### Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is `vonsensey/business-reviews-aggregator-scraper-api`; every snippet below sends `{}`, which runs the defaults shown on the form — replace it with your own input.

#### n8n

Install the **Apify** community node (`@apify/n8n-nodes-apify` under *Settings → Community Nodes*, or search "Apify" on n8n Cloud). Add **Apify → Run Actor** with Actor `vonsensey/business-reviews-aggregator-scraper-api` and your input JSON, then **Apify → Get Dataset Items** on the run's `defaultDatasetId` and pipe the rows anywhere. For scheduled runs, the **On new Apify Event** trigger fires when a run of this Actor finishes.

#### MCP (Claude, Cursor, VS Code, any MCP client)

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=vonsensey/business-reviews-aggregator-scraper-api",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

Your agent then calls `vonsensey/business-reviews-aggregator-scraper-api` as a tool with the same input the form takes and reads the dataset back.

#### REST API (one call, rows in the response)

```bash
curl -X POST "https://api.apify.com/v2/acts/vonsensey~business-reviews-aggregator-scraper-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{}'
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/business-reviews-aggregator-scraper-api").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

#### JavaScript

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/business-reviews-aggregator-scraper-api').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Make, Zapier, LangChain, CrewAI

The Apify app in **Make** and **Zapier** has a *Run an Actor* module: pick `vonsensey/business-reviews-aggregator-scraper-api`. In **LangChain** and **CrewAI** the Apify tool wrappers take the same Actor id. A daily **schedule** needs nothing but the Console: *Schedules → Create → this Actor → cron*, and the dataset fills on its own.

> **Run it without configuring anything** — [Get every review of a business, from 6 sites](https://apify.com/vonsensey/business-reviews-aggregator-scraper-api/examples/all-reviews-for-one-business), a ready-made example you can start as-is or copy.

### Use cases

- **Watch every site at once.** One domain in, and the reviews come back from six review sites in one schema — with a per-source coverage row saying whether you got everything or hit a limit.
- **Catch a one-star review the morning it lands.** A daily schedule returns only what is new; already-delivered reviews are never charged again, so a quiet day costs almost nothing.
- **Read a competitor's whole review history.** Full pagination, not the first page, with the site's own total review count beside what was actually read.
- **Feed reviews to a model without a cleaning pass.** Ratings rescaled to 1-5, dates as real ISO timestamps, and a field the site does not publish comes back null rather than invented.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per review delivered, so a scheduled run that finds nothing new costs nothing.

### FAQ

#### Which review sites does this cover?

TripAdvisor (restaurants, hotels and attractions), Trustpilot, Sitejabber, ResellerRatings, ConsumerAffairs and PissedConsumer. Every one of them was verified returning real, parseable reviews on the Apify platform before the listing was written, and the measured field fill rate for each is published in the README.

#### Why are Yelp and Google reviews not included?

Both were tested and neither could be delivered at a standard worth charging for, so neither is promised. Naming what a tool does not do is cheaper than a refund, and the six sites that are included are the ones that were verified to work.

#### Do I need a proxy or an account on any of these sites?

No. Unblocking is handled and priced into the per-review fee. There is no proxy field to configure anywhere in the suite and no login on any site.

#### Does a scheduled re-run charge me again for reviews I already have?

No. Reviews delivered by a previous run of the same feed are skipped and never charged a second time, which is what makes a daily watch rational rather than a bill you cancel.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

## `targets` (type: `array`):

One per line. Two things work here:

• **A domain** — `nike.com` — which fans out automatically across Trustpilot, Sitejabber and PissedConsumer.
• **A review page URL** from any supported site — TripAdvisor, Trustpilot, Sitejabber, ResellerRatings, ConsumerAffairs or PissedConsumer.

Mix both freely. Anything that cannot be used comes back as a free row saying exactly why, so nothing you type is ever dropped in silence.

## `sources` (type: `array`):

Leave empty for all six. Narrowing this is the cheapest way to control cost when you only care about one platform.

## `maxReviewsPerBusiness` (type: `integer`):

The walk keeps paging until the site runs out or this cap is hit. Set it to 0 for business profiles only - the rating and review count per site, with no review rows and no review charges. Whichever limit stopped the walk is named in the free coverage row, so you always know whether you have everything.

## `maxReviewsTotal` (type: `integer`):

A hard ceiling across every business and every site in this run.

## `includeBusinessProfiles` (type: `boolean`):

The business name, its aggregate star rating, how many reviews the site holds in total, and the address and category where the site publishes them. Turn this off and the profile event never fires.

## `onlyNewSinceLastRun` (type: `boolean`):

On by default, and the reason a daily schedule is worth running. Reviews already delivered by a previous run of this feed are skipped and never charged again — a re-run over an unchanged business costs nothing.

## `stateName` (type: `string`):

Names the memory used by 'only new since the last run'. Give two schedules two different names and they track separately; leave it empty to share one feed.

## `minRating` (type: `integer`):

Filtered-out reviews are never charged. Leave empty for all ratings.

## `maxRating` (type: `integer`):

Set this to 2 to get only the complaints. Filtered-out reviews are never charged.

## `newerThan` (type: `string`):

An ISO date such as 2026-01-01. Reviews the site publishes without a usable date are excluded rather than guessed in.

## `maxCostUsd` (type: `integer`):

A hard ceiling on what this run can cost. Leave empty for no ceiling.

## `concurrency` (type: `integer`):

Lower is gentler on the sites and slower; the default suits almost every run.

## Actor input object example

```json
{
  "targets": [
    "nike.com",
    "https://www.tripadvisor.com/Restaurant_Review-g60713-d446798-Reviews-Eagle_Cafe-San_Francisco_California.html"
  ],
  "sources": [],
  "maxReviewsPerBusiness": 100,
  "maxReviewsTotal": 1000,
  "includeBusinessProfiles": true,
  "onlyNewSinceLastRun": true,
  "stateName": "",
  "concurrency": 4
}
```

# Actor output Schema

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

No description

## `items` (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 = {
    "targets": [
        "nike.com",
        "https://www.tripadvisor.com/Restaurant_Review-g60713-d446798-Reviews-Eagle_Cafe-San_Francisco_California.html"
    ],
    "sources": [],
    "maxReviewsPerBusiness": 100,
    "maxReviewsTotal": 1000,
    "stateName": "",
    "concurrency": 4
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/business-reviews-aggregator-scraper-api").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 = {
    "targets": [
        "nike.com",
        "https://www.tripadvisor.com/Restaurant_Review-g60713-d446798-Reviews-Eagle_Cafe-San_Francisco_California.html",
    ],
    "sources": [],
    "maxReviewsPerBusiness": 100,
    "maxReviewsTotal": 1000,
    "stateName": "",
    "concurrency": 4,
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/business-reviews-aggregator-scraper-api").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 '{
  "targets": [
    "nike.com",
    "https://www.tripadvisor.com/Restaurant_Review-g60713-d446798-Reviews-Eagle_Cafe-San_Francisco_California.html"
  ],
  "sources": [],
  "maxReviewsPerBusiness": 100,
  "maxReviewsTotal": 1000,
  "stateName": "",
  "concurrency": 4
}' |
apify call vonsensey/business-reviews-aggregator-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vonsensey/business-reviews-aggregator-scraper-api"
        }
    }
}

```

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/iFh3oBYMkh2444CvT/builds/xAFyiUKSjxazzsrRn/openapi.json
