# Yandex Maps Scraper - Places, Phones & Reviews, No Login (`benthepythondev/yandex-maps-scraper`) Actor

Exports Yandex Maps places by search or link: name, categories, address, coordinates, phones, website, social links, rating, review count, hours, features. Optional reviews with owner replies, up to 2,400 per place across four sort orders. Filters for phone, website, rating. No browser, no login.

- **URL**: https://apify.com/benthepythondev/yandex-maps-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Lead generation, Travel, Automation
- **Stats:** 9 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## 🗺️ Yandex Maps Scraper: Places, Phones & Reviews, No Login

Export businesses from **Yandex Maps** by search term, search link, place link or place id: name, categories, full address, coordinates, every phone number, website (without Yandex's ad tracking), Telegram/VK/WhatsApp links, rating, number of ratings and reviews, opening hours, status and the place's features (average bill, cuisine, payment methods, delivery). Add **reviews with the owner's reply** as their own rows, up to 2,400 per place. Plain HTTP, no browser, no login, no cookies. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

**What a run costs** (pay per row; filtered-out places, empty searches and errors cost nothing):

| | Free plan | Bronze | Silver | Gold and up |
|---|---|---|---|---|
| Place row | $0.002 | $0.0018 | $0.0017 | $0.0016 |
| Review row | $0.0005 | $0.00045 | $0.000425 | $0.0004 |

Plus $0.00005 per run start. **Until November 8, 2026 every row (place or review) costs $0.003**, the price this Actor's listing had before; the table above applies from that day.

### ⚡ What it does better

What users report on other Yandex Maps Actors, and what this one does:

| Reported elsewhere | Here |
|---|---|
| "Only 50 reviews out of 2,200+" | Yandex shows 600 reviews per sort order. Ask for more and the Actor reads all four orders (newest, relevant, highest, lowest) and keeps each review once: 941 of 1,222 for one Moscow café, every review for places with up to 600 |
| "Doesn't return more than 10 places" | A search pages on until Yandex stops listing new places (Yandex pages through 1,000 positions; "cafe Moscow" held 524 different places on 2026-10-26) |
| "High duplicate data" | Yandex repeats places further down a search; each place is saved once per run, also when two searches find it |
| "Location is ignored" | The location is written into the search text, the way a person types it into Yandex Maps |
| Browser runs that time out | No browser: 54 places and 5,390 of their reviews in 33 seconds at 512 MB on Apify |
| Websites full of `yclid`/`utm_` parameters | Ad tracking parameters are removed from websites |

### 🔎 What is the Yandex Maps Scraper?

Yandex Maps is the main map and business directory in Russia, Kazakhstan, Belarus, Uzbekistan and much of the CIS, and it covers Turkey too. This Actor reads the same data the Yandex Maps website shows a visitor who is not logged in.

#### What data does it extract?

- **Place:** id, name, categories, full address, postal code, country, latitude and longitude, link
- **Contacts:** all phone numbers in international format, websites, social links (Telegram, VK, WhatsApp, Instagram, OK)
- **Reputation:** average rating, number of ratings, number of reviews, owner-verified flag
- **Details:** opening hours, status (open, closed, permanently closed), chain name, features (average bill, cuisine, payment methods, delivery, Wi-Fi and more)
- **Reviews (optional):** text, rating, date, reviewer's public name and level, likes and dislikes, photos, the business's reply and its date

### ⬇️ Input

| Field | What it does |
|---|---|
| `searchQueries` | Search terms, one search each: `["кафе", "dentist"]` |
| `location` | City or area added to every term: `Moscow`, `Казань`, `Almaty` |
| `startUrls` | Yandex Maps search links or place links |
| `businessIds` | Yandex place ids (the number in a place link) |
| `maxPlaces` | Places per search (default 10; 0 = all Yandex lists) |
| `maxReviewsPerPlace` | Reviews per place (default 0 = none; up to 5,000 asked, about 2,400 available) |
| `reviewSort` | `newest`, `relevance`, `highest`, `lowest` |
| `language` | `en`, `ru`, `tr`, `uk`, `kk`, `uz`: language of categories, addresses and features |
| `onlyWithPhone`, `onlyWithWebsite`, `minRating`, `minReviews` | Filters; skipped places are not charged |

Input names of other Yandex Maps Actors are read too: `query`, `city`, `maxResults`, `maxItems`, `includeReviews`.

#### Example input

```json
{
  "searchQueries": ["кафе", "автосервис"],
  "location": "Казань",
  "maxPlaces": 50,
  "maxReviewsPerPlace": 100,
  "reviewSort": "newest",
  "onlyWithPhone": true
}
```

### ⬆️ Output

Every row has `rowType`: `place` or `review`. In the Console the **Places** and **Reviews** views show each kind on its own.

```json
{
  "rowType": "place",
  "placeId": "55760134248",
  "title": "Alyonka",
  "categories": [
    "Coffee shop",
    "confectionary",
    "cafe"
  ],
  "address": "Moscow, 1st Tverskaya-Yamskaya Street, 12",
  "country": "Russian Federation",
  "postalCode": "125047",
  "latitude": 55.772395,
  "longitude": 37.592453,
  "phone": "+78004441496",
  "phones": [
    "+78004441496",
    "+74991100596"
  ],
  "website": "https://cafe.alenka.ru/",
  "socialLinks": [
    "https://vk.ru/alenka_retail",
    "https://vk.ru/alenka.cafe"
  ],
  "rating": 5,
  "ratingCount": 2527,
  "reviewCount": 1222,
  "workingHours": "daily, 9:00 AM–10:00 PM",
  "status": "open",
  "permanentlyClosed": false,
  "verifiedOwner": true,
  "chainName": "Aljonka",
  "features": {
    "prices": "average",
    "food delivery": true,
    "coffee to go": true
  },
  "url": "https://yandex.com/maps/org/alyonka/55760134248/",
  "searchRank": null,
  "target": "place:55760134248"
}
```

```json
{
  "rowType": "review",
  "reviewId": "q_E29mTwtg0ERKcAwi7uMOgiI1HmCAVlK",
  "placeId": "55760134248",
  "placeTitle": "Alyonka",
  "rating": 5,
  "text": "Отличное местечко в сердце столицы, где можно передохнуть от шума и суеты Тверской улицы, отдельное спасибо баристе Любови, за настроение и вкусняшки. Удвчи и сладкого настроения. ",
  "textLanguage": "ru",
  "publishedAt": "2026-10-07T11:07:23.621Z",
  "authorName": "…",
  "authorLevel": "Знаток города 6 уровня",
  "likes": 1,
  "dislikes": 0,
  "photos": [
    "https://avatars.mds.yandex.net/get-altay/21012689/2a000001a1160bfb618b27fc55f24e636fe0/XXXL"
  ],
  "ownerReply": "Добрый день! \nБлагодарим за Ваш отзыв! Рады будем видеть Вас снова в наших магазинах!\n",
  "ownerReplyAt": "2026-10-08T11:08:40.719Z",
  "target": "place:55760134248"
}
```

A place row is saved after its reviews, so a place row in the dataset means its reviews are complete. The run's `SUMMARY` record lists every search and place with what was found.

### 💡 Use cases

- 📇 **Lead lists** for Russia and the CIS: cafés, clinics, car services, shops with phone, website and Telegram
- ⭐ **Reputation monitoring:** newest reviews of your own branches or a competitor's, with owner replies
- 🏪 **Market research:** how many places of a kind a city has, their ratings and price levels
- 🤖 **Sentiment and AI datasets:** thousands of reviews per category with ratings and dates

### 🤖 For AI agents

Copy this input; nothing else is required and no credential is needed:

```json
{"searchQueries": ["dentist"], "location": "Moscow", "maxPlaces": 20}
```

### ⚠️ Limits

- Yandex pages through 1,000 positions per search and repeats places among them, so one search gives about 300 to 550 different places (524 for "cafe Moscow"). For a whole city, split the search by district or category.
- Yandex shows 600 reviews per sort order; all four orders together gave 70–100% of the reviews of places with more than 600.
- Outside Russia, the CIS and Turkey Yandex has few places (13 coffee shops in Berlin).
- Review dates are the time of the last edit, as Yandex gives them.
- Reviewer names are the public names Yandex shows; avatars and profile ids are not exported.

### ❓ FAQ

**Do I need a Yandex account or cookies?** No. The Actor reads what a visitor who is not logged in sees.

**Do I need a proxy?** No. It starts without one and moves to Apify's proxy by itself when Yandex refuses a visitor.

**How fast is it?** On Apify, 450 places from three searches took about 20 seconds; a page of 50 reviews takes a fraction of a second.

**Why did I get fewer places than I asked for?** Yandex listed fewer matching places, or your filters skipped them. The status message names the searches that came up short.

**Can I get all reviews of one place?** Set `maxReviewsPerPlace` to 5000 and give the place link. Places with up to 600 reviews come back complete; above that you get what the four orders show together.

**Are skipped places charged?** No. Only saved rows are charged.

**What happens when a run is stopped or moved?** Progress is saved; a resurrected run continues without saving a row twice.

**Is it legal?** It reads public business listings and public reviews. Business contact data is published by the businesses themselves; reviews carry the reviewer's public display name. Use the data in line with GDPR, Russia's 152-FZ and the rules for direct marketing in your country, and do not use reviewer names for contacting people.

### 🔗 You might also like

- [Google Maps Business Scraper](https://apify.com/benthepythondev/google-maps-business-scraper): the same kind of place data from Google Maps
- [Google Maps Email Scraper](https://apify.com/benthepythondev/google-maps-email-scraper): places with emails from their websites
- [Website Contact Extractor](https://apify.com/benthepythondev/website-contact-extractor): emails and phones from a list of websites
- [Tripadvisor Reviews Scraper](https://apify.com/benthepythondev/tripadvisor-reviews-scraper): reviews of hotels and restaurants

**Keywords:** yandex maps scraper, yandex maps parser, парсер яндекс карт, yandex maps reviews, отзывы яндекс карты, yandex business directory, russia business leads, cis leads, yandex places api, yandex maps export csv, yandex organizations, yandex maps phone numbers, yandex maps api alternative, kazakhstan business data, yandex reviews export, local business data russia

# Actor input Schema

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

What to search on Yandex Maps, as you would type it there: 'кафе', 'dentist', 'автосервис'. Each term is one search. Add the place to the term or use Location.

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

City or area added to every search term, e.g. Moscow, Казань, Almaty, Istanbul. Leave empty when the terms already name a place.

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

Search links (yandex.com/maps/.../search/<text>/ or ?text=) and place links (yandex.ru/maps/org/<name>/<id>/). Place links return that place.

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

Yandex place ids, the number in a place link (e.g. 55760134248).

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

Places saved per search term or search link. 0 means as many as Yandex lists (it lists a few hundred per search).

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

Reviews saved per place as their own rows. 0 for none. Yandex shows 600 per order; above 600 the Actor reads all four orders and keeps each review once (up to 2,400).

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

Order in which reviews are read.

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

Language of categories, addresses, hours and feature names. Review texts stay in the language they were written in.

## `onlyWithPhone` (type: `boolean`):

Skip places without a phone number. Skipped places are not charged.

## `onlyWithWebsite` (type: `boolean`):

Skip places without a website. Skipped places are not charged.

## `minRating` (type: `string`):

Skip places rated below this (0 keeps all, also unrated ones).

## `minReviews` (type: `integer`):

Skip places with fewer reviews.

## `debug` (type: `boolean`):

Log every request with its size and time.

## Actor input object example

```json
{
  "searchQueries": [
    "coffee shop"
  ],
  "location": "Moscow",
  "maxPlaces": 10,
  "maxReviewsPerPlace": 0,
  "reviewSort": "newest",
  "language": "en",
  "onlyWithPhone": false,
  "onlyWithWebsite": false,
  "minRating": "0",
  "minReviews": 0,
  "debug": false
}
```

# 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 = {
    "searchQueries": [
        "coffee shop"
    ],
    "location": "Moscow"
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/yandex-maps-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 = {
    "searchQueries": ["coffee shop"],
    "location": "Moscow",
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/yandex-maps-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 '{
  "searchQueries": [
    "coffee shop"
  ],
  "location": "Moscow"
}' |
apify call benthepythondev/yandex-maps-scraper --silent --output-dataset

```

## MCP server setup

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