geo-lead-parser
Skill1 starsChanged 2 months agoMITView on GitHub
Собрать базу компаний (контакты ЛПР для B2B-обзвона/рассылки) из 2ГИС и Яндекс.Карт по городу + категории. Гонит локальный парсер через Chrome, нормализует и чистит дубли, кладёт готовую базу в vault. Используй, когда пользователь просит «собери базу компаний / контакты / организации / телефоны из 2ГИС или Яндекс.Карт», «выгрузи фирмы по городу X категории Y», «парсинг 2гис», «база для обзвона / для холодных продаж». 2ГИС — рабочий канал; Яндекс — пока заглушка (нужен VPN / API-ключ, см. ниже).
- Installs packages
In this repository5 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- arch-reportSkill
- oprosi-menyaSkill
- video-montageSkill
The file
Files
Парсер гео-баз компаний (2ГИС / Яндекс.Карты)
Цель: из связки «город + категория» собрать структурированную базу компаний с контактами (телефон/сайт/почта/адрес) для B2B-лидгена пользователя. Всё локально, без облачных сервисов.
Когда применять
- «собери базу компаний / организаций / фирм из 2ГИС (или Яндекс.Карт)»
- «вытащи контакты / телефоны по категории X в городе Y»
- «база для обзвона / холодных продаж / рассылки»
- «парсинг 2гис / выгрузка 2gis»
НЕ для: разведки одного конкретного игрока (это competitor-intel), стратегии выбора ниши (это strategy-researcher). Этот скил — только сбор + чистка контактов. Кого собирать (ICP, какие категории/города) — приходит из брифа, не выдумывается здесь.
Статус каналов (проверено 2026-06-24)
- 2ГИС — РАБОЧИЙ.
parser-2gisv1.2.1 установлен (py -m pip show parser-2gis). Гонит реальный Chrome, отдаёт CSV/XLSX/JSON. - Яндекс.Карты — ЗАГЛУШКА. Готового локального канала нет (рабочий код — сторонние репозитории на GitHub). См. раздел «Яндекс.Карты» — два пути активации.
Среда
- parser-2gis — console-script
parser-2gis(он жеParser2GIS) на PATH. Зависимости лёгкие (psutil, pychrome, pydantic, requests, xlsxwriter — без PyQt). - Google Chrome — обязателен (обычно
C:\Program Files\Google\Chrome\Application\chrome.exe). Парсер драйвит его через CDP; сам парсинг идёт через системный Chrome, поэтому при прокси/VPN учитывай, что Chrome ходит напрямую. - Python 3.14 (
py, неpython). Движок чистки —scripts/merge_normalize.py. - Переустановка при нужде:
py -m pip install --retries 5 --timeout 60 parser-2gis. GUI-версия (точка-клик для пользователя):py -m pip install "parser-2gis[gui]", запускparser-2gisбез аргументов.
CLI parser-2gis (снят с --help, не с вики)
parser-2gis -i URL [URL ...] -o PATH -f {csv,xlsx,json} [опции]Главные флаги:
-i, --url URL— поисковый URL 2ГИС (можно несколько). Формат URL — см. ниже, это главная грабля.-o, --output-path PATH— куда писать.-f, --format {csv,xlsx,json}— формат. Для базы бериcsv(илиxlsxесли пользователю в Excel).--parser.max-records N— лимит записей (на тесты ставь 3-5, на боевой сбор — сколько надо).--writer.csv.remove-duplicates yes— встроенный дедуп внутри прогона.--writer.csv.add-rubrics yes— добавить рубрики.--chrome.binary_path PATH— путь к Chrome (обычно не нужен, находит сам).--chrome.headless {yes,no}— см. «Режимы запуска».--chrome.disable-images {yes,no}—yesбыстрее, но иногда ленивый список не догружается.--parser.delay_between_clicks МС— увеличить при рваной сети.
Схема CSV на выходе (богатая): Наименование, Описание, Рубрики, Адрес, Индекс, Район, Город, Часы работы, Рейтинг, Кол-во отзывов, Широта, Долгота, 2GIS URL, Тип + динамические колонки контактов (Телефон/Сайт/Почта/соцсети — появляются, когда у фирм есть эти данные).
URL-рецепт 2ГИС (ОБЯЗАТЕЛЬНО, иначе 0 записей)
Плоский https://2gis.ru/<city>/search/<запрос> → ошибка «Bound is incorrect» (2ГИС требует границы карты). Лечение — добавить вьюпорт карты:
https://2gis.ru/<city_slug>/search/<URL-encoded запрос>/?m=<lon>%2C<lat>%2F<zoom>Пример (Москва, стоматологии): https://2gis.ru/moscow/search/стоматологии/?m=37.62%2C55.75%2F12
city_slug— латиницей:moscow,spb,kazan,krasnodar,ekaterinburg,novosibirskи т.д. Список и центры городов —references/city_viewpoints.md.m=lon,lat/zoom— центр карты (долгота, широта) и зум. zoom 11-13 = масштаб города.- Самый надёжный способ получить URL — открыть 2gis.ru в браузере, ввести запрос, подвинуть карту на нужный район и скопировать URL из адресной строки (он уже содержит вьюпорт). Так пользователь может задать точную географию.
Режимы запуска (важно)
- Штатный — headful в сессии пользователя. 2ГИС режет headless (антибот → 0 записей), а headful из процесса агента падает (нет интерактивного рабочего стола). Поэтому боевой сбор гонит пользователь в своём окне (команда ниже), или через GUI
parser-2gis[gui](точка-клик, без флагов). Это аналог «логина под VPN» — шаг, который инструмент готовит, а жмёт пользователь. - Автоном-попытка — headless. Скил может попробовать
--chrome.headless yesсам; если CSV вышел с 0 строк данных (только заголовок) → это антибот, эскалируй пользователю: «дай прогнать headful в твоей сессии» + готовая команда.
Боевая команда (пользователь запускает у себя, headful):
parser-2gis -i "<URL из адресной строки 2gis>" -o "C:\путь\base_raw.csv" -f csv ^
--parser.max-records 500 --chrome.headless no --writer.csv.remove-duplicates yes --writer.csv.add-rubrics yesПайплайн (что делает скил)
- Разобрать бриф: город(а), категория(и) = поисковые запросы, нужный объём, нужен ли только с телефоном. Если география размытая — попросить пользователя скопировать URL из 2gis (см. рецепт).
- Собрать URL(ы) по рецепту (city_slug + запрос +
?m=). На каждую пару город×категория — свой URL. - Прогнать parser-2gis в нужном режиме (по умолчанию — отдать команду пользователю headful; либо headless-попытка). Сырые CSV — в
inputs/сессии. - Слить + почистить:
py scripts/merge_normalize.py OUT.csv inputs/*.csv [--only-with-phone]. Кросс-файловый дедуп (по имя+телефон), нормализация телефонов в+7XXXXXXXXXX, авто-детект колонок по содержимому (телефон/сайт/почта — регэкспом, не по кириллическим заголовкам). ПишетOUT.csv+OUT.summary.md(счётчики, % с телефоном/сайтом/почтой). - Положить в vault (см. ниже) + короткий отчёт пользователю: сколько собрано, % с телефоном, путь.
- Хендофф (если бриф просит): базу можно отдать дальше —
competitor-intel(разведка по топ-N из базы),task-author/ghostwriter(скрипт обзвона / письмо). Это уже работа оркестратора, скил только готовит базу.
Куда класть результат
- Сырые CSV прогонов →
<VAULT_ROOT>/08-Работа-Claude/<session>/inputs/ - Чистая база + summary → корень
<VAULT_ROOT>/08-Работа-Claude/<session>/(имяbase_<город>_<категория>_<дата>.csvлатиницей). - Если у клиента есть своя рабочая папка — продублировать туда; уточнять у оркестратора.
Яндекс.Карты (ЗАГЛУШКА — два пути активации)
Готового рабочего канала нет. Когда дойдут руки — приоритет такой:
- Официальный Places/Geosuggest API Яндекса (РЕКОМЕНДУЮ — легально и стабильно). Нужен бесплатный ключ (developer.tech.yandex.ru, JS API + Places). Тогда я пишу мини-граббер на
requestsпротив их API — без браузера, без антибота, через системный VPN. Это чище любого скрейпа. Блокер — только получение ключа пользователем (нужен его логин). - Скрейп через клон GitHub-репо.
git clone https://github.com/chernyshov-dp/YMapsGrabber(собирает организации в области поиска) илиartemsteshenko/parser_maps. Дальше тот жеmerge_normalize.pyдля чистки (он схемо-независим).
При запросе на Яндекс — не молчать, а выдать эти два варианта и спросить, какой активировать.
Грабли
.py— без кириллических литералов (Windows-консоль в cp1251 бьёт их).merge_normalize.pyдетектит колонки по содержимому, поэтому Cyrillic-заголовки не хардкодит. В консоль — только ASCII.- Пути с кириллицей в командах parser-2gis иногда ломаются → клади сырые CSV в ASCII-путь, потом переноси.
disable-images yesускоряет, но при рваной сети список не догружается → если мало записей, гониdisable-images no+delay_between_clicks 1000.- Не ставь огромный
max-recordsна первом прогоне — сначала 5-10 для проверки URL, потом боевой объём.
Этика / право (коротко)
2ГИС/Яндекс в ToS запрещают автоскрейп. Применять только для авторизованного B2B-лидгена пользователя (публичные контакты организаций): умеренный темп, не перепродавать сырьё, помнить про 152-ФЗ (контакты юрлиц — ок, персональные данные физлиц не собирать). Официальный API Яндекса (путь 1) этих рисков лишён — предпочтительнее.
Связь с оркестратором
Триггер брифа «собери базу компаний из 2ГИС/Яндекс» → оркестратор вызывает этот скил (Skill tool), а не плодит general-purpose. Скил готовит базу; разведку/тексты поверх неё — отдельными агентами во вторую волну.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

