# Kaspi Reviews Scraper (`piotrv1001/kaspi-reviews-scraper`) Actor

The Kaspi Reviews Scraper exports product and merchant reviews from Kaspi.kz — ratings, review text, pros and cons, photos, dates, helpful votes and the selling merchant, plus star breakdowns — ideal for product research, seller vetting and reputation monitoring in Kazakhstan.

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

### 🚀 Kaspi Reviews Scraper

Export customer reviews from Kaspi.kz, Kazakhstan's largest marketplace. The **Kaspi Reviews Scraper** turns any Kaspi product page or merchant (store) page into structured review data: star rating, review text, pros and cons, photos, date, helpful votes — and on every review, **the merchant who sold the item**. Each product or merchant also gets a rating summary with the full star breakdown. Use it for product research, to compare sellers of the same product, or to monitor your store's reputation.

### ✨ Features

- ⭐ **Full review history**: every public review, newest first — rating, text, pros, cons, date, helpful votes, photos and whether the review was edited. Reviews are in Russian and Kazakh, as written by buyers.
- 🏪 **Merchant on every review**: see which seller each buyer bought from, so you can compare stores selling the same product.
- 🛍️ **Merchant reviews**: paste a merchant page to get all reviews of that store across every product it sells, each with the product's name, category and link.
- 📊 **Rating summaries**: average rating, count of 5 to 1 star ratings, and how many reviews have text, photos, positive or negative ratings.
- 🎯 **Filters**: only reviews with text (default), only negative (1–3 stars) or only positive (4–5 stars) ratings.
- 📅 **Monitoring-ready**: `Reviews since` returns only new reviews, so scheduled runs pay only for what changed.

### 🛠️ How It Works

1. **Add pages** – Paste Kaspi.kz product URLs (`https://kaspi.kz/shop/p/...-113137790/`), merchant URLs (`https://kaspi.kz/shop/info/merchant/960061/...`) or numeric product IDs.
2. **Set limits and filters** – Maximum reviews per page (default 50, `0` returns summaries only), text-only, rating filter, and an optional start date.
3. **Run the scraper** – You get one rating summary per product or merchant followed by its reviews, newest first.

### ⚙️ Input

| Field | Description |
|---|---|
| `urls` | Kaspi.kz product or merchant URLs, or numeric product IDs. |
| `maxReviews` | Newest reviews first. Default 50; `0` = rating summaries only. |
| `onlyWithText` | Skip star-only reviews without any text. On by default. |
| `ratingFilter` | `all` (default), `positive` (4–5 stars) or `negative` (1–3 stars). |
| `reviewedSince` | Only reviews written on or after this date. |
| `proxyConfiguration` | Residential proxies are required. |

```json
{
    "urls": [
        "https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/",
        "https://kaspi.kz/shop/info/merchant/960061/reviews-tab/"
    ],
    "maxReviews": 500,
    "ratingFilter": "negative"
}
```

### 📊 Sample Output Data

Every row has a `recordType`: `product-summary` / `merchant-summary` or `review`. Use the **Reviews** and **Rating summaries** views in the dataset, or filter on `recordType` in your export.

```json
[
    {
        "recordType": "product-summary",
        "id": "113137790",
        "url": "https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/",
        "name": "Apple iPhone 15 128Gb NanoSIM+eSIM черный",
        "averageRating": 4.9,
        "reviewCount": 11810,
        "withText": 6337,
        "withPhotos": 2435,
        "positive": 6187,
        "negative": 150,
        "fiveStar": 11262,
        "fourStar": 397,
        "threeStar": 40,
        "twoStar": 17,
        "oneStar": 94,
        "scrapedAt": "2026-09-27T12:29:59.117Z"
    },
    {
        "recordType": "review",
        "reviewId": "8a558b0ba0d6dc1401a0e22447206cdd",
        "source": "product",
        "rating": 5,
        "text": "Балама ұнады.",
        "pros": null,
        "cons": null,
        "date": "2026-09-27",
        "author": "Балжан",
        "helpfulVotes": 0,
        "photoUrls": [],
        "edited": false,
        "productId": "113137790",
        "productName": "Apple iPhone 15 128Gb NanoSIM+eSIM черный",
        "productCategory": "Смартфоны",
        "productUrl": "https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/",
        "merchantCode": "960061",
        "merchantName": "Sirius",
        "scrapedAt": "2026-09-27T12:29:59.117Z"
    }
]
```

`author` is the first name Kaspi displays with the review.

### 📋 Coverage report

Each run saves a `SUMMARY` record with, per product or merchant, the stated review count, how many reviews were scanned and returned, and why collection stopped (`maxReviews`, `dateReached`, `listEnd`, `summaryOnly`, `noReviews`, `siteCap`).

- **Kaspi serves at most the newest 10,000 reviews of one list.** Lists with text-only reviews rarely reach it; with `onlyWithText: false` a very popular product (e.g. 11,810 ratings) stops at 10,000 and the status message says so.
- **The same review can belong to a product and to its merchant.** When you scrape both in one run, each review is returned (and charged) once.
- A product with no reviews — or an ID that does not exist — returns a rating summary with zero counts, **free of charge**.

### 💰 Pricing

Pay only for what you get:

| Event | Price |
|---|---:|
| Rating summary (product or merchant with at least one review) | $0.002 |
| Review | $0.001 |

50 reviews on each of 20 products cost about $1.04. All 6,600 text reviews of a large merchant cost about $6.60. If you set a maximum cost per run, the scraper stops when it is reached.

### ❓ FAQ

**Which languages are the reviews in?** As written by buyers — mostly Russian, with many in Kazakh. Texts are not translated.

**Can I get reviews for one merchant on one product?** Scrape the product; every review names the merchant, so you can filter by `merchantCode`.

**How do I monitor new reviews?** Schedule the actor with `reviewedSince` set to your last run date.

Know what Kaspi.kz buyers really say — try the **Kaspi Reviews Scraper** today! 🚀

# Actor input Schema

## `urls` (type: `array`):

Kaspi.kz product pages (https://kaspi.kz/shop/p/...-113137790/) for product reviews, or merchant pages (https://kaspi.kz/shop/info/merchant/960061/...) for all reviews of a store. A numeric product ID also works.

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

Newest reviews first. Set 0 to return only the rating summaries.

## `onlyWithText` (type: `boolean`):

Skip star-only reviews that have no comment, pros or cons.

## `ratingFilter` (type: `string`):

Negative = 1 to 3 stars, positive = 4 and 5 stars.

## `reviewedSince` (type: `string`):

Only return reviews written on or after this date. Useful for scheduled monitoring runs.

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

Kaspi.kz needs residential proxies.

## Actor input object example

```json
{
  "urls": [
    "https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/"
  ],
  "maxReviews": 50,
  "onlyWithText": true,
  "ratingFilter": "all",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "urls": [
        "https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/kaspi-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 = {
    "urls": ["https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/kaspi-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 '{
  "urls": [
    "https://kaspi.kz/shop/p/apple-iphone-15-128gb-nanosim-esim-chernyi-113137790/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call piotrv1001/kaspi-reviews-scraper --silent --output-dataset

```

## MCP server setup

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