hh.ru Job Scraper avatar

hh.ru Job Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
hh.ru Job Scraper

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

from $1.00 / 1,000 results

Rating

5.0

(2)

Developer

Shahid Irfan

Shahid Irfan

Maintained by Community

Actor stats

3

Bookmarked

47

Total users

11

Monthly active users

21 hours ago

Last modified

Share

hh.ru Jobs Scraper

Extract job vacancy data from hh.ru with fast automated collection. Gather job titles, employers, locations, salaries, schedules, descriptions, and apply links in a clean dataset built for recruiting teams, market research, monitoring, and vacancy intelligence workflows.

Features

  • Fast Collection by Default — Uses the fastest stable collection path and avoids browser overhead.
  • Flexible Entry Points — Start from keywords, filtered search URLs, saved searches, or a direct vacancy URL.
  • Flat Output by Default — Returns clean vacancy records without large duplicated raw payloads.
  • Summary Fallback on Detail Gaps — Keeps stable summary records when some detail attributes are unavailable.
  • Clean Structured Output — Removes duplicate vacancy records and strips empty or null values automatically.
  • Pagination at Scale — Continues through result pages until your target result count is reached.
  • Ready for Automation — Fits recurring monitoring, reporting, enrichment, and downstream 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

ParameterTypeRequiredDefaultDescription
startUrlStringNo-Start from a specific hh.ru search URL or a direct vacancy URL.
textStringNo-Search query such as a role title or keyword.
areaStringNo"1"Region code (for example 1 for Moscow, 113 for all Russia).
experienceStringNo""Experience filter: noExperience, between1And3, between3And6, moreThan6.
scheduleStringNo""Schedule filter: remote, fullDay, shift, flexible, flyInFlyOut.
employmentStringNo""Employment filter: full, part, project, volunteer, probation.
results_wantedIntegerNo20Maximum number of vacancies to collect.
max_pagesIntegerNo20Maximum number of result pages to process.
api_onlyBooleanNotrueKeep the run on the fast primary collection path only. When details are unavailable, the actor saves the summary record and continues.
include_raw_dataBooleanNofalseInclude the large nested raw payload in each item. Leave disabled for smaller, flatter datasets.
proxyConfigurationObjectNoOffProxy settings for more stable large-volume runs.

Output Data

Each dataset item includes job-relevant fields when available. Some detail-only fields can be absent when a vacancy does not expose them:

FieldTypeDescription
vacancy_idStringVacancy identifier.
titleStringVacancy title.
companyStringEmployer name.
employer_idStringEmployer identifier.
employer_urlStringEmployer profile URL.
locationStringVacancy location.
addressObjectStructured address details (when available).
salaryStringHuman-readable salary string.
salary_fromNumberSalary lower bound.
salary_toNumberSalary upper bound.
salary_currencyStringSalary currency code.
salary_is_grossBooleanSalary tax mode indicator.
experienceStringRequired experience level.
employment_typeStringEmployment type label.
employment_formStringEmployment form label.
scheduleStringWork schedule label.
work_formatArrayWork format values.
working_hoursArrayWorking hour options.
work_schedule_daysArraySchedule-by-days values.
working_time_intervalsArrayShift interval values.
working_time_modesArrayTime mode values.
skillsArrayKey skills.
professional_rolesArrayProfessional role labels.
specializationsArraySpecialization labels.
languagesArrayLanguage requirements.
description_htmlStringVacancy description in HTML.
description_textStringPlain text description.
requirement_snippetStringShort requirements snippet (if present).
responsibility_snippetStringShort responsibilities snippet (if present).
date_postedStringVacancy publication timestamp.
date_expiresStringVacancy expiry timestamp when available.
date_createdStringVacancy creation timestamp.
date_first_createdStringInitial creation timestamp.
applicant_location_requirementsStringApplicant geography requirement when available.
urlStringVacancy URL.
apply_urlStringDirect apply URL.
premiumBooleanPremium listing indicator.
archivedBooleanArchived listing indicator.
has_testBooleanTest assignment indicator.
response_letter_requiredBooleanCover letter requirement indicator.
accept_temporaryBooleanTemporary work acceptance.
accept_incomplete_resumesBooleanIncomplete resume acceptance.
internshipBooleanInternship flag.
night_shiftsBooleanNight shifts flag.
sourceStringData source label.
scraped_atStringCollection timestamp.
api_dataObjectOptional raw vacancy payload, included only when include_raw_data=true.

Usage Examples

{
"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 Saved Search URL

{
"startUrl": "https://hh.ru/search/vacancy?area=99&saved_search_id=88196915&no_magic=true&employer_id=3388&experience=between1And3&search_field=description",
"results_wanted": 25,
"max_pages": 5
}

Start From a Direct Vacancy URL

{
"startUrl": "https://hh.ru/vacancy/132160978",
"results_wanted": 1
}

Proxy Configuration Example

{
"text": "golang",
"area": "1",
"results_wanted": 120,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Sample Output

{
"vacancy_id": "132160978",
"title": "AI-разработчик",
"company": "EdAgency (ИП Синицын Антон Сергеевич)",
"employer_id": "9603653",
"location": "Moscow",
"experience": "1–3 года",
"employment_type": "Полная занятость",
"employment_form": "Договор ГПХ с самозанятым",
"schedule": "5/2",
"work_format": ["удалённо"],
"working_hours": ["6 или по договорённости"],
"description_text": "Full plain text vacancy description...",
"date_posted": "2026-04-18T12:14:09.154+03:00",
"date_expires": "2026-05-15T12:14:09.154+03:00",
"applicant_location_requirements": "Россия",
"url": "https://hh.ru/vacancy/132160978",
"apply_url": "https://hh.ru/applicant/vacancy_response?vacancyId=132160978&employerId=9603653",
"source": "hh.ru",
"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 area when you need region-specific insights.
  • Add experience, schedule, and employment filters to reduce noise.

URL Selection

  • Use startUrl when you already have a complex search page with saved filters.
  • Use a direct vacancy URL when you want a single rich vacancy record.
  • Keep search URLs on hh.ru and avoid unrelated pages.

Collection Size

  • Start with results_wanted between 20 and 100 for test runs.
  • Increase limits gradually for production collections.
  • Use max_pages as 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 such as totalResults, durationSeconds, and averageSpeed.

Collection Strategy

  • Default runs use the fastest stable collection path and keep output lightweight.
  • Set api_only=false only if you want the actor to allow slower fallback parsing when the primary path is unavailable.
  • Set include_raw_data=true only when you explicitly need the large nested source payload in every item.

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 always collect full vacancy details automatically?

Not always. Some vacancies expose fewer details than others. When the actor cannot enrich a vacancy fully, it keeps the best available summary record instead of failing the run.

Are empty and null fields included in output?

No. Output records are cleaned so empty and null values are removed automatically.

Can it start from a direct vacancy URL?

Yes. Provide a vacancy URL in startUrl to collect a single detailed vacancy record.

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.

How do I get the raw nested source payload?

Set include_raw_data to true. By default it is disabled so the dataset stays smaller and flatter.

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


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.