Мне нужно было одно число. Какая доля салонов красоты в моём городе даёт клиенту записаться онлайн — без звонка. Я делаю сервис записи для салонов и постоянно слышу от мастеров «нам пишут ночью», «клиенты приходят из интернета». Но сколько всё-таки таких салонов, куда ночью не записаться? Десять процентов? Половина?

Полез искать — и не нашёл. Есть отчёты про объём бьюти-рынка. Есть пресс-релизы CRM про «повальную цифровизацию отрасли». Есть подборки «5 трендов индустрии красоты». А простого числа — у скольких салонов клиент может записаться, не звоня, — нет нигде.

Ну хорошо. Город один, руки есть. Посчитаю сам. Считал два дня, и по дороге выяснил, что самое интересное — не результат, а то, во что упираешься по пути.

Стена рынка данных

Наивный план: взять справочник, выгрузить категорию «салоны красоты», посчитать. Оказалось, справочники устроены так, чтобы этого нельзя было сделать.

2ГИС. Регистрируюсь, беру демо-ключ, открываю документацию. Демо отдаёт максимум пять страниц по десять объектов. Пятьдесят карточек — на пятимиллионный город. Это не выборка, это прогулка по одному кварталу. Дальше — платная подписка без публичного прайса, «считаем через менеджера», ориентир по рынку около 200 тысяч в год.

Данные карт по лицензии. У другого поставщика геоданные отдаются, но лицензия запрещает не перепродажу и не публикацию — она запрещает сохранить результат в файл. То есть операция «выгрузил и посчитал» уже нарушение, даже если число я оставлю себе. Лицензия, которая это разрешает, на момент проверки стоила 226 200 рублей в год. Двести двадцать шесть тысяч — за возможность посчитать салоны красоты в своём городе.

ВКонтакте. У салонов есть сообщества, у VK открытое API. Пробую хотя бы узнать, можно ли им написать. Старый способ авторизации закрыт, новый требует полноценной серверной обвязки с обменом кодов. Ради одной метрики строить это не окупается. Отступаю.

OpenStreetMap. Карта, которую рисуют волонтёры. Единственный источник, чья лицензия (ODbL) прямо разрешает и хранить данные, и публиковать по ним статистику. Бесплатно, без ключей, без менеджеров.

Вот и весь портрет рынка данных: три компании знают про город всё — и либо продают это за годовую зарплату разработчика, либо запрещают записывать в файл. А доступна бесплатно только карта, которую нарисовали энтузиасты по вечерам.

Сколько стоит посчитать салоны в своём городе
Сколько стоит посчитать салоны в своём городе

Каркас: Overpass

Из OSM я вытащил каркас выборки одним запросом к Overpass API. Категории shop=beauty и shop=hairdresser, рамкой по координатам (bbox), а не поиском админ-границы по имени — area-lookup стабильно валит публичные зеркала в 504:

[out:json][timeout:120];
(
  nwr["shop"="beauty"](59.63,29.55,60.10,30.65);
  nwr["shop"="hairdresser"](59.63,29.55,60.10,30.65);
);
out center tags;

Одна тонкость: публичные инстансы Overpass без внятного User-Agent отвечают 406/429, а основной часто отдаёт 429 под нагрузкой. Поэтому в скрипте — список зеркал, идём по нему до первого рабочего.

Получилось 3 556 объектов, из них 3 046 с названием.

Почему я выбросил самые красивые цифры

Тут был момент, когда я чуть не написал другую статью. В OSM у объекта есть теги: сайт, телефон, часы. Считай не хочу. Я и посчитал — вышли красивые проценты «у скольких салонов заполнен сайт». А потом понял, что считаю не то. OSM-теги заполняют волонтёры выборочно: отсутствие тега website не значит, что у салона нет сайта, — значит, что кто-то его не вписал. Это метрика полноты OSM, а не рынка.

Красивые цифры пришлось выбросить и пойти длинным путём: у кого в OSM указан сайт — зайти на этот сайт и посмотреть глазами скрипта, что там есть для клиента.

Метод: читаем сайты

Сайтов с URL набралось под тысячу. Каждый я загрузил и в HTML искал два признака.

Первый — маркеры систем онлайн-записи в коде страницы (виджеты, ссылки, скрипты):

const BOOKING_HOSTS = ["yclients", "dikidi", "altegio", "sonline", "arnica", "beautybot"];
const hasBooking = (html) =>
  BOOKING_HOSTS.filter((h) => html.toLowerCase().includes(h));

Второй — ссылки на мессенджеры (t.me, wa.me, vk.com/im, и т.п.): есть ли вообще куда написать, кроме телефона.

И здесь — главный урок массового обхода, из-за которого чуть не получил красивую ложь. Первый прогон в десять потоков напечатал «открылось 41 из 906». Я почти поверил — а это моя сеть захлебнулась под VPN, и половина «мёртвых» сайтов на самом деле живые. Правильно так: низкая параллельность (≤4), три попытки на адрес, отдельная категория «ответил ошибкой, но жив» — иначе таймаут своей сети записывается в «у салона нет сайта». Проверять всегда на одиночном запросе, прежде чем верить массовому.

После аккуратного повтора из 963 проверенных адресов чисто открылись 623. Их и взял за базу. Остальные (мёртвый домен, просроченный сертификат, недоступность, неотличимый от неё таймаут) в базу не пошли — поэтому оценка ниже консервативная, а не завышенная.

Результат

База — 623 открывшихся сайта салонов Петербурга.

- 48,0% (299) — записаться онлайн нельзя вообще. Только телефон или форма «оставьте заявку».

- 52,0% (324) — онлайн-запись есть.

- 20,5% (128) — ни записи, ни какого-либо мессенджера. Совсем некуда обратиться, кроме звонка.

Как клиент может записаться в салон
Как клиент может записаться в салон

Среди 324 сайтов, где запись есть, — кто её делает (сумма чуть больше 100%, у части стоит две системы):

  • YCLIENTS — 79,3%

  • DIKIDI — 13,3%

  • Sonline — 8,3%

  • Arnica — 0,9%

  • Altegio — не встретился ни разу.

Кто держит онлайн-запись в салонах
Кто держит онлайн-запись в салонах

Почти четыре из пяти «записывающихся» салонов сидят на одной системе. Для рынка это и монополия, и точка входа: интегрируешься с одним — говоришь с большинством.

Где это может врать (честно)

  • Выборка смещена в цифровую сторону. Я смотрел салоны, у которых в OSM указан сайт, — это заведомо самая интернет-продвинутая часть рынка. Значит реальная доля «без онлайн-записи» по всему рынку (включая тех, у кого сайта нет вовсе) выше моих 48%, а не ниже.

  • Один город. Питер — не вся Россия, в регионах картина может отличаться.

  • Детект по маркерам не идеален. Салон с самописным виджетом записи, не оставившим узнаваемых следов в HTML, я мог посчитать как «без записи». Это тоже смещает оценку в сторону занижения доли с записью.

  • Таймауты. Часть недоступных сайтов — возможно, живые, просто медленные. Они исключены, база консервативна.

Ни один из этих перекосов не работает в сторону «на самом деле всё хорошо». Все — в сторону «без записи ещё больше».

Зачем это было

Мне это число нужно было для дела — я делаю NAMI, сервис онлайн-записи для салонов, и хотел понять размер проблемы не по ощущениям, а по данным. Получил: половина салонов даже среди самых цифровых не даёт записаться, не позвонив, а пятая часть оставила клиенту один телефон. При том что звонить люди всё меньше любят — но это уже тема отдельной статьи.

А ещё я получил побочный вывод, ради которого, может, и стоило всё затевать: простое число про твой собственный город — уже не общественное достояние. Его либо продают за годовую зарплату разработчика, либо запрещают сохранить в файл. Спасает только карта, которую по вечерам рисуют волонтёры. Спасибо им.

Скрипт (OSM Overpass + обход сайтов) — на Node без зависимостей; при интересе выложу отдельно.

Данные и метод: OpenStreetMap (ODbL), июль 2026, Санкт-Петербург, база — 623 сайта.

Скрипт лежит здесь: github.com/MelnikovDenisG/salon-scan.

Версия про рынок для тех, кому не про код, а про бизнес.

Комментарии (3)


  1. ManulVRN
    24.07.2026 06:51

    Его либо продают за годовую зарплату разработчика

    Судя по статье, все-таки за месячную?


  1. eps
    24.07.2026 06:51

    • Детект по маркерам не идеален. Салон с самописным виджетом записи, не оставившим узнаваемых следов в HTML, я мог посчитать как «без записи».

    Возможно, стоило HTML этих страничек прогнать через LLM с вопросом «есть ли на этой странице возможность записи в салон красоты?»
    А результаты выборочно перепроверить, потому что LLM.


  1. Iscander_Che
    24.07.2026 06:51

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

    Вы прям Америку открыли. Таргетинг нынче небесплатен. Вы же хотели получить данные по конкретной страте, пользующейся определённой услугой, чтобы продать ей возможность воспользоваться ею. "... Дикобразу - дикобразово." (с)