# Okendo Reviews Scraper (`piotrv1001/okendo-reviews-scraper`) Actor

The Okendo Reviews Scraper exports reviews from Shopify stores using Okendo — ratings, text, fit and quality scales, variants, photos and merchant replies, with grouped-product flags and new-review tracking. Ideal for product research, fit analysis and review monitoring.

- **URL**: https://apify.com/piotrv1001/okendo-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

### 🚀 Okendo Reviews Scraper

Export product reviews from any Shopify store that uses **Okendo** reviews. Add a product page or a store homepage and get ratings, review text, fit and quality scales, variants, photos and merchant replies as clean JSON, CSV or Excel. Schedule it to get only reviews you haven't seen before.

### ✨ Features

- ⭐ **Full review data**: rating, title, body, date, verified-buyer, recommended and incentivized flags, helpful votes, language, variant, photos and videos, and the merchant's reply.
- 📏 **Fit and quality scales, kept exactly as asked**: every attribute keeps its question, scale type, raw value and min/mid/max labels. A "How did it fit?" answer of `0` means *just right*, and it isn't turned into a star rating.
- 🧩 **Grouped-product scope**: many stores show reviews from related products (other colors, bundles) on a product page. Each row has `isExactProduct` and `reviewedProductId`, or you can pick **This product only** to get reviews for that exact product and nothing else.
- 🔔 **New-review tracking**: switch to *New-review tracking* and schedule the run. Each run returns only reviews that earlier runs with the same tracker name have not already returned. That works well for review monitoring, alerts and CX dashboards.
- 🏬 **Product or whole store**: a product URL returns that product's reviews, and a store homepage returns reviews from the whole store, newest first.
- 🔒 **Privacy-aware by default**: reviewer names are off unless you turn them on. Personal questions such as height, age, body or skin type are left out.

### 🛠️ How It Works

1. **Add URLs**: paste Shopify product pages or store homepages that show Okendo reviews.
2. **Choose the scope**: *As shown on the product page* (grouped reviews included and flagged) or *This product only*.
3. **Set Maximum reviews** and run. For monitoring, choose *New-review tracking*, give the tracker a name and schedule the run.

A `SUMMARY` record in the key-value store explains every URL: whether reviews were found, how many pages were read, how many reviews were returned and why collection stopped (`feedEnd`, `maxItems`, `windowEnd`, …).

### 💰 Pricing

**$1.00 per 1,000 reviews** ($0.001 per review) plus a tiny per-run start fee. You only pay for reviews returned in your dataset. Filtering, sorting and attribute data are included at no extra cost.

### 📊 Sample Output Data

```json
[
    {
        "reviewId": "85ee919f-404a-4194-b3b7-521385099414",
        "rating": 1,
        "title": "Dress Shirt",
        "body": "It was too tight across the chest.",
        "isVerifiedBuyer": true,
        "isRecommended": false,
        "isIncentivized": false,
        "createdAt": "2026-09-22T03:17:39.617Z",
        "updatedAt": "2026-09-22T03:17:39.617Z",
        "languageCode": "en",
        "helpfulCount": 0,
        "unhelpfulCount": 0,
        "ratingAttributes": [
            { "title": "Size Range", "type": "centered-range", "value": 1, "minLabel": "Runs small", "midLabel": "True to size", "maxLabel": "Runs large" },
            { "title": "Quality", "type": "range", "value": 3, "minLabel": "Poor", "midLabel": null, "maxLabel": "Excellent" }
        ],
        "productAttributes": [],
        "media": [],
        "merchantReply": "We sincerely apologize for the disappointing experience you've had with your Black Performance Dress Shirt...",
        "merchantReplyAt": "2026-09-22T14:01:37.822Z",
        "reviewedProductId": "shopify-6969464291400",
        "productName": "Black Performance Dress Shirt",
        "productUrl": "https://www.trueclassictees.com/products/black-short-sleeve-performance-dress-shirt",
        "variantId": "40599741399112",
        "variantName": "L",
        "requestedProductId": null,
        "isExactProduct": null,
        "areReviewsGrouped": null,
        "subscriberId": "c8ad5655-9ee6-4249-b97a-33abc22d4199",
        "scope": "store",
        "sourceUrl": "https://trueclassictees.com/",
        "scrapedAt": "2026-09-22T15:22:37.026Z"
    },
    {
        "reviewId": "eb349c42-9156-42a1-80ba-070cfc304f25",
        "rating": 5,
        "title": "Excellent",
        "body": "Very comfortable yet professional",
        "isVerifiedBuyer": true,
        "createdAt": "2026-09-22T14:37:50.856Z",
        "ratingAttributes": [
            { "title": "How did the item fit?", "type": "centered-range", "value": 0, "minLabel": "Small", "midLabel": "Just right", "maxLabel": "Big" }
        ],
        "productAttributes": [
            { "title": "Size purchased", "type": "single-value", "value": "L" },
            { "title": "Used for", "type": "multi-value", "value": ["Work", "Daily"] }
        ],
        "reviewedProductId": "shopify-7015597572177",
        "productName": "Asana Relaxed Straight Pant",
        "variantName": "Regular 30\" / L",
        "requestedProductId": "shopify-7015597572177",
        "isExactProduct": true,
        "areReviewsGrouped": true,
        "scope": "product",
        "sourceUrl": "https://www.ninepine.com/products/asana-relaxed-straight-zip-pant-black"
    }
]
```

### ❓ FAQ

**Why do product-page reviews mention other products?** The store groups related products so they share reviews. Filter on `isExactProduct`, or run with *This product only*.

**What happens on the first tracking run?** It returns every review created inside the tracking window (30 days by default). Later runs with the same tracker name return only reviews that are new since then.

**The run says "No Okendo reviews widget found".** That store uses a different review provider, or the page does not load the reviews widget. Try a product page from the same store.

Turn Okendo reviews into product, fit and customer-experience insights with **Okendo Reviews Scraper**! 🚀

# Actor input Schema

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

Shopify product pages or store homepages that show Okendo reviews. A product URL returns that product's reviews; a store URL returns reviews for the whole store.

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

Maximum number of reviews returned across all URLs.

## `reviewScope` (type: `string`):

Stores often group related products (colors, bundles) so a product page shows reviews of its siblings too. 'As shown on the product page' keeps the grouped reviews and marks each with isExactProduct; 'This product only' drops reviews written for other products in the group.

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

Export reviews newest first, or return only reviews not delivered by earlier runs of the same tracker. The first tracking run returns every review in the tracking window.

## `stateKey` (type: `string`):

Reuse the same name in scheduled runs. Use a different name to start a fresh tracker. Only used in new-review tracking.

## `lookbackDays` (type: `integer`):

New-review tracking only looks at reviews created within this many days.

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

Add the public display name shown on the review (usually first name and initial).

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

Proxy servers used to load pages.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.ninepine.com/products/asana-relaxed-straight-zip-pant-black"
    }
  ],
  "maxItems": 50,
  "reviewScope": "widget",
  "mode": "snapshot",
  "stateKey": "default",
  "lookbackDays": 30,
  "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.ninepine.com/products/asana-relaxed-straight-zip-pant-black"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/okendo-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.ninepine.com/products/asana-relaxed-straight-zip-pant-black" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/okendo-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.ninepine.com/products/asana-relaxed-straight-zip-pant-black"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/okendo-reviews-scraper --silent --output-dataset

```

## MCP server setup

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