# Reviews.io Scraper FAST | Exact Dates | Votes | Intel (`ahmed_jasarevic/reviews-scraper`) Actor

The cheapest way to scrape Reviews.io reviews: extract company reviews, verified buyer ratings, merchant replies, helpful votes and exact dates from JSON-LD — no browser needed. Build reputation datasets, monitor competitors and track review sentiment for $0.005 per review.

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

## Pricing

from $4.00 / 1,000 results

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

## Reviews.io Scraper — Customer Reviews, Verified Ratings & Merchant Replies

Scrape Reviews.io company reviews at **$0.005 per result** — with no headless browser, no login and no CAPTCHA solving. This actor pulls **exact review dates from the page's JSON-LD** (data the UI hides behind "Posted 2 days ago"), **helpful-vote counts from Reviews.io's own internal JSON API**, verified-buyer flags, photo galleries and merchant replies — a cheap, structured window into the reputation data of the 100k+ European businesses that use Reviews.io.

### Main Use Cases

- **Competitor reputation tracking** — monitor rival brands' Reviews.io profiles weekly and catch rating drops, complaint spikes and negative review trends early.
- **Merchant service audits** — measure how fast merchants reply to reviews, what they reply, and which negative reviews go unanswered.
- **Ecommerce review monitoring** — track ratings, recommend percentages and review velocity across UK and European online stores.
- **Review sentiment analysis** — build text datasets of verified customer feedback for sentiment models, topic clustering and CX analytics.
- **Lead generation for review-management agencies** — identify merchants with weak ratings or slow reply times and target them with reputation services.
- **Reviews.io vs Trustpilot comparison** — combine Reviews.io data with Trustpilot datasets to benchmark the same brands across both platforms.

### How the Reviews.io Scraper Works

This actor is a pure HTTP + Cheerio crawler — it requests the server-rendered HTML of Reviews.io company review pages, so no browser, no rendering engine and no extra memory are needed. For each company it:

1. Reads the company profile — average rating, review count, recommend percentage, store ID and about text.
2. Parses every review card on the page — author, stars, verified-buyer badge, text, date text and merchant reply.
3. Matches each review to its **exact `datePublished` timestamp from the JSON-LD block** server-rendered into the page.
4. Hydrates each review with **helpful-vote counts and sub-ratings from the same internal JSON API the Reviews.io frontend uses** (`/company-reviews/data/{storeId}?ids=...`).
5. Collects review photo URLs from the gallery sidebar.
6. Follows pagination until `maxReviewsPerCompany` is reached (or 10 per company on free runs).
7. Optionally visits the product-reviews list page when `includeProductReviews` is enabled, saving product-level ratings and per-product review rows.

### Get Exact Review Dates the UI Hides

Reviews.io renders review dates as relative text ("Posted 57 minutes ago", "Posted 1 week ago"). The real timestamps exist only in the page's JSON-LD structured data. This actor reads `datePublished` from JSON-LD and returns an exact ISO date (e.g. `2026-09-18`) on every review and product review — essential for chronological datasets, measuring review velocity, and deduplicating incremental runs.

### Track Competitor Reviews and Merchant Replies

Every review row includes the merchant reply and its date when one exists. That makes it possible to audit response times, spot unanswered negative reviews, and benchmark customer-service quality across a whole competitor set — the classic groundwork for competitive intelligence and agency outreach.

### Build Ecommerce Review Databases Without the Official API

Reviews.io does not offer free public read access to company review pages: its developer API (developer.reviews.io) is a merchant-facing collection/sync API gated to paid plans, used to send invitations and retrieve a merchant's *own* reviews. There is no public endpoint to dump another company's review history. This scraper is the practical route to a structured, queryable database of Reviews.io reviews — company profiles, verified buyer ratings, product ratings and replies.

### Input — Configure the Reviews.io Scraper

| Field | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- |
| `companyUrls` | array of strings | Yes | — | Reviews.io company review page URLs (`https://www.reviews.io/company-reviews/store/notino`) or bare store slugs (`notino`). One entry per company. |
| `maxReviewsPerCompany` | integer | No | `100` | Maximum number of individual reviews saved per company. `0` = all available (schema limit 100,000). |
| `includeProductReviews` | boolean | No | `false` | Also scrape the company's product-reviews list page (product name, rating, review count) plus per-product review rows. |
| `proxy` | object | No | disabled | Apify proxy configuration (`useApifyProxy`, `groups`, `countryCode`). Only needed for large multi-company runs. |

### Output — Dataset Fields

One dataset row is saved per entity. Every row carries a `type` field: `company`, `review`, `product` or `product_review`.

| Field | Type | Applies to | Description |
| --- | --- | --- | --- |
| `type` | string | all | Row type: `company`, `review`, `product`, `product_review` |
| `companyName` | string | all | Company or store name |
| `slug` | string | all | Store slug from the URL |
| `url` | string | company, review | Page URL of the company profile or the individual review |
| `rating` | number | null | company, product | Company or product average rating |
| `reviewCount` | number | company, product | Company or product review count |
| `recommendPercent` | number | null | company | % of reviewers who recommend the company |
| `storeId` | string | company | Internal Reviews.io store ID used for the JSON API call |
| `about` | string | null | company | Company about text |
| `productName` | string | product, product\_review | Product name |
| `productUrl` | string | product | Product review page URL |
| `sku` | string | product\_review | Product SKU |
| `reviewId` | string | review, product\_review | Review ID |
| `author` | string | review, product\_review | Reviewer display name |
| `stars` | number | review, product\_review | Star rating (1–5) |
| `verifiedBuyer` | boolean | review, product\_review | Verified Buyer/Buyer badge present on the review |
| `date` | string | null | review, product\_review | Exact review date from JSON-LD (`datePublished`) |
| `dateText` | string | review, product\_review | Date string as displayed on the page |
| `text` | string | review, product\_review | Review body text |
| `photos` | array | review | Photo URLs attached to the review |
| `helpfulVotes` | number | review, product\_review | Helpful-vote count from the internal JSON API |
| `subRatings` | object | null | review | Sub-ratings per category returned by the JSON API |
| `reply` | string | null | review, product\_review | Merchant reply text |
| `replyDate` | string | null | review, product\_review | Merchant reply date string |
| `scrapedAt` | string | all | ISO timestamp of the run |

### Example Input

```json
{
  "companyUrls": [
    "notino",
    "https://www.reviews.io/company-reviews/store/loveholidays-com"
  ],
  "maxReviewsPerCompany": 100,
  "includeProductReviews": false
}
```

### Example Output

```json
[
  {
    "type": "company",
    "companyName": "Notino",
    "slug": "notino",
    "url": "https://www.reviews.io/company-reviews/store/notino",
    "rating": 4.6,
    "reviewCount": 3832,
    "recommendPercent": 90,
    "storeId": "notino",
    "about": null,
    "scrapedAt": "2026-09-19T08:00:00.000Z"
  },
  {
    "type": "review",
    "companyName": "Notino",
    "slug": "notino",
    "reviewId": "123456789",
    "author": "Anonymous",
    "stars": 5,
    "verifiedBuyer": true,
    "date": "2026-09-18",
    "dateText": "Posted 1 day ago",
    "text": "Great prices and fast delivery service. Thank you.",
    "photos": [],
    "helpfulVotes": 3,
    "subRatings": null,
    "reply": null,
    "replyDate": null,
    "url": "https://www.reviews.io/company-review/store/notino/123456789",
    "scrapedAt": "2026-09-19T08:00:00.000Z"
  }
]
```

### Integrations & Automation

- **Apify API** — run this actor programmatically via `POST /v2/acts/~username~reviews-scraper/runs` (or the actor ID endpoint) with your Apify token.
- **Scheduled runs** — Reviews.io data changes constantly. For competitor monitoring, schedule a **monthly** (or weekly) run in the Apify console; recurring runs also improve Apify Store recommendation signals for this actor.
- **Webhooks** — attach a webhook to the run to push each finished dataset straight into your pipeline.
- **Zapier / Make** — Apify's official integrations connect the actor's dataset to thousands of apps (Google Sheets, Slack, Airtable, BI tools).
- **Export** — results are downloadable as JSON, CSV or Excel from the dataset, or queryable via the Apify Dataset API.

### Related Actors

- [Trustpilot All Reviews Scraper](https://apify.com/memo23/trustpilot-scraper-ppe) — the most-used Trustpilot review scraper; pairs with this actor for cross-platform reputation datasets.
- [Trustpilot Reviews Scraper](https://apify.com/automation-lab/trustpilot) — well-tested Trustpilot reviews, replies and company data extraction.
- [Reviews.io Reviews Scraper](https://apify.com/automation-lab/reviews-io-scraper) — an alternative Reviews.io scraper with store-key input and review pagination.
- [Reviewsio Reviews Scraper](https://apify.com/getdataforme/reviewsio-reviews-scraper) — Reviews.io product and business reviews with helpful counts.
- [Google Maps Reviews Scraper](https://apify.com/automation-lab/google-maps-reviews-scraper) — add Google reviews to a multi-platform review monitoring stack.

### FAQ

#### Is there a Reviews.io API?

Yes — Reviews.io has a developer API (developer.reviews.io), but it is a merchant-facing API for syncing orders, sending review invitations and retrieving a merchant's *own* reviews, and it is gated to paid plans (the API is available on the Plus package). There is no free public API to read other companies' review pages, which is why scraping is the standard route to third-party Reviews.io data.

#### How do I scrape Reviews.io reviews?

Paste Reviews.io company review URLs or bare store slugs (e.g. `notino`) into `companyUrls`, set `maxReviewsPerCompany`, and run. This actor needs no browser, no login and no CAPTCHA solving — results land in an Apify dataset as JSON, CSV or Excel.

#### Reviews.io vs Trustpilot — which should I use?

They solve different problems. Reviews.io is an ecommerce-first, verification-first platform (reviews tied to confirmed purchases, on-site widgets, Google Seller Ratings, cheaper tiers) popular with UK and European online stores. Trustpilot is a public open review network with stronger consumer brand recognition and Google visibility, at a higher price. For reputation research, scraping both and comparing the same brands across platforms gives the fullest picture.

#### Are Reviews.io reviews verified?

Reviews.io is verification-first: reviews tied to a confirmed purchase, email and moderation carry a Verified Buyer / Verified Reviewer badge, and reviews without it display as Unverified Reviewer. The actor returns the `verifiedBuyer` flag per review so you can filter and analyse verified vs unverified feedback.

#### How do I get exact review dates?

The Reviews.io UI shows relative dates ("Posted 2 days ago"). This actor reads the ISO `datePublished` values from the page's JSON-LD and returns them in the `date` field — exact per-review timestamps the UI does not display.

#### Where do helpful votes come from?

Reviews.io's own frontend loads helpful-vote counts and sub-ratings from an internal JSON endpoint (`/company-reviews/data/{storeId}?ids=...`). This actor calls the same endpoint the site uses and attaches those numbers to each review.

#### Does this actor need proxies?

No. It requests plain server-rendered HTML, so it works out of the box without proxies. The `proxy` input exists for large multi-company runs where you want to distribute requests.

#### Is scraping Reviews.io legal?

This actor only reads publicly available pages — no login, no CAPTCHA bypass, no private data access. Users are responsible for complying with Reviews.io's Terms of Service and applicable data-protection law when using scraped data.

### SEO Keywords

reviews.io scraper, scrape reviews.io reviews, reviews.io api alternative, reviews.io vs trustpilot, trustpilot vs reviews.io, scrape customer reviews, competitor reputation monitoring, merchant reply tracking, review monitoring tool, review analytics, review sentiment analysis, verified buyer reviews, product review data, ecommerce review monitoring, uk review platform, reviews.io dataset, how to scrape reviews.io, merchant review tracking, review management agencies, reputation intelligence, helpful vote counts, exact review dates, google seller ratings, product rating extraction

### For AI Agents & LLM Apps

- **Purpose** — Returns structured Reviews.io data (company profiles, company reviews, product-level ratings, product reviews) as dataset rows distinguished by the `type` field.
- **Minimal working input** — `{"companyUrls": ["notino"]}` produces one company row plus up to 100 review rows (10 on free plan).
- **Variant inputs** — `{"companyUrls": ["mobile-outfitters"], "includeProductReviews": true}` also scrapes the product-reviews list and per-product review rows. `{"companyUrls": ["notino"], "maxReviewsPerCompany": 0}` requests all available reviews (unlimited for paying users; crawler safety-cap 500 requests per crawl).
- **Output fields** — type, companyName, slug, url, rating, reviewCount, recommendPercent, storeId, about, productName, productUrl, sku, reviewId, author, stars, verifiedBuyer, date, dateText, text, photos, helpfulVotes, subRatings, reply, replyDate, scrapedAt.
- **Behaviors an agent should know** —
  - `companyUrls` accepts full URLs or bare slugs; at least one entry is required.
  - Free users are capped at 10 reviews per company regardless of `maxReviewsPerCompany`; paying users are not.
  - `maxReviewsPerCompany: 0` means "all available" (schema upper bound 100,000), not "zero reviews".
  - `includeProductReviews: true` adds `product` and `product_review` rows and one extra request per company (the product-reviews list page).
  - The `date` field (ISO, from JSON-LD) is more precise than `dateText` and is the right field for deduplication and time-series analysis.
  - `helpfulVotes`/`subRatings` come from an internal JSON endpoint and may be `0`/`null` when that call fails.
- **Billing** — pay-per-event: $0.005 per dataset row (result), $0.00005 per actor start. Budget a run as roughly $0.005 × expected rows plus the start fee.

### Legal & Compliance Disclaimer

- This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Reviews.io (REVIEWS.io).
- It accesses only publicly available Reviews.io company review pages — no login, no authentication bypass, no CAPTCHA solving.
- Review text can contain personal data (names, opinions). Users are responsible for complying with Reviews.io's Terms of Service and applicable data-protection law — including the GDPR when processing reviews of EU individuals — and should minimise or pseudonymise personal data where possible.
- Scraped review data should not be used for unsolicited contact with reviewers in violation of applicable law (e.g. CAN-SPAM, GDPR, UK PECR). This disclaimer is not legal advice.

# Actor input Schema

## `companyUrls` (type: `array`):

Reviews.io company review page URLs (e.g. https://www.reviews.io/company-reviews/store/reviewscouk) or bare store slugs (e.g. reviewscouk). One entry per company.

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

Maximum number of individual reviews to scrape per company (0 = all available).

## `includeProductReviews` (type: `boolean`):

Also scrape the company's product review list page (product name, rating and review count per product).

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "companyUrls": [
    "https://www.reviews.io/company-reviews/store/reviewscouk"
  ],
  "maxReviewsPerCompany": 100,
  "includeProductReviews": false,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "companyUrls": [
        "https://www.reviews.io/company-reviews/store/reviewscouk"
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/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 = {
    "companyUrls": ["https://www.reviews.io/company-reviews/store/reviewscouk"],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/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 '{
  "companyUrls": [
    "https://www.reviews.io/company-reviews/store/reviewscouk"
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/reviews-scraper --silent --output-dataset

```

## MCP server setup

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