Как мы сделали и развиваем публичный сервис анализа зарплатных вилок в IT
Привет всем! В этой статье мы (Саша, Никита и Рома. Разработчики и аналитики) расскажем о том как построили и развиваем публичный сервис мониторинга зарплатных вилок в IT.
Сейчас есть готовый сервис, назвали его VILKY. Он каждый день собирает информацию об IT вакансиях из публичных источников (агрегаторы вакансий, телеграм каналы и т.д.), часть данных обрабатывается LLM моделями, нормализуется, и всё сохраняется в базе данных. Далее данные автоматически уходят в публичный дашборд и телеграм канал @vilky_it .
Цель сервиса: Показать сколько стоит конкретная позиция с конкретными навыками и грейдом в конкретном гео.
Для соискателя: "Сколько я стою на рынке IT?"
Дальше по ролям распишем как всё начиналось, что есть на текущий момент и кто и что делает в команде.
САША
Началось всё осенью прошлого года, когда, в очередной раз, перед компаниями встал вопрос планирования бюджетов на 2025 год. Какие позиции открывать, и сколько стоят сотрудники на конкретные IT позиции - вопрос сложный, поэтому, компании покупают статистику, обращаются в консалтинг, проводят опросы и просто смотрят что пишут в интернете. Иными словами, прозрачного подхода в оценке стоимости сотрудника с конкретными скиллами и в конкретном гео - нет. Оперируют обычно средними зарплатами.
Непрозрачность анализа и отсутствие каких-то стандартов таких оценок порождает серьёзные проблемы.
Проблема для соискателей: понять сколько ты, с твоими конкретными навыками и опытом, стоишь на рынке. Открытых инструментов для этого почти нет.
Проблема для работодателей: исходя из неадекватного анализа рынка зарплат IT, в каких-то компаниях руководителям могут дать вилку настолько низкую, что или сотрудника не наймёшь или придётся брать что есть, а потом учить. Либо за завышенную цену получить низкую квалификацию.
Итого: все хотят знать цену конкретного сотрудника. Но работодателю надо найти дешевле, а соискателю - дороже. Это рынок.
Поэтому, появилась идея создания инструмента анализа зарплатных вилок по всему русскоязычному IT.
Давайте смотреть, какими данными можно пользоваться чтобы узнать свою цену. Официальные зарплаты работодатели не дадут - это понятно. Всё что из открытого есть на рынке - это всевозможные опросы. В каналах, сообществах, да где угодно. Проблема опросов в их нерелевантности: невозможно охватить всю IT аудиторию, если опросили 200, 500 или даже 1000 человек. Нет никакой гарантии что ответят верно про свои доходы. Кроме этого, в большинстве опросов можно отправить несколько откликов. Опросы проводят через гугл формы без указания почты, поэтому, можно писать что угодно, либо кликер + GPT заполнят и отправят форму хоть 100 раз с разными вводными. В общем, можно влиять на общественное мнение, не вставая с дивана. Если опрос начали проводить сегодня, то какое-то время уйдёт на сам опрос, обработку результатов и их представление. А это месяцы, за которые рынок может сильно поменяться.
Далеко не все айтишники любят опросы. Опросы проводят один раз, потом снова надо проводить, и непонятно как найти действительно классных IT специалистов, которые согласятся отвечать на вопросы по зарплатам. В моём окружении топовые специалисты вообще не проходят опросы, они даже не знают кто и где проводит это всё.
Встал вопрос: "Как определить стоимость конкретного специалиста, используя открытые данные?". Можно парсить комментарии в Линкедин, можно играться с официальной статистикой и т п.. Мы для себя решили анализировать данные всех (ВООБЩЕ ВСЕХ) открытых вакансий в русскоязычном пространстве. Зарплаты в вакансиях покажут примерный уровень по любому специалисту (кроме топовых - такие вакансии обычно закрывают по рекомендациям, и в открытом доступе их нет). Здесь можно возразить, что компании завышают или занижают вилки в вакансиях - это на совести компаний. Нормальные работодатели пишут то, что дают на руки - могу судить по компаниям, в которых я работал, а они в топах по ЗП.
Использовать джоб-борды именно для анализа зарплат вообще не представляется возможным. Можете собрать в поиске, например, на hh.ru все IT вакансии, и у вас получится список с 70 000 открытыми позициями. Поэтому такие данные надо визуализировать и добавлять интерактив для анализа по разрезам.
Техническая реализация MVP
Использовать джоб-борды именно для анализа зарплат вообще не представляется возможным. Можете собрать в поиске, например, на hh.ru все IT вакансии, и у вас получится список с 70 000 открытыми позициями. Поэтому такие данные надо визуализировать и добавлять интерактив для анализа по разрезам.
В самом дашборде есть описание как его использовать. Много фильтров и интерактива позволяют взглянуть на данные с разных сторон. В дашборде сейчас собираем последние 7 дней по трём агрегаторам: Getmatch, Habr Career, Geekjob. Писать про все возможности здесь смысла нет - лучше один раз увидеть.
Ссылка на дашборд.
С конца ноября 2024г. до февраля дашборд обновлялся вручную каждые две недели. Он попал в паблики, им стали пользоваться регулярно. Также работа умудрилась попасть в лонглист международной премии по визуализации данных "Information is beautiful Awards 2024", следим за следующими этапа отбора.
Вполне логично, что появилась задача на автоматизацию процесса сбора данных. Тем более, что за 2 недели многое менялось, и надо было собирать данные каждый день. На этом этапе к проекту подключился Никита Иванов. Он делал все ETL процессы, и расскажет о технической стороне.
НИКИТА
Присоединившись к проекту, я сосредоточился на автоматизации ETL-процессов для сбора и анализа вакансий, а также на экономической стороне — сколько стоит поддержание и развитие сервиса VILKY. Начну с технической базы, а затем перейду к затратам.
Для управления парсерами я выбрал Apache Airflow, развернув его через docker-compose на VPS от Timeweb. Этот облачный сервер стоит нам 1750 рублей в месяц — админка Timeweb удобна и ускорила настройку и мониторинг. Дополнительно для API и Airflow у нас есть сервер Back, который обходится в 1300 рублей в месяц. База данных ClickHouse развернута на отдельном сервере за 1750 рублей в месяц, что позволяет разделить нагрузку хранения и вычислений. Итого, на инфраструктуру уходит 4800 рублей в месяц: 1000 (VPS для Airflow) + 1300 (Back) + 1750 (ClickHouse).
Дальше — автоматизация. Я настроил CI/CD-пайплайн через GitHub Actions, что избавило нас от ручного деплоя на серверы и снизило затраты времени. Изначально данные хранились в PostgreSQL, но мы столкнулись с ограничением DBaaS — отсутствием доступа к superuser. Это мешало гибко настраивать взаимодействие баз данных. Мы мигрировали на ClickHouse, установленный нативно, без Docker, что сократило нагрузку на CPU с 20–30% до 5%. Миграция сохранила структуру данных и историю, что важно для анализа трендов.
Для ежедневного обновления дашборда я настроил DAG в Airflow, который выгружает данные через API Google Sheets, автоматически заполняя пропущенные значения курсов валют за выходные. Это не добавляет прямых затрат, так как API Google Sheets используется в рамках бесплатного лимита. Однако для обработки данных мы используем dbt, создав staging-слой для вакансий, навыков и компаний. Это позволило перенести часть расчетов из Tableau в ClickHouse, улучшив производительность дашборда на 20–30%. Хостинг dbt идет на том же сервере Back, так что дополнительных затрат здесь нет.
Важная часть — интеграция YandexGPT для нормализации текстовых полей вакансий. Модель стандартизирует навыки, зарплаты и локации, выдавая данные в JSON. Точность проверяется SQL-тестами, которые разработал Рома. Однако запросы к YandexGPT — это значимая статья расходов. По данным нашего дашборда, с 8 по 15 апреля 2025 года мы тратим на запросы к YandexGPT от 20 до 100 единиц (предположительно, рублей) в день. В среднем, это около 60 рублей в день, или 1800 рублей в месяц (60 × 30). Максимальная трата была 11 апреля — 100 рублей за день. Эти расходы связаны с объемом данных: чем больше вакансий обрабатываем, тем выше затраты.
Также я внедрил ежедневную публикацию дайджестов в Telegram-канале @vilky_it через Telegram API с использованием шаблонов визуализаций в Tableau. Telegram API бесплатен, а лицензия Tableau Public, которую мы используем, тоже не требует затрат, так как дашборд публичный.
Итого, ежемесячные расходы на проект:
- Инфраструктура (облачные серверы): 4800 рублей
Запросы к YandexGPT: ~1800 рублей
Общая сумма: около 6000 рублей в месяц. Эти затраты позволяют нам поддерживать автоматизированную систему сбора, обработки и визуализации данных, делая VILKY полезным инструментом для анализа зарплат в IT.
Итоговая схема автоматизации приведена ниже:
САША
В процессе автоматизации было написано 2 скрейпера для сбора данных с Habrcareer и Geekjob - довольно популярных агрегаторов IT вакансий.
Итого, получили автоматизированную систему сбора данных, их обработки и визуализации. В дашборде сейчас показываем последние 7 дней по активным вакансиям на трёх платформах, можно смотреть тренды, как открываются и закрываются вакансии.
Много технических подробностей пропущу что и как реализовано - это пишем в свои телеграм каналы. Готовим большую техническую статью - будет на Хабре.
Самое интересное, что сейчас есть - это работа LLM моделей для нормализации данных. Если вкратце, то вакансии с разных платформ заполняются неодинаково - где-то есть навыки и инструменты, где-то - нет; кто-то пишет одну локацию, кто-то - несколько, кто-то пишет middle в вакансии с запросами на лида и/или синьора. Таких проблем много. Здесь как раз подключили несколько LLM. Сейчас они нормализуют грейды, навыки и зарплаты. Модели могут в описаниях вакансий находить навыки, локации и даже плюшки. Года 3 назад такое сложно было представить, и нормализация данных была трудоёмкой. Сейчас можем задавать вопросы моделям, и они по этим вопросам вытаскивают всё что надо. Но работы в этом направлении ещё очень много, поэтому, не всё работает на проде.
На этом этапе в проект пришёл Рома. Он занялся контролем качества данных.
РОМА
Когда я присоединился к проекту, Никита уже настроил DWH (хранилище данных), и информация о зарплатах постепенно накапливалась. Моей задачей стала проверка данных, особенно тех, что прошли обработку YandexGPT - было интересно посмотреть, насколько хорошо работает нормализация.
Для этого я написал SQL-скрипты с регулярными выражениями, чтобы привести зарплатные вилки к единому формату и сравнить их с теми, что нам отдала нейросеть
Зарплата в вакансиях может быть указана по-разному:
- "от 100 000 до 150 000",
- "100k–150k",
- "от 100000",
- "до 150000",
- и другие варианты
В целом, YandexGPT справляется хорошо, но иногда в данных встречаются странности. Например, в вакансии указано "до 150 000 рублей", модель может добавить произвольную минимальную сумму, например, "от 62 537 рублей".
Почему именно 62 537? Пока остаётся загадкой. Такие строки мы помечаем как ошибочные и отправляем на повторный разбор
Неочевидные кейсы: валюта и манипуляции с вакансиями
Кроме того, встречаются вакансии с подозрительно низкими зарплатами — например, 1000 рублей при местоположении Минск. Скорее всего, здесь подразумеваются белорусские рубли (BYN), но на самом сайте указано просто рубли.
Пока разбирался с данными, заметил интересные вещи:
- Есть несколько работодателей, которые снижали вилку спустя несколько недель после публикации
- Есть вакансии, которые закрываются на 2–3 дня, а затем открываются снова — вероятно, чтобы поднять их в поиске
САША
Про проекты и продукты
Свой проект мы назвали "VILKY", а в лого просто нарисовали вилку. Вилка - это то, что просит любой адекватный соискатель. У нас есть приличный RoadMap (ведём в Miro). Это пет-проект, но подходим к нему как к полноценному проекту.
Вот так выглядит кусок роадмапа:
Каждую неделю встречаемся по субботам, планируем, выбираем задачи на неделю и делаем их в свободное от основной работы время, в основном, по выходным.
Дашборд VILKY
У нас сейчас есть продукт "VILKY дашборд". Он выполняет свою функцию анализа зарплатных вилок, но продолжает дорабатываться по фидбекам. Основная метрика, за которой следим, и которую вывели на сам дашборд - число просмотров дашборда. Есть ещё ряд метрик, которые планируем мониторить.
Дашборд публичный, обновляется ежедневно. В нем есть основные метрики и диаграммы, визуализированы зарплатные вилки, можно переходить на страницу конкретной вакансии. Много фильтров и параметров - можно выбирать любые разрезы и смотреть что происходит на разных уровнях детализации данных. Публичного дашборда такого уровня с ежедневным обновлением данных я не видел, поэтому и сделал его. Делал под себя как под специалиста, которому интересно анализировать зарплатные вилки.
Несколько скриншотов дашборда приведены ниже.
Главная страница дашборда с основными визуализациями
Тренды
Таблица с вакансиями и возможностью фильтрации и сортировок.
Но лучше всё смотреть на самом дашборде.
@VILKY_IT - телеграм канал с дайджестами и инсайтами
Данных в базе уже много - сразу всё на дашборде не увидишь, поэтому, сделали ещё TG канал 'VILKY. Зарплаты в IT'. Этот проект из приватного перерос в публичный продукт.
В канал ежедневно отправляются дайджесты - визуальные отчеты по IT вакансиям, специализациям. Здесь старались - вся визуализация выполнена в Tableau, данные автоматически обновляются каждое утро, потом собирается несколько слайдов-диаграмм. Сначала сделали детализированные сложные автоотчёты, но поняли, что каждый день они не будут нужны широкому кругу лиц, и пока отказались. Сделали несколько интересных рубрик с самыми-самыми вакансиями. Также еженедельно делаем какое-то исследование поданным и пишем в рубрике 'инсайды'. Каналу 3 недели, там сейчас 130+ подписчиков. На данных + LLM можно сделать какой угодно контент, пока исследуем что заходит а что - нет. Их метрик продукта - следим за числом подписчиков и их вовлечённостью.
Скриншоты из канала ниже.
Ежедневный дайджест
Недельный дайджест по направлению.
UI/UX дизайн.
Пример рубрики “Миска Риса” - самые низкие зарплаты.
У нас есть большая база и возможность использовать LLM, поэтому, рубрики могут быть разными - здесь всё ограничивается фантазией. Можем вытаскивать компании с лучшими плюшками, все вакансии с “дружным коллективом и печеньками” и т.д..Запустили ежедневную рубрику “Инсайды”, рассказываем неочевидные вещи, которые можно вытащить из данных. У нас есть исторические данные - видим много трендов, в том, числе, и уменьшение вакансий в IT по определённым специализациям. Это можно и нужно исследовать. Продукт открыт для фидбека - прислушиваемся к подписчиками, лучшие идеи реализуем.
Что дальше?
Продолжаем подключать новые источники данных (в работе Finder.work, hh.ru, телеграм каналы) и усиливать AI как количественно так и качественн��. В плане есть прогнозы по зарплатам. Дашборд находится сейчас на публичном сервере, хотим написать на js кастомный даш, более функциональный и шустрый. Он то и должен стать универсальным инструментом, который ответит на вопрос: "Сколько я стою на рынке IT?".
Наши TG каналы, если интересно про данные, их анализ и визуализацию. @data_bar, @joni_in_web, @kotolitic