# Парсер компаний 2ГИС | 2GIS Places Scraper (`anuarbakty/2gis-places-scraper`) Actor

Парсер 2ГИС: компании города с телефонами, WhatsApp, Telegram, Instagram, email и сайтами, адрес, часы работы, рейтинг и отзывы. Вся выдача, а не 60 мест, фильтры по рубрикам, контактам и рейтингу, мониторинг новых мест. Excel, CSV, API. | 2GIS places scraper with phones, emails and websites.

- **URL**: https://apify.com/anuarbakty/2gis-places-scraper.md
- **Developed by:** [Anuar Bakty](https://apify.com/anuarbakty) (community)
- **Categories:** Lead generation, SEO tools, Travel
- **Stats:** 7 total users, 3 monthly users, 95.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 places

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ГИС** собирает базу организаций по **поисковому запросу, рубрике и городу**, по **точке или области на карте** или по **ссылкам 2ГИС**. Одна строка — одно место: **телефоны, WhatsApp, Telegram, Instagram, email и сайт**, адрес, координаты, часы работы, рейтинг, средний чек, сеть и филиалы — всего 88 полей. Актор забирает **всю выдачу 2ГИС, а не 60 мест, как сайт**, и берёт места только нужного города, без пригородов.

Попробовать просто: впишите «стоматология» и «Москва» и нажмите **Start**. Бесплатный тариф Apify даёт $5 каждый месяц — это около **1 600 компаний с контактами бесплатно**.

[English quick guide below](#english-quick-guide)

### Возможности / Features

- 🔎 **Вся выдача 2ГИС.** Сайт 2ГИС показывает не больше 60 мест на запрос, актор берёт все: по «стоматология» в Москве это 3 780 мест.
- 🏙️ **Только нужный город.** «Москва» — без Химок и других городов Подмосковья, хотя в 2ГИС они в одном регионе. Можно сразу несколько городов или целую область: «Самарская область», «Краснодарский край», «Татарстан».
- 📞 **Контакты в цене места**: все телефоны (в формате +74951234567 и как на сайте, с подписями вроде «служба доставки»), email, сайт, **каждый мессенджер и соцсеть в своей колонке**: WhatsApp (и отдельно номер), Telegram, Instagram, VK, Facebook, YouTube, Viber, TikTok. Ссылку на Instagram или TikTok, записанную в поле «сайт», актор переносит в нужную колонку.
- 🗂️ **Рубрики 2ГИС** по названию: «Аптеки», «Частные стоматологии» — без запроса актор соберёт всю рубрику.
- 🗺️ **Область на карте**: круг вокруг точки до 50 км, точный полигон района или торговой зоны (GeoJSON), фильтр по районам.
- 🎯 **Фильтры**: без сайта (компании, которым можно продать сайт), обязательные контакты, рейтинг и число отзывов, средний чек от и до, доставка, навынос, Wi-Fi, оплата картой, круглосуточно, с фото, точное название, **без рекламных мест** — только те, кто не платит 2ГИС за продвижение.
- 🆕 **Новые места**: только появившиеся в 2ГИС за последние 30 дней — свежие заведения для продаж.
- 🔁 **Мониторинг**: по расписанию актор присылает только новые места, а по желанию — места со сменившимися контактами, названием или адресом (`changed`), пропавшие из 2ГИС (`closed`) и вернувшиеся (`returned`). Уже выданное не оплачивается.
- 🏢 **Сети, здания и ссылки**: все филиалы найденных сетей, все организации в здании или ТЦ, любые ссылки 2ГИС и списки ID — удобно, чтобы дополнить свою CRM.
- ⭐ **Отзывы к каждому месту** по желанию: последние, полезные или только негативные.
- 🧾 **88 полей в плоской таблице** и готовые виды «Контакты», «Места», «Отзывы» (один отзыв — одна строка) и «Мониторинг». Экспорт в Excel, CSV, JSON, Google Sheets, CRM.

### Для кого / Use cases

- **Отделам продаж и агентствам**: база компаний нужной рубрики с телефонами, WhatsApp и почтой для холодных звонков и рассылок.
- **Веб-студиям и маркетологам**: компании без сайта или с низким рейтингом — готовые клиенты для ваших услуг.
- **Поставщикам для HoReCa и розницы**: все кафе, рестораны, аптеки или магазины города, а каждую неделю — новые открытия.
- **Франшизам и сетям**: где стоят конкуренты, сколько у них филиалов, какой рейтинг и средний чек.
- **Аналитикам и геомаркетингу**: плотность бизнеса по районам и радиусу вокруг точки для выбора места под открытие.

### Чем отличается / Comparison

| Возможность | Этот парсер | Обычно у парсеров компаний 2ГИС |
| --- | --- | --- |
| Мест с одного запроса | вся выдача | до 3 000–5 000 или 60 со страниц сайта |
| Только нужный город, без пригородов | ✅ | пригороды и сёла вперемешку |
| Контакты | в цене места | часто за отдельную плату |
| Мессенджеры | каждый в своей колонке, номер WhatsApp отдельно | одной строкой или не все |
| Поиск по точке, радиусу и полигону | ✅ | редко |
| Фильтр «без сайта» | ✅ | редко |
| Новые места и мониторинг изменений | ✅ | редко или только новые |
| Отзывы к местам с фильтром по звёздам | ✅ | отдельный актор или без фильтров |
| Бесплатный тариф Apify | без ограничений | бывает только 10 мест за запуск |
| Цена за 1 000 мест с контактами | от $2.00 | от $0.50 до $4.50 |

### Как собрать базу компаний 2ГИС / How to scrape 2GIS businesses

1. Нажмите **Try for free** — откроется форма ввода в Apify.
2. Впишите **запрос или рубрику и город** — или задайте точку на карте, или вставьте **ссылки 2ГИС**.
3. При желании задайте лимиты и фильтры: без сайта, обязательные контакты, рейтинг, новые места.
4. Нажмите **Start**. Компании появятся во вкладке **Output** через несколько секунд.
5. Скачайте результат в **Excel, CSV или JSON** или подключите Google Sheets, CRM, Telegram, webhook, API.

### Примеры ввода / Input examples

#### Автосервисы Москвы с контактами

```json
{
    "searchQueries": ["автосервис"],
    "cities": ["Москва"],
    "maxPlacesPerSearch": 0
}
```

#### Стоматологии Москвы без сайта, но с WhatsApp

```json
{
    "searchQueries": ["стоматология"],
    "cities": ["Москва"],
    "website": "without",
    "requiredContacts": ["whatsapp"],
    "maxPlacesPerSearch": 0
}
```

#### Все аптеки в радиусе 2 км от точки, ближайшие первыми

```json
{
    "searchQueries": ["аптека"],
    "latitude": "55.7558",
    "longitude": "37.6173",
    "radiusMeters": 2000,
    "sortBy": "distance",
    "maxPlacesPerSearch": 0
}
```

#### Новые аптеки и автосервисы Москвы каждую неделю

```json
{
    "categories": ["Аптеки", "Легковой автосервис"],
    "cities": ["Москва"],
    "openedAfter": "30 days",
    "onlyNewPlaces": true,
    "maxPlacesPerSearch": 0
}
```

#### Дополнить свою базу по ссылкам и ID

```json
{
    "startUrls": [
        "https://2gis.ru/moscow/firm/70000001040649255",
        "4504127908435096",
        "https://2gis.ru/moscow/branches/4504136498342213",
        "https://2gis.ru/moscow/inside/4504235282681371"
    ]
}
```

### Настройки / Input fields

| Поле | Что делает |
| --- | --- |
| `searchQueries` | Что искать, как в поиске 2ГИС: «стоматология», «автосервис» |
| `categories` | Рубрики 2ГИС по названию или номеру; без запросов — вся рубрика |
| `cities` | Города, области, края или республики; берутся места только самого города или области |
| `startUrls` | Ссылки 2ГИС: место, поиск, здание, сеть, короткие ссылки, ID |
| `maxPlacesPerSearch` | Сколько мест брать из каждого запроса в каждом городе или области, а также филиалов сети и организаций здания (0 — все) |
| `maxPlaces` | Общий лимит мест за запуск (0 — без лимита) |
| `latitude`, `longitude`, `radiusMeters` | Искать в круге вокруг точки вместо города, до 50 км |
| `polygon` | Точная область в GeoJSON (Polygon или MultiPolygon) |
| `districts` | Оставить места только этих районов |
| `website` | Все, только с сайтом или только без сайта |
| `requiredContacts` | Обязательные контакты: телефон, email, сайт, WhatsApp, Telegram, Instagram |
| `minRating`, `minReviews` | Рейтинг и число отзывов не ниже заданных |
| `features` | Доставка, навынос, Wi-Fi, оплата картой, круглосуточно |
| `minAverageCheck`, `maxAverageCheck` | Средний чек 2ГИС от и до |
| `exactName` | Только места с таким названием, точно |
| `excludePromoted` | Без компаний, которые платят 2ГИС за продвижение |
| `withPhotos` | Только места с фотографиями |
| `openedAfter` | Только места, появившиеся в 2ГИС после даты или за период: `30 days` |
| `sortBy` | Как в 2ГИС, по рейтингу, сначала новые, по названию, по расстоянию |
| `scrapeBranches` | Добавить все филиалы найденных сетей в том же регионе |
| `maxReviewsPerPlace`, `reviewsSortBy`, `reviewsRatings`, `includeReviewAuthor` | Отзывы к каждому месту |
| `onlyNewPlaces`, `includeChangedPlaces`, `includeClosedPlaces` | Мониторинг: новые, изменившиеся, пропавшие и вернувшиеся места |
| `monitoringName`, `resetMonitoring` | Своё имя памяти мониторинга и её сброс |
| `language`, `includeRawData`, `proxyConfiguration` | Язык данных, исходный объект 2ГИС, свой прокси |

### Результат / Output

Одна строка — одно место. Пример (данные условные):

```json
{
    "placeId": "70000001000000001",
    "name": "Пример Дент, стоматология",
    "shortName": "Пример Дент",
    "nameExtension": "стоматология",
    "category": "Частные стоматологии",
    "categories": ["Частные стоматологии", "Частные детские стоматологии"],
    "rubricIds": ["222", "112852"],
    "phone": "+74950000001",
    "phones": ["+74950000001", "+79160000002"],
    "phonesFormatted": ["+7 (495) 000‒00‒01", "+7 916‒000‒00‒02"],
    "phoneComments": [null, "регистратура"],
    "email": "info@example.ru",
    "emails": ["info@example.ru"],
    "website": "https://example.ru",
    "websites": ["https://example.ru"],
    "whatsapp": "https://wa.me/79160000002",
    "whatsappNumber": "+79160000002",
    "telegram": "https://t.me/exampledent",
    "instagram": null,
    "vk": "https://vk.com/exampledent",
    "facebook": null,
    "youtube": null,
    "viber": null,
    "ok": null,
    "tiktok": null,
    "twitter": null,
    "linkedin": null,
    "max": null,
    "otherLinks": [],
    "hasPhone": true,
    "hasEmail": true,
    "hasWebsite": true,
    "hasMessenger": true,
    "contactScore": 100,
    "address": "Тверская улица, 10",
    "fullAddress": "Москва, Тверская улица, 10",
    "addressComment": "2 этаж",
    "street": "Тверская улица",
    "houseNumber": "10",
    "postcode": "125009",
    "district": "Тверской",
    "city": "Москва",
    "region": "Москва",
    "country": "Россия",
    "latitude": 55.760166,
    "longitude": 37.608864,
    "nearestStations": [{ "name": "Пушкинская", "distance": 400, "types": ["metro"] }],
    "rating": 4.9,
    "reviewsCount": 640,
    "ratingsCount": 980,
    "workingHours": { "Пн": "09:00–21:00", "Вт": "09:00–21:00", "Ср": "09:00–21:00", "Чт": "09:00–21:00", "Пт": "09:00–21:00", "Сб": "10:00–18:00", "Вс": "10:00–18:00" },
    "workingHoursText": "Пн 09:00–21:00; Вт 09:00–21:00; Ср 09:00–21:00; Чт 09:00–21:00; Пт 09:00–21:00; Сб 10:00–18:00; Вс 10:00–18:00",
    "is24x7": false,
    "scheduleComment": "приём по записи",
    "averageCheck": null,
    "averageCheckValue": null,
    "paymentMethods": ["Наличный расчёт", "Оплата картой", "Оплата по QR-коду"],
    "delivery": false,
    "takeaway": false,
    "wifi": true,
    "cardPayment": true,
    "attributes": ["Наличный расчёт", "Оплата картой", "Взрослый стоматолог-хирург", "Имплантация", "Взрослый ортодонт", "Детский стоматолог-терапевт"],
    "orgId": "70000001000000000",
    "orgName": "Пример Дент",
    "orgBranchCount": 4,
    "isChain": true,
    "orgRating": 4.8,
    "orgReviewsCount": 2100,
    "awards": ["Победитель Премии 2ГИС 2024"],
    "purpose": null,
    "buildingId": "4504235282000001",
    "buildingFloors": 7,
    "timezoneOffsetMinutes": 180,
    "isOpenNow": true,
    "hasPhotos": true,
    "isAdvertised": false,
    "promoText": "Бесплатная консультация и план лечения",
    "createdAt": "2021-03-09T01:00:00Z",
    "updatedAt": "2026-06-09T12:40:17Z",
    "url": "https://2gis.ru/moscow/firm/70000001000000001",
    "searchQuery": "стоматология",
    "searchCity": "Москва",
    "position": 1,
    "changeType": null,
    "changedFields": null,
    "reviews": [],
    "scrapedAt": "2026-09-29T10:00:00.000Z"
}
```

| Группа | Поля |
| --- | --- |
| Место | `placeId`, `name`, `shortName`, `nameExtension`, `category`, `categories`, `rubricIds`, `url` |
| Телефоны | `phone`, `phones`, `phonesFormatted`, `phoneComments` |
| Почта и сайт | `email`, `emails`, `website`, `websites` |
| Мессенджеры и соцсети | `whatsapp`, `whatsappNumber`, `telegram`, `instagram`, `vk`, `facebook`, `youtube`, `viber`, `ok`, `tiktok`, `twitter`, `linkedin`, `max`, `otherLinks` |
| Для CRM | `hasPhone`, `hasEmail`, `hasWebsite`, `hasMessenger`, `contactScore` — заполненность контактов от 0 до 100: телефон 30, email 25, сайт 20, WhatsApp или Telegram 15, Instagram, VK или Facebook 10 |
| Адрес | `address`, `fullAddress`, `addressComment`, `street`, `houseNumber`, `postcode`, `buildingId`, `buildingFloors`, `district`, `city`, `region`, `country`, `latitude`, `longitude`, `nearestStations`, `timezoneOffsetMinutes` |
| Рейтинг | `rating`, `reviewsCount`, `ratingsCount`, `orgRating`, `orgReviewsCount` |
| Часы работы | `workingHours`, `workingHoursText`, `is24x7`, `isOpenNow` (в часовом поясе места), `scheduleComment` |
| Особенности | `averageCheck`, `averageCheckValue`, `paymentMethods`, `delivery`, `takeaway`, `wifi`, `cardPayment`, `attributes`, `awards` (награды Премии 2ГИС), `purpose` (чем место является по версии 2ГИС) |
| Сеть | `orgId`, `orgName`, `orgBranchCount`, `isChain` |
| Карточка и даты | `hasPhotos`, `isAdvertised` — компания платит 2ГИС за продвижение; `promoText` — текст из карточки: акция или слоган, его пишет сама компания; `createdAt` (когда место появилось в 2ГИС), `updatedAt` |
| Поиск и мониторинг | `searchQuery`, `searchCity`, `position`, `changeType` (`new`, `changed`, `closed`, `returned`), `changedFields`, `lastSeenAt` (когда закрытое место видели в последний раз), `scrapedAt` |
| Отзывы | `reviews`: `reviewRating` (оценка), `text`, даты, автор, ответ компании, число фото, источник, ссылка на отзыв. В виде «Отзывы» каждый отзыв показан отдельной строкой рядом с данными места |

После запуска в хранилище (Key-value store) лежит запись **`SUMMARY`**: по каждому поиску — сколько мест нашёл 2ГИС во всём регионе, сколько подошло под фильтры и сколько выдано; итоги мониторинга; пропущенные ссылки; рубрики, которые 2ГИС подставил вместо вписанных названий.

Если по вводу нечего собирать (город не найден, неполные координаты, пустой ввод), запуск завершается успешно без мест, а причина записана в сообщении о статусе и в поле `error` записи `SUMMARY`. Статус FAILED для таких случаев включает опция «Завершать запуск ошибкой при неверном вводе».

### Мониторинг новых мест / Monitoring new places

1. Задайте поиск и включите **«Только новые места с прошлого запуска»**, а при желании — **«Также места с изменёнными контактами»**.
2. Сохраните ввод как задачу (**Save as a new task**).
3. В задаче откройте **Schedules** и выберите, как часто запускать: каждый день или каждую неделю.
4. Первый запуск выдаст все места и запомнит их. Дальше приходят только новые места (`changeType: new`) и места со сменившимися названием, адресом, рубрикой, телефонами, почтой, сайтом, мессенджерами или часами работы (`changeType: changed`, в `changedFields` — что именно). Рейтинг и число отзывов меняются постоянно, поэтому в сравнении не участвуют.
5. Подключите интеграцию — Telegram, Slack, Google Sheets или webhook, — чтобы новые компании сразу попадали вам.

**Пропавшие места.** Галочка **«Также места, пропавшие из 2ГИС»** присылает их с пометкой `changeType: closed` и данными последнего сбора, а если место вернётся — `returned`. Она работает только когда запуск проходит всю выдачу: поставьте «Мест с каждого поиска» и «Всего мест» в 0 и не включайте фильтр «новые места». Иначе отсутствие места означает лишь то, что запуск до него не дошёл, — актор так и напишет в логе и проверку пропустит.

**Своя память.** Поле **«Имя памяти мониторинга»** позволяет двум задачам работать с одной памятью или, наоборот, начать новую. Галочка **«Забыть всё и начать заново»** стирает память один раз — снимите её после запуска.

### Сколько стоит / Pricing

Вы платите за полученные места и небольшую фиксированную сумму за запуск (см. вкладку **Pricing**). **Контакты входят в цену места.** Ресурсы Apify и прокси отдельно не оплачиваются. Отфильтрованные места и места, уже выданные в мониторинге, бесплатны.

| Тариф Apify | 1 000 мест с контактами | 1 000 отзывов к местам |
| --- | --- | --- |
| Free | $3.00 | $0.50 |
| Bronze | $2.70 | $0.45 |
| Silver | $2.40 | $0.40 |
| Gold и выше | $2.00 | $0.35 |

#### Сколько стоит спарсить компании 2ГИС

| Задача | Мест | Стоимость на тарифе Free |
| --- | --- | --- |
| Все автосервисы Москвы с контактами | ~3 800 | ≈ $11.50 |
| Все аптеки Москвы | ~5 100 | ≈ $15.25 |
| Стоматологии Москвы без сайта | ~570 | ≈ $1.70 |
| 100 мест и по 5 последних отзывов | 100 + 500 отзывов | ≈ $0.55 |
| Мониторинг новых заведений города, раз в день | ~50 новых в неделю | ≈ $0.80 в месяц |

Чтобы не выйти за бюджет, задайте в Apify **максимальную стоимость запуска** — актор остановится на лимите и сохранит всё собранное.

### API и интеграции / API & integrations

Запуск и получение компаний одним запросом:

```bash
curl -X POST "https://api.apify.com/v2/acts/anuarbakty~2gis-places-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["стоматология"], "cities": ["Москва"], "maxPlacesPerSearch": 100}'
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("anuarbakty/2gis-places-scraper").call(run_input={
    "searchQueries": ["стоматология"],
    "cities": ["Москва"],
    "website": "without",
    "maxPlacesPerSearch": 0,
})
for place in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(place["name"], place["phone"], place["whatsappNumber"])
```

JavaScript:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('anuarbakty/2gis-places-scraper').call({
    searchQueries: ['стоматология'],
    cities: ['Москва'],
    openedAfter: '7 days',
    onlyNewPlaces: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'new places');
```

**ИИ-агенты и MCP.** Актор доступен через Apify MCP-сервер: `https://mcp.apify.com/?tools=anuarbakty/2gis-places-scraper` — подключите его к Claude, ChatGPT, Cursor или n8n.

#### Скопируйте в ChatGPT или Claude

```text
Используй Apify-актор anuarbakty/2gis-places-scraper, чтобы собирать компании из 2ГИС.
Вход: searchQueries и/или categories + cities, или latitude, longitude, radiusMeters, или polygon (GeoJSON),
или startUrls (ссылки 2ГИС и ID мест).
Фильтры: website (all | with | without), requiredContacts [phone, email, website, whatsapp, telegram, instagram],
minRating, minReviews, minAverageCheck, maxAverageCheck, exactName, excludePromoted,
features [delivery, takeaway, wifi, cardPayment, is24x7], withPhotos,
districts, openedAfter ("30 days"). Порядок: sortBy (relevance | rating | opened_time | name | distance).
Лимиты: maxPlacesPerSearch, maxPlaces. Дополнительно: scrapeBranches, maxReviewsPerPlace.
Мониторинг: onlyNewPlaces, includeChangedPlaces, includeClosedPlaces, monitoringName, resetMonitoring.
Выход: одна строка на место — name, category, phone, phones, whatsappNumber, email, website, instagram, telegram,
address, city, district, latitude, longitude, rating, reviewsCount, workingHoursText, averageCheck, orgName,
orgBranchCount, url, changeType.
```

### Страны и города / Countries and cities

Работает на всех сайтах 2ГИС и Urbi: Россия, Казахстан, Кыргызстан, Узбекистан, Беларусь, Армения, Азербайджан, Грузия, Таджикистан, ОАЭ, Оман, Кипр, Чехия, Чили. Города пишите как на сайте 2ГИС: Москва, Санкт-Петербург, Новосибирск, Казань, Алматы, Астана, Шымкент, Караганда, Бишкек, Ташкент, Дубай, Praha. Работают и небольшие города внутри регионов — Талгар, Химки, Каскелен: актор возьмёт места только этого города.

Вместо города можно вписать **область, край или республику**: «Самарская область», «Московская область», «Краснодарский край», «Татарстан», «Туркестанская область». Актор пройдёт все регионы 2ГИС, где есть её места, и возьмёт только их: например, для Адыгеи это Майкоп и пригороды Краснодара. Страну целиком указать нельзя — перечислите её города или области.

### Вопросы и ответы / FAQ

#### Как выгрузить базу компаний 2ГИС в Excel?

Запустите актор и во вкладке **Output** нажмите **Export** → **Excel** или **CSV**. Таблица плоская: одна строка — одно место, у каждого мессенджера своя колонка.

#### Сколько компаний можно собрать?

Всю выдачу 2ГИС по запросу, без предела в 60 мест, как на сайте. Управляйте объёмом лимитами `maxPlacesPerSearch` и `maxPlaces` и максимальной стоимостью запуска.

#### Почему email есть не у всех?

Актор отдаёт контакты, которые компания опубликовала в 2ГИС. В наших проверках почта была у 30–50% мест, телефон — почти у всех, WhatsApp — у большинства заведений Казахстана.

#### Как найти компании без сайта?

Выберите в фильтре **«Сайт» → «Только без сайта»**. 2ГИС отбирает такие места сам, так что за лишние места платить не придётся.

#### Как искать в районе или вокруг адреса?

Укажите координаты точки и радиус или нарисуйте область на geojson.io и вставьте её в поле «Область на карте». Для городов с районами можно просто перечислить районы.

#### Как собрать компании всей области?

Впишите её в поле городов: «Самарская область». Актор сам найдёт города и сёла области в 2ГИС — отдельно перечислять Самару, Тольятти и Сызрань не нужно. Лимит «Мест с каждого поиска» считается на всю область: при лимите места приходят из тех городов, по которым 2ГИС ответил раньше, а сортировка действует внутри каждого. Нужна вся область — поставьте 0.

#### Чем «рубрика» отличается от «запроса»?

Запрос ищет как строка поиска 2ГИС: «анализы» найдёт медицинские центры, лаборатории и даже стоматологии, где сдают анализы. Рубрика берёт ровно одну категорию 2ГИС. Можно и вместе: запрос внутри рубрики. Название рубрики пишите как на сайте 2ГИС: если на вписанное название 2ГИС отдаст рубрику с другим названием (в Москве «Салоны красоты» дают «Барбершопы»), актор скажет об этом в логе, в записи `SUMMARY` и в сообщении о статусе.

#### Как получить только что открывшиеся заведения?

Задайте **«Новые места: появились в 2ГИС после»**, например `30 days`, и включите мониторинг — каждую неделю будут приходить только новые места.

#### Нужен ли аккаунт 2ГИС, ключ API или прокси?

Нет. Актор работает с публичными данными 2ГИС без входа и ключей. Данные он берёт напрямую из API 2ГИС — того же, которым пользуется сайт. Если прямой запрос с сервера Apify не прошёл, повтор идёт через резидентный прокси. Отдельно за прокси платить не нужно.

#### Законно ли собирать компании из 2ГИС?

Актор собирает только общедоступные данные организаций, которые компании сами публикуют в 2ГИС. Если используете контакты для рассылок и звонков, соблюдайте законы о рекламе и персональных данных своей страны.

### Ограничения / Limitations

- Актор работает через публичный API сайта 2ГИС. Если 2ГИС его изменит, понадобится обновление.
- Контакты — только те, что компания указала в 2ГИС; с сайтов компаний актор ничего не собирает.
- Круг поиска — не больше 50 км вокруг точки; область больше разбейте на части.
- Дата `createdAt` — когда место появилось в 2ГИС, а не дата основания компании.

### Поддержка / Support

Нашли ошибку или нужна доработка — откройте вкладку **Issues** на странице актора, опишите, что запускали и что ожидали получить, и вставьте ссылку на запуск. Запуск, на который дана ссылка, автоматически открывается разработчику: его лог, ввод и результаты, и ничего больше из вашего аккаунта.

#### Другие наши акторы / More Actors

- **[Парсер отзывов 2ГИС](https://apify.com/anuarbakty/2gis-reviews-scraper)** — отзывы с фильтрами по звёздам, темам и датам, отзывы без ответа по всей сети и мониторинг новых отзывов.
- **[Threads Scraper](https://apify.com/anuarbakty/threads-scraper)** — посты, все комментарии и профили Threads без логина, поиск по словам и мониторинг новых постов.
- **[Facebook Ads Library Scraper](https://apify.com/anuarbakty/facebook-ads-library-scraper)** — реклама из Meta Ad Library (Facebook и Instagram) по слову, бренду или странице: тексты, креативы, сколько дней идёт показ, охват в ЕС и контакты рекламодателя, без логина.
- **[YouTube Transcript Scraper](https://apify.com/anuarbakty/youtube-transcript-scraper)** — транскрипты и субтитры YouTube: видео, Shorts, каналы, плейлисты и поиск на любом языке, текстом, с таймингами, SRT, VTT или кусками для ИИ; нет субтитров — нет оплаты.

### История изменений / Changelog

- **0.1.5 — 11 октября 2026.** В поле городов можно вписать область, край или республику: «Самарская область», «Краснодарский край», «Татарстан». Актор ищет по всем её городам и сёлам; раньше такой запуск завершался ошибкой «город не найден». «Московская область», «Ленинградская область» и «Краснодарский край» раньше находились как одноимённые регионы 2ГИС и приходили не целиком, теперь в них попадают и пригороды из регионов Москвы, Санкт-Петербурга, Краснодара и Сочи. Исправлено: запуск, который Apify перенёс на другой сервер или который возобновили, завершался ошибкой «город не найден». Добавлено написание Turkistan. Запуск с вводом, по которому нечего собирать (город не найден, неполные координаты, пустой ввод), теперь завершается успешно, а причина записана в сообщении о статусе и в записи `SUMMARY`; прежний статус FAILED возвращает новая опция «Завершать запуск ошибкой при неверном вводе». Запуски на 256 МБ памяти стали устойчивее.
- **0.1.4 — 7 октября 2026.** Поле `monitoringKey` переименовано в `monitoringName`. Старое имя по-прежнему принимается, сохранённые задачи менять не нужно.
- **0.1 — октябрь 2026.** Первая версия. Проверено на живых данных 29 сентября 2026 года: Алматы, Астана, Талгар, Москва, Бишкек.

*2ГИС — товарный знак его правообладателя. Этот актор — независимый инструмент и не связан с компанией 2ГИС. / 2GIS is a trademark of its owner. This Actor is an independent tool and is not affiliated with 2GIS.*

***

### English quick guide

**2GIS Places Scraper** collects businesses from 2GIS — the leading map and business directory in Russia, Kazakhstan, Central Asia and the UAE — by **search query, category and city**, by a **point, radius or polygon on the map**, or by **2GIS links**. One row per place with 88 fields: **all phones, WhatsApp (with the number), Telegram, Instagram and other socials in their own columns, email, website**, address, coordinates, opening hours, rating, average bill, chain and branch count. No browser, no login, no API key.

#### Why this scraper

- **The whole result, not 60 places** like the 2GIS website: all 3,780 dental clinics of Moscow if you need them.
- **Only the city you asked for**, without the suburbs and villages of its 2GIS region. Several cities per run, or a whole province: Самарская область, Krasnodar Krai, Tatarstan.
- **Contacts included in the place price**, every messenger in its own column, social links moved out of the website field.
- **Map search**: point with a radius up to 50 km, a GeoJSON polygon, districts.
- **Filters**: without a website, required contacts, rating and review count, average bill range, exact name, delivery, takeaway, Wi-Fi, card payment, 24/7, photos, and **no advertised places** — businesses that do not pay 2GIS for promotion.
- **New places and monitoring**: places that appeared in 2GIS since a date; scheduled runs return only new places, and optionally places whose contacts, name or address changed (`changed`), places gone from 2GIS (`closed`) and places back again (`returned`). Repeats are free.
- **Chains, buildings and CRM enrichment**: all branches of found chains, all firms in a building, any 2GIS links and ID lists.
- **Reviews per place** on request: latest, most trusted or only negative.

#### Input examples

All car services of Moscow with contacts. Type the query as you would on the 2GIS website of the city, in Russian for Russian cities:

```json
{ "searchQueries": ["автосервис"], "cities": ["Moscow"], "maxPlacesPerSearch": 0 }
```

Dentists without a website that have WhatsApp:

```json
{ "searchQueries": ["стоматология"], "cities": ["Moscow"], "website": "without", "requiredContacts": ["whatsapp"] }
```

#### Output

One flat row per place with 88 fields (see the JSON example above) and ready-made table views: Leads, Places, Reviews (one row per review) and Monitoring. Export to JSON, CSV, Excel, or connect Google Sheets, a CRM, Make, Zapier, n8n, webhooks, the API or MCP.

#### Pricing

Pay per place delivered, contacts included: $3.00 per 1,000 places on the Free plan, down to $2.00 on Gold and higher. Reviews added to places: $0.50 per 1,000, down to $0.35. Plus a small fixed fee per run (see the Pricing tab). No platform usage or proxy fees. Filtered-out places and places already delivered in monitoring mode are free.

#### FAQ

- **How many places can I get?** The whole 2GIS result for your search, not only the first 60.
- **Why do some places have no email?** Only contacts the business published in 2GIS are returned; in our checks 30–50% of places had an email and almost all had a phone.
- **How do I find businesses without a website?** Set *Website* to *Without a website*; 2GIS filters them before download.
- **Do I need a proxy or a 2GIS account?** No. Data comes straight from the 2GIS APIs; on Apify failed requests are retried through a residential proxy at no extra charge.
- **Is it legal?** The Actor collects only public business data that companies publish in 2GIS. Follow your local advertising and personal data laws when you contact businesses. This Actor is not affiliated with 2GIS.

More from this developer: [2GIS Reviews Scraper](https://apify.com/anuarbakty/2gis-reviews-scraper) (reviews with filters and monitoring), [Threads Scraper](https://apify.com/anuarbakty/threads-scraper) (posts, replies and profiles without login), [Facebook Ads Library Scraper](https://apify.com/anuarbakty/facebook-ads-library-scraper) (Facebook and Instagram ads from the Meta Ad Library without login) and [YouTube Transcript Scraper](https://apify.com/anuarbakty/youtube-transcript-scraper) (transcripts of videos, channels, playlists and search).

# Actor input Schema

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

Что вы бы ввели в поиск 2ГИС: «стоматология», «автосервис», «аптека». Для каждого запроса актор возьмёт всю выдачу 2ГИС, а не 60 мест, как сайт. Нужен город или точка на карте ниже.<br><br>What you would type into 2GIS search. Needs a city or a map point below.

## `categories` (type: `array`):

Рубрики, как в 2ГИС: «Частные стоматологии», «Аптеки», «Легковой автосервис», или их номера. Без поисковых запросов актор соберёт всю рубрику; с запросами — ищет их только в этих рубриках. Если на название 2ГИС отдаст рубрику с другим названием, актор скажет об этом в логе, в записи SUMMARY и в сообщении о статусе.<br><br>2GIS categories by name or ID. Alone they collect the whole category; with search queries they narrow the search.

## `cities` (type: `array`):

«Москва», «Санкт-Петербург», «Химки», «Алматы», «Астана», «Бишкек», «Ташкент», «Дубай» — как на сайте 2ГИС. Берутся места только этого города: пригороды и сёла вокруг, которые в 2ГИС входят в тот же регион, отсекаются. Можно вписать область, край или республику — «Самарская область», «Краснодарский край», «Татарстан»: актор пройдёт её города и сёла во всех регионах 2ГИС, где они есть. Страну целиком указать нельзя. Каждый запрос ищется в каждом городе.<br><br>Cities as on 2GIS. Only places of the city are taken, without the suburbs of its 2GIS region. A province works too (Самарская область, Krasnodar Krai, Tatarstan): all its cities and villages are searched. A whole country does not.

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

Место (…/firm/…), поиск (…/search/стоматология), все организации здания (…/inside/…), филиалы сети (…/branches/…), короткие ссылки go.2gis.com или просто ID места. Удобно, чтобы дополнить свою базу контактами.<br><br>Place, search, building, chain or short links, or plain place IDs.

## `maxPlacesPerSearch` (type: `integer`):

Сколько мест брать из каждого запроса в каждом городе, после фильтров. Область считается одним городом: предел общий на все её города, и первыми его занимают те, по которым 2ГИС ответил раньше. Нужна вся область — поставьте 0. Так же ограничиваются филиалы каждой сети и организации каждого здания. В мониторинге считаются только новые места: уже известные предел не расходуют. 0 — все места, сколько найдёт 2ГИС.<br><br>Places taken from each search in each city, after filters (a province counts as one city); the same limit applies to a chain's branches and a building's companies. In monitoring only new places count against it. 0 = all of them.

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

Общий лимит на запуск. 0 — без лимита. Потратить больше заданного в Apify лимита стоимости запуска актор не может в любом случае.<br><br>Total places per run. 0 = no limit. The run cost limit set in Apify always applies.

## `latitude` (type: `string`):

Искать вокруг точки вместо города: например, 55.7558. Координаты можно взять в 2ГИС: правый клик по карте → «Что здесь?».<br><br>Search around a point instead of a city.

## `longitude` (type: `string`):

Например, 37.6173.<br><br>For example, 37.6173.

## `radiusMeters` (type: `integer`):

Радиус круга вокруг точки, до 50 000 м.<br><br>Radius around the point, up to 50,000 m.

## `polygon` (type: `object`):

Точные границы района, квартала или торговой зоны: GeoJSON с типом Polygon или MultiPolygon. Нарисуйте область на geojson.io и вставьте результат. Координаты в GeoJSON идут в порядке «долгота, широта».<br><br>Exact area as a GeoJSON Polygon or MultiPolygon (draw it on geojson.io).

## `districts` (type: `array`):

Оставить места только этих районов: «Тверской», «Пресненский», «Басманный». Хватит части названия.<br><br>Keep only places of these districts; part of the name is enough.

## `website` (type: `string`):

«Без сайта» — компании, которым можно предложить сайт.<br><br>“Without a website” finds businesses to offer a website to.

## `requiredContacts` (type: `array`):

Оставить только места, у которых есть все выбранные контакты.<br><br>Keep only places that have all the selected contacts.

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

Оставить только места с рейтингом 2ГИС не ниже выбранного. Места без рейтинга отсеиваются.<br><br>Keep only places rated at least this on 2GIS. Places without a rating are left out.

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

Оставить только места, у которых в 2ГИС не меньше стольких отзывов. 0 — без фильтра.<br><br>Keep only places with at least this many reviews on 2GIS. 0 = no filter.

## `features` (type: `array`):

Оставить места, у которых в карточке 2ГИС отмечено всё выбранное.<br><br>Keep places whose 2GIS card lists all the selected features.

## `withPhotos` (type: `boolean`):

Работает и для филиалов сетей, и для организаций здания.<br><br>Applies to a chain's branches and a building's companies too.

## `openedAfter` (type: `string`):

Только места, которые появились в 2ГИС после этой даты: дата или период, например «30 days». Удобно, чтобы находить только что открывшиеся заведения. Места идут от самых новых.<br><br>Only places that appeared in 2GIS after this date, newest first.

## `excludePromoted` (type: `boolean`):

Убрать компании, которые платят 2ГИС за продвижение. Такие места стоят в начале выдачи: по запросу «стоматология» в Москве на первых двух страницах выдачи рекламные все места, на тридцатой — 3 из 36 московских, на пятидесятой — ни одного. Актор идёт дальше по выдаче, пока не наберёт нужное число мест. Удобно, чтобы искать компании, которые ещё не тратятся на рекламу.<br><br>Skips businesses that pay 2GIS for promotion. They rank first, so the Actor keeps paging until it has enough places.

## `minAverageCheck` (type: `integer`):

Только места, у которых 2ГИС показывает средний чек не ниже этого числа, в местной валюте. Места без чека не попадут.<br><br>Only places whose average bill in 2GIS is at least this, in local currency.

## `maxAverageCheck` (type: `integer`):

Только места, у которых средний чек не выше этого числа.<br><br>Only places whose average bill is at most this.

## `exactName` (type: `string`):

Оставить только места с таким названием — точно, без учёта регистра. «Магнит» не даст «Магнит Косметик». Удобно для аудита своей сети.<br><br>Keeps only places with exactly this name, case-insensitive.

## `sortBy` (type: `string`):

«По расстоянию» — от центра точки или области на карте.<br><br>“Distance” counts from the map point or area.

## `scrapeBranches` (type: `boolean`):

Для каждой найденной сети добавить все её филиалы в том же городе и области.<br><br>For every chain found, add all its branches in the same region.

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

Добавить к каждому месту последние отзывы: текст, оценка, дата, ответ компании. Оплачивается каждый отзыв. 0 — без отзывов. Все отзывы с фильтрами и мониторингом — в нашем «Парсере отзывов 2ГИС».<br><br>Latest reviews added to each place; each review is paid. 0 = none.

## `reviewsSortBy` (type: `string`):

Какие отзывы добавлять, если у места их больше лимита: самые новые, недавно изменённые или те, которые 2ГИС считает самыми полезными.<br><br>Which reviews to add when a place has more than the limit: the newest, recently edited, or the ones 2GIS ranks as most trusted.

## `reviewsRatings` (type: `array`):

Добавлять только отзывы с выбранными оценками, например только 1 и 2 звезды. Пусто — все оценки.<br><br>Add only reviews with these star ratings, for example 1 and 2 stars. Empty = all ratings.

## `includeReviewAuthor` (type: `boolean`):

Имя автора у каждого добавленного отзыва. Выключите, если имена не нужны.<br><br>The reviewer’s name in each added review. Turn off if you don’t need names.

## `onlyNewPlaces` (type: `boolean`):

Первый запуск выдаёт все места и запоминает их; следующие — только места, которых раньше не было. Уже выданные не оплачиваются. Запускайте по расписанию с тем же вводом.<br><br>The first run returns everything; later runs only places that were not there before. Repeats are free.

## `includeChangedPlaces` (type: `boolean`):

Присылать и уже известные места, если у них сменились название, адрес, рубрика, телефоны, почта, сайт, мессенджеры или часы работы. Поле changedFields покажет, что именно. Включает мониторинг само по себе — галочка выше не обязательна.<br><br>Also send known places whose name, address, category, contacts or hours changed. Turns monitoring on by itself.

## `includeClosedPlaces` (type: `boolean`):

Присылать места, которые были в прошлых запусках, а теперь исчезли из выдачи 2ГИС — с пометкой changeType: closed и данными последнего сбора. Работает только если запуск проходит всю выдачу: без лимитов «мест с поиска» и «всего мест», без фильтра «новые места» и без ошибок поиска — иначе отсутствие места ничего не значит. Если место вернётся, придёт с пометкой returned.<br><br>Also send places that were in earlier runs and are gone from 2GIS now (changeType: closed). Needs a run without place limits, so absence really means absence.

## `monitoringName` (type: `string`):

Своё имя для памяти мониторинга. Оставьте пустым — актор посчитает его сам по вводу. Одинаковое имя в разных задачах = общая память; новое имя = начать с чистого листа.<br><br>Your own name for the monitoring memory. Empty means it is derived from the input; the same name shares memory between tasks.

## `resetMonitoring` (type: `boolean`):

Один раз стереть память мониторинга: этот запуск выдаст все места заново и запомнит их. Не забудьте снять галочку после запуска.<br><br>Clears the monitoring memory once: this run returns everything again. Uncheck it afterwards.

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

Язык названий, адресов и рубрик. «Автоматически» — основной язык страны города: для Казахстана и России русский, для ОАЭ английский.<br><br>Language of names, addresses and categories. Auto uses the main language of the city’s country.

## `includeRawData` (type: `boolean`):

Добавить к каждому месту полный объект 2ГИС в поле raw.<br><br>Adds the full 2GIS object in the raw field.

## `failIfAllInputsFail` (type: `boolean`):

По умолчанию запуск с вводом, по которому нечего собирать (город не найден, место удалено, пустой ввод, непонятная дата), завершается успешно: причина — в сообщении о статусе и в записи SUMMARY. Включите, если вашей автоматизации нужен статус FAILED.<br><br>By default a run whose input gives nothing to collect (city not found, place deleted, empty input, unreadable date) succeeds, with the reason in the status message and in the SUMMARY record. Turn on if your automation needs a FAILED status instead.

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

Обычно не нужен: места и отзывы идут напрямую через API 2ГИС, а на серверах Apify повторы неудачных запросов актор сам направляет через резидентный прокси. Укажите свой прокси, только если хотите, чтобы все запросы шли через него.<br><br>Usually not needed: data comes straight from the 2GIS APIs, and on Apify the Actor retries failed requests through a residential proxy by itself.

## Actor input object example

```json
{
  "searchQueries": [
    "стоматология"
  ],
  "cities": [
    "Москва"
  ],
  "maxPlacesPerSearch": 20,
  "maxPlaces": 0,
  "radiusMeters": 1000,
  "website": "all",
  "minRating": "",
  "minReviews": 0,
  "withPhotos": false,
  "excludePromoted": false,
  "exactName": "Магнит",
  "sortBy": "relevance",
  "scrapeBranches": false,
  "maxReviewsPerPlace": 0,
  "reviewsSortBy": "date_created",
  "includeReviewAuthor": true,
  "onlyNewPlaces": false,
  "includeChangedPlaces": false,
  "includeClosedPlaces": false,
  "monitoringName": "moscow-clinics",
  "resetMonitoring": false,
  "language": "auto",
  "includeRawData": false,
  "failIfAllInputsFail": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `places` (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": [
        "стоматология"
    ],
    "cities": [
        "Москва"
    ],
    "maxPlacesPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("anuarbakty/2gis-places-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": ["стоматология"],
    "cities": ["Москва"],
    "maxPlacesPerSearch": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("anuarbakty/2gis-places-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": [
    "стоматология"
  ],
  "cities": [
    "Москва"
  ],
  "maxPlacesPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call anuarbakty/2gis-places-scraper --silent --output-dataset

```

## MCP server setup

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