# Yandex Maps Scraper API - Emails, Phones & Reviews (`trakk/yandex-maps-scraper`) Actor

Turn Yandex Maps into structured business leads. Extract phones, emails, websites, social links, reviews, ratings, opening hours and menu prices. Search by keyword, URL or business ID. Supports 6 languages and regional currencies. Export to Excel, CSV or JSON.

- **URL**: https://apify.com/trakk/yandex-maps-scraper.md
- **Developed by:** [Kelopr_bk](https://apify.com/trakk) (community)
- **Features:** Limited permissions
- **Stats:** 17 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 business or 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 Scraper

#### Организации, контакты, отзывы и цены — в одном датасете

Собирайте данные Яндекс Карт по поисковым запросам, ссылкам и ID организаций. Получайте структурированные карточки, изучайте отзывы и выгружайте результаты в **Excel, CSV или JSON**.

**📍 Организации · ☎️ Телефоны · ✉️ Email · 💬 Отзывы · 🖼️ Медиа · 🍽️ Меню**

[Открыть в Apify Console](https://console.apify.com/actors/AMU5bVbmesSwAbRhF) · [Быстрый старт](#bystryj-start) · [Примеры настроек](#primery-nastroek) · [Запуск через API](#zapusk-cherez-api) · [English](#english)

***

### Быстрый старт

1. **Откройте актор** в Apify Console.
2. Перейдите в **Input**. В интерфейсе владельца это **Source → Input**.
3. В **What to collect** выберите **Find businesses**.
4. В **Search queries** введите запрос, например `кофейни Казань`.
5. Укажите количество результатов в **Maximum output rows** и выберите **Язык данных / Data language**.
6. Нажмите **Start** или **Save & start**.
7. Откройте **Output**, выберите нужную вкладку и нажмите **Export**.

> **Для первого запуска:** запрос `кофе Москва`, 3 результата, язык **Русский**. Контакты и отзывы уже включены в стандартной форме.

**Короткий маршрут:** Input → Start → Output → Export.

### Что вы получаете

| Данные | Содержание | Основные поля |
| --- | --- | --- |
| 📍 **Организация** | Название, адрес, категории, координаты, рейтинг | `businessId`, `title`, `address`, `categories`, `latitude`, `longitude`, `rating` |
| ☎️ **Контакты** | Телефоны карточки и сайта, опубликованные email, сайты и мессенджеры | `phones`, `phonesNormalized`, `websitePhones`, `emails`, `websites`, `socialLinks` |
| 💬 **Отзывы** | Текст, оценка, дата, автор, реакции и ответ организации | `reviews`, `reviewId`, `text`, `date`, `authorName`, `businessComment` |
| 🍽️ **Меню и цены** | Позиции меню или прайса, стоимость и валюта источника | `menu`, `price`, `priceValue`, `currency`, `currencyCode` |
| 🖼️ **Медиа** | Фотографии, публикации, видео и логотип | `photos`, `posts`, `videos`, `logoUrl` |
| 🕒 **Информация о месте** | График работы, удобства, метро и остановки рядом | `workingHoursText`, `schedule`, `features`, `nearbyMetro`, `nearbyStops` |
| 🔗 **Источники** | Ссылки на карточку и страницы, где найдены контакты | `sourceUrl`, `contactSources`, `fieldSources`, `scrapedAt` |

Телефоны из Яндекс Карт и телефоны бизнес-сайта представлены отдельно. Для дополнительных контактов сохраняется страница-источник — удобно проверять данные перед добавлением в CRM.

### Как работает актор

**Вы задаёте источник → актор находит карточки → собирает выбранные данные → сохраняет готовые результаты.**

1. Поисковые фразы находят организации в выбранном городе или районе. Ссылки и ID открывают конкретные карточки.
2. Актор читает опубликованные сведения об организации: адрес, телефоны, рейтинг, график и категории.
3. Включённые настройки добавляют отзывы, меню, фотографии, публикации и контакты бизнес-сайта.
4. При включённой дедупликации одна организация сохраняется один раз, даже если встретилась в нескольких запросах.
5. Готовые карточки появляются в датасете по мере обработки. В режиме отзывов каждая строка представляет отдельный отзыв.

### Выберите сценарий

| Задача | Выбор в форме | `scrapeType` | Что будет в одной строке |
| --- | --- | --- | --- |
| Найти организации по запросу | **Find businesses** | `search` | Карточка организации |
| Получить данные известных мест | **Business details from URLs or IDs** | `details` | Карточка организации |
| Собрать отзывы для анализа | **Reviews — one row per review** | `reviews` | Отзыв с данными организации |

**Город можно указать прямо в запросе** — `стоматология Казань` — или отдельно в **Location**. В последнем случае название города добавляется к каждой поисковой фразе.

### Примеры настроек

Эти примеры можно вставить во вкладку **Input → JSON** или сохранить в файл `input.json` для запуска через API.

#### ☕ Кофейни Казани с телефонами

```json
{
  "scrapeType": "search",
  "query": ["кофейни Казань"],
  "maxItems": 20,
  "language": "ru",
  "requirePhone": true,
  "minRating": 4.5,
  "enrichContacts": true,
  "includeReviews": true,
  "maxReviews": 5
}
```

#### 📌 Конкретные организации: контакты, меню и фотографии

```json
{
  "scrapeType": "details",
  "businessIds": ["1036014863", "17323657526"],
  "maxItems": 2,
  "language": "ru",
  "enrichContacts": true,
  "includeMenu": true,
  "includeReviews": true,
  "maxReviews": 5,
  "maxPhotos": 3,
  "maxPosts": 3
}
```

Вместо ID можно заполнить **Yandex Maps links**:

```json
{
  "scrapeType": "details",
  "startUrls": [
    {
      "url": "https://yandex.ru/maps/org/tanuki/1036014863/"
    }
  ],
  "maxItems": 1,
  "language": "ru",
  "includeMenu": true
}
```

#### 💬 Свежие отзывы отеля — отдельными строками

```json
{
  "scrapeType": "reviews",
  "businessIds": ["17323657526"],
  "maxItems": 50,
  "maxReviews": 50,
  "reviewSort": "newest",
  "language": "ru"
}
```

Такой формат удобно экспортировать в Excel: текст, оценка, дата, автор и ответ организации находятся в отдельных столбцах.

### Настройки под вашу задачу

| Настройка | Что делает |
| --- | --- |
| `query` | Поисковые фразы: одна фраза на элемент списка |
| `location` | Город или район, добавляемый к запросам |
| `startUrls` / `businessIds` | Прямой выбор организаций по ссылкам или ID |
| `maxItems` | Количество строк для всего запуска: организаций либо отзывов, в зависимости от сценария |
| `language` | Язык метаданных |
| `enrichContacts` | Дополнительные контакты из бизнес-сайта и ответов организации |
| `includeReviews` / `maxReviews` | Сбор отзывов и их количество на организацию |
| `reviewSort` | Порядок отзывов: `relevance`, `newest`, `highest`, `lowest` |
| `reviewsSince` | Отзывы с датой источника позже указанного момента, например `2026-01-01T00:00:00Z` |
| `includeMenu` | Меню или прайс организации |
| `maxPhotos` / `maxPosts` | Количество фотографий и публикаций на карточку |
| `requirePhone` / `requireWebsite` | Отбор организаций с телефоном или сайтом |
| `minRating` | Минимальная оценка организации; в режиме отзывов — оценка отзыва |
| `filterOpenNow` | Организации, отмеченные источником как открытые сейчас |
| `deduplicate` | Удаление повторяющихся организаций или отзывов |
| `excludeBusinessIds` | Пропуск организаций, которые уже есть в вашей базе |

Поисковые фразы обрабатываются по очереди и используют общее значение `maxItems`.

**Технические настройки.** Их можно не трогать — значения по умолчанию рассчитаны на обычный запуск.

| Настройка | Что делает |
| --- | --- |
| `outputFormat` | Набор полей в строке: полный или компактный |
| `maxPages` | Сколько страниц выдачи читать по каждому запросу |
| `viewportSpan` | Размер области поиска вокруг заданных координат |
| `maxContactPages` | Сколько страниц бизнес-сайта просматривать в поисках контактов |
| `maxRuntimeSecs` / `maxRequests` | Границы прогона по времени и по числу запросов |
| `maxConcurrency` / `maxRetries` | Сколько задач одновременно и сколько повторов при сбое |
| `proxyConfiguration` | Прокси Apify или ваши собственные |
| `resumeState` | Продолжение предыдущего сбора из записи **RESUME_INPUT** |

#### Технические настройки

| Настройка | Что делает |
| --- | --- |
| `outputFormat` | Набор полей в строке: полный или сокращённый |
| `viewportSpan` | Ширина области поиска вокруг координат |
| `maxPages` | Сколько страниц выдачи читать на один запрос |
| `maxContactPages` | Сколько страниц сайта открывать в поисках контактов |
| `maxRuntimeSecs` / `maxRequests` | Ограничители прогона по времени и числу запросов |
| `maxConcurrency` / `maxRetries` | Параллельность и число повторов при сбое |
| `proxyConfiguration` | Прокси для запросов |
| `resumeState` | Продолжение прерванного сбора из записи **RESUME_INPUT** |

### 🌐 Языки и региональная валюта

В **Язык данных / Data language** доступны:

| Язык | Значение для API |
| --- | --- |
| **Русский** — по умолчанию | `ru` |
| English | `en` |
| Türkçe | `tr` |
| Қазақша | `kk` |
| Українська | `uk` |
| Azərbaycanca | `az` |

Язык применяется к адресам, категориям и другим метаданным, которые Яндекс выдаёт в выбранной локализации. Оригинальный текст отзыва сохраняется в `text`, а оригинал на выбранном языке или предоставленный Яндексом перевод — в `textInRequestedLanguage`.

**Валюта относится к цене организации и сохраняется при смене языка.** Например, выбор английского для московской карточки оставляет рубли, а выбор русского для алматинской — тенге.

| Цена источника | Код валюты |
| --- | --- |
| ₽ — российский рубль | `RUB` |
| ₸ — казахстанский тенге | `KZT` |
| Br — белорусский рубль | `BYN` |
| ₺ / турецкая лира | `TRY` |

В меню сохраняются исходные `price` и `currency`; для обработки добавлены `priceValue`, `currencyRaw` и `currencyCode`. Поле `currencies` содержит обнаруженные коды валют. Суммы остаются в валюте источника, без пересчёта по курсу.

### Пример результата

Сокращённый фрагмент реальной тестовой карточки:

```json
{
  "businessId": "69353267050",
  "title": "Surf Coffee x Flow",
  "address": "Москва, Страстной бул., 8А",
  "phones": [
    "+7 (993) 337-56-86"
  ],
  "emails": [
    "hello@surfcoffee.ru"
  ],
  "website": "https://surfcoffee.ru/",
  "currency": "RUB",
  "menu": {
    "items": [
      {
        "title": "Пирожное Картошка классическая",
        "price": "195",
        "currency": "₽",
        "currencyCode": "RUB"
      }
    ]
  }
}
```

### 📊 Просмотр и экспорт

В **Output** данные распределены по вкладкам:

| Вкладка | Для чего использовать |
| --- | --- |
| **Businesses** | Список организаций: адреса, оценки, контакты и валюта |
| **Contacts** | Работа с телефонами, email, сайтами и мессенджерами |
| **Reviews** | Анализ отзывов и ответов организации |
| **Photos, posts & menus** | Медиа, публикации и прайсы |
| **Location & features** | География, график работы и характеристики места |
| **Sources & collection status** | Проверка источников и сведений о сборе |

Нажмите **Export** и выберите **Excel**, **CSV** или **JSON**. Для анализа отзывов в таблицах выбирайте сценарий **Reviews — one row per review**. Для сохранения структуры карточки вместе с меню и медиа используйте JSON.

#### Продолжение выгрузки организаций

1. Откройте **Storage → Key-value store** завершённого запуска.
2. Откройте запись **RESUME_INPUT**.
3. Скопируйте её JSON в **Input** нового запуска.
4. Нажмите **Start**.

Продолжение использует сохранённую позицию поиска и исключает уже записанные ID. Итоги обработки находятся в записи **OUTPUT** того же хранилища.

Для готовых интеграций в **Export field format** предусмотрены `extended`, `zen` и `mamaev`. Они позволяют выбрать нужное представление полей при работе с существующими таблицами и сценариями.

### Запуск через API

API удобно использовать для интеграции с CRM, собственным приложением или обработкой данных на Python.

**1. Установите клиент Apify:**

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

**2. Сохраните один из примеров выше в `input.json`** и передайте API-токен через переменную окружения `APIFY_TOKEN`.

**3. Сохраните этот код в `run_actor.py`:**

```python
import asyncio
import json
import os
from pathlib import Path

from apify_client import ApifyClientAsync


async def main():
    client = ApifyClientAsync(os.environ["APIFY_TOKEN"])
    actor_input = json.loads(
        Path("input.json").read_text(encoding="utf-8-sig")
    )

    run = await client.actor("trakk/yandex-maps-scraper").call(
        run_input=actor_input
    )
    if not run or run["status"] != "SUCCEEDED":
        raise RuntimeError("Check the run details in Apify Console.")

    dataset = await client.dataset(run["defaultDatasetId"]).list_items(
        clean=True
    )
    Path("results.json").write_text(
        json.dumps(dataset.items, ensure_ascii=False, indent=2),
        encoding="utf-8",
    )
    print(f"Saved {len(dataset.items)} records to results.json")


if __name__ == "__main__":
    asyncio.run(main())
```

**4. Укажите токен и запустите скрипт:**

Windows — PowerShell:

```powershell
$env:APIFY_TOKEN = "YOUR_APIFY_TOKEN"
py run_actor.py
```

macOS / Linux:

```bash
export APIFY_TOKEN="YOUR_APIFY_TOKEN"
python run_actor.py
```

Замените `YOUR_APIFY_TOKEN` своим токеном из настроек Apify. Скрипт запускает актор, ожидает завершения и сохраняет датасет в `results.json` с читаемым Unicode.

***

***

### 🌍 Работаете не только по России?

Этот актор читает Яндекс Карты. Для остального мира есть парный к нему
**[Google Maps Scraper — Emails, Reviews & Local Rank Grid](https://apify.com/trakk/google-maps-business-intelligence-v2)**:
те же карточки организаций, email и телефоны с сайтов, отзывы — плюс сетка локального ранга,
показывающая, на каком месте бизнес стоит в выдаче из разных точек города.

***

### English

**Collect Yandex Maps businesses, published contacts, reviews, photos, posts and menu prices in one structured dataset.** Everything above is in Russian; this half says the same in English.

#### Quick start

1. [Open the Actor in Apify Console](https://console.apify.com/actors/AMU5bVbmesSwAbRhF) and go to **Input** (**Source → Input** if you own the Actor).
2. Under **What to collect**, choose **Find businesses**.
3. Enter a query in **Search queries**, for example `coffee Moscow` or `стоматология Казань`.
4. Set **Maximum output rows** and pick a **Data language**.
5. Press **Start**, then open **Output** and use **Export** for Excel, CSV or JSON.

> **For a first run:** the query `кофе Москва`, three results, language **Russian**. Contacts and reviews are already on in the standard form.

#### What you get

| Data | Contents | Key fields |
| --- | --- | --- |
| 📍 **Business** | Name, address, categories, coordinates, rating | `businessId`, `title`, `address`, `categories`, `latitude`, `longitude`, `rating` |
| ☎️ **Contacts** | Card and website phones, published emails, sites and messengers | `phones`, `phonesNormalized`, `websitePhones`, `emails`, `websites`, `socialLinks` |
| 💬 **Reviews** | Text, score, date, author, reactions and the owner's reply | `reviews`, `reviewId`, `text`, `date`, `authorName`, `businessComment` |
| 🍽️ **Menu and prices** | Menu or price-list items, cost and the source currency | `menu`, `price`, `priceValue`, `currency`, `currencyCode` |
| 🖼️ **Media** | Photos, posts, videos and the logo | `photos`, `posts`, `videos`, `logoUrl` |
| 🕒 **Place info** | Opening hours, amenities, nearby metro and stops | `workingHoursText`, `schedule`, `features`, `nearbyMetro`, `nearbyStops` |
| 🔗 **Provenance** | Links to the card and to the pages a contact came from | `sourceUrl`, `contactSources`, `fieldSources`, `scrapedAt` |

Phones from Yandex Maps and phones from the business website are kept apart, and every extra contact carries the page it came from — useful when you want to check a record before it reaches your CRM.

#### How it works

You give a source, the Actor finds the cards, collects what you asked for, and saves finished rows as it goes.

1. Search phrases find businesses in the chosen city or district; links and IDs open specific cards.
2. The Actor reads the published business record: address, phones, rating, hours and categories.
3. The settings you enable add reviews, menu, photos, posts and contacts from the business website.
4. With deduplication on, a business is saved once even when several queries return it.
5. In review mode each row is a single review rather than a business.

#### Choose a scenario

| Goal | Choice in the form | `scrapeType` | One row holds |
| --- | --- | --- | --- |
| Find businesses by query | **Find businesses** | `search` | A business card |
| Read businesses you already know | **Business details from URLs or IDs** | `details` | A business card |
| Collect reviews for analysis | **Reviews — one row per review** | `reviews` | A review with its business |

You can put the city in the query itself — `стоматология Казань` — or set it once in **Location**, which appends it to every phrase.

#### Settings

| Setting | What it does |
| --- | --- |
| `query` | Search phrases, one per list item |
| `location` | City or district appended to the queries |
| `startUrls` / `businessIds` | Pick businesses directly by link or ID |
| `maxItems` | Rows for the whole run: businesses or reviews, depending on the scenario |
| `language` | Metadata language |
| `enrichContacts` | Extra contacts from the business website and owner replies |
| `includeReviews` / `maxReviews` | Whether to collect reviews, and how many per business |
| `reviewSort` | Review order: `relevance`, `newest`, `highest`, `lowest` |
| `reviewsSince` | Reviews published after a moment, for example `2026-01-01T00:00:00Z` |
| `includeMenu` | Menu or price list |
| `maxPhotos` / `maxPosts` | Photos and posts per card |
| `requirePhone` / `requireWebsite` | Keep only businesses that publish a phone or a site |
| `minRating` / `maxReviewRating` | Rating band for the business, or for the review in review mode |
| `filterOpenNow` | Only businesses the source marks as open now |
| `deduplicate` | Drop repeated businesses or reviews |
| `excludeBusinessIds` | Skip businesses you already hold |

Search phrases are processed in turn and share one `maxItems`.

**Technical settings.** You can leave these alone; the defaults suit an ordinary run.

| Setting | What it does |
| --- | --- |
| `outputFormat` | How many fields a row carries: full or compact |
| `maxPages` | How many result pages to read per query |
| `viewportSpan` | The size of the search area around given coordinates |
| `maxContactPages` | How many pages of a business website to read while looking for contacts |
| `maxRuntimeSecs` / `maxRequests` | Bounds on the run's time and request count |
| `maxConcurrency` / `maxRetries` | How much runs at once, and how often a failure is retried |
| `proxyConfiguration` | Apify proxy or your own |
| `resumeState` | Continue an earlier collection from its **RESUME_INPUT** record |

#### Advanced settings

| Setting | What it does |
| --- | --- |
| `outputFormat` | How many fields a row carries: full or compact |
| `viewportSpan` | How wide an area to search around given coordinates |
| `maxPages` | Result pages to read per query |
| `maxContactPages` | Website pages to open while looking for contacts |
| `maxRuntimeSecs` / `maxRequests` | Run guards on time and on request count |
| `maxConcurrency` / `maxRetries` | Parallelism, and retries after a failure |
| `proxyConfiguration` | The proxy requests go through |
| `resumeState` | Continue an interrupted collection from the **RESUME_INPUT** record |

#### Languages and currency

Set `language` to `en` for English metadata. Prices keep the currency of the source even when the data language changes, and any translation the source provides is returned separately from the original text.

#### Running it from the API

Use `search` for queries, `details` for business links or IDs, and `reviews` for one review per row. The JSON examples in the Russian half paste straight into the input editor. For a repeat collection, reuse the generated **RESUME_INPUT** record or pass the IDs you already have in `excludeBusinessIds`.

***

### 🌍 Working outside Russia?

This Actor reads Yandex Maps. For everywhere else there is its counterpart,
**[Google Maps Scraper — Emails, Reviews & Local Rank Grid](https://apify.com/trakk/google-maps-business-intelligence-v2)**:
the same business records, emails and phones pulled from their websites, and reviews — plus a local
rank grid that shows where a business appears in search from different points across a city.

# Actor input Schema

## `scrapeType` (type: `string`):

Find businesses, enrich specific places, or export one row per review.

## `query` (type: `array`):

One search phrase per line. Include the city in each query, or set Location below. Commas are kept as part of the phrase. Example: coffee Moscow; стоматология Казань.

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

Appended to every query. Leave empty when your query already includes the city. Coordinates take precedence for the search area.

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

Business pages, search links, category pages or short share links. Business IDs work below too. Category pages return the organizations available on that page.

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

Numeric IDs from the business URL, for example 1036014863. Use this to skip discovery.

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

TOTAL for the whole run, shared by all queries and URLs. In review mode this limits review rows. Duplicates and filtered places do not use the allowance. Unlimited runs are not supported.

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

Выберите язык адресов, категорий и графика работы. Названия организаций и отзывы сохраняют оригинал; перевод отзыва возвращается только если его предоставляет Яндекс. Валюта берётся из цен источника и не меняется при выборе языка. / Choose the metadata language. Currency always follows the source prices, without conversion.

## `enrichContacts` (type: `boolean`):

Collect emails, phone links and social profiles from the linked business website (up to three public pages). Official business replies can also provide emails. Every additional contact includes its source. Availability varies.

## `includeMenu` (type: `boolean`):

Fetch the complete menu/price list when the business publishes one. When off, the available menu preview is returned.

## `maxPhotos` (type: `integer`):

Maximum photos to return, including dimensions, tags and available author information. 0 disables photo collection.

## `maxPosts` (type: `integer`):

Maximum public news/posts per business. 0 disables post collection.

## `includeReviews` (type: `boolean`):

Collect review text, rating, date, author profile, photos, videos and the business reply when available.

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

Maximum matching reviews per business. Review mode also respects Maximum output rows across the whole run. 0 disables reviews in business modes.

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

Choose the source review order. A pinned review may still appear first.

## `reviewsSince` (type: `string`):

Exclusive cutoff: only reviews dated after this instant. ISO-8601 such as 2026-01-01T00:00:00Z, Unix seconds or milliseconds. An empty result can be correct; Run summary explains it.

## `minRating` (type: `number`):

0 means any rating. Filters business ratings in business modes and review ratings in review mode.

## `maxReviewRating` (type: `integer`):

Used only in Reviews mode. Combine with Minimum rating to select negative or positive reviews.

## `requirePhone` (type: `boolean`):

Keep businesses with a phone listed in Yandex Maps.

## `requireWebsite` (type: `boolean`):

Keep businesses with a website listed in Yandex Maps.

## `filterOpenNow` (type: `boolean`):

Keep businesses whose current source status explicitly says they are open.

## `deduplicate` (type: `boolean`):

Return a business once across all sources, or each unique review once in Reviews mode.

## `excludeBusinessIds` (type: `array`):

Useful for repeat runs. These business IDs are skipped before enrichment.

## `outputFormat` (type: `string`):

Extended includes the fields used by popular Yandex Maps Actors plus additional contact evidence and data-quality fields. Choose a compatibility format to match differing website/features/region data types.

## `coordinates` (type: `string`):

Example: 37.622,55.753. Overrides the city center for query searches.

## `viewportSpan` (type: `string`):

Example: 0.1,0.1 for a city-center area. Requires a sensible area center.

## `maxPages` (type: `integer`):

Applies to search and review pagination. The Run summary distinguishes page limits from a fully exhausted source.

## `maxRuntimeSecs` (type: `integer`):

Stops collection gracefully within the time budget and keeps records already saved. Upper limit cannot be raised by input.

## `maxRequests` (type: `integer`):

Total attempts, including retries, detail pages and website contact pages. Stops new work when reached.

## `maxConcurrency` (type: `integer`):

Balanced default for speed and reliability. Use a lower value if the source is responding slowly.

## `maxRetries` (type: `integer`):

Bounded retries for temporary source failures. A failed business does not discard successful results.

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

Optional custom connection configuration. Leave unchanged for automatic handling.

## `maxContactPages` (type: `integer`):

Maximum public pages from the business website, including contact pages and a linked privacy page when needed.

## `resumeState` (type: `object`):

Use the value provided in RESUME_INPUT to continue a limited run. Leave empty for a new collection.

## Actor input object example

```json
{
  "scrapeType": "search",
  "query": [
    "кофе Москва"
  ],
  "location": "",
  "startUrls": [],
  "businessIds": [],
  "maxItems": 3,
  "language": "ru",
  "enrichContacts": true,
  "includeMenu": false,
  "maxPhotos": 3,
  "maxPosts": 3,
  "includeReviews": true,
  "maxReviews": 5,
  "reviewSort": "relevance",
  "reviewsSince": "",
  "minRating": 0,
  "maxReviewRating": 5,
  "requirePhone": false,
  "requireWebsite": false,
  "filterOpenNow": false,
  "deduplicate": true,
  "excludeBusinessIds": [],
  "outputFormat": "extended",
  "coordinates": "",
  "viewportSpan": "",
  "maxPages": 10,
  "maxRuntimeSecs": 150,
  "maxRequests": 300,
  "maxConcurrency": 8,
  "maxRetries": 1,
  "maxContactPages": 3,
  "resumeState": {}
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `contacts` (type: `string`):

No description

## `reviews` (type: `string`):

No description

## `media` (type: `string`):

No description

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

No description

## `quality` (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 = {
    "query": [
        "кофе Москва"
    ],
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("trakk/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 = {
    "query": ["кофе Москва"],
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("trakk/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 '{
  "query": [
    "кофе Москва"
  ],
  "maxItems": 3
}' |
apify call trakk/yandex-maps-scraper --silent --output-dataset

```

## MCP server setup

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