# Парсер 2ГИС — база компаний, контакты и отзывы (`tugelbay/2gis-scraper`) Actor

Выгружайте организации из 2ГИС по городу и запросу: телефоны, сайты, email при наличии, адреса, координаты и поля для CRM. До 100 доступных отзывов на компанию и ответы бизнеса входят в цену организации. Экспорт в Excel, CSV, JSON и API.

- **URL**: https://apify.com/tugelbay/2gis-scraper.md
- **Developed by:** [Tugelbay Konabayev](https://apify.com/tugelbay) (community)
- **Categories:** Lead generation, Marketing
- **Features:** Limited permissions
- **Stats:** 347 total users, 9 monthly users, 98.8% runs succeeded, 1 bookmarks
- **User rating**: 4.79 out of 5 stars

## Pricing

from $3.15 / 1,000 business extracteds

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

Парсер 2ГИС онлайн выгружает организации по городу и поисковому запросу в таблицу для CRM, продаж и анализа рынка. Вы получаете телефоны, сайты, email при наличии, адреса, координаты, рейтинг и часы работы из доступных карточек 2ГИС. **До 100 доступных отзывов на организацию и ответы бизнеса входят в цену выгруженной организации — отдельной платы за каждый отзыв нет.** Результат доступен в Excel, CSV, JSON и через API Apify.

<a href="https://apify.com/tugelbay/2gis-scraper">
  <img src="https://api.apify.com/v2/key-value-stores/bplRdpnd85eGQkW1N/records/2gis-scraper-ru-20260513-hero.png" alt="Парсер 2ГИС: выгрузка организаций, контактов, отзывов и координат в таблицу" width="100%">
</a>

### Преимущества для CRM

- **Контакты и отзывы в одном результате.** Телефоны, сайт, email и социальные ссылки рядом с отзывами и ответами компании; отзывы включаются одной настройкой.
- **Поля для отбора в CRM.** `hasPhone`, `hasEmail` и `hasWebsite` помогают отфильтровать строки после экспорта. `contactCompletenessScore` показывает заполненность контактов и рейтинга по открытой формуле.
- **Понятное происхождение каждой строки.** `leadSource`, `searchQuery`, `searchCity`, ссылка на карточку и время сбора сохраняются вместе с организацией.
- **Оценки отделены от текстовых отзывов.** `ratingCount` и `reviewCount` — разные показатели; они могут различаться на самой площадке.
- **Автоматическая настройка подключения по региону.** Для обычного запуска достаточно города и запроса. При неполной обработке источник отмечается в статусе запуска, а уже полученные строки сохраняются.

Парсер подходит для списков местных поставщиков и клиентов, обогащения CRM, сравнения филиалов и изучения отзывов. Он собирает текущие доступные данные 2ГИС; актуальность номера или работа почтового ящика отдельно не проверяются.

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

Форма первого запуска уже подставляет короткий пример. Он специально маленький: каталог Москвы, одна организация, без отзывов. Так пример не уходит в более долгий обход публичного сайта, который используется для Алматы.

```json
{
  "query": "кафе",
  "city": "Москва",
  "maxItems": 1,
  "includeReviews": false,
  "proxyStrategy": "auto"
}
```

1. Вставьте JSON в форму ввода Apify и нажмите **Start**.
2. Откройте результат и сверьте организацию по ссылке в поле `url`.
3. Выберите экспорт Excel или CSV; JSON сохраняет вложенный массив отзывов.
4. После проверки измените запрос на свою рубрику и увеличьте `maxItems`.

Тот же запрос на 20 организаций:

```json
{
  "query": "кафе",
  "city": "Москва",
  "maxItems": 20,
  "includeReviews": false,
  "proxyStrategy": "auto"
}
```

Именная карточка в Алматы с отзывами — отдельная проверка, не пример для первого запуска. Алматы читается с публичного сайта, а отзывы удлиняют запуск:

```json
{
  "query": "Hanok Family Гоголя 2",
  "city": "Алматы",
  "maxItems": 1,
  "includeReviews": true,
  "maxReviews": 2,
  "proxyStrategy": "auto"
}
```

Одна организация в датасете соответствует одной найденной карточке или филиалу. `maxItems` задаёт верхнюю границу; количество результатов и порядок зависят от выдачи 2ГИС.

### Входные настройки

| Поле | Назначение |
| --- | --- |
| `query` | Обязательный запрос: рубрика, услуга или название организации. |
| `city` | Обязательный город поиска. Например, Алматы, Москва, Ташкент, Dubai или Бишкек. |
| `maxItems` | От 1 до 5 000 организаций. Значение по умолчанию в API — 20; форма первого запуска предлагает 1. |
| `includeReviews` | Включить отзывы. По умолчанию `false`. |
| `maxReviews` | От 1 до 100 доступных отзывов на организацию; по умолчанию 10. Применяется при `includeReviews: true`. |
| `language` | Запрашиваемый язык ответа источника; по умолчанию `ru_RU`. Это не перевод всех полей карточки. |
| `proxyStrategy` | `auto` подбирает подключение по региону; `custom` использует ваш `proxyConfiguration`. |
| `proxyConfiguration` | Свои настройки прокси для режима `custom`. Существующие API-запуски с явным `proxyConfiguration` и без `proxyStrategy` сохраняют заданные настройки. |

При новом API-запуске без обеих настроек прокси используется автоматический режим. Доступность конкретной выдачи и полей зависит от 2ГИС; лимит входного параметра не означает, что столько строк доступно для каждого запроса.

В `city` укажите только название города, без адреса и поискового запроса. Пустое значение, адрес и запрос в поле города завершают запуск **успешно, с 0 строк** и статусом, как исправить ввод; до этого подключение к источнику не открывается. Приставки `г.` / `город`, хвост страны или области (`Алматы, Казахстан`) и латинские имена крупных городов (`Almaty`, `Moscow`, `Tashkent`) приводятся к названию для поиска. Если 2ГИС подтвердил отсутствие города или название совпало с несколькими населёнными пунктами, запуск тоже успешный, с 0 строк и кодом `CITY_NOT_FOUND` или `CITY_AMBIGUOUS`. Подтверждённая пустая выдача в найденном городе — успешный запуск с кодом `EMPTY_RESULT`. Если ответ источника недоступен, повреждён, отклонён (401/403/429) или прокси отказал до первой организации, запуск завершается ошибкой: доступность города в этом случае не подтверждена.

### Пример настоящего результата

Ниже — **фрагмент** контрольной выгрузки кафе Алматы от 9 сентября 2026 года. Телефон и показатели относятся к [этой карточке Selfie](https://2gis.kz/almaty/firm/70000001038081997); источник может обновить их после сбора. Остальные поля строки опущены для краткости.

```json
{
  "id": "70000001038081997",
  "leadSource": "2GIS",
  "searchQuery": "кафе",
  "searchCity": "Алматы",
  "name": "Selfie, лаундж-бар",
  "category": "Лаундж-бар",
  "address": "проспект Абая, 159Б",
  "postcode": "050046",
  "latitude": 43.238832,
  "longitude": 76.888533,
  "phone": "+77055007772",
  "allPhones": "+77055007772",
  "email": "",
  "website": "",
  "hasPhone": true,
  "hasEmail": false,
  "hasWebsite": false,
  "contactCompletenessScore": 50,
  "rating": 4.9,
  "reviewCount": 1258,
  "ratingCount": 3434,
  "url": "https://2gis.kz/almaty/firm/70000001038081997",
  "scrapedAt": "2026-09-09T10:02:32.758572+00:00"
}
```

### Поля результата

В строке 28 полей. Значения заполняются по доступным данным выбранной организации.

| Поля | Содержание |
| --- | --- |
| `id`, `name` | Идентификатор карточки 2ГИС и название организации. |
| `leadSource`, `searchQuery`, `searchCity` | Источник `2GIS`, исходный запрос и найденный город поиска. |
| `category`, `allCategories` | Первая категория и строка всех полученных категорий. |
| `address`, `city`, `postcode` | Адрес, город поиска и индекс при наличии. Если источник вместо улицы указывает название места, `address` сохраняет это название. |
| `latitude`, `longitude` | Координаты из карточки либо её публичных метаданных. |
| `phone`, `allPhones` | Первый полученный телефон и все полученные телефоны через запятую, без точных повторов. |
| `email`, `website` | Первый email и сайт из карточки 2ГИС, если они там опубликованы. С сайта организации почта не собирается и доставка не проверяется; это не verified email. |
| `hasPhone`, `hasEmail`, `hasWebsite` | Логические признаки наличия соответствующего значения в строке. |
| `contactCompletenessScore` | От 0 до 100: телефон +40, сайт +25, email +25, наличие рейтинга +10. Оценка заполненности, а не проверка действительности контактов или вероятности покупки. |
| `socialLinks` | Полученные социальные ссылки в виде строки `тип:значение`. |
| `rating`, `reviewCount`, `ratingCount` | Общий рейтинг, число текстовых отзывов и число оценок источника. |
| `workingHours` | Расписание по дням недели при наличии. |
| `url`, `scrapedAt` | Ссылка на карточку и время сбора в UTC. |
| `reviews` | Массив выбранных отзывов; пустой, если сбор выключен или доступных отзывов нет. |

У каждого отзыва есть `author`, `rating`, `text`, `date` и `reply`. Дата берётся из даты изменения отзыва, а при её отсутствии — из даты создания. `reply` содержит доступный ответ бизнеса или пустую строку. Возвращаемое число текстов ограничено `maxReviews` и может быть меньше `reviewCount`.

Если источник не передал автора, текст или ответ бизнеса, соответствующее поле
остаётся пустой строкой; отсутствующая оценка — `null`. Некорректные записи
пропускаются с отметкой частичной обработки в статусе запуска. Повторы с одним
идентификатором отзыва не увеличивают число результатов. При повторении целой
страницы сбор отзывов останавливается и также отмечается как частичный.

Недоступные текстовые значения остаются пустыми строками, числовые — `null`. Отсутствующий рейтинг не заменяется нулём. Пустой телефон означает, что в данном результате телефон не получен; проверяйте статус запуска и исходную карточку, если это поле критично.

### Цена и контроль расходов

Оплата — **за организацию, сохранённую в датасет**, плюс событие старта. Текущие цены за 1 000 организаций:

| Скидка аккаунта Apify | За 1 000 организаций | За организацию |
| --- | --- | --- |
| Без скидки | $4.50 | $0.0045 |
| Bronze | $4.05 | $0.00405 |
| Silver | $3.60 | $0.0036 |
| Gold и выше | $3.15 | $0.00315 |

Отзывы и ответы бизнеса входят в эту цену: отдельного события оплаты за отзыв нет. **Расходы стандартного запуска на вычисления и прокси Apify включены**: для этого актора отдельная оплата платформенных ресурсов пользователем выключена. Собственный сторонний прокси, если вы его укажете, оплачивается по условиям его провайдера.

До 25 октября 2026 года, 21:23:53 UTC (26 октября, 02:23:53 по Алматы), старт стоит $0.00005 за каждый выделенный ГБ памяти, минимум одно событие. При 2 ГБ это $0.0001: одна организация без скидки стоит $0.0046 вместе со стартом, а 20 организаций — $0.0901.

**После указанного времени старт будет стоить $0.15 за каждый выделенный ГБ памяти, минимум одно событие.** При 1 ГБ или меньше старт стоит $0.15, при 2 ГБ — $0.30. Старт оплачивается также при отсутствии результатов или ошибке поиска. Например, две организации без скидки при 1 ГБ стоят $0.159; одна организация при 2 ГБ — $0.3045, а 20 организаций при 2 ГБ — $0.39. Цена каждой организации и скидки из таблицы сохраняются. Этот сбор покрывает начальные расходы браузера и прокси на маленьких запусках. Проверяйте выделенную память и лимит списания перед запуском; лимит должен покрывать старт и нужное число организаций.

Включение отзывов не меняет цену организаций. Условия проверены 12 октября 2026 года; действующую и будущую цену перед запуском смотрите на вкладке **Pricing**.

Ограничьте `maxItems` и выставьте максимальную сумму оплаты в настройках запуска Apify (`maxTotalChargeUsd` через API). Лимит суммы относится к оплачиваемым событиям Apify; он не управляет счётом вашего стороннего прокси. При повторном запуске события начисляются заново.

Одинаковые входные параметры дают доступ к тем же полям, отзывам и режимам на бесплатном и платном плане Apify. Месячной квоты актора нет; верхняя граница `maxItems` — 5 000. Сохраняются действующая тарификация, лимит расходов запуска и общие ограничения времени и ресурсов.

### API, расписание и интеграции

Кнопка **API** в Apify Console показывает адрес запуска и готовые примеры запросов для этого актора. Передавайте тот же JSON, что в примере выше, и получайте строки из датасета завершённого запуска. Токен Apify храните в секрете или менеджере учётных данных вашей интеграции.

В n8n, Make или своей CRM используйте интеграцию Apify либо HTTP-запрос к API. Для регулярной выгрузки сохраните ввод как задачу Apify и добавьте расписание. Уведомление о завершении можно подключить через webhook. Каждый запуск создаёт отдельную выгрузку; сравнение прошлых и новых строк выполняется в вашей системе.

AI-интеграция может вызывать тот же API при наличии доступа к аккаунту Apify. Установка и разрешения конкретного MCP-клиента настраиваются отдельно; совместимость с каждым клиентом здесь не заявляется.

### Проверка результата — 2026-09-09

Проверка выполнена **2026-09-09**.

Контрольные выгрузки дали 20 организаций с телефонами и координатами в Алматы, 20 в Москве, по три в Ташкенте, Дубае и Бишкеке. Проверки с отзывами получили 40 текстов в Москве, по шесть в Ташкенте и Бишкеке, четыре доступных текста в Дубае. В точном примере Hanok получены одна организация и два отзыва. Эти результаты относятся к конкретным запросам и карточкам, а не ко всей базе города. Время сбора сохраняется в `scrapedAt`.

Проверять поля можно по публичным карточкам [2ГИС](https://2gis.ru/), на которые ведёт `url`. Условия официальных интерфейсов описаны на [платформе разработчиков 2ГИС](https://dev.2gis.com/); правила оплаты за события — в [документации Apify](https://docs.apify.com/actors/publishing/monetize/pay-per-event).

### База компаний 2ГИС: сравнение вариантов

| Вариант | Когда подходит | Что учитывать |
| --- | --- | --- |
| Этот парсер | Готовая таблица контактов с полями для CRM и выбранными отзывами | 28 полей, до 100 доступных отзывов на организацию, отзывы включены в цену организации. |
| [2GIS Places Scraper API от Zen Studio](https://apify.com/zen-studio/2gis-places-scraper-api) | Нужны заявленные автором расширенные поля, фотографии и дополнительные фильтры | На 2026-09-09 заявлена базовая цена $4,50 за 1 000 организаций и отдельная цена $1 за 1 000 отзывов; сравните скидки и остальные события на странице Pricing. |
| [Официальный API 2ГИС](https://dev.2gis.com/) | Нужна собственная интеграция с официальной платформой | Самостоятельная разработка, условия и лимиты официального доступа. |

Возможности Zen перечислены по его описанию. Сравнительный тест скорости или полноты всех полей не проводился; выбирайте по нужному формату и составу данных.

### Ограничения и частые вопросы

#### Что происходит при ошибке региона или отказе источника?

Приставки типа населённого пункта (`г.`, `пгт.`, `посёлок`) снимаются до поиска региона. Если поиск региона возвращает HTTP/API 404, актор один раз проверяет список регионов, затем подтверждает точный населённый пункт и его границы. Он не заменяет посёлок всей базой родительского города. Неизвестный или неоднозначный город завершается успешно с 0 строк и понятным статусом, без вымышленных результатов. Ошибка запуска сохраняется, когда сам источник или прокси не дал проверить город.

При отказе доступа 401/403/429 или отказе прокси 407 сбор останавливается без обхода ограничения или смены маршрута. Если отказ произошёл после получения организаций, они и уже полученные отзывы сохраняются; выгрузка помечается как частичная. В `RUN_REPORT` указаны `outcome: PARTIAL`, `terminalReason: SOURCE_REFUSED` либо `PROXY_ACCESS_REFUSED` и этап отказа; для браузерного ответа дополнительно сохраняется HTTP/API-код, если он известен. Запросы к источнику после отказа прекращаются. Отказ до получения организаций завершает запуск ошибкой, без списания за организации. Стоимость старта остаётся отдельной.

#### Почему организаций меньше лимита?

Одна организация с одним итоговым ID сохраняется и тарифицируется один раз за запуск. Повторённые API-записи пропускаются до загрузки отзывов. Если следующая API-страница целиком состоит из уже сохранённых организаций, сбор останавливается с частичным результатом и `RUN_REPORT` с причиной `PAGINATION_STALLED`; это не считается подтверждением полной выгрузки.

#### Техническая диагностика отказов

При включённом разработчиком мониторинге актор может отправить в собственный сервис разработчика одно техническое событие отказа: версию сборки, код причины, этап, исход `FAILED`/`PARTIAL` и известные HTTP/API-статусы. Событие содержит случайный идентификатор для удаления дублей, не связанный с ID пользователя или запуска. Поисковые запросы, города, входные параметры, результаты, контакты, URL, количество организаций и секреты не передаются. Окно хранения идентификаторов и суточных агрегатов — 30 дней с ежедневной очисткой просроченных записей. Доступ к вашим приватным запускам и датасетам этим не открывается.

Отправка выполняется однократно, занимает не более двух секунд и пропускается при недостаточном запасе времени. Сбой мониторинга не меняет сохранённые результаты или тарификацию. Диагностика может отсутствовать при принудительном завершении, недоступности сервиса или исчерпании его лимитов; она не является полной статистикой запусков. Обычный `RUN_REPORT` остаётся в хранилище запуска.

При необычно большом сетевом расходе сбор останавливается защитным лимитом трафика. Уже проверенные профили сохраняются с отметкой о частичной обработке в статусе запуска; непроверенные карточки не выдаются как готовые результаты. Если до остановки не получено ни одного проверенного профиля, запуск завершается ошибкой `SOURCE_TRANSFER_LIMIT`.

Пустой запрос и запрос только из пробелов завершаются успешно с 0 строк до подключения к источнику. Пробелы по краям поисковой фразы удаляются; сама фраза сохраняется. Такой ввод не создаёт строки результата. Стоимость старта актора и платформы учитывается отдельно.

В выдаче может быть меньше подходящих карточек. Ещё возможны недоступность страниц, ограничения источника или завершение временного бюджета. При частичной обработке актор сохраняет полученные строки и отмечает это в статусе запуска. Такой статус не подтверждает полноту выгрузки.

#### Все ли телефоны и email будут заполнены?

Поля зависят от данных, которые 2ГИС отдаёт для конкретной карточки. Организация может не публиковать телефон, email, сайт или индекс. `email` — это адрес из карточки, если он там есть. Парсер не обходит сайт организации, не подбирает почту и не проверяет, что ящик принимает письма. Называть такой адрес verified email нельзя. Для отбора используйте `hasEmail`, а для проверки — поле `url`.

#### Можно ли выгрузить все отзывы и всю базу города?

Лимит отзывов — до 100 на организацию, организаций — до 5 000 за запуск. Полнота всей базы города не гарантируется: это результат конкретного поиска и доступности страниц, а не полный официальный каталог 2ГИС.

#### Чем отличается от официального API 2ГИС?

Это независимый актор для готовой выгрузки в Apify. Официальная платформа [2ГИС API](https://dev.2gis.com/) предлагает собственные интерфейсы и условия доступа. Этот актор не является продуктом 2ГИС и не связан с компанией.

### Поддержка: как сообщить о неверном поле

Откройте **Issues** на странице актора и приложите ссылку на запуск, карточку 2ГИС, название поля и ожидаемое значение. Не публикуйте токены или пароли прокси. Сравнение одной и той же карточки помогает воспроизвести проблему.

### Начните с нужного города

Запустите небольшой пример, проверьте контактные поля и затем соберите свою категорию. Пошаговые инструкции: [русский гайд по парсеру 2ГИС и экспорту в Excel](https://konabayev.com/ru/tools/parser-2gis/?utm_source=apify_readme\&utm_medium=referral\&utm_campaign=2gis-scraper).

Другие источники бизнес-контактов: [Google Maps](https://apify.com/tugelbay/google-maps-leads) и [JustDial](https://apify.com/tugelbay/justdial-leads-extractor). Если результат полезен, поделитесь опытом в разделе **Reviews** на странице актора.

# Actor input Schema

## `query` (type: `string`):

Рубрика, услуга или ключевое слово для поиска в 2ГИС, например 'стоматология', 'автосервис', 'салон красоты', 'ресторан' или 'hotel'.

## `city` (type: `string`):

Только название города, например 'Москва', 'Алматы', 'Астана', 'Ташкент' или 'Dubai'. Приставка 'г.', хвост страны и латинские имена крупных городов приводятся к названию для поиска. Адрес или запрос в этом поле завершает запуск без строк и с подсказкой. Предзаполнение — Москва и лимит 1 без отзывов: пример идёт через каталог, а не через публичный сайт.

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

Верхняя граница числа организаций, а не обещание полного покрытия города. Начните с 1-20 строк и увеличивайте лимит после проверки результата. Фактический объём зависит от выдачи и доступности 2ГИС.

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

Собирать доступные тексты отзывов, оценки, даты и ответы бизнеса по каждой организации. Отдельной платы за отзыв нет. Увеличивает время запуска.

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

Сколько отзывов собирать на одну организацию, если включена выгрузка отзывов.

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

Язык ответа 2ГИС, когда он доступен. Большая часть данных зависит от языка карточек организаций.

## `proxyStrategy` (type: `string`):

Автоматически: актор подбирает подключение по региону. Свои настройки: использует прокси, указанный ниже. Старые API-запуски с явным proxyConfiguration сохраняют свои настройки.

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

Применяется при выборе 'Свои настройки прокси'. В автоматическом режиме актор сам выбирает подключение; ручная настройка не требуется.

## Actor input object example

```json
{
  "query": "кафе",
  "city": "Москва",
  "maxItems": 1,
  "includeReviews": false,
  "maxReviews": 10,
  "language": "ru_RU",
  "proxyStrategy": "auto",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Датасет с организациями из 2ГИС: id, название, категории, адрес и город, телефоны, email, сайт, соцсети, флаги наличия контактов, оценка полноты контактов, рейтинг, число отзывов, часы работы, координаты и ссылка на профиль 2ГИС.

# 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": "кафе",
    "city": "Москва",
    "maxItems": 1,
    "proxyStrategy": "auto",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tugelbay/2gis-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": "кафе",
    "city": "Москва",
    "maxItems": 1,
    "proxyStrategy": "auto",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tugelbay/2gis-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": "кафе",
  "city": "Москва",
  "maxItems": 1,
  "proxyStrategy": "auto",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call tugelbay/2gis-scraper --silent --output-dataset

```

## MCP server setup

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