# Okendo Review Scraper for Shopify stores (`stanvanrooy6/okendo-scraper`) Actor

Scrape Okendo reviews from any Shopify store. Get ratings, text, images & videos. Unlimited usage for a $7/month.

- **URL**: https://apify.com/stanvanrooy6/okendo-scraper.md
- **Developed by:** [Stan Van Rooy](https://apify.com/stanvanrooy6) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$7.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.
You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Okendo Reviews Scraper for Shopify stores 🌟

Extract customer reviews from any Shopify store using Okendo. Perfect for competitor analysis, product research, or monitoring your own reviews.

### 🚀 Quick Start

Just provide a store URL and hit run. The scraper automatically detects whether you want:
- **All reviews** from the store (site-wide mode)
- **Reviews for a specific product** (product-specific mode)

That's it! No configuration needed.

### 📥 Input

**Start URL** (required)
- Site-wide: `https://store.com` or `store.com`
- Product-specific: `https://store.com/products/product-name`

**Max Reviews** (optional, default: 100)
- How many reviews to scrape (0 = unlimited)

### 📤 Output

Each review contains detailed fields directly from the Okendo API:

```json
{
  "reviewId": "5f8d9a7b-1c2d-4e3f-a4b5-6c7d8e9f0a1b",
  "subscriberId": "3a1b2c3d-4e5f-6g7h-8i9j-0k1l2m3n4o5p",
  "productId": "shopify-1234567890123",
  "rating": 5,
  "title": "Absolutely love it!",
  "body": "The quality is amazing and it fits perfectly. Highly recommend!",
  "dateCreated": "2023-10-15T14:30:00.000Z",
  "reviewer": {
    "displayName": "Sarah J.",
    "isVerifiedBuyer": true,
    "email": "sarah***@gmail.com"
  },
  "productName": "Summer Floral Dress",
  "productImageUrl": "https://cdn.shopify.com/s/files/1/0123/4567/products/dress.jpg",
  "images": [
    {
      "url": "https://okendo-images.s3.amazonaws.com/uploads/..."
    }
  ],
  "attributes": [
    {
      "label": "Sizing",
      "value": "True to Size"
    }
  ]
}
````

#### Field Descriptions

- `reviewId` - Unique Okendo review identifier
- `rating` - Star rating (1-5)
- `title` - Review title/headline
- `body` - Full review text
- `dateCreated` - Timestamp when the review was posted
- `reviewer` - Object containing reviewer details (name, verified status)
- `productName` - Name of the reviewed product
- `images` - Array of customer uploaded photos
- `attributes` - Custom product attributes (e.g., Fit, Quality)

### ✨ Features

- **Smart Mode Detection** - Automatically detects if you want site-wide or product-specific reviews
- **Complete Data** - Gets everything: ratings, verified status, images, product info, and custom attributes
- **Reliable** - Never fails on bad input (stores without Okendo just return no data)
- **Fast** - Uses Okendo APIs directly, no browser overhead
- **Pagination** - Automatically handles multi-page results

### 💡 Use Cases

- **Competitor Research** - See what customers say about competing products
- **Product Insights** - Understand customer sentiment before entering a market
- **Review Monitoring** - Track reviews for your own products
- **Data Analysis** - Export for sentiment analysis or ML training
- **Market Research** - Analyze trends across multiple stores

### ⚠️  Important Notes

- Only works for stores using **Okendo** as their review platform
- If a store doesn't use Okendo, the actor completes successfully with 0 results (won't fail)
- Product ID is automatically extracted from Shopify pages

### 💰 Pricing

**$7/month flat fee** - unlimited usage

### 📞 Feedback & Feature Requests

I'm actively maintaining this actor and happy to add features you need. Just reach out!

📧 **stanvanrooy6@gmail.com**

Whether it's additional data fields, filtering options, or integration with other platforms - let me know and I'll build it.

### 🎯 Example Usage

**Scrape all reviews from a store:**

```json
{
  "startUrl": "https://speargun.com",
  "maxReviews": 100
}
```

**Scrape reviews for a specific product:**

```json
{
  "startUrl": "https://speargun.com/products/mahogany-competition-series-riffe-spearfishing-speargun",
  "maxReviews": 50
}
```

### ❓ FAQ

#### Does this work with any Shopify store?

Yes, as long as the store uses Okendo for their reviews! If a store uses a different app (like Loox or Yotpo), this scraper won't find any data.

#### Why did I get 0 results?

This usually means either the store doesn't use Okendo, or the specific product URL you provided has no reviews yet.

#### Can I scrape more than 100 reviews?

Absolutely! Just change the `maxReviews` parameter in your input to whatever number you need. Set to `0` for unlimited.

#### Is this scraper safe to use?

Yes! We use efficient API calls that mimic normal traffic patterns to ensure reliability and safety.

### 🔗 Related Scrapers

**Using Loox instead of Okendo?**\
Check out the [Loox Reviews Scraper](https://apify.com/stanvanrooy/loox-scraper) for Shopify stores using Loox as their review platform.

**Using Yotpo instead of Okendo?**\
Check out the [Yotpo Reviews Scraper](https://apify.com/stanvanrooy/yotpo-scraper) for Shopify stores using Yotpo as their review platform.

**Using Judge.me instead of Okendo?**\
Check out the [Judge.me Reviews Scraper](https://apify.com/stanvanrooy/judge-me-scraper) for Shopify stores using Judge.me as their review platform.

***

Built with ❤️  for the Apify community

# Actor input Schema

## `startUrl` (type: `string`):

Enter a Shopify store URL to get all reviews, or a product URL to get reviews for that specific product.

Examples:
• Store-wide: speargun.com, https://speargun.com
• Product-specific: https://speargun.com/products/mahogany-competition-series-riffe-spearfishing-speargun

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

How many reviews to collect. Leave empty or set to 0 for unlimited.

## Actor input object example

```json
{
  "startUrl": "https://speargun.com",
  "maxReviews": 100
}
```

# 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 = {
    "startUrl": "https://speargun.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("stanvanrooy6/okendo-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 = { "startUrl": "https://speargun.com" }

# Run the Actor and wait for it to finish
run = client.actor("stanvanrooy6/okendo-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrl": "https://speargun.com"
}' |
apify call stanvanrooy6/okendo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stanvanrooy6/okendo-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Okendo Review Scraper for Shopify stores",
        "description": "Scrape Okendo reviews from any Shopify store. Get ratings, text, images & videos. Unlimited usage for a $7/month.",
        "version": "0.1",
        "x-build-id": "UTHZxEf68aV8nGlXu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stanvanrooy6~okendo-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stanvanrooy6-okendo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stanvanrooy6~okendo-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stanvanrooy6-okendo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stanvanrooy6~okendo-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stanvanrooy6-okendo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrl"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Store or Product URL",
                        "type": "string",
                        "description": "Enter a Shopify store URL to get all reviews, or a product URL to get reviews for that specific product.\n\nExamples:\n• Store-wide: speargun.com, https://speargun.com\n• Product-specific: https://speargun.com/products/mahogany-competition-series-riffe-spearfishing-speargun"
                    },
                    "maxReviews": {
                        "title": "Maximum Reviews",
                        "minimum": 0,
                        "type": "integer",
                        "description": "How many reviews to collect. Leave empty or set to 0 for unlimited.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
