# Sitejabber Scraper (Reviews, Ratings and Replies) (`locaihost/sitejabber-reviews`) Actor

Scrape Sitejabber (now SmartCustomer) reviews for any business: stars, title, text, date, verified purchase flag, sub-scores and the business reply, plus average stars, star breakdown and ratings from other review sites. Get only new reviews on schedules. No login. $0.50 per 1,000 rows.

- **URL**: https://apify.com/locaihost/sitejabber-reviews.md
- **Developed by:** [locaihost data](https://apify.com/locaihost) (community)
- **Categories:** E-commerce, Marketing, Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.28 / 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

## Sitejabber Scraper (Reviews, Ratings and Replies)

Get every public Sitejabber review of a business as clean JSON or CSV rows: stars, title, text, dates, verified purchase flag, the reviewer's region, five sub-scores and the business's reply, plus a business row with star breakdown and the ratings it shows from other review sites. Sitejabber is now called SmartCustomer; old sitejabber.com links work. No login, no cookies, no account.

- **Monitor your own reputation:** schedule it daily with `onlyNew` and get only the reviews posted since the last run.
- **Read competitors' complaints:** pull every 1- and 2-star review of a rival and see where its service, value, shipping or returns score low.
- **Vet an online shop before you buy or partner:** average stars, star breakdown, verified purchases and the ratings it has on other review sites, in one row.
- **Find the top businesses in a category:** a Sitejabber category gives the businesses its page lists, with stars and review counts.
- **Feed analysis and dashboards:** one flat row per review, with the same columns as our Trustpilot and BBB review scrapers.

### Quick start

Paste this into the **JSON** tab of the input and click **Start**:

```json
{"companies": ["nordvpn.com"], "maxReviewsPerCompany": 20}
```

You get one business row and the business's 20 newest reviews: 21 rows in about 10 seconds. Domains, website links and Sitejabber or SmartCustomer links (`https://www.sitejabber.com/reviews/etsy.com`) all work.

More examples:

```json
{"companies": ["etsy.com"], "stars": ["1", "2"], "dateFrom": "90 days", "withRepliesOnly": true}
```

```json
{"categories": ["vpn"], "reviewsForFoundBusinesses": true, "maxReviewsPerCompany": 50}
```

```json
{"companies": ["amazon.com"], "maxReviewsPerCompany": 0}
```

The last one returns only the business row: stars, review count, star breakdown, sub-scores and other sites' ratings.

### What data can I get?

Every row has `type`: `review`, `business`, or `not-found` (free, says what to change).

| Group | Fields |
|---|---|
| Review | `reviewId`, `rating` (1 to 5), `title`, `text`, `tip` (the reviewer's tip for other customers), `likes` (helpful votes) |
| Dates | `publishedAt`, `experiencedAt` |
| Trust signals | `isVerified`, `verificationLevel` (like "Verified purchase"), `reviewSource` |
| Sub-scores | `subRatings`: `service`, `value`, `shipping`, `returns`, `quality` (1 to 5, `null` where the reviewer skipped one) |
| Reviewer | `reviewerName` (first name and last initial, as shown), `reviewerLocation` (like "California, United States"), `reviewerCountry`, `reviewerReviewCount` |
| Business reply | `replyText`, `replyPublishedAt` |
| Business | `businessId`, `name`, `domain`, `websiteUrl`, `stars`, `reviewCount`, `reviewsLast12Months`, `ratingBreakdown` (reviews per star), `subRatings` (averages), `categories`, `primaryCategory`, `isClaimed`, `isClosed`, `warning` (Sitejabber's own warning label, when it shows one) |
| Other review sites | `otherSiteRatings`: `site`, `rating` and `reviewCount` for each other review site the page shows |
| Context | `companyName`, `companyDomain`, `reviewUrl`, `companyUrl`, `source`, `query`, `rank`, `input`, `scrapedAt` |

Review rows use the same columns as our Trustpilot and BBB review scrapers (fields Sitejabber doesn't have, like `language`, are `null`), so you can stack the outputs into one table.

One real review row and its business row (run on 2026-10-18, shortened):

```json
[
  {
    "type": "review",
    "site": "sitejabber",
    "reviewId": "15957454",
    "companyName": "NordVPN",
    "companyDomain": "nordvpn.com",
    "rating": 1,
    "title": "Shady recurring billing",
    "text": "I paid for ONE MONTH of NordVPN in January. That was all I needed. I ended my subscription before the month was out, NordVPN continued billing me every month without notice or sending any receipts. They refused to refund me.",
    "publishedAt": "2024-03-04T14:22:25.000Z",
    "experiencedAt": "2024-03-04",
    "isVerified": false,
    "likes": 0,
    "reviewerLocation": "California, United States",
    "reviewerCountry": "US",
    "reviewerReviewCount": 3,
    "subRatings": {"service": 1, "value": 1, "shipping": 1, "returns": 1, "quality": 1},
    "replyText": "Hello. May we ask if you have contacted us via live chat ... If so, perhaps you could update your review with the ticket ID number that was provided by our support team? ...",
    "replyPublishedAt": "2024-03-09T06:11:27.000Z",
    "reviewUrl": "https://www.smartcustomer.com/reviews/nordvpn.com#1176"
  },
  {
    "type": "business",
    "site": "sitejabber",
    "businessId": "1584147",
    "name": "NordVPN",
    "domain": "nordvpn.com",
    "stars": 2.4,
    "reviewCount": 213,
    "ratingBreakdown": {"one": 111, "two": 8, "three": 4, "four": 6, "five": 83},
    "subRatings": {"service": 1.53, "value": 1.51, "shipping": 1.38, "returns": 1.12, "quality": 1.65},
    "primaryCategory": "Vpn",
    "isClaimed": true,
    "isClosed": false,
    "otherSiteRatings": [{"site": "trustpilot.com", "rating": 4.2, "reviewCount": 50803}],
    "warning": null,
    "source": "company"
  }
]
```

The dataset has three views (**Reviews**, **Businesses**, **Not found (free)**) and exports to JSON, CSV, Excel or HTML. The run's `SUMMARY` record has pages read, rows by kind, free rows by reason and timing.

### How much does it cost?

You pay per review or business row returned. There is no charge for Apify platform usage on top.

| Row | Free and Starter | Scale | Business |
|---|---|---|---|
| Review | $0.50 per 1,000 | $0.375 per 1,000 | $0.275 per 1,000 |
| Business | $0.50 per 1,000 | $0.375 per 1,000 | $0.275 per 1,000 |

That is $0.50 per 1,000 rows of either kind on the Free and Starter plans. Plus $0.00005 per run start. **Apify's free $5 monthly credit covers about 10,000 reviews.** Free-plan runs stop at 1,000 rows each; any paid Apify plan removes the cap.

**What's free:** businesses that are not on Sitejabber, unknown or empty categories and unusable inputs (each comes back as a free `not-found` row saying what to change), reviews left out by **Star ratings**, **Verified purchases only** or **Only reviews with a business reply**, reviews skipped by `onlyNew`, and business rows whose stars and review count haven't changed under `onlyNew`. To cap a run's spend, set **Maximum cost per run** in the run options, or **Max rows in total** in the input.

### Limits, stated up front

- Only what a logged-out visitor sees. Every page of a business's reviews is public, so the run reads the list its pages show, newest first, 20 per page, up to 2,000 pages.
- A business is identified by its website domain. There is no search by name; a category gives the businesses its page lists (up to 10).
- About reviewers it keeps only what the review shows: first name and last initial, region and country, and review count. No profile links, usernames or photos. E-mail addresses and phone numbers typed into a review are replaced with `[contact removed]`. Names typed into review text ("My name is …", signatures) and the customer's name or staff initials in business replies become `[name removed]`. Business replies keep the business's own role addresses (like support@); personal-looking addresses in them are removed.
- **Star ratings**, **Verified purchases only** and **Only reviews with a business reply** are applied to each review as it is read, because the site has no such filters in its pages. A strict filter on a big business can read many pages to find a few matches. **Published on or after** stops the run at that date.
- Sitejabber doesn't show a review language or edit date, so `language` and `updatedAt` are always `null`. Links in the output point to smartcustomer.com, where sitejabber.com now redirects.
- Big requests are split fairly across the run's time limit. If time runs short, the run ends successfully with the rows so far and says what to narrow.

### Only new since last run, and schedules

Turn on **Only new since the last run** and schedule the Actor daily or weekly. Each run returns only reviews that earlier runs with the same businesses, categories and filters did not, and stops reading a business at the first review it already sent. A run with nothing new charges nothing. Business rows come back only when the stars or review count changed, so a schedule also tracks rating changes. Set up a schedule under **Schedules** in Apify Console.

### Integrations: API, n8n, Make and AI agents

**API.** Run it and get the rows back in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/locaihost~sitejabber-reviews/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["etsy.com"], "maxReviewsPerCompany": 50, "stars": ["1", "2"]}'
```

Apify's API clients for Python and JavaScript work the same way.

**n8n, Make, Zapier, Google Sheets, Slack, webhooks.** Apify's built-in integrations send each run's dataset wherever you need it, for example new 1-star reviews into a Slack channel.

**AI agents (MCP).** Add this Actor to Claude, Cursor or any MCP client with `https://mcp.apify.com/?tools=locaihost/sitejabber-reviews`, then ask something like *"What do Etsy's 1- and 2-star Sitejabber reviews from the last 90 days complain about, and which sub-score is lowest?"*

### FAQ

#### How much does it cost to scrape Sitejabber reviews?

$0.50 per 1,000 reviews or businesses on the Free and Starter plans, less on Scale and Business. Apify's free $5 monthly credit covers about 10,000 reviews.

#### Can I use it through the API or from Python?

Yes. Use the `run-sync-get-dataset-items` call above, or Apify's Python and JavaScript clients. Every run's data is also available as JSON, CSV or Excel from its dataset.

#### Can I use it from an AI agent?

Yes. Through the Apify MCP server (`https://mcp.apify.com/?tools=locaihost/sitejabber-reviews`) any MCP client can call it with a list of businesses and read the reviews back.

#### Is it legal to scrape Sitejabber?

The Actor reads only pages any logged-out visitor can open; it never logs in or uses cookies from an account. Sitejabber's own terms restrict automated collection, so check them against your use. It keeps only the reviewer details a review shows (first name and last initial, region, review count) and removes contact details typed into reviews. Review texts are written by members of the public: respect copyright when republishing them, follow privacy law (such as GDPR) if you store reviewer names, and never use the data to contact, profile or harass reviewers. You are responsible for how you use the results.

#### Does it work now that Sitejabber is SmartCustomer?

Yes. It reads smartcustomer.com directly, and sitejabber.com and smartcustomer.com links in the input both work.

#### Why are some fields empty?

`replyText` is empty when the business didn't reply, `tip` when the reviewer left none, and a sub-score when the reviewer skipped it. `language` and `updatedAt` are always `null` (Sitejabber doesn't show them), and the address, e-mail and phone columns are `null` because Sitejabber doesn't publish them.

### More from locaihost data

- [Trustpilot reviews scraper](https://apify.com/locaihost/trustpilot-reviews): Trustpilot reviews, TrustScore and reply rate, in the same review columns.
- [BBB reviews and complaints scraper](https://apify.com/locaihost/bbb-reviews): BBB reviews, complaints and grades, in the same review columns.
- [App Store and Google Play reviews](https://apify.com/locaihost/app-stores): ratings and reviews of mobile apps, for the same company's app.
- [Website traffic checker](https://apify.com/locaihost/website-traffic): monthly visits and traffic sources for the shops you track.

### Did it help?

If this saved you time, a quick rating on the Store helps other people find it.

### Support

Something not working, or a field you need? Open an issue on the **Issues** tab: we answer issues within 24 hours.

# Changelog

This Actor's version history is a separate document: https://apify.com/locaihost/sitejabber-reviews/changelog.md

# Actor input Schema

## `companies` (type: `array`):

Businesses to read reviews for. Type the website domain (amazon.com) or paste a Sitejabber or SmartCustomer review link (https://www.sitejabber.com/reviews/amazon.com).

## `categories` (type: `array`):

Sitejabber category names or links, for example vpn, computers-technology or https://www.sitejabber.com/categories/clothing-apparel. Returns the top businesses the category page lists (up to 10), as business rows.

## `maxReviewsPerCompany` (type: `integer`):

Newest first, 20 per page. 0 returns only the business row (stars, review count, star breakdown, sub-scores) with no reviews. Every page of a business's reviews is public, so a large number like 100000 gets them all (up to 2,000 pages).

## `maxBusinessesPerCategory` (type: `integer`):

How many of the businesses a category page lists to return (it lists 10). 0 means all 10.

## `reviewsForFoundBusinesses` (type: `boolean`):

Read the reviews of every business a category returns, using the review settings below. Their business rows are not repeated.

## `includeCompanyInfo` (type: `boolean`):

Add one business row per business in Businesses: average stars, review count, reviews in the last 12 months, star breakdown, service, value, shipping, returns and quality scores, categories, and the ratings the page shows from other review sites.

## `stars` (type: `array`):

Only reviews with these ratings. Leave empty for all.

## `dateFrom` (type: `string`):

Only reviews published on or after this date. A date (2026-09-01) or a period (30 days, 6 months). The run stops reading a business at the first older review.

## `verifiedOnly` (type: `boolean`):

Only reviews Sitejabber marks as a verified purchase.

## `withRepliesOnly` (type: `boolean`):

Only reviews the business has publicly replied to.

## `onlyNew` (type: `boolean`):

Return only reviews that earlier runs with the same businesses and filters did not, and business rows only when their stars or review count changed. For daily or weekly schedules. A run with nothing new charges nothing.

## `maxResults` (type: `integer`):

Stop after this many charged rows (reviews plus businesses) across the whole run. 0 means no limit.

## Actor input object example

```json
{
  "companies": [
    "amazon.com",
    "https://www.sitejabber.com/reviews/nordvpn.com",
    "etsy.com"
  ],
  "categories": [
    "vpn",
    "clothing-apparel"
  ],
  "maxReviewsPerCompany": 20,
  "maxBusinessesPerCategory": 10,
  "reviewsForFoundBusinesses": false,
  "includeCompanyInfo": true,
  "stars": [
    "1",
    "2"
  ],
  "dateFrom": "2026-09-01",
  "verifiedOnly": false,
  "withRepliesOnly": false,
  "onlyNew": false,
  "maxResults": 0
}
```

# Actor output Schema

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

One row per review: business, stars, title, text, dates, reviewer first name and region, verified purchase, sub-scores, business reply, link.

## `businesses` (type: `string`):

One row per business: name, domain, average stars, review count, sub-scores, categories, ratings on other review sites.

## `full` (type: `string`):

Every field of every row, including free not-found rows.

## `summary` (type: `string`):

Counts, free rows by reason, anything that failed, access stats and cost.

# 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 = {
    "companies": [
        "nordvpn.com"
    ],
    "maxReviewsPerCompany": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("locaihost/sitejabber-reviews").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 = {
    "companies": ["nordvpn.com"],
    "maxReviewsPerCompany": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("locaihost/sitejabber-reviews").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 '{
  "companies": [
    "nordvpn.com"
  ],
  "maxReviewsPerCompany": 20
}' |
apify call locaihost/sitejabber-reviews --silent --output-dataset

```

## MCP server setup

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

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/2ji29Itj3HKMHM6dF/builds/l83pkVmuUApLxyo6h/openapi.json
