hh.ru Scraper - HeadHunter Jobs, Salaries & Skills
Pricing
from $1.75 / 1,000 results
hh.ru Scraper - HeadHunter Jobs, Salaries & Skills
Scrape job vacancies from hh.ru (HeadHunter), the #1 job board in Russia & CIS: title, company, salary, city, work format, experience, key skills, application counts and full description. Export to JSON, CSV or Excel.
Pricing
from $1.75 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
hh.ru Scraper π·πΊ
Extract job vacancies from hh.ru (HeadHunter) β the #1 job board in Russia & the CIS β into clean, structured data. Search by keyword, region or filters and export thousands of jobs with salary, company, city, work format, required experience, key skills, application counts, geolocation and the full job description. Built for recruiters, job aggregators, salary benchmarking, market research and talent analytics.
π― What does hh.ru Scraper do?
HeadHunter (hh.ru) is the largest employment marketplace in Russia and across the CIS β including hh.kz (Kazakhstan) and hh.uz (Uzbekistan) β with hundreds of thousands of active vacancies in every industry and region. This actor turns any hh.ru search into a structured dataset you can download or feed into your own tools.
Give it a search URL (or just a keyword) and it will:
- π Open the hh.ru results page and read every vacancy on it
- π Automatically paginate through all result pages until it reaches your limit
- π° Capture structured salary β from / to / currency / gross-net / period
- π§ Extract key skills and the full description (optional detail mode)
- π Include application counts β a unique signal of how competitive a role is
- π Flag remote / hybrid / on-site and add metro station & geo-coordinates
- π§Ή Return clean, deduplicated, structured records β no HTML, no clutter
- β¬οΈ Export to JSON, CSV, Excel, HTML or via API in one click
No login, no browser extensions, no manual copy-paste. Point it at a search and get a spreadsheet.
β¨ Key features
| Feature | Description |
|---|---|
| Keyword or URL input | Paste an hh.ru / hh.kz / hh.uz search URL, or just type keywords like python, marketing, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ. |
| Structured salary | Salary from, to, currency, gross/net flag and period β ready for benchmarking. |
| Key skills | The role's tagged skills (e.g. Java, Spring, SQL) β perfect for demand analysis. |
| Application counts | How many people have already applied β a competition/demand signal you won't find elsewhere. |
| Full description | Optional detail mode adds the complete job description and public contacts. |
| Remote filter | Toggle Only remote jobs to keep just remote-friendly roles. |
| Geo & metro | City, full address, nearest metro station and latitude/longitude. |
| Experience & work format | Required experience level, employment type and remote/hybrid/on-site format. |
| Automatic pagination | Walks through all result pages up to your maxItems limit. |
| Deduplicated output | Each vacancy appears once, identified by its unique hh.ru ID. |
| Clean exports | JSON, CSV, Excel, HTML table, RSS or JSON API. |
π₯ Input
The actor accepts a simple, no-code input form. You can drive it two ways:
Option A β by keyword (easiest)
{"keywords": ["python", "data analyst"],"area": "1","maxItems": 200}
area is an optional hh.ru region ID (e.g. 1 = Moscow, 2 = Saint Petersburg, 113 = all Russia, 40 = Kazakhstan). Leave it empty to search everywhere.
Option B β by search URL (most control)
Configure any filters you like on hh.ru (region, salary, experience, work format, scheduleβ¦), copy the URL from your browser, and paste it in:
{"startUrls": [{ "url": "https://hh.ru/search/vacancy?text=java&area=1&salary=200000&only_with_salary=true" }],"includeDescription": true,"onlyRemote": true,"maxItems": 500}
Input parameters
| Field | Type | Description |
|---|---|---|
startUrls | array | hh.ru / hh.kz / hh.uz results-page URLs. Configure your filters on the site, then paste the URL. |
keywords | array | Job keywords to search. Used when no startUrls are given. |
area | string | Optional region ID to combine with keywords. |
includeDescription | boolean | Also fetch each detail page for full description, key skills and contacts. Default false. |
onlyRemote | boolean | Keep only remote-friendly vacancies. Default false. |
maxItems | integer | Maximum number of vacancies to collect. Default 200. |
proxyConfiguration | object | Proxy settings. A proxy is recommended for reliable results. |
π€ Output
Each vacancy is returned as a clean JSON object:
{"id": 133213936,"url": "https://hh.ru/vacancy/133213936","title": "Backend Team Lead (Java)","company": "BANK URALSIB","companyId": 89,"companyUrl": "https://hh.ru/employer/89","salaryFrom": 300000,"salaryTo": 424400,"salaryCurrency": "RUR","salaryGross": false,"salaryPeriod": "MONTH","city": "Moscow","address": "Moscow, Efremova, 8","metro": ["Frunzenskaya"],"latitude": 55.727462,"longitude": 37.58022,"workSchedule": "remote","workFormats": ["REMOTE", "HYBRID"],"experience": "6+ years","employment": "FULL","responsesCount": 1035,"onlineUsers": 14,"publishedAt": "2026-08-13T20:15:23.203+03:00","description": "We are looking for a backend team leadβ¦","keySkills": ["Java", "Spring Framework", "REST", "SQL", "Spring Boot"],"contactName": null,"contactEmail": null,"contactPhones": null}
Output fields
| Field | Type | Description |
|---|---|---|
id | number | Unique hh.ru vacancy ID. |
url | string | Direct link to the vacancy. |
title | string | Job title. |
company / companyId / companyUrl | Employer name, ID and profile link. | |
salaryFrom / salaryTo | number | Salary range bounds (null when not stated). |
salaryCurrency | string | Currency code (RUR, USD, EUR, KZTβ¦). |
salaryGross | boolean | Whether the salary is gross (before tax). |
salaryPeriod | string | Salary period (e.g. MONTH). |
city / address | string | Location city and full address. |
metro | array | Nearest metro station(s), when available. |
latitude / longitude | number | Office geo-coordinates, when available. |
workSchedule | string | Work schedule (remote, full dayβ¦). |
workFormats | array | Work format tags (REMOTE, HYBRID, ON_SITE). |
experience | string | Required experience (No experience, 1-3 years, 3-6 years, 6+ years). |
employment | string | Employment type (FULL, PARTβ¦). |
responsesCount | number | Number of applications already received. |
onlineUsers | number | Users currently viewing the vacancy. |
publishedAt | string | Publish date/time (ISO 8601). |
description | string | Full job description (when includeDescription is enabled). |
keySkills | array | Tagged key skills (when includeDescription is enabled). |
contactName / contactEmail / contactPhones | Public recruiter contacts (when shown and enabled). |
You can download the dataset as JSON, CSV, Excel, HTML, RSS or XML, or fetch it programmatically through the Apify API.
π How to use hh.ru Scraper (step by step)
- Click Try for free / Start.
- Type a keyword (e.g.
python) and an optional region ID β or paste an hh.ru search URL with your filters. - (Optional) Enable Include full description & key skills and/or Only remote jobs.
- Set maxItems to how many vacancies you want.
- Click Save & Start.
- When the run finishes, open the Dataset tab and Export to your preferred format β or grab it via API.
That's it. No code required.
π‘ Use cases
- Salary benchmarking β Aggregate structured salary ranges by role, region, experience and skill to build compensation datasets.
- Recruitment & sourcing β Monitor who is hiring for which roles across Russia and the CIS, and reach out directly.
- Skills-demand analytics β Quantify which key skills are most requested per role or region over time.
- Job boards & aggregators β Feed fresh CIS vacancies into your own portal or newsletter.
- Competitive intelligence β Track a competitor's open roles (and how many applicants they attract) to infer growth and hiring priorities.
- Market research β Measure demand by region, experience level, remote-work share and application volume.
- HR & talent teams β Benchmark your own postings and salaries against the live market.
π Why the application count matters
Unlike a plain job list, this actor also returns how many people have already applied to each vacancy (responsesCount) and how many are viewing it right now (onlineUsers). That's a direct signal of demand and competition β invaluable for sourcing strategy, salary negotiation and market analysis.
β±οΈ How many jobs can I collect?
As many as the search returns (hh.ru shows up to ~2,000 results per search). Set maxItems to control the volume, and split large sweeps by region or keyword across multiple runs for the freshest, most complete coverage.
π Integrations & automation
Because this runs on Apify, you can:
- π Schedule runs (hourly, daily, weekly) to keep a live feed of new vacancies.
- π Push results to Google Sheets, Airtable, Slack, Zapier, Make, or any webhook.
- π§© Call it from your backend with the Apify API and SDKs (JavaScript / Python).
- π Use webhooks to trigger downstream workflows the moment a run completes.
Call via API (example)
curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["python"],"area": "1","maxItems": 200}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('YOUR_ACTOR_ID').call({keywords: ['java'],includeDescription: true,maxItems: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
β FAQ
Do I need an hh.ru account or API key? No. Just provide a keyword or a search URL.
Does it include salary?
Yes β when the employer states it. Salary is returned as structured from / to / currency / gross-net / period. Many listings hide salary; those fields are simply null.
Can I get the full job description and key skills? Yes. Enable Include full description & key skills and each vacancy's detail page is fetched for the complete description, skill tags and any public contacts.
Does it work with hh.kz (Kazakhstan) and hh.uz (Uzbekistan)? Yes. Paste a search URL from those regional sites and it works the same way.
Can I filter by region, salary, experience or work format?
Yes. Apply any filters on hh.ru itself, then paste the resulting URL into startUrls. All of the site's filters are supported this way. You can also pass a keywords + area combination.
Can I get only remote jobs? Yes β enable Only remote jobs.
Are results deduplicated? Yes. Each vacancy is uniquely identified and appears only once per run.
What formats can I export? JSON, CSV, Excel, HTML, RSS and XML β via the dashboard or the API.
How do I keep data fresh? Schedule the actor to run on the interval you need; each run returns the current live listings.
π Tips for best results
- Start narrow, then widen. Test with a single keyword and a small
maxItems, confirm the fields look right, then scale up. - Use search URLs for precision. hh.ru's own filters (region, salary, experience, work format) give you exactly the segment you want β just paste the URL.
- Enable descriptions only when you need them. The list already includes salary, skills-context and metadata; turn on detail mode when you want the full text and key skills.
- Split large sweeps. For nationwide coverage, run several searches (by region or role) in parallel for speed and completeness.
- Schedule for freshness. The job market moves daily; a scheduled run keeps your dataset current.
βοΈ Legal & responsible use
This actor is intended for lawful data collection such as market research, analytics and recruitment. You are responsible for how you use the collected data. Only collect publicly available information, respect the target website's Terms of Service and robots.txt, and comply with all applicable laws and regulations, including data-protection rules such as the GDPR when processing any personal data. Do not use the data for spam or any unlawful purpose. This actor is an independent tool and is not affiliated with, endorsed by, or connected to HeadHunter (hh.ru) or its subsidiaries. All trademarks belong to their respective owners.
π Support
Questions, feature requests or an issue with the data? Open an issue on the actor's page β feedback is welcome and helps improve the tool.
β If this actor saves you time, please leave a review β it really helps!