hh.ru Job Scraper
Pricing
Pay per usage
hh.ru Job Scraper
Instantly extract job listings from HeadHunter (hh.ru), the leading recruitment platform in Russia and the CIS. This blazing-fast scraper delivers detailed vacancy data in seconds. Supercharge your HR analytics and job market research with high-speed, structured data extraction.
Pricing
Pay per usage
Rating
5.0
(1)
Developer

Shahid Irfan
Actor stats
1
Bookmarked
15
Total users
7
Monthly active users
7 days ago
Last modified
Categories
Share
hh.ru Jobs Scraper
Extract comprehensive job vacancy data from hh.ru with fast, automated collection. Gather job titles, salary information, skills, schedule details, and full descriptions in one structured dataset. Built for recruiting teams, labor market research, and job trend monitoring.
Features
- Complete Vacancy Records - Collects rich job details for every vacancy, not just list-level summaries.
- Powerful Search Filters - Search by keywords, region, experience level, schedule, and employment type.
- Clean Structured Output - Returns normalized records with empty and null values removed.
- Pagination at Scale - Continues through result pages until your target result count is reached.
- Ready for Automation - Works well in scheduled workflows and downstream data pipelines.
Use Cases
Recruitment Intelligence
Track open roles, salary bands, and required skills across employers to improve hiring strategy.
Labor Market Analysis
Build datasets for demand trends, role distribution, and regional hiring activity.
Competitive Monitoring
Monitor how similar companies position roles, compensation, and requirements over time.
Job Data Products
Feed job boards, analytics dashboards, and reporting workflows with regularly refreshed vacancy data.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | No | - | Start from a specific hh.ru vacancy search URL. |
text | String | No | - | Search query such as a role title or keyword. |
area | String | No | "1" | Region code (for example 1 for Moscow, 113 for all Russia). |
experience | String | No | "" | Experience filter: noExperience, between1And3, between3And6, moreThan6. |
schedule | String | No | "" | Schedule filter: remote, fullDay, shift, flexible, flyInFlyOut. |
employment | String | No | "" | Employment filter: full, part, project, volunteer, probation. |
results_wanted | Integer | No | 100 | Maximum number of vacancies to collect. |
max_pages | Integer | No | 20 | Maximum number of result pages to process. |
proxyConfiguration | Object | No | Residential proxy preset | Proxy settings for stable large-volume runs. |
Output Data
Each dataset item includes job-relevant fields when available:
| Field | Type | Description |
|---|---|---|
vacancy_id | String | Vacancy identifier. |
title | String | Vacancy title. |
company | String | Employer name. |
employer_id | String | Employer identifier. |
employer_url | String | Employer profile URL. |
location | String | Vacancy location. |
address | Object | Structured address details (when available). |
salary | String | Human-readable salary string. |
salary_from | Number | Salary lower bound. |
salary_to | Number | Salary upper bound. |
salary_currency | String | Salary currency code. |
salary_is_gross | Boolean | Salary tax mode indicator. |
experience | String | Required experience level. |
employment_type | String | Employment type label. |
employment_form | String | Employment form label. |
schedule | String | Work schedule label. |
work_format | Array | Work format values. |
working_hours | Array | Working hour options. |
work_schedule_days | Array | Schedule-by-days values. |
working_time_intervals | Array | Shift interval values. |
working_time_modes | Array | Time mode values. |
skills | Array | Key skills. |
professional_roles | Array | Professional role labels. |
specializations | Array | Specialization labels. |
languages | Array | Language requirements. |
description_html | String | Vacancy description in HTML. |
description_text | String | Plain text description. |
requirement_snippet | String | Short requirements snippet (if present). |
responsibility_snippet | String | Short responsibilities snippet (if present). |
date_posted | String | Vacancy publication timestamp. |
date_created | String | Vacancy creation timestamp. |
date_first_created | String | Initial creation timestamp. |
url | String | Vacancy URL. |
apply_url | String | Direct apply URL. |
premium | Boolean | Premium listing indicator. |
archived | Boolean | Archived listing indicator. |
has_test | Boolean | Test assignment indicator. |
response_letter_required | Boolean | Cover letter requirement indicator. |
accept_temporary | Boolean | Temporary work acceptance. |
accept_incomplete_resumes | Boolean | Incomplete resume acceptance. |
internship | Boolean | Internship flag. |
night_shifts | Boolean | Night shifts flag. |
source | String | Data source label. |
scraped_at | String | Collection timestamp. |
api_data | Object | Full cleaned vacancy payload with empty fields removed. |
Usage Examples
Basic Keyword Search
{"text": "python developer","area": "1","results_wanted": 50}
Remote Jobs With Experience Filter
{"text": "data analyst","area": "113","experience": "between1And3","schedule": "remote","results_wanted": 100,"max_pages": 10}
Start From a Custom Search URL
{"startUrl": "https://hh.ru/search/vacancy?text=frontend&area=2","results_wanted": 80}
Proxy Configuration Example
{"text": "golang","area": "1","results_wanted": 120,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Sample Output
{"vacancy_id": "125985240","title": "Python Developer","company": "Example Company","employer_id": "5756414","location": "Moscow","salary": "from 200000 to 300000 RUR net","salary_from": 200000,"salary_to": 300000,"salary_currency": "RUR","experience": "От 1 года до 3 лет","employment_type": "Полная занятость","schedule": "Удаленная работа","skills": ["Python", "FastAPI", "PostgreSQL"],"description_text": "Full plain text vacancy description...","date_posted": "2026-02-16T10:15:00+0300","url": "https://hh.ru/vacancy/125985240","apply_url": "https://hh.ru/applicant/vacancy_response?vacancyId=125985240","source": "hh.ru API","scraped_at": "2026-02-16T10:30:00.000Z"}
Tips for Best Results
Search Strategy
- Use focused role keywords (for example,
python developer,product manager). - Narrow by
areawhen you need region-specific insights. - Add
experience,schedule, andemploymentfilters to reduce noise.
Collection Size
- Start with
results_wantedbetween20and100for test runs. - Increase limits gradually for production collections.
- Use
max_pagesas a safety cap for predictable run size.
Reliability
- Use residential proxies for larger runs.
- Run on schedules to keep your dataset fresh.
- Monitor run output metrics (
totalResults,durationSeconds,averageSpeed).
Integrations
Connect your dataset with:
- Google Sheets - Share and analyze data quickly.
- Airtable - Build searchable vacancy databases.
- Looker Studio / BI tools - Create hiring trend dashboards.
- Webhooks - Push records into custom pipelines.
- Make - Automate no-code workflows.
- Zapier - Trigger downstream actions.
Export Formats
- JSON - Development and API workflows.
- CSV - Spreadsheet analysis.
- Excel - Business reporting.
- XML - System integration workflows.
Frequently Asked Questions
Does this actor collect full job details automatically?
Yes. Every collected vacancy is enriched with full available details and stored in a clean record.
Are empty and null fields included in output?
No. Output records are cleaned so empty and null values are removed.
Can I scrape all Russia instead of one city?
Yes. Use area: "113" for nationwide collection.
How can I get remote-only jobs?
Set schedule to "remote" in the input.
What if some fields are missing in a vacancy?
Some vacancies do not publish every attribute. Only available non-empty fields are returned.
Can I run this actor on a schedule?
Yes. You can schedule runs in Apify to keep job data continuously updated.
Support
For issues or feature requests, contact support through the Apify Console.
Resources
Legal Notice
This actor is intended for legitimate data collection and analysis. You are responsible for complying with website terms, platform policies, and applicable laws in your jurisdiction.