# Yandex Maps Reviews Scraper Отзывы Яндекс Карт \[Only $1.5] (`memo23/yandex-maps-reviews-scraper`) Actor

\[Only $1.50 per 1000 reviews] Scrape Yandex Maps (Яндекс Карты) reviews with no login: text, stars, date, owner reply, photos, videos, author and translations, plus each business's topic sentiment (food, service, staff: positive vs negative). Links, IDs or a city search. Up to ~1,200 a place.

- **URL**: https://apify.com/memo23/yandex-maps-reviews-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Marketing, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Yandex Maps Reviews Scraper

Get the reviews of any business on Yandex Maps (Отзывы Яндекс Карт): review text, star rating, date, the owner's reply, photos, videos, the author and Yandex's translations, with the business name, rating and address on every row.
Paste business links or IDs, or search a category in any city in Russia, Turkey, Kazakhstan or the rest of the CIS and get reviews for every business found.
No login, no API key, no browser. One row per review, ready for Excel, BI tools or sentiment analysis.

#### How it works

![How Yandex Maps Reviews Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-yandex-maps-reviews.png)

#### ✨ Why use this scraper?

- **More than Yandex shows in one list.** Yandex Maps serves at most 600 reviews per sort order. The scraper goes through all four orders (newest, lowest, highest, most relevant) and removes duplicates, which reached 1,187 reviews on a Moscow cafe with 1,798.
- **Owner replies included.** Each review carries the business's answer and when it was posted, so you can measure reply rate and reply time.
- **Photos and videos.** Full-size photo links and video links from each review.
- **What reviewers praise and complain about.** Yandex's own topic counts for each business, such as Coffee: 840 positive and 137 negative out of 1,139 mentions, or Rooms, Cleanliness and Parking for a hotel. Yandex only shows them on its Russian site; the scraper gets them in every language and names the common topics in English.
- **Ready to group.** The business name, rating, review count, address and link sit on every row, so a CSV opens ready for a pivot table.
- **Search a whole category.** Search "стоматология" in Kazan, take the top 20 clinics, and get each one's latest reviews in one run.
- **Pay per review.** Reviews outside your star filter are not charged.

#### 🎯 Use cases

| Who | What they get |
|---|---|
| Reputation managers | Every new review and owner reply for their locations |
| Marketing agencies | Competitor reviews and ratings across a city |
| Product and CX teams | Complaints (1–2 stars) to read or feed into sentiment analysis |
| Market research | What customers praise and criticise in a category |
| Data teams | A refreshable review dataset for Russia, Turkey and the CIS |

#### 📥 Supported inputs

| Input | Example |
|---|---|
| Business link | `https://yandex.com/maps/org/floo/1736003187/reviews/` |
| Short share link | `https://yandex.ru/maps/-/CPqIUMo` |
| Business ID | `1736003187` (the `placeId` from the Yandex Maps Scraper) |
| Search link | `https://yandex.ru/maps/43/kazan/search/стоматология/` |
| Search query + location | `стоматология` in `Kazan`, `coffee` in `Istanbul` |

Any Yandex host works: `.ru`, `.com`, `.com.tr`, `.kz`, `.by`, `.uz`.

#### 🔄 How it works

1. The scraper opens a Yandex Maps session the way a browser does, with no login.
2. For a search, it finds the businesses first, up to your "Businesses per search".
3. For each business it reads reviews 50 at a time in your chosen order.
4. When a business has more reviews than one order shows (600), the other three orders follow, with duplicates removed.
5. Every review becomes one flat row with its business attached, and is pushed to the dataset.

#### ⚙️ Input parameters

In the order of the input form:

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | Business pages, their reviews tab, short share links or search pages. |
| `businessIds` | array | The number at the end of a `/maps/org/` link, e.g. `1736003187`. |
| `searchQueries` | array | Queries to run in `location`; the businesses found give their reviews. |
| `location` | string | City, region or country for the queries. Moscow when empty. |
| `language` | string | `en`, `ru`, `tr`, `uk` or `kk`: language of business names, addresses and categories. |
| `minRating` / `maxRating` | integer | Star range to keep, 1 to 5. Reviews outside it are not billed. |
| `reviewSort` | string | `newest` (default), `relevance`, `highest` or `lowest`. |
| `maxReviewsPerPlace` | integer | Reviews kept per business. Default 100; `0` takes all Yandex lists. |
| `maxPlaces` | integer | Businesses taken from each query or search link. Default 10. |
| `maxItems` | integer | Reviews in the whole run. Default 1000. |
| `proxy` | object | Empty uses the built-in residential proxy. |

Example input:

```json
{
  "searchQueries": ["стоматология"],
  "location": "Kazan",
  "maxPlaces": 20,
  "maxReviewsPerPlace": 50,
  "maxRating": 2,
  "language": "ru"
}
```

#### 📊 Output overview

Each row is one review: the review itself (`rating`, `text`, `language`, `translations`, `publishedAt`, `likes`), its media (`photos`, `videos`), the author (`authorName`, `authorLevel`, `authorAvatarUrl`, `authorProfileUrl`), the owner's reply (`ownerReply`, `ownerReplyAt`), the business (`businessName`, `businessRating`, `businessReviewCount`, `businessAddress`, `businessUrl`), Yandex's review topics for the business (`businessAspects`), and where the row came from (`sortOrder`, `searchQuery`, `location`).

#### 📦 Output sample

```json
{
  "reviewId": "L31Qiqb5O7C9x3hXd2IvQdmkkZ7KFAOi",
  "rating": 5,
  "text": "Очень вкусные завтраки и классный зал, уютно в любую погоду. Очень классно что можно взять с собой и кушать за столиком на улице.",
  "language": "ru",
  "publishedAt": "2026-06-14T08:59:27.127Z",
  "likes": 0,
  "photos": [
    "https://avatars.mds.yandex.net/get-altay/19595165/2a0000019ec55bc34e9bbfed6ac8642a70b3/XXXL"
  ],
  "photoCount": 2,
  "authorName": "Вика",
  "authorLevel": "Level 14 Local Expert",
  "ownerReply": "Вика. спасибо за ваш отзыв! Всегда ждем в гости 💛\nКоманда floo",
  "ownerReplyAt": "2026-06-16T15:30:19.003Z",
  "businessId": "1736003187",
  "businessName": "Floo",
  "businessRating": 4.9,
  "businessReviewCount": 1798,
  "businessAddress": "Moscow, Novodmitrovskaya Street, 1с23",
  "businessCategories": ["Coffee shop", "restaurant", "cafe"],
  "businessUrl": "https://yandex.com/maps/org/floo/1736003187/",
  "businessAspects": [
    { "topic": "Coffee", "topicRu": "Кофе", "mentions": 1139, "positive": 840, "negative": 137 },
    { "topic": "Drinks", "topicRu": "Напитки", "mentions": 1138, "positive": 900, "negative": 165 },
    { "topic": "Food", "topicRu": "Еда", "mentions": 1101, "positive": 876, "negative": 146 },
    { "topic": "Service", "topicRu": "Обслуживание", "mentions": 697, "positive": 474, "negative": 199 }
  ],
  "sortOrder": "relevance"
}
```

#### 🗂 Key output fields

| Group | Fields |
|---|---|
| Review | `reviewId`, `rating`, `text`, `language`, `translations`, `publishedAt`, `likes`, `dislikes`, `isPinned` |
| Media | `photos`, `photoCount`, `videos` |
| Author | `authorName`, `authorLevel`, `authorAvatarUrl`, `authorProfileUrl` |
| Owner reply | `ownerReply`, `ownerReplyAt` |
| Business | `businessId`, `businessName`, `businessRating`, `businessRatingCount`, `businessReviewCount`, `businessAddress`, `businessCategories`, `businessUrl` |
| Review topics | `businessAspects`: per topic `topic`, `topicRu`, `mentions`, `positive`, `negative` |
| Source | `sortOrder`, `searchQuery`, `location`, `scrapedAt` |

#### ❓ FAQ

**Can I get every review of a business?** For businesses with up to 600 reviews, yes. Above that, Yandex Maps serves at most 600 per sort order, and the scraper combines all four orders: on a cafe with 1,798 reviews that gave 1,187. Set `maxReviewsPerPlace` to `0` to take everything Yandex serves.

**Why does `sortOrder` change within one business?** Once your chosen order runs out at 600, the next order continues. `sortOrder` tells you which order each review came from.

**Do I need a Yandex account, an API key or a proxy?** No. The scraper uses no login, and a residential proxy is built in.

**Can I filter by stars?** Yes, with `minRating` and `maxRating`. Yandex has no star filter of its own, so the scraper reads the reviews and keeps the ones in range; only those are charged.

**What is `businessAspects`?** Yandex sorts a business's reviews into topics (food, service, rooms, staff, parking and so on) and counts how many mention each one positively or negatively; the rest of `mentions` are neutral. Yandex gives the top four topics per business, and the same four sit on every row of that business. `topic` is in English for runs in any language except Russian, which keeps Yandex's Russian names; `topicRu` is always the original. A topic without an English name in our list keeps its Russian name. An empty list means Yandex has no topics for that business; this happens even on some places with thousands of reviews.

**How much does it cost?** $1.50 per 1,000 reviews, plus $0.005 per run start. Reviews outside your star filter are not charged.

**What does the free Apify plan get?** Up to 100 reviews per run.

**How do I get business IDs for many places?** Run the [Yandex Maps Scraper](https://apify.com/memo23/yandex-maps-scraper) for a category and city, and pass its `placeId` values here as `businessIds`. Or use `searchQueries` in this actor directly.

#### 💬 Support

Found a bug or need a field added? Open an issue on the Actor's Issues tab and it will be looked at quickly.

#### 🛠 Additional services

Need a custom scraper or an integration with your CRM? Get in touch through the Issues tab.

#### 🔎 Explore more scrapers

- [Yandex Maps Scraper](https://apify.com/memo23/yandex-maps-scraper): businesses with phones, websites, ratings and hours for any search
- [2GIS Scraper](https://apify.com/memo23/2gis-scraper): places, reviews, jobs and realty from 2GIS, the other big map of Russia and the CIS

### 🤖 For AI Agents & LLM Apps

Compact reference for agents calling this Actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (Actor: `memo23/yandex-maps-reviews-scraper`).

**Purpose:** reviews of Yandex Maps businesses, given business links or IDs, a search link, or a search query and location, as one JSON row per review.

**Minimal input:**

```json
{ "businessIds": ["1736003187"], "maxReviewsPerPlace": 50 }
```

**Behaviors an agent should know:**

- Always set `maxReviewsPerPlace` and/or `maxItems`; a popular business has thousands of reviews.
- Above 600 reviews, rows from a second sort order follow the first; `sortOrder` names it.
- `minRating` / `maxRating` drop reviews before they are charged.
- Price: $0.0015 per review, plus $0.005 per run start.
- Free Apify plan: up to 100 reviews per run. The run also stops at the caller's spending limit.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Yandex, Yandex Maps, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available reviews, with no authenticated endpoints, owner dashboards, or content behind a Yandex login. Reviews contain personal data (author names, profile links, photos); users are responsible for ensuring their use complies with Yandex's Terms of Service, applicable data-protection law (GDPR, 152-FZ, KVKK, etc.), and any contractual obligations of their own organisation.

***

### SEO Keywords

yandex maps reviews scraper, yandex reviews, scrape yandex maps reviews, парсер отзывов яндекс карт, отзывы яндекс карты, yandex maps api reviews, yandex business reviews, russia reviews data, turkey business reviews, kazakhstan reviews, cis reviews dataset, review monitoring russia, reputation management yandex, sentiment analysis reviews, owner replies yandex, local business reviews, 2gis reviews alternative, google reviews alternative russia, Apify yandex reviews

# Actor input Schema

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

Links copied from Yandex Maps, one per line. A business page (yandex.com/maps/org/floo/1736003187/), its reviews tab or a short share link (yandex.ru/maps/-/…) gives that business's reviews. A search page (yandex.ru/maps/213/moscow/search/кафе/) gives reviews from the businesses it lists, up to “Businesses per search”. Links on .ru, .com, .com.tr, .kz, .by and .uz all work.

## `businessIds` (type: `array`):

The number at the end of a /maps/org/ link, e.g. 1736003187 for yandex.com/maps/org/floo/1736003187/. Anything that is not a digit is dropped. The Yandex Maps Scraper outputs this number as placeId.

## `searchQueries` (type: `array`):

What you would type into Yandex Maps, one per line, e.g. “стоматология” or “coffee”. Each query runs in the search area below, and the reviews of the businesses it returns are collected.

## `location` (type: `string`):

City, region or country the search queries run in, e.g. “Kazan”, “Казань” or “Istanbul”. Moscow when left empty. Search links ignore it, since they carry their own map area.

## `language` (type: `string`):

The language Yandex uses for business names, addresses and categories. Review topics come in Russian on a Russian run and in English on any other. Reviews stay in the language they were written in; Yandex's translations of them, where it has some, are in each row's translations field.

## `minRating` (type: `integer`):

Empty keeps every rating. 4 keeps 4- and 5-star reviews. Yandex has no star filter, so the scraper reads every review and drops the rest; dropped reviews cost nothing.

## `maxRating` (type: `integer`):

Empty keeps every rating. 2 collects complaints: 1- and 2-star reviews only. Set both this and the lowest rating to keep a range, e.g. 3 and 3 for the middling ones.

## `reviewSort` (type: `string`):

Decides which reviews you get when a business has more than “Reviews per business”. Yandex lists at most 600 reviews in one order; past that, the scraper also reads the other three orders and skips repeats. Each row's sortOrder says which order it came from.

## `maxReviewsPerPlace` (type: `integer`):

The most reviews to keep from one business. 0 takes everything Yandex lists: all of them up to 600, and above that whatever the four orders reach together (1,187 of 1,798 on one Moscow cafe).

## `maxPlaces` (type: `integer`):

How many businesses each search query or search link takes reviews from, in the order Yandex lists them. Up to 1,000.

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

The run stops after this many reviews across all businesses, or earlier at your spending limit. On the free Apify plan a run stops at 100.

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

Leave empty and the scraper uses its own residential proxy. To use yours, turn on Apify Proxy with the groups you want or add your own proxy URLs.

## Actor input object example

```json
{
  "startUrls": [
    "https://yandex.com/maps/org/floo/1736003187/reviews/"
  ],
  "language": "en",
  "reviewSort": "newest",
  "maxReviewsPerPlace": 100,
  "maxPlaces": 10,
  "maxItems": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

Reviews with text, star rating, date, owner reply, photos, author and the business they belong to.

# 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": [
        "https://yandex.com/maps/org/floo/1736003187/reviews/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/yandex-maps-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": ["https://yandex.com/maps/org/floo/1736003187/reviews/"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/yandex-maps-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": [
    "https://yandex.com/maps/org/floo/1736003187/reviews/"
  ]
}' |
apify call memo23/yandex-maps-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/yandex-maps-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/jCCrft3LV3Uw22d8I/builds/5SPJ9adfOBMq4htkm/openapi.json
