Вы тратите 30 минут каждый день на ручной поиск на cv.lv, ss.com, cvmarket.lv, NVA и других сайтах. Хватит. Я написал Telegram-ботаvakances_bot.py — который автоматически проверяет все 6 основных латвийских сайтов вакансий, сопоставляет новые вакансии в Риге с вашим резюме и каждое утро присылает в Telegram только нужные вакансии. В этой статье я разберу код, как он работает и почему бот для поиска работы — это то же самое, что делает рекрутер, но за €60, а не за 20% от зарплаты.

Это разбор реальной работающей системы, без маркетинга. Python-бот собирает вакансии в Латвии по расписанию, хранит в PostgreSQL и даёт простой Telegram-интерфейс. Одно нажатие — «откликнулся», «в избранное» или «собеседование». Ищете работу в Риге прямо сейчас? Смотрите /vakances. Строите для компании? Код внутри.

⚡ Вы получаете:

  • Время: С 30 минут в день на 4 минуты — автоматически, каждое утро
  • Инструмент: Telegram-бот (vakances_bot.py), который собирает вакансии с 6 сайтов Латвии
  • Setup: Загрузите резюме, 60 секунд настройки, первые результаты за 5 минут
  • Стоимость: €5–15/месяц хостинг или €60 индивидуальная версия для компании
  • Сайты: cv.lv, ss.com, cvmarket.lv, liepajniekiem.lv, портал NVA, prakse.lv
Работа в Риге - Telegram-бот для поиска работы показывает вакансии с 6 латвийских сайтов
Бот vakances в Telegram: один чат, который следит за всеми сайтами вакансий Латвии за вас

Прежде чем перейти к коду, одно честное замечание. Этот бот — реальный проект, и цифры в статье (количество вакансий по категориям, зарплаты, распределение по городам) меняются каждый день: компании публикуют и закрывают объявления. Примерные цифры нужны здесь, чтобы показать общую картину латвийского рынка труда.

Что вы узнаете из этой статьи:

  • Почему ручной поиск работы в Риге сам по себе превращается в работу на полставки
  • Как vakances_bot.py собирает вакансии с 6 латвийских сайтов и держит базу в чистоте
  • Как работает оценка соответствия резюме и вакансии — прозрачное совпадение ключевых слов, без чёрного ящика
  • Все команды Telegram: от /upload_cv до /vakances и /export
  • Что обзор рынка /vakances говорит о профессиях в Латвии
  • Полный технологический стек, чтобы собрать свою версию с нуля

Почему стоит выбрать Telegram-бота для поиска работы?

  • Один чат покрывает cv.lv, ss.com, cvmarket, NVA и prakse.lv — без прыжков по вкладкам
  • Каждая вакансия оценивается по вашему резюме: вы видите совпадения, а не шум
  • 6 списков статусов вместо таблиц: избранное, к отправке, отклики, собеседования…
  • Фильтры по городу, зарплате и удалённой работе под вашу жизнь
  • Работает на телефоне, в кармане, каждое утро в 9:00

Быстрая навигация:

Проблема: поиск работы в Риге превращается в работу на полставки

Давайте честно посмотрим, как выглядит поиск работы в Риге в 2026 году. В понедельник утром вы открываете ss.com, сразу переходите в свою категорию, пролистываете свежие объявления — возможно, одно цепляет взгляд, и вы откликаетесь. Затем открываете другой портал, просматриваете его и отправляете ещё пару резюме. На этом день можно закончить. Во вторник открываете третий сайт, потом четвёртый, а может, возвращаетесь к уже просмотренным. Через пару часов вы отправили ещё 3–10 резюме и пролистали больше сотни вакансий — и вы устали.

В среду приходят три отказа и три «мы вам перезвоним». Вы снова открываете порталы — и новые вакансии выглядят старыми, а старые — новыми. Вы точно знаете, что тратите время на страницы, которые уже видели. И всё же время от времени попадается предложение, которое вы каким-то образом пропустили. Весь этот хаос живёт у вас в голове.

А теперь неприятная арифметика. На шести основных порталах — cv.lv, ss.com, cvmarket.lv, государственном портале NVA, liepajniekiem.lv и prakse.lv — прямо сейчас открыто более 15 000 вакансий (15 548 на 18 августа 2026 года). Тщательный ручной обход всех шести занимает от 30 до 45 минут в день. За месяц это 10–15 часов чистой фильтрации: чтение, сравнение, попытки вспомнить, каким компаниям вы уже писали, и повторное чтение одной и той же вакансии, переопубликованной на другом сайте. Это уже не поиск работы. Это канцелярщина.

И самое обидное: лучшие вакансии — те, где зарплата действительно соответствует вашему опыту, — чаще всего вы и упускаете, потому что их опубликовали во вторник в 14:00, пока вы были на работе, а к вечеру среды там уже 40 откликов.

Альтернатива, которую я хочу показать: Telegram-бот для поиска работы, который делает всю проверку за вас. Он просыпается раньше вас, обходит все шесть сайтов, забирает каждую новую вакансию, оценивает её относительно вашего резюме и оставляет в чате аккуратную сводку. Вы просматриваете совпадения и пропускаете неинтересное — навсегда, чтобы больше никогда его не видеть. Всё интересное, отправленное и отклонённое автоматически отслеживается среди этих 15 000+ вакансий. Поиск, фильтры, режим «только категория», списки исключений — всё это в паре нажатий, а не в нескольких часах переключения вкладок.

Что такое vakances_bot.py? Знакомьтесь: Telegram-бот для поиска работы

vakances_bot.py — это Python-бот для Telegram, отдельный процесс от административного бота, собирающего данные, но с той же базой PostgreSQL. Проще говоря, это сторона соискателя системы по сбору вакансий. Сбор данных (шесть скрейперов под каждый сайт плюс пайплайн) наполняет базу вакансиями, а бот vakances превращает эти сырые данные в персонального ассистента по поиску работы прямо в Telegram.

Приветственное сообщение /start Telegram-бота с командами для поиска работы в Риге
Сообщение /start: загрузите резюме, просмотрите совпадения, откройте /vakances, ищите через find

Вот что делает бот, одним дыханием:

  • Собирает 6 сайтов по расписаниюcv.lv, ss.com, cvmarket.lv, liepajniekiem.lv, cvvp.nva.gov.lv (государственный портал NVA) и prakse.lv (стажировки).
  • Читает ваше резюмеPDF или DOCX. Извлекает текст, определяет категорию профессии и ключевые навыки.
  • Сопоставляет каждую новую вакансию с вашим резюмепрозрачная оценка от 0 до 100 на основе совпадения ключевых слов и категории. Вы видите причину, а не загадочный процент.
  • Ведёт ваш поискизбранное, к отправке, отклики, собеседования, отказы: восемь списков, одно нажатие на каждый.
  • Показывает рынок/vakances выдаёт все активные вакансии, сгруппированные по профессиям с количеством, — сразу видно, где реально есть спрос.
  • Фильтрует как рекрутергород, минимальная зарплата, только удалённая работа, исключённые ключевые слова, минимальный балл совпадения.

Если вы работодатель или стартап — та же архитектура предлагается как услуга разработка индивидуального Telegram-бота от €60: сбор данных, сопоставление, уведомления — всё, что нужно вашему процессу.

Как это работает: от загрузки резюме до ежедневного списка совпадений

Шаг 1: загрузите резюме один раз

Отправьте /upload_cv и прикрепите резюме в формате PDF или DOCX. Бот скачает файл, извлечёт текст с помощью pdfplumber (PDF) или python-docx (Word) и сохранит ваш профиль в базе. Если PDF окажется сканом без текстового слоя, бот прямо скажет об этом и предложит текстовый экспорт — без тихих ошибок.

Шаг 2: автоматическая разметка

Как только текст извлечён, бот размечает резюме двумя вещами: категорией (ваша профессия, например «Programmēšana» или «Finanses un grāmatvedība») и списком ключевых слов (ваши навыки, например Python, Django, PostgreSQL). Та же задача каждые 30 минут в фоне обрабатывает новые вакансии, так что каждая запись в базе тоже получает категорию и ключевые слова. Для сопоставления нужно, чтобы были размечены обе стороны. А если теги кажутся неточными, их можно поправить за пару команд: /cv_list → Edit.

Шаг 3: мгновенное сопоставление + ежедневный повтор

В момент разметки бот оценивает резюме по всем ещё не просмотренным вакансиям и сообщает, сколько совпадений нашлось. Затем каждое утро в 09:00 по рижскому времени планировщик повторно прогоняет сопоставление по всему новому, а в 09:30 отправляет подборку всем, у кого включены уведомления:

📬 Ежедневная подборка:

«Ежедневная подборка: у вас 7 новых подходящих вакансий! Используйте /review, чтобы просмотреть их.»

Шаг 4: пайплайн следит за честностью базы

Сбор данных — это не просто «скачать страницу». Каждый запуск сравнивает то, что сайт показывает сейчас, с тем, что уже есть в базе. Исчезнувшие с сайта вакансии помечаются удалёнными; вернувшиеся — восстанавливаются. Каждый запуск записывает результаты по каждому сайту в таблицу scrape_results, которую и показывает /status — так сразу видно, успевает ли бот за каждым из шести порталов.

6 сайтов вакансий, которые проверяет бот — и почему важен каждый

Рынок труда Латвии размазан по нескольким порталам, и у каждого свой характер. Именно поэтому скрейпер по-настоящему полезен: вы получаете всё в одном месте, без дубликатов — база ключует вакансии по уникальной ссылке.

Сайты вакансий, которые собирает vakances_bot.py — 15 548 активных вакансий (снимок от 18 августа 2026)
Сайт Что это Активных вакансий Доля
ss.com Крупная доска объявлений с большим разделом «Darbi» 6,412 41%
cvvp.nva.gov.lv Публичный портал вакансий Государственного агентства занятости (NVA) 4,442 29%
cv.lv Крупнейший латвийский портал вакансий — здесь публикуется почти каждый работодатель 2,228 14%
cvmarket.lv Небольшой портал, ориентированный на конкретные отрасли 2,017 13%
liepajniekiem.lv Региональный сайт, самый сильный в Курземе и Лиепае 274 2%
prakse.lv Стажировки и студенческие позиции 175 1%

Пара наблюдений из реального экспорта. На один ss.com приходится 41% рынка, и там полно объявлений, которые никогда не попадают на cv.lv, — поэтому скрейпить только «главный» портал значит терять почти половину вакансий. Государственный портал NVA (cvvp.nva.gov.lv) — второй по величине источник, 29%: он читается через собственный JSON API сайта, и именно там живут объявления зарегистрированных и государственных работодателей. cv.lv и cvmarket.lv вместе добавляют ещё 27%. На региональные и студенческие сайты приходится лишь около 3% — но для человека в Лиепае или для студента эти 3% и есть весь смысл.

Скрейперы намеренно вежливые: случайные задержки 2–5 секунд между запросами, настоящий User-Agent браузера и жёсткий лимит страниц. NVA и prakse.lv собираются через их собственные публичные JSON-эндпоинты — те же запросы, что делает их сайт, — это быстрее и надёжнее, чем разбирать HTML.

Полный справочник команд: ваш пульт управления поиском работы

Вот полная карта команд бота vakances. Ежедневно все они не нужны — большинство живёт в /review, /vakances и find, — но знание полного набора превращает бота из игрушки в систему.

Все команды vakances_bot.py
Команда Что делает
/start Приветственное меню с главным сценарием: резюме, просмотр, vakances, поиск, недавние
/upload_cv Загрузить резюме PDF/DOCX — оно сразу размечается и сопоставляется
/cv_list Список ваших резюме: активировать, деактивировать, редактировать теги, скачать, удалить
/review Выбрать категорию и просматривать совпадения по одной вакансии
find <запрос> Поиск вакансий по названию на всех сайтах (например, find Python, find Rimi)
/recent Последние 50 вакансий, опубликованных за последние 24 часа
/vakances Все активные вакансии, сгруппированные по профессиям с количеством, — обзор рынка
/status Статус сбора по сайтам: количество по порталам, итоги, время следующего сопоставления
/stats Ваш личный процесс: избранное, к отправке, отклики, собеседования, отказы
/saved Все сохранённые вакансии из всех списков
/pending Ещё не просмотренные совпадения, сначала лучшие по баллу
/wishlist, /to_send, /applied, /to_interview, /rejected, /skipped Доступ к каждому списку статусов в одно нажатие
/location Задать один или несколько городов: /location Rīga, Liepāja, Jelgava
/locations Топ-40 локаций с количеством вакансий — где работа есть на самом деле
/settings Сортировка, уведомления, минимальный балл, показ просмотренных, только удалёнка, зарплата
/export Скачать отслеживаемые вакансии в Excel, сгруппированные по резюме
/xls Скачать всю базу вакансий и компаний в Excel
/log, /logs Скачать сегодняшние или последние логи бота — удобно для отладки
/help Полная инструкция по командам, всегда в одном сообщении

И одна скрытая возможность: любое сообщение, начинающееся с show N (например, show 25), открывает вакансии категории под этим номером из списка /vakances. Бот подсказывает это после каждого обзора рынка — это самый быстрый путь от вопроса «сколько вакансий?» к «покажите сами вакансии».

Вакансии в Латвии по профессиям - обзор рынка в Telegram-боте с количеством по категориям
Вывод /vakances: все активные вакансии Латвии, сгруппированные по профессиям с количеством

Как работает сопоставление: прозрачная оценка без чёрного ящика

Поговорим о сердце бота — и заодно развеем один миф. Многие «интеллектуальные подборы вакансий» продают загадочный алгоритм. Этот бот устроен наоборот: оценка — это короткая читаемая функция на Python, которую можно скопировать в notebook и проверить вручную.

Оценка вакансии состоит из двух частей:

  • Совпадение ключевых слов (до 80 баллов)сколько ключевых слов вакансии встречается в ключевых словах вашего резюме. Используется пересечение в стиле Jaccard: пересечение ÷ ключевые слова вакансии.
  • Бонус за категорию (20 баллов)если категория вашего резюме точно совпадает с категорией вакансии (без учёта регистра), вы получаете все 20.
  • Запасной поиск по названиюесли по ключевым словам ничего не нашлось, бот всё равно цепляет вакансии, в названии которых есть ваши ключевые слова (например, «Python» в «Python Developer»).

Разберём три реальных примера, чтобы оценка перестала быть абстракцией:

Как считаются баллы совпадения (резюме: Python Developer, ключевые слова: python, django, postgresql)
Вакансия Ключевые слова вакансии Совпадение Категория? Балл
Backend Developer (Python) python, django, postgresql, git 3/4 → 75 ✅ +20 95
Full-stack JS Developer javascript, react, node.js 0/3 → 0 ❌ +0 0 (игнорируется)
Python Data Analyst python, sql, excel 1/3 → 33 ❌ +0 33
Django Developer (поиск по названию) ещё не размечено название содержит «django» 30 (запасной)

Почему оценка именно такая, а не замысловатее? Три причины. Она быстрая — сопоставление сотен вакансий занимает секунды на чистом Python, без внешних вызовов. Она объяснимая — у каждого балла видимая причина, которую можно прочитать и проверить. И она управляемая — свой минимальный порог задаётся в /settings (30, 50, 70 или 90), так что режим «только сильные совпадения» включается одним нажатием.

/vakances: рынок труда Латвии одним взглядом (по профессиям)

Теперь самое интересное. /vakances превращает всю базу в отчёт о рынке: каждая активная вакансия в Латвии, сгруппированная по профессиям и отсортированная по спросу. Бот ведёт словарь из 41 категории профессий — от Pārdošana (продажи) и Ražošana (производство) до Programmēšana (программирование), Medicīna, Loģistika и Noliktavas (склады) — и каждая вакансия получает один или несколько таких тегов.

Вот как выглядит типичный вывод — реальные цифры из экспорта от 18 августа 2026 года, 15 548 вакансий. SQL под таблицей позволит получить актуальные данные в любой день:

Вакансии в Латвии по профессиям — 15 548 активных вакансий (18 августа 2026)
ID Категория (профессия) Вакансий Доля рынка
04 Vadība un menedžments (управление) 2,430 15.6%
01 Pārdošana (продажи) 2,168 13.9%
41 Другое (без категории / смешанное) 2,023 13.0%
05 Būvniecība (строительство) 1,723 11.1%
02 Ražošana (производство) 1,651 10.6%
03 Auto un serviss (авто и сервис) 1,258 8.1%
37 Speciālisti (специалисты) 1,003 6.5%
11 Virtuve un ēdināšana (кухня и общепит) 903 5.8%
07 Māksla un dizains (искусство и дизайн) 815 5.2%
08 Noliktavas (склады) 778 5.0%
22 Izglītība (образование) 718 4.6%
26 IT atbalsts un tīkli (IT-поддержка и сети) 689 4.4%
+ ещё 29 (Santehnika un remonts 490, Medmāsas un farmācija 117, Programmēšana 157, Mediji 62, Juridiskie 74, Tūrisms un valodas 31…) остальное остальное

Примечание: одна вакансия может нести несколько категорий (например, «проектный менеджер в строительстве»), поэтому проценты в сумме дают больше 100% — они показывают, как часто профессия встречается во всей базе, а не строгое деление рынка.

Что это даёт на практике? Две вещи. Первая — где много вакансий: управление (2 430), продажи (2 168), строительство (1 723) и производство (1 651) доминируют на рынке. Если вы работаете в одной из этих сфер, предложений сейчас много. Вторая — где конкуренция ниже: ниша вроде Programmēšana (157 размеченных вакансий) или Medmāsas un farmācija (117) тонкая по сравнению с 2 430-сильной стопкой менеджмента — иногда самый дружелюбный рынок тот, где объявлений меньше, а не больше. А дальше, когда в распарсенной базе накопится достаточно данных, может появиться и /trends: какие профессии растут, где есть спрос, а какие потихоньку умирают.

Введите show 25 в чате, чтобы сразу открыть категорию программирования — бот превращает любой ID категории из /vakances в обозреваемый список вакансий.

/locations: где находятся вакансии (и почему «Riga» = «Rīga»)

/vakances показывает, какие профессии нужны рынку; /locationsгде они находятся. Бот группирует каждую активную вакансию по локации и ранжирует места по количеству вакансий — 589 уникальных локаций имели открытые вакансии в августовском снимке 2026 года. По умолчанию показывается топ-40; /locations 100 выводит полную карту рынка.

Команда /locations Telegram-бота - топ латвийских городов с количеством вакансий
/locations: каждая локация по числу открытых вакансий, уличная мешанина вычищена
Топ латвийских локаций для работы — 15 548 вакансий (18 августа 2026)
# Локация Вакансий Доля
1 Rīga 4,382 28.2%
2 Rīga, centrs 932 6.0%
3 Liepāja 498 3.2%
4 Rīga / Hibrīddarbs 481 3.1%
5 Jelgava 286 1.8%
6 Rīgas rajons, Mārupes pag. 245 1.6%
7 Rīga, Pļavnieki 224 1.4%
8 Mārupe 214 1.4%
9 Daugavpils 203 1.3%
10 Jelgava un raj., Jelgava 182 1.2%
11 Rīga, Ziepniekkalns 177 1.1%
12 Rīga, Purvciems 163 1.0%
+ ещё 577 локаций (Rēzekne 105, Sigulda 99, Bauska 103, Ventspils 87, Olaine 83…) остальное остальное

География жёстко сконцентрирована: сложите все записи про Ригу из топ-40 — сам город, центр, каждый район, гибридные объявления — и получится 8 662 из 15 548 вакансий, почти половина всего рынка в одном городе, ещё до того как присоединится рижское кольцо (Mārupes pag. 245, Ķekavas pag. 95, Ādažu nov. 94). Второй город, Лиепая, насчитывает 498 (591 вместе с районом), дальше Елгава — 286, Даугавпилс — 203. Практический вывод для тех, кто ищет работу в Риге: фильтр по городу — не приятный бонус, а разница между 28.2% рынка и 100% шума.

Удалённая, гибридная и частичная занятость: честные цифры

В Латвии шутят, что теперь любая работа гибридная, — данные говорят обратное. В августовском снимке 2026 года только 587 из 15 548 объявлений (3.8%) упоминают удалёнку в любой форме, и 581 из них приходит с одного cv.lv. Частичная занятость встречается ещё реже. Вот полная картина из экспорта:

Удалённая и частичная занятость в Латвии — 15 548 вакансий (18 августа 2026)
Тип Латышский термин Вакансий Доля
Гибрид Hibrīddarbs 547 3.5%
Полностью удалённая Attālināti / Darbs no mājām 40 0.3%
Частичная занятость Nepilna slodze / Pusslodze / Part-time 51 0.3%

Полностью удалённая работа — редкая птица: всего 40 объявлений (35 «Attālināti» плюс 5 «Darbs no mājām») на всю страну. Если удалёнка для вас обязательное условие, шорт-лист будет коротким — лучше узнать это на первой неделе, чем после месяца скроллинга. Частичная занятость (nepilna slodze, pusslodze) сосредоточена именно там, где и ожидаешь: розничные сети (Douglas, Jysk, New Yorker, Maxima), Lido и прилавки рижских магазинов. Из 51 вакансии с частичной занятостью 23 находятся на ss.com, 18 на cvmarket.lv и только 9 на cv.lv — ещё один аргумент собирать не только «крупные» порталы. Переключатель удалённой работы в /settings учитывает все синонимы — Hibrīddarbs, Attālināti, Darbs no mājām, remote, hybrid — поэтому фильтр действительно находит всё.

«Riga» и «Rīga» — одно и то же место

Сырые данные шести скрейперов хаотичны вполне по-человечески. ss.com и cv.lv пишут адреса («Meistaru iela 10, Rīga»), некоторые сайты добавляют страну («Rīga, Latvija» или «Rīga, Latvia»), а вы как пользователь в половине случаев наберёте Riga на английской клавиатуре без макрона. Слой локаций в боте обрабатывает всё это:

  • Уличные адреса сливаются в свой город«Meistaru iela 10, Rīga», «Hipokrāta iela 2, Rīga» и «Bruņinieku iela 5 k-2, Rīga» учитываются как Rīga, а не как три фантомные локации.
  • Суффиксы стран отбрасываются«Rīga, Latvija» и «Rīga, Latvia» — это одна и та же Rīga.
  • Диакритика не важнаRiga, Rīga, Liepaja и Liepāja считаются одинаковыми везде — и в группировке /locations, и в ваших фильтрах /location.

До этой нормализации в базе было 2 451 строка локаций, не совпадавших ни с чем из канонического списка. После неё 589 канонических локаций покрывают весь рынок, и снаружи остаются лишь несколько деревенских адресов-чудачеств. Тот же механизм работает и в фильтрах: задав /location Riga, вы молча получаете все варианты написания Rīga — около 9 500 вакансий в августовском снимке.

Задайте свои города один раз: /location Riga, Liepaja, Jelgava — макроны не нужны — и каждый список, подборка и просмотр в боте будут их учитывать.

Процесс просмотра: 8 кнопок, 6 списков, ни одной таблицы

Ежедневный цикл — это /review. Бот группирует непросмотренные совпадения по категориям, вы выбираете одну, и дальше вакансии идут по одной карточке. На каждой карточке — название должности, компания, зарплата, локация, балл совпадения с расшифровкой и шесть кнопок действий:

🔘 Сетка из 6 кнопок действий:

  • Избранное — «оставлю, вернусь к ней»
  • Пропустить — «не моё» (потом можно найти в /skipped)
  • 📤 К отправке — «резюме готово, отправлю сегодня»
  • Откликнулся — «отправил»
  • 🎤 Собеседование — «они хотят встретиться»
  • Отказ — «они отказали»

Плюс строка prev/next для листания и авто-переход: нажимаете статус — следующая карточка загружается мгновенно. Одна сессия, сорок вакансий, шесть минут.

Карточка вакансии в Telegram-боте - с баллом совпадения и 8 кнопками действий
Карточка просмотра: балл с причиной, зарплата, локация и отслеживание статуса в одно нажатие

Каждый статус превращается в список, который можно открыть в любой момент: /wishlist, /to_send, /applied, /to_interview, /rejected, /skipped. А поскольку каждое действие пишется в таблицу user_actions, на вечный вопрос любого соискателя — «где я в этом процессе?» — отвечает /stats одним сообщением.

Настройки: город, зарплата, удалёнка, ключевые слова — настройте бота под себя

Бот для поиска работы, которому всё равно, где вы живёте и сколько зарабатываете, — это витрина, а не фильтр. Поэтому у vakances есть полноценная система настроек, доступная через /settings и /location:

Настройки бота vakances
Настройка Что делает Пример
📍 Предпочтительные локации Показывать только вакансии в выбранных городах (можно несколько) /location Rīga, Liepāja, Jelgava
💰 Минимальная зарплата Скрывать всё ниже вашей суммы в евро 1500
🏠 Только удалёнка Только объявления, где упоминаются Hibrīddarbs, Attālināti, Darbs no mājām, remote или hybrid Вкл / Выкл
🎯 Минимальный балл совпадения Порог для совпадений: 30, 50, 70 или 90 70 = только сильные совпадения
🔎 Слова для поиска Ключевые слова, которые вам важны (используются в find/поиске) Python, Django, Backend
🚫 Исключённые слова Никогда не показывать это — например, Junior, Internship Junior, Internship
👁 Показывать просмотренные Скрывать уже просмотренные вакансии, чтобы списки оставались свежими Скрыть
📂 Сортировка по умолчанию Сначала новые или сначала лучшие совпадения Лучшие совпадения
🔔 Уведомления Ежедневная подборка новых совпадений в 09:30 Вкл

Обратите внимание на приём с исключёнными словами — это самая недооценённая функция. Если вы разработчик уровня middle, добавление Junior, Internship, Prakse в исключения одним действием убирает самый раздражающий шум и из сопоставления, и из поиска.

Настройки Telegram-бота - фильтры по локации, зарплате, удалённой работе и баллу совпадения
/settings: каждый фильтр, который нужен соискателю, настраивается за секунды

Технологический стек (для технарей): как устроен vakances_bot.py

Если вы разработчик и думаете «хочу такое для своей компании» или просто «хочу собрать своё» — вот что внутри. Всё перечисленное ниже — открытый исходный код и бесплатно.

Технологический стек бота vakances
Слой Технология Почему
Язык Python 3 Экосистема для скрейпинга и Telegram почти идеальна
Интерфейс Telegram python-telegram-bot Чистый async API для команд, inline-клавиатур и колбэков
Планировщик APScheduler (AsyncIOScheduler) Разметка каждые 30 минут, сопоставление в 09:00, подборка в 09:30, часовой пояс Риги
База данных PostgreSQL + psycopg2 Одна общая база для админ-бота и бота vakances
Сбор данных requests + BeautifulSoup Разбор HTML с вежливыми задержками 2–5 секунд; JSON API для NVA и prakse.lv
Разбор резюме pdfplumber + python-docx Извлечение текста из PDF и DOCX
Экспорт openpyxl XLSX-экспорт отслеживаемых вакансий и всей базы
Часовой пояс pytz Europe/Riga Все расписания и метки времени живут в рижском времени

Чтобы бот работал 24/7, я запускаю его как сервис — так он переживает перезагрузки и сбои:

/etc/systemd/system/vakances-bot.service
[Unit]
Description=Vakances Telegram Job Bot
After=network.target postgresql.service

[Service]
WorkingDirectory=/root/bot-folder
ExecStart=/root/bot-folder/venv/bin/python vakances_bot.py
Restart=always

[Install]
WantedBy=multi-user.target

Содержание действительно недорогое: VPS за €5–15 в месяц (серверную часть смотрите в моём руководстве по настройке nginx) тянет всю систему, а PostgreSQL бесплатен. Если не хотите собирать всё сами — именно эту архитектуру я поставляю как услугу разработки бота-скрейпера — от €60.

Честные ограничения: чего бот не делает

У любого хорошего инструмента должен быть честный раздел об ограничениях. Вот чего бот vakances не делает — и это стоит знать до того, как доверить ему поиск работы.

  • Он не откликается за васБот отслеживает отклики, а отправляете их вы. Большинство латвийских работодателей всё равно ждут живого сообщения — слепая автоподача вредит чаще, чем помогает.
  • Скрейпинг — серая зонаУсловия использования порталов технически запрещают автоматический сбор. На практике вежливый сбор с низкой частотой терпят, потому что он приводит трафик. Держите задержки разумными и никогда не долбите сайт.
  • Сайты меняют HTMLКогда портал меняет дизайн, скрейпер ломается. Пайплайн чётко сообщает об этом, а починка парсера обычно занимает 15–30 минут.
  • Сопоставление по ключевым словам, а не чтение мыслейВакансия, описывающая вашу роль совсем другими словами, может получить низкий балл. Поэтому расшифровка видна, пороги настраиваются, а поиск (find) существует как страховка.
  • Вакансии исчезаютКомпании закрывают объявления; бот помечает их удалёнными и убирает из списков. Если приглашение на собеседование пропало из истории — это уборка делает свою работу.

Бот против ручного поиска и рекрутеров: честное сравнение

А правда ли бот лучше альтернатив? Поставим их рядом, с реальными цифрами латвийского рынка.

Способы найти работу в Риге: сравнение
Метод Время в день Охват Отслеживание Стоимость
Ручная проверка сайтов 30–45 мин Только сайты, которые вы помните Блокнот / память Бесплатно (ваше время)
Email-рассылки сайтов ~10 мин (чтение шума) Один сайт на подписку Нет Бесплатно
LinkedIn / нетворкинг 20–30 мин Компании, которые там публикуются Вручную Бесплатно / Premium
Рекрутер ~5 мин Только список его клиентов Делает он 10–20% от первой зарплаты
Telegram-бот для поиска работы 2–4 мин 6 сайтов без дубликатов 6 автоматических списков €5–15/мес за хостинг (или €300 за разработку)

Математика проста: бот не заменяет рекрутеров и нетворкинг — он заменяет скучные 30 минут. Нетворкинг остаётся важен (человеческая часть найма никуда не денется), но никто ещё не получал собеседование за то, что по пять раз в день перечитывал одни и те же результаты поиска на cv.lv.

Часто задаваемые вопросы о поиске работы в Латвии

За сколько времени найти работу в Риге без ручного поиска?
Совместите крупные порталы (cv.lv, ss.com, cvmarket.lv) с государственным порталом NVA и автоматической проверкой — Telegram-бот делает всё это в одном чате. Загрузите резюме один раз, задайте город и зарплату в /settings и просматривайте ежедневные совпадения. Скорость дают охват и ранний отклик — именно то, что даёт автоматизация.
Что такое /vakances?
Команда обзора рынка: все активные вакансии в базе, сгруппированные по профессиям с количеством и отсортированные по спросу. Введите show N (номер из списка), чтобы открыть вакансии этой категории. Самый быстрый способ увидеть, где сейчас реально есть работа в Латвии.
Может ли бот откликаться за меня?
Нет. Он показывает вакансию с прямой ссылкой и отслеживает ваш статус (к отправке → откликнулся → собеседование → отказ), но резюме отправляете вы. Системы автоподачи обычно дают обратный эффект у работодателей — личное сообщение по-прежнему выигрывает.
Насколько точен балл совпадения?
Оценка — это совпадение ключевых слов (до 80 баллов) плюс бонус за категорию (20 баллов), с запасным поиском по названию. Всё прозрачно: каждая карточка показывает совпавшие ключевые слова и категорию, а порог (30/50/70/90) задаёте вы. Шум он отсекает надёжно; чтение описания вакансии он не заменит никогда.
Какие сайты охвачены?
Шесть: cv.lv, ss.com, cvmarket.lv, liepajniekiem.lv, cvvp.nva.gov.lv (государственный портал NVA с 4 442 активными объявлениями) и prakse.lv для стажировок. Скрейперы добавляются — обычно с этого и начинаются индивидуальные версии.
Сколько стоит индивидуальный бот для поиска работы?
Индивидуальная разработка — от €60 (сбор данных + интерфейс Telegram + сопоставление). Хостинг — €5–15 в месяц. Бот vakances из этой статьи — эталонная реализация: скажите, какие сайты и фильтры вам нужны, и я соберу ваш.
Законен ли скрейпинг сайтов вакансий?
Технически он нарушает условия большинства сайтов, но вежливый сбор с низкой частотой и задержками между запросами на практике широко терпим, потому что возвращает трафик на порталы. Не перегружайте серверы, не перепродавайте данные — и вы в той же серой зоне, что и тысячи аналитических инструментов.

Вы ещё ищете вручную?

Если вы активно ищете работу в Риге или в другом городе Латвии и заходите на сайты вакансий чаще двух раз в неделю, прекратите. 30 минут ежедневного переключения cv.lv, ss.com, cvmarket.lv и портала NVA — это ровно та работа, которую должен делать компьютер.

Ваше утро теперь: открыть Telegram, прочитать подборку, пролистать совпадения, ставить «откликнулся» или «нет» — всего 4 минуты. Обзор рынка показывает, где реальный спрос. Экспорт кладёт всё в Excel. Списки отслеживают, на каком этапе каждая заявка.

Компании и агентства могут то же самое. Индивидуальная разработка Telegram-бота от €60, код из этой статьи как основа.

Просто математика: рынок труда Латвии разбросан по 6 сайтам. Бот собирает всё в один чат. Первым его увидит тот, кто запустит сегодня.