hh-ru-apply: hh.ru application automation

hh-ru-apply

A Node.js and Playwright script suite that searches hh.ru vacancies, scores them with an LLM, drafts cover letters and opens the application in a browser

  • 2 ★ on the repository
  • Last commit
  • MIT
CLI

Broad access

Why this level

  • The hh-apply-chat flow can automatically send an application and a message to the employer unless --dry-run or --no-submit is passed
  • Bulk application automation, per the README's own warning, can lead to hh.ru account restrictions
All reasons and checks
Russian stack

jacintacaryophyllaceous404/hh-ru-apply

Install

Works in
Services

Manual install

git clone https://github.com/jacintacaryophyllaceous404/hh-ru-apply && cd hh-ru-apply && npm install && npx playwright install chromium && cp .env.example .env

Local install, option A from the README.

Access and checks

How we review

Broad accessThe tool can change data, run commands or handle secrets.

  • The hh-apply-chat flow can automatically send an application and a message to the employer unless --dry-run or --no-submit is passed
  • Bulk application automation, per the README's own warning, can lead to hh.ru account restrictions

This is third-party code. Review the repository files before installing.

What it does

The tool drives a real Chromium browser via Playwright with a saved profile so you don't log in again. npm run vacancies searches by keywords from a file, npm run harvest scores each one through an LLM via OpenRouter across three scores (vacancy relevance, CV match, and an overall score) and queues the results locally. A web dashboard at localhost:3849 shows the queue, generates and lets you edit a cover letter, and can launch the application right from the UI. There are two apply flows: hh-fill-letter inserts the letter into the vacancy page's application form and deliberately does not press submit, waiting for a manual check, while hh-apply-chat sends the application with the letter through the employer chat and can submit automatically unless --dry-run or --no-submit is passed. A separate flow scans vacancies from Telegram channels via a bot.

Who it is for. For job seekers applying to many hh.ru vacancies who want an agent to filter out irrelevant ones and draft cover letters, while staying in control of when applications actually go out.

Good fit when

  • You need to filter a large stream of hh.ru vacancies by resume match before applying
  • You want cover letter drafts in your own style based on examples
  • You're willing to keep a browser open and manually confirm before each application goes out

Not a fit when

  • You're not willing to risk your hh.ru account being limited: the README explicitly warns that bulk application automation may violate the service's rules
  • You need an official API instead of driving a real browser: Playwright selectors break when hh.ru changes its markup
  • You need fully unattended submission with no letter review: the form-based flow deliberately does not submit on its own

Example request

Collect today's python backend vacancies, score them against my resume, and draft cover letters, I'll submit the applications myself

Limitations

Both the README and SKILL.md explicitly warn: bulk application automation may violate hh.ru's rules and lead to account restrictions, use at your own risk. CAPTCHA and other protections may appear, so a manual login step is built in. The hh-apply-chat flow can submit an application automatically unless --dry-run or --no-submit is passed. The Playwright selectors for the form and chat are tied to hh.ru's current markup and need manual updates via codegen when it changes.

How to disable. Stop the dashboard and containers (docker compose down) and delete the local project folder along with the saved Chromium profile in data/session.

FAQ

Does the tool submit applications without me?

The form flow (hh-fill-letter) only inserts the letter and waits for a manual check, while the chat flow (hh-apply-chat) can submit automatically unless you pass --dry-run or --no-submit.

What if hh.ru changes its vacancy page layout?

The Playwright selectors will stop finding elements; regenerate them with npm run codegen-hh and update lib/hh-response-selectors.mjs and lib/hh-chat-selectors.mjs.

Discussion

No questions or reviews yet.

Russian stack

Job search automation for hh.ru: vacancy collection, LLM-scored CV matching, cover letters and applications

SkillBroad access199Repository stars
Russian stack

An MCP server that parses an hh.ru vacancy, researches the candidate's GitHub, writes a 150-220 word cover letter, and preps 12 HR answers

MCP serverExtended access
Russian stack

An MCP server that emulates an hh.ru browser session via Playwright for search, AI vacancy scoring and automatic applications with a daily cap

MCP serverBroad access1Repository stars
Russian stack

A browser-based MCP server for job search on hh.ru: resume-matched vacancy recommendations, applications and statuses

MCP serverBroad access3Repository stars
Russian stack

An HH.ru vacancy monitor: Telegram alerts for every new listing, on-demand Mistral analysis behind a button, and MCP tools for DeepSeek Harness

MCP serverExtended access
Russian stack

An MCP server for the employer side of the hh.ru and hh.kz API: your vacancies, applications, resume search, sourcing and webhooks through an OAuth app

MCP serverBroad access1Repository stars

README in short

The Russian README openly warns about the risk of violating hh.ru's rules and getting the account restricted through bulk automation. It describes eight npm commands: session-saving login, vacancy search, LLM scoring, the dashboard, Telegram scanning, two application flows, and selector generation. It covers setting up search keywords, a resume, a letter template and environment variables for OpenRouter and the Telegram bot, plus the project structure and a Docker Compose setup. MIT license.

README badge

Report a problem