HH.ru Jobs Scraper: Вакансии HH.ru, Salaries, Skills & Ratings
Pricing
from $0.98 / 1,000 job postings
HH.ru Jobs Scraper: Вакансии HH.ru, Salaries, Skills & Ratings
Scrape job vacancies from HH.ru (HeadHunter), Russia's largest job board. Search by keyword, city, experience, salary range, and remote flag. Returns title, salary, employer name, rating, review count, trusted-employer flag, viewer count, key skills, and full descriptions. No API key needed.
Pricing
from $0.98 / 1,000 job postings
Rating
5.0
(1)
Developer
GetAScraper
Maintained by CommunityActor stats
0
Bookmarked
33
Total users
16
Monthly active users
5 hours ago
Last modified
Categories
Share
🇷🇺 HH.ru Jobs Scraper: Вакансии HH.ru, Salaries, Skills & Ratings
| Two ways into the Russian job market. HH.ru covers every industry across Russia. Habr Career narrows to tech roles with its own salary benchmark survey. | |
| RUSSIA JOBS & TECH TALENT • HH.ru general hiring and Habr Career's tech-specific listings | |
|
➤ You are here |
Tech-only roles, salary benchmarks |
|
More than one job board? Russia Jobs Feed covers the main ones in one run. Ищете вакансии на нескольких сайтах? Russia Jobs Feed собирает главные из них за один запуск. | |
|
Russia's largest job board, with the employer signals recruiters check first Search HH.ru by keyword, city, salary range, and experience level. Get numeric salary fields, employer ratings, trust badges, and live viewer counts as clean JSON. No login or API key required. |
|
💰 Structured salary Numeric min, max, and currency per vacancy, no manual parsing |
⭐ Employer trust signals Rating, review count, and trusted-employer badge on every listing |
👀 Live viewer counts See how many people are viewing each vacancy right now |
🔍 Flexible filters Keyword, city, salary range, experience level, and remote flag |
🔍 What does HH.ru Jobs Scraper do?
HeadHunter, hh.ru (ХедХантер), is Russia's largest job board, with millions of active vacancies across every industry and region. This actor searches the platform and returns clean, structured data for every matching listing.
By default, each vacancy includes: title, canonical URL, salary text and numeric min/max fields, experience requirement, employer name and logo, employer rating and review count, office address, nearest metro station, remote flag, trusted-employer badge, and a live viewer count showing how many people are looking at that vacancy right now.
Enable Fetch full details to also get the complete vacancy description and a key skills array per listing. Useful for skills-gap analysis or building searchable job databases.
Turn on Find employer emails to add a public contact email for each company, taken from the company's own website when it publishes one. Each company is looked up once per run, and every vacancy from that company carries the same email. It is optional and off by default.
👥 Who uses it?
HR analysts tracking compensation: "We benchmark Python developer salaries across Moscow, Saint Petersburg, and Novosibirsk every quarter. Copying salary text by hand used to take a full afternoon. Now we get salaryFrom, salaryTo, and salaryCurrency as numbers, ready for a pivot table."
Staffing agencies building pipelines: "We monitor 50 IT employers on HH.ru every week. Employer rating, review count, and the trusted-employer flag let us filter out weak clients before our recruiters ever pick up the phone."
Job board builders: "We aggregate Russian tech listings for a niche job board. Title, URL, key skills, remote flag, and salary arrive as clean JSON from one scheduled run, with nothing left to reformat."
🚀 How it works
|
STEP 1 Set your search Enter keywords, pick a city, and add salary range, experience, or remote filters. |
STEP 2 Run in the cloud The actor reads live HH.ru pages in seconds. No login or API key needed. |
STEP 3 Download your data Export as JSON, CSV, or Excel, or connect to Sheets and BigQuery. |
⚙️ Input
| Field | Type | Required | Description |
|---|---|---|---|
keywords | string | No | Job title, skill, or keyword to search (e.g. Python, менеджер проекта). |
city | string | No | City name in Russian or English (e.g. Москва, Moscow, Санкт-Петербург). Resolved automatically. Overridden by areaId. |
areaId | integer | No | HH.ru area ID. Default: 113 (all Russia). 1 = Moscow, 2 = Saint Petersburg. |
salaryFrom | integer | No | Minimum salary filter in the vacancy's posted currency. |
salaryTo | integer | No | Maximum salary filter. |
experience | enum | No | Required work experience: noExperience, between1And3, between3And6, or moreThan6. |
employment | array | No | Employment type(s): full, part, project, volunteer, or probation. |
onlyRemote | boolean | No | Return only remote-schedule listings when checked. |
orderBy | enum | No | Sort order: relevance (default), publication_time, salary_desc, or salary_asc. |
maxItems | integer | No | Maximum number of vacancies to return. Default: 25. |
fetchDetails | boolean | No | Open each vacancy page to extract full description and key skills. Default: off. |
proxyConfiguration | proxy | No | Apify proxy settings. Datacenter proxy is the default and sufficient for most runs. |
enrichEmails | boolean | No | Find a public contact email on each company's own website. Each company is looked up once per run. Choose 512 MB of memory or more when this is on. Default: off. |
monitorMode | boolean | No | Return only vacancies that are new or changed since the last run with the same monitor name. Default: off. |
monitorName | string | No | A short name that identifies this monitor's memory (e.g. python-moscow). Reuse it on each run or schedule. Required when monitorMode is on. |
📧 Employer emails (optional)
Turn on Find employer emails to get a way to contact the companies behind the vacancies.
- 🏢 For each company, the actor visits the company's own website and looks for the contact email it publishes there, such as info@, hr@ or a careers address.
- ✅ When a company lists its website on its HH.ru page, that exact website is used. Otherwise the actor finds the company's official site and only keeps an email that was found on it.
- 🔁 Each company is looked up once per run. All of its vacancies get the same email, website and status.
- 🧑💼 Individual entrepreneurs (ИП) only get a general company address, never a personal one.
- 🚫 When a company's website shows no email, the vacancy is marked
not_found. The actor never guesses or builds an address. - 💳 You pay for an email only when one is found, and only once per company per run.
- 🧠 Email lookups make the run slower, because each company's website is visited. For runs with this on, choose 512 MB of memory or more so every company gets looked up.
Not every company publishes an email on its website, so some vacancies will come back without one.
🔁 Monitoring mode (optional)
Watching a search over time? Turn on Monitoring mode and give it a monitor name.
- 🆕 Each run returns only the vacancies that are new or have changed since the last run that used the same monitor name. Unchanged vacancies are left out.
- 🏷️ Every returned vacancy is tagged
changeType(neworupdated), withfirstSeenandlastSeendates. - 🗂️ Reuse the same monitor name on a schedule (e.g. daily) to get a clean feed of what moved, without re-processing everything each time.
- 🔕 The first run with a new name returns everything as
new; later runs stay quiet until something changes.
📤 Data table
Each row is one HH.ru vacancy.
| Field | Type | Description |
|---|---|---|
vacancyId | string | Unique HH.ru vacancy ID. |
title | string | Vacancy title as shown on HH.ru. |
url | string | Canonical link to the vacancy page (tracking parameters removed). |
salaryFrom | number | Minimum salary as a number. Null when not disclosed by the employer. |
salaryTo | number | Maximum salary as a number. Null when not disclosed. |
salaryCurrency | string | Salary currency code: RUR, USD, EUR, or KZT. |
salaryGross | boolean | True = gross (before tax), false = net. Null when not specified. |
salaryPeriod | string | What the figure is paid for: month, shift, hour, day, week, or year. Left out when HH.ru does not say. |
salaryText | string | Raw salary text as displayed on HH.ru (e.g. от 150 000 ₽). |
experience | string | Required experience label (e.g. Опыт 3-6 лет). |
employerName | string | Employer company name. |
employerLogoUrl | string | URL of the employer's logo image. |
employerRating | number | Employer rating from HH.ru reviews (e.g. 4.2). |
employerReviewCount | number | Total number of HH.ru reviews for this employer. |
employerId | string | The company's HH.ru ID. |
employerUrl | string | Link to the company's page on HH.ru. |
employerWebsite | string | The company's own website. Shown when it comes from the company's HH.ru page, or when an email was found on it. Requires enrichEmails: true. |
employerEmail | string | Public contact email found on the company's website. Left out when none was found. Requires enrichEmails: true. |
employerEmailKind | string | generic for a shared mailbox (info@, hr@, office@) or named for a person's address. Requires enrichEmails: true. |
employerEmailDomain | string | The domain part of the email. Requires enrichEmails: true. |
employerEmailSourceUrl | string | The page of the company's website where the email was found. Requires enrichEmails: true. |
emailEnrichmentStatus | string | found, not_found (the website shows no email), failed (the website could not be read) or skipped (not looked up in this run). Requires enrichEmails: true. |
address | string | Office city or full address as shown on the listing. |
metroStation | string | Nearest metro station name (Russian cities). |
isRemote | boolean | True if the vacancy allows remote work. |
isTrustedEmployer | boolean | True if HH.ru has awarded the employer a trusted badge. |
viewerCount | number | Number of people currently viewing this vacancy. |
description | string | Full vacancy description text. Requires fetchDetails: true. |
keySkills | array | Required skills list (e.g. ["Python", "PostgreSQL", "FastAPI"]). Requires fetchDetails: true. |
postedAt | string | ISO 8601 date the vacancy was published. Left out when HH.ru does not expose it. |
validThrough | string | ISO 8601 date the posting stops accepting applications. Requires fetchDetails: true. |
scrapedAt | string | ISO 8601 timestamp of when the row was scraped. |
changeType | string | new or updated. Only present with monitorMode: true. |
firstSeen | string | ISO 8601 date the monitor first saw this vacancy. Only present with monitorMode: true. |
lastSeen | string | ISO 8601 date of the monitor run that returned this row. Only present with monitorMode: true. |
💰 Pricing
This actor charges per vacancy returned. Empty runs cost nothing. There are no monthly subscriptions or seat fees. If you turn on Find employer emails, each company email found is billed once per run. Companies with no email found cost nothing extra.
⭐ Enjoying HH.ru Jobs Scraper?
|
⭐ ⭐ ⭐ ⭐ ⭐ Turned HH.ru's salary text into clean numeric fields instead of parsing it by hand? A 5-star rating takes 10 seconds and helps other HR analysts and staffing agencies find it. Your feedback also tells us what to build next. |
| ★ Rate this Actor on Apify |
❓ FAQ
Does this actor require an HH.ru account or API key? No. It reads the public HH.ru website directly. No registration, no developer app, and no API key are needed to run it.
What cities and regions does it support?
All of Russia and CIS regions covered by HH.ru. Enter a city name in Russian or English (e.g. Москва, Moscow, Екатеринбург, Yekaterinburg). For the full area list, pass an areaId directly. The reference is at api.hh.ru/areas/113.
Как скачать вакансии с HH.ru в Excel или Google Sheets? (How do I export HH.ru vacancies to Excel or Google Sheets?) Enter your keyword and city in the input form, run the actor, and click Export in the Apify Console. Choose Excel, CSV, or Google Sheets. Each vacancy becomes one row, with salary split into separate numeric columns for easy filtering.
Why do some vacancies show no salary data? HH.ru lets employers hide their salary offer. When it is not disclosed, all salary fields return null. The actor never fills in guesses or placeholder values.
Can I get the employer's email address? Yes. Turn on Find employer emails and the actor adds a public contact email from each company's own website when the company publishes one there. Each company is looked up once per run, and you pay only when an email is found.
Why do some companies have no email?
Many companies do not publish an email on their website, or only offer a contact form. Those vacancies are marked not_found. The actor never guesses an address or fills in a placeholder.
Why is my run slower with emails on? Each company's website has to be visited to find its email. Companies are looked up several at a time, and each one only once per run. Choose 512 MB of memory or more for these runs so every company gets looked up.
🔗 Other actors
- Russia Jobs Feed Вакансии: hh.ru, Habr Career, Rabota.ru & More ↗ - reads several Russian job boards in one run, in one format, with a monitor mode for new jobs.
- Habr Career Scraper: Вакансии Хабр Карьера ↗ - Scrape Russia's tech-specific job board with structured skill tags and real salary benchmarks.
- Zhaopin Scraper: Extract Job Listings and Salary Data Across China ↗ - Pull structured job listings and salary data from Zhaopin, China's major general job board.
- Wantedly Japan Jobs Scraper: Startup Job Listings ↗ - Scrape startup and tech job listings from Wantedly, Japan's mission-driven job platform.
- Yandex Realty Scraper: Яндекс Недвижимость ↗ - Extract property listings and pricing from Yandex Real Estate across Russia.
- 2GIS Reviews Scraper: Отзывы 2ГИС ↗ - Collect business reviews and ratings from 2GIS, Russia's leading map and business directory.