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
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
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 .envLocal install, option A from the README.
Access and checks
How we reviewBroad 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 myselfLimitations
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.
Related
All hh.ru toolsJob search automation for hh.ru: vacancy collection, LLM-scored CV matching, cover letters and applications
hh-apply-suite: hh.ru cover letter generator
hh-apply-suite
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
HH.ru MCP Server: browser auto-apply
HH.ru MCP Server
An MCP server that emulates an hh.ru browser session via Playwright for search, AI vacancy scoring and automatic applications with a daily cap
A browser-based MCP server for job search on hh.ru: resume-matched vacancy recommendations, applications and statuses
HH.ru vacancy monitor with on-demand analysis
HH Career Monitor
An HH.ru vacancy monitor: Telegram alerts for every new listing, on-demand Mistral analysis behind a button, and MCP tools for DeepSeek Harness
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
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.