# Bazaarvoice Reviews & Q\&A Scraper (`piotrv1001/bazaarvoice-reviews-scraper`) Actor

The Bazaarvoice Reviews & Q\&A Scraper exports reviews, questions and answers from retailer and brand product pages using Bazaarvoice — ratings, text, photos, brand replies, syndication source and exact-product scope, with a free coverage check. Ideal for review research and brand monitoring.

- **URL**: https://apify.com/piotrv1001/bazaarvoice-reviews-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.

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

### 🚀 Bazaarvoice Reviews & Q\&A Scraper

Export ratings, reviews, questions and answers from any retailer or brand product page that uses **Bazaarvoice** reviews (for example CeraVe, KitchenAid, B\&Q and TradePoint). The **Bazaarvoice Reviews & Q\&A Scraper** tells you which reviews were written on the site and which were syndicated from elsewhere, and what product each review was written for. It also shows whether the collected total matches the count on the page, so you can compare review pools without inflated or mixed-up numbers.

### ✨ Features

- ⭐ **Full review data**: rating, title, text, pros/cons, recommendation, sub-ratings (quality, value…), reviewer context (skin type, age…), photos, videos, helpful votes, brand responses, dates and language.
- ❓ **Questions & answers**: every question with all of its answers nested inside, including brand answers and best-answer flags.
- 🔁 **Syndication you can trust**: `isSyndicated` plus the syndication source name and link on every row. The "Written on this site only" filter checks every row's own flag, so you get the real native reviews rather than an inflated server-side count.
- 🎯 **Product scope**: sibling products (pot vs. refill, colour variants) often share one review pool. Each row carries `recordProductId` and `isRequestedProduct`, so you can see which reviews describe the exact product you asked for.
- 🧾 **Coverage summary (free)**: for each URL, the run's `SUMMARY` record lists the product, the review and question totals reported for it, the count shown on the page, and any other review pool the page exposes with a different total. It also says whether collection was complete, capped or filtered.
- 🧹 **No double charges**: products that share a review pool (on the same site) are deduplicated within a run, so each review is charged once.
- 📅 **Filters**: star ratings, a "newer than" date, and the review origin. Results come newest first.

### 🛠️ How It Works

1. **Paste product URLs**: any product page that shows Bazaarvoice reviews.
2. **Choose what to collect**: reviews, questions, or both, and set a maximum per product (50 by default).
3. **Run the scraper**: rows land in the dataset, and the per-URL coverage report is in the `SUMMARY` record.

Pages that are not Bazaarvoice sites, or that block automated access, are reported in the summary and never charged.

### 💰 Pricing

Pay only for what you get:

| Event | Price |
|---|---|
| Review | $0.001 |
| Question (including all its answers) | $0.001 |
| Actor start | $0.00005 |

1,000 reviews cost **$1**. Coverage summaries, duplicates and empty results are free.

### 📊 Sample Output Data

A review:

```json
{
    "type": "review",
    "reviewId": "1225833303",
    "rating": 5,
    "title": "Dry skin where?",
    "text": "Perfect for my sensitive skin with the changing seasons.",
    "isRecommended": true,
    "secondaryRatings": { "Value": 5, "Quality": 5 },
    "reviewerContext": { "SkinConcern": "BlemishProneSkin", "Skintype": "Combination" },
    "badges": ["incentivizedReview"],
    "isIncentivized": true,
    "helpfulVotes": 0,
    "photos": [],
    "brandResponses": [],
    "publishedAt": "2026-07-25T11:43:56.000+00:00",
    "language": "en_GB",
    "recordProductId": "moistrzcrm",
    "isSyndicated": false,
    "syndicationSource": null,
    "sourceClient": "cerave-uk",
    "requestedProductId": "moistrzcrm",
    "productName": "Moisturising Cream Pot",
    "productBrand": "CeraVe",
    "productUrl": "https://www.cerave.co.uk/skincare/moisturisers/moisturising-cream",
    "retailer": "cerave.co.uk",
    "isRequestedProduct": true
}
```

A question with its answers:

```json
{
    "type": "question",
    "questionId": "9297023",
    "question": "Can you purchase the recipe book for this blender? I never received one with mine.",
    "answerCount": 1,
    "answers": [
        {
            "answerId": "13617681",
            "text": "Hi, You may view all recipes by using the link below. https://www.kitchenaid.com/yummly-recipe-database.html",
            "isBrandAnswer": false,
            "isBestAnswer": false,
            "helpfulVotes": 0,
            "publishedAt": "2023-12-13T15:12:53.000+00:00",
            "isSyndicated": false
        }
    ],
    "publishedAt": "2023-12-12T18:45:57.000+00:00",
    "recordProductId": "KSB8270FP",
    "requestedProductId": "KSB8270FP",
    "productName": "Pro Line® Series Blender with Thermal Control Jar",
    "retailer": "kitchenaid.com",
    "isRequestedProduct": true
}
```

Reviewer nicknames and locations are left out unless you turn on **Include reviewer names**.

### ❓ FAQ

**Why does a review say `isRequestedProduct: false`?** The site shows reviews from a group of related products on this page (for example, the refill and the pot of the same cream). The row is still part of what shoppers see, and `recordProductId` tells you which product it was written for.

**Why can the same review be syndicated on one site and native on another?** "Syndicated" is relative to the site showing it. A review written on the brand's site is native there and syndicated on a retailer.

**The summary says `unverified`. Is something wrong?** No. It means the page shows no review count to check against. `verified` means the total matches the count on the page. `mismatch` means it does not, and the summary lists both numbers.

Collect clean, auditable Bazaarvoice reviews with the **Bazaarvoice Reviews & Q\&A Scraper** today! 🚀

# Actor input Schema

## `startUrls` (type: `array`):

Product pages of retailer or brand websites that show Bazaarvoice ratings and reviews.

## `mode` (type: `string`):

Reviews, product questions with their answers, or both.

## `maxReviews` (type: `integer`):

Maximum number of reviews returned for each product URL, newest first.

## `maxQuestions` (type: `integer`):

Maximum number of questions returned for each product URL. Each question includes all of its answers.

## `origin` (type: `string`):

Many reviews are syndicated: written on the brand's site or a sampling program and shared to the retailer. Keep all of them, only reviews written on this site, or only syndicated ones. Every review carries isSyndicated and its syndication source either way.

## `ratings` (type: `array`):

Only return reviews with these star ratings. Leave empty for all ratings.

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

Only return reviews and questions submitted on or after this date. Leave empty for the full history.

## `includeReviewerNames` (type: `boolean`):

Add the public nickname and location shown on each review, question and answer.

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

Proxy servers used to load pages.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.cerave.co.uk/skincare/moisturisers/moisturising-cream"
    },
    {
      "url": "https://www.kitchenaid.com/countertop-appliances/blenders/blender-products/p.pro-line-series-blender-with-thermal-control-jar.ksb8270fp.html"
    }
  ],
  "mode": "both",
  "maxReviews": 50,
  "maxQuestions": 50,
  "origin": "all",
  "includeReviewerNames": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "startUrls": [
        {
            "url": "https://www.cerave.co.uk/skincare/moisturisers/moisturising-cream"
        },
        {
            "url": "https://www.kitchenaid.com/countertop-appliances/blenders/blender-products/p.pro-line-series-blender-with-thermal-control-jar.ksb8270fp.html"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/bazaarvoice-reviews-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 = {
    "startUrls": [
        { "url": "https://www.cerave.co.uk/skincare/moisturisers/moisturising-cream" },
        { "url": "https://www.kitchenaid.com/countertop-appliances/blenders/blender-products/p.pro-line-series-blender-with-thermal-control-jar.ksb8270fp.html" },
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/bazaarvoice-reviews-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 '{
  "startUrls": [
    {
      "url": "https://www.cerave.co.uk/skincare/moisturisers/moisturising-cream"
    },
    {
      "url": "https://www.kitchenaid.com/countertop-appliances/blenders/blender-products/p.pro-line-series-blender-with-thermal-control-jar.ksb8270fp.html"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/bazaarvoice-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/bazaarvoice-reviews-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/cwmqflQgPEtdQkRYf/builds/fXagaqdpwJBPsmeaq/openapi.json
