hh.ru Scraper (HeadHunter)
Pricing
from $0.99 / 1,000 results
hh.ru Scraper (HeadHunter)
Scrape jobs from hh.ru and the HeadHunter network across Russia, Kazakhstan, Belarus, Uzbekistan, Kyrgyzstan, Georgia and Azerbaijan. Rich filters, full job descriptions, and incremental monitoring that emits only new or changed vacancies on recurring runs.
Pricing
from $0.99 / 1,000 results
Rating
0.0
(0)
Developer
Paweł
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
💼 hh.ru Job Scraper (HeadHunter)
🎯 Pull every job listing you care about from hh.ru — the largest job board in the Russian-speaking world — with full salaries, employer details and complete job descriptions.
This scraper collects structured job data from hh.ru and the wider HeadHunter network: job titles, salary ranges with currency, employer names, ratings and IT-accreditation status, cities and street addresses, required experience, work format (remote / hybrid / on-site), schedules, publication dates and the full job description text. It covers Russia, Kazakhstan, Belarus, Uzbekistan, Kyrgyzstan, Georgia and Azerbaijan — plus worldwide postings — and can run on a schedule to tell you only what changed since last time.
🚀 What Does It Do?
This scraper automatically searches hh.ru and collects structured, ready-to-use data for every matching vacancy. No manual browsing, no copy-paste — set your filters and hit Start.
💡 Two modes of operation:
- 🔍 Discovery Mode — Give it keywords (in Russian or English) plus any combination of filters: country, city, job category, experience level, salary, work format, posting date. It pages through the results and hands you clean rows.
- 📋 Direct URL Mode — Already built the perfect search in your browser? Paste the address straight in and every filter in that link is honoured. Individual job links work too.
🔔 Plus a third way to use it — Monitoring Mode. Run it on a schedule and it remembers what it already saw, then reports only new, updated and reappeared vacancies. On a daily run that typically means 80–95% fewer rows to pay for and read, and it even spots employers who delete and re-post the same job under a fresh ID.
👥 Who Is This For?
| 🏢 Use Case | 💬 How It Helps |
|---|---|
| 🧲 Recruiters & staffing agencies | See every competing vacancy for a role the moment it appears, and reach candidates and clients before the market does |
| 📊 Compensation & market analysts | Build real salary benchmarks by city, seniority and job family from thousands of live postings instead of surveys |
| 🎯 Job seekers & career coaches | Get a daily digest of only genuinely new openings matching a very specific brief — no re-reading yesterday's list |
| 🏗️ Employer-brand & HR teams | Track how rivals describe roles, what they pay, and how fast their vacancies close |
| 📈 Investors & market researchers | Use hiring volume by industry and region as a live economic signal |
| 🤖 Job boards & aggregators | Feed a clean, deduplicated vacancy stream into your own product |
✨ Features
- 🌍 Seven countries, one run — Russia, Kazakhstan, Belarus, Uzbekistan, Kyrgyzstan, Georgia and Azerbaijan, plus worldwide listings
- 🔤 Russian and English keywords — Type «менеджер по продажам» or "python developer"; both work, and Russian city names are understood
- 💰 Real salary data — Lower and upper bounds, currency, and whether the figure is before or after tax
- 📄 Full job descriptions — Optionally open every vacancy for the complete description text and the employer's key-skills list
- 🏅 Employer quality signals — Company rating, review count, official website and IT-accreditation status
- 🔔 Incremental monitoring — Recurring runs return only what actually changed, with repost detection
- 📬 Instant alerts — Push new matches straight to Telegram, Slack, Discord or your own webhook
- 🎛️ Smart Filters — Country, city or region, 27 job categories, experience level, employment type, work format, schedule, education, salary floor and currency, posting date, plus special flags like "accredited IT employer", "salary stated" and "direct employer only"
- 🚫 Precision controls — Exclude unwanted words, search job titles only, and apply a strict salary floor that also drops postings hiding their pay
- ♻️ Deduplication — Every vacancy appears once, with hh's promoted placements clearly flagged
- 🛡️ Fails loudly, never silently — If a run can't collect anything, it reports a real error instead of handing you an empty file and a green tick
- 🔁 Built for parallel and scheduled runs — Rotates addresses automatically and retries from a fresh one, so simultaneous runs don't trip hh.ru's per-address limits
- ⚡ Fast & Scalable — Up to 100 vacancies per request and thousands per run, with no browser overhead
- 📤 Export Anywhere — Download results as JSON, CSV, Excel, or push to Google Sheets, Zapier, Make, or your CRM
🎛️ Filters & Options
| Option | What It Does |
|---|---|
| 🔤 Search Keywords | What to look for, in Russian or English. Leave it empty to search purely by filters |
| 🚫 Exclude Keywords | Drop vacancies mentioning words you don't want |
| 🌍 Country | Limit results to one of the seven countries hh serves |
| 🏙️ Cities / Regions | Narrow to specific places by name — «Москва», «Алматы», «Ташкент» |
| 📂 Job Categories | Pick from hh's own 27 professional families, from IT to logistics to medicine |
| 🎓 Required Experience | No experience, 1–3 years, 3–6 years, or more than 6 |
| 📝 Employment Type | Full-time, part-time, project work, or fly-in fly-out |
| 🏡 Work Format | On site, remote, hybrid, or field work |
| ⏰ Work Schedule | Which working-time arrangement the job uses |
| 🎒 Education Required | Filter by the education level the employer asks for |
| 💵 Minimum Salary & Currency | Ask hh for better-paying roles, in the currency you choose |
| 💎 Only With Salary Stated | Hide the many postings that keep pay secret |
| 🔒 Strict Salary Floor | A hard cut applied on our side, which also removes salary-less postings |
| 📅 Posted Within | Last 24 hours, 3 days, week or month |
| 🔍 Search Only In | Match keywords against job titles only, company names only, or descriptions |
| 🏷️ Special Filters | Accredited IT employer, direct employer only, internships, night shifts, accessible roles, and more |
| ↕️ Sort By | Relevance, newest first, or by salary |
| 📄 Fetch Full Descriptions | Open each vacancy for its complete description and key skills |
| ✂️ Truncate Descriptions | Cap description length to keep exports tidy |
| ⏱️ Maximum Age | Drop anything published longer ago than you want |
| 🔔 Monitoring Mode | Emit only new, updated and reappeared vacancies on recurring runs |
| ♻️ Skip Reposts | Ignore jobs that are just an old posting under a new ID |
| 📬 Alerts | Send new matches to Telegram, Slack, Discord or a webhook |
| 🗜️ Compact Output | Keep only the essential fields |
| 🔢 Max Results | Control how many vacancies to extract per run |
| 🔗 Direct URLs | Optionally paste specific hh.ru search or vacancy links to scrape |
📦 What You Get (Output Fields)
Every vacancy includes:
💼 Job Basics
| Field | Example |
|---|---|
| vacancyId | 136415177 |
| title | Разработчик Python (Проект до 31.03.2027) |
| url | https://hh.ru/vacancy/136415177 |
| publishedAt | 2026-08-21T17:12:24.639+03:00 |
| createdAt | 2026-03-10T17:43:48.229+03:00 |
| updatedAt | 2026-08-21T17:12:24.717+03:00 |
| isPromoted | false |
| searchQuery | python |
🏢 Employer
| Field | Example |
|---|---|
| companyName | Сатэл |
| companyId | 1455 |
| companyUrl | https://hh.ru/employer/1455 |
| companyWebsite | http://www.satel.org |
| companyRating | 4.5 |
| companyReviewsCount | 247 |
| companyIsAccreditedIt | true |
💰 Pay
| Field | Example |
|---|---|
| salaryFrom | 250000 |
| salaryTo | 350000 |
| salaryCurrency | RUR |
| salaryGross | true |
| salaryPeriod | MONTH |
📍 Location
| Field | Example |
|---|---|
| areaName | Москва |
| areaId | 1 |
| address | Москва, 2-я Брестская улица, 48 |
🧾 Requirements & Conditions
| Field | Example |
|---|---|
| experience | between3And6 |
| employmentForm | FULL |
| workFormats | ["ON_SITE", "REMOTE", "HYBRID"] |
| workSchedules | ["FIVE_ON_TWO_OFF"] |
| workingHours | ["HOURS_8"] |
| professionalRoleIds | ["96"] |
| driverLicenseTypes | [] |
| isInternship | false |
| isNightShifts | false |
| acceptsTemporary | false |
| acceptsLaborContract | true |
| responsesCount | 12 |
📄 Full Description (when enabled)
| Field | Example |
|---|---|
| description | Задачи: Работа в команде с front-end и ML разработчиками; Разработка новой функциональности продуктов… |
| keySkills | ["Python", "FastAPI", "PostgreSQL", "Kubernetes"] |
🔔 Monitoring (when enabled)
| Field | Example |
|---|---|
| changeType | NEW |
| firstSeenAt | 2026-08-20T06:00:00.000Z |
| lastSeenAt | 2026-08-22T06:00:00.000Z |
| isRepost | false |
| repostOfId | null |
📊 Example Output
{"vacancyId": "136415177","url": "https://hh.ru/vacancy/136415177","title": "Разработчик Python (Проект до 31.03.2027)","companyId": "1455","companyName": "Сатэл","companyUrl": "https://hh.ru/employer/1455","companyWebsite": "http://www.satel.org","companyIsAccreditedIt": true,"companyRating": 4.5,"companyReviewsCount": 247,"salaryFrom": 250000,"salaryTo": 350000,"salaryCurrency": "RUR","salaryGross": true,"salaryPeriod": "MONTH","areaId": "1","areaName": "Москва","address": "Москва, 2-я Брестская улица, 48","experience": "between3And6","employmentForm": "FULL","workFormats": ["ON_SITE", "REMOTE", "HYBRID"],"workSchedules": ["FIVE_ON_TWO_OFF"],"workingHours": ["HOURS_8"],"professionalRoleIds": ["96"],"driverLicenseTypes": [],"isInternship": false,"isNightShifts": false,"acceptsTemporary": false,"acceptsLaborContract": true,"publishedAt": "2026-08-21T17:12:24.639+03:00","createdAt": "2026-03-10T17:43:48.229+03:00","updatedAt": "2026-08-21T17:12:24.717+03:00","responsesCount": 12,"isPromoted": false,"sourceSite": "hh.ru","searchQuery": "python","description": "Задачи: Работа в команде с front-end и ML разработчиками; Разработка новой функциональности продуктов; Участие в проектировании архитектуры.","keySkills": ["Python", "FastAPI", "PostgreSQL", "Kubernetes"],"changeType": "NEW","firstSeenAt": "2026-08-22T06:00:00.000Z","lastSeenAt": "2026-08-22T06:00:00.000Z","isRepost": false,"repostOfId": null,"scrapedAt": "2026-08-22T21:29:26.315Z"}
📋 Dataset Views
The Apify Console gives you 3 ready-made table views to quickly browse your results:
| View | What It Shows |
|---|---|
| 📊 Overview | Job title, company, city, salary range, experience, work format, publication date and link |
| 🔔 Monitoring Changes | What changed since the last run — new, updated or reappeared — plus first-seen and last-seen dates and repost flags |
| 📋 All Fields | Every single field — the complete dataset |
❓ FAQ
🤔 Can I search in Russian? Yes, and you should — Russian keywords give the best coverage. Russian city names work too («Санкт-Петербург», «Екатеринбург»). English keywords and transliterated spellings are also understood.
🤔 How many vacancies can I get from one search? hh.ru itself only ever shows the first 2000 matches for any single search, no matter how deep you scroll. This scraper says so clearly in the log when your search is bigger than that, and tells you how many matches you aren't seeing. To collect more, split the search — by city, job category, salary band or posting date — and you can gather tens of thousands of rows across runs.
🤔 Does it get the full job description? Yes, when you enable it. hh's result lists genuinely don't contain descriptions, so each vacancy is opened individually to collect the full text and the employer's key-skills list. Leave it off for a much faster, cheaper run when titles and salaries are enough.
🤔 Will I keep getting the same jobs every day? Not if you turn on Monitoring Mode. The scraper remembers what it already reported and gives you only genuinely new, updated or reappeared vacancies — usually cutting output by 80–95% on a daily schedule. It also flags jobs that are simply old postings republished under a new ID.
🤔 Why are some results marked as promoted?
hh places a few paid listings at the top of its result pages. Those are real vacancies, so they are kept — but flagged with isPromoted, because they repeat across pages and would otherwise look like duplicates.
🤔 Can I export the data? Yes — JSON, CSV, Excel, XML, HTML, RSS. You can also push data directly to Google Sheets, Zapier, Make, or any webhook/API endpoint.
🤔 How often should I run this? For fresh data, run daily or weekly. You can schedule automatic runs on Apify with just a few clicks — and with Monitoring Mode enabled, frequent runs stay cheap.
🤔 Does it need proxies? Yes, and it is already set up for you. hh.ru limits how many requests a single address may make, so the scraper rotates through Apify's standard (cheapest) proxy pool by default — that is the difference between runs that finish and runs that get refused. You don't have to configure anything; just leave the proxy option on, especially for scheduled or parallel runs.
🛠️ Need Custom Filters or Features?
I'm happy to customize this scraper for your specific needs! 🤝
Whether you need:
- 🎯 Additional filters (specific metro stations, city districts, industry codes, company size, exact salary bands, or a curated list of employers to watch)
- 📊 Extra data fields or custom output formats
- 🔄 Integration with your CRM, Google Sheets, or database
- ⏰ Scheduled scraping with automatic deduplication
- 🌐 Scraping from other job platforms alongside hh.ru
👉 Don't hesitate to reach out via private message — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!
⚖️ Legal & Ethical Use
This scraper collects only publicly available information from hh.ru — the same job listings any visitor can read without signing in. It does not access private data, candidate CVs or employer accounts, and it does not bypass authentication. Please use the data responsibly and in compliance with applicable laws and platform terms of service.