HeadHunter RU $1๐Ÿ’ฐ URL | Filters | Enriched Job Data avatar

HeadHunter RU $1๐Ÿ’ฐ URL | Filters | Enriched Job Data

Pricing

from $1.00 / 1,000 results

Go to Apify Store
HeadHunter RU $1๐Ÿ’ฐ URL | Filters | Enriched Job Data

HeadHunter RU $1๐Ÿ’ฐ URL | Filters | Enriched Job Data

From $1/1K. Scrape hh.ru job listings with 50+ fields including salary, experience, schedule, employment, and role. Search by filters or use URLs. Detail enrichment adds full descriptions, key skills, contact info, and employer logos.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

AbotAPI

AbotAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

hh.ru Jobs Scraper

Pull rich job listings from hh.ru (HeadHunter), Russia's largest job board, with 50+ fields per record. Filter by keywords, area, experience, schedule, employment, salary, and professional role; or paste search URLs directly. Detail-page enrichment adds full descriptions, key skills, contact info, and employer logos.

Why this scraper?

  • 50+ fields per vacancy, 4x richer than typical hh.ru scrapers. Includes keySkills, full HTML description, employer logos, GPS coordinates, metro stations, salary ranges (from/to + currency + gross/net), work formats, and contact info when public.
  • Two modes: pick keywords + area + filters, or paste hh.ru search URLs as-is.
  • Concurrent detail-page enrichment with per-record streaming push: results show up in the dataset as they finish, mid-run aborts preserve partial progress.
  • Free-tier friendly: works on Apify default datacenter proxy, no residential plan needed.
  • Full filter coverage: experience, employment, schedule, salary range, only-with-salary, professional role, industry, sort order.
  • Forward-walking pagination that respects hh.ru's 40-page (2000-listing) hard cap per filter.

Data you get

Sample shape, values are illustrative placeholders, not from a live listing.

FieldExample
vacancyId"100000001"
url"https://hh.ru/vacancy/100000001"
name"Sample Job Title"
publicationDate"2026-05-05T09:00:00.000+03:00"
creationDate"2026-05-01T09:00:00.000+03:00"
lastChangeTime"2026-05-04T09:00:00.000+03:00"
validThroughTime"2026-06-04T09:00:00.000+03:00"
salaryFrom200000
salaryTo300000
salaryCurrency"RUR"
salaryGrossfalse
salaryMode"MONTH"
salaryFrequency"TWICE_PER_MONTH"
area.id1
area.name"ะœะพัะบะฒะฐ"
area.path".113.1."
address.city"ะœะพัะบะฒะฐ"
address.street"Sample Street"
address.lat55.7558
address.lng37.6173
address.metroStations[{ "name": "Sample Station", "lineColor": "#000000" }]
address.district"Sample District"
company.id1000000
company.name"Sample Company"
company.visibleName"Sample Company"
company.isAccreditedITtrue
company.isTrustedtrue
company.siteUrl"https://www.example.com/"
company.logoUrl"https://hh.ru/employer-logo-original/0000000.png"
company.logos[{ "type": "ORIGINAL", "url": "..." }, ...]
company.badges[{ "type": "hrbrand", "description": "Sample badge" }]
workExperience"between1And3"
employmentForm"FULL"
employment"FULL"
workSchedule"fullDay"
workScheduleByDays["FIVE_ON_TWO_OFF"]
workFormats["ON_SITE"]
workingHours["HOURS_8"]
nightShiftsfalse
internshipfalse
acceptHandicappedfalse
acceptLaborContracttrue
description"<p>Full HTML description goes here...</p>"
descriptionText"Full plain-text description goes here..."
keySkills["Python", "Django", "PostgreSQL"]
contactInfo.name"Contact Name"
contactInfo.email"contact@example.com"
contactInfo.phones[{ "country": "7", "city": "495", "number": "0000000", "formatted": "7 495 0000000" }]
contactInfo.contactsHiddenfalse
professionalRoleIds[96, 156]
responsesCount42
totalResponsesCount100
onlineUsersCount5
isAdvfalse
searchUrl"https://hh.ru/search/vacancy?text=python&area=1&page=0"
searchSessionId"00000000-0000-0000-0000-000000000000"
scrapedAt"2026-05-05T12:00:00.000Z"

How to use

{
"mode": "search",
"queries": ["python"],
"areas": ["1"],
"maxPages": 5,
"maxListings": 100,
"fetchDetails": true
}

Search with filters (experience + remote + salary)

{
"mode": "search",
"queries": ["data scientist"],
"areas": ["1", "2"],
"experience": "between3And6",
"schedule": ["remote"],
"salaryMin": 200000,
"onlyWithSalary": true,
"orderBy": "salary_desc",
"maxPages": 10
}

URL mode (paste any hh.ru search URL)

{
"mode": "url",
"urls": [
"https://hh.ru/search/vacancy?text=AI%20engineer&area=1&experience=between1And3&schedule=remote&page=0"
],
"maxPages": 5,
"fetchDetails": true
}
{
"mode": "url",
"urls": [
"https://hh.ru/search/vacancy?text=python&area=1&page=0",
"https://hh.ru/search/vacancy?text=java&area=2&page=0"
],
"maxPages": 3
}

Input parameters

FieldTypeDefaultDescription
modestringsearchsearch or url
queriesstring[]["AI"]Keywords (one search per keyword). Russian fine.
areasstring[]["1"]Area IDs. 1=Moscow, 2=St Petersburg, 113=Russia. Full list at https://api.hh.ru/areas
experienceenumanyany, noExperience, between1And3, between3And6, moreThan6
employmentenum[][]Multi: full, part, project, volunteer, probation
scheduleenum[][]Multi: fullDay, shift, flexible, remote, flyInFlyOut
salaryMininteger(none)Minimum monthly RUB
onlyWithSalarybooleanfalseOnly listings with a published salary
orderByenumrelevancerelevance, publication_time, salary_desc, salary_asc, distance
professionalRolestring[][]Numeric role IDs from https://api.hh.ru/professional_roles
industrystring[][]Numeric industry IDs from https://api.hh.ru/industries
urlsstring[](example URL)URLs in URL mode. Filter fields ignored in this mode.
maxPagesinteger51 to 40 (hh.ru hard cap)
maxListingsinteger00 = unlimited
fetchDetailsbooleantrueAdds description, keySkills, contact info, full company logos
proxyobjectApify default datacenterApify Proxy datacenter works fine; Residential RU optional

Output example

Sample shape, values are illustrative placeholders, not from a live listing.

{
"vacancyId": "100000001",
"url": "https://hh.ru/vacancy/100000001",
"name": "Sample Senior Python Developer",
"publicationDate": "2026-05-05T09:00:00.000+03:00",
"creationDate": "2026-05-01T09:00:00.000+03:00",
"lastChangeTime": "2026-05-04T09:00:00.000+03:00",
"validThroughTime": "2026-06-04T09:00:00.000+03:00",
"isAdv": false,
"searchUrl": "https://hh.ru/search/vacancy?text=python&area=1&page=0",
"searchSessionId": "00000000-0000-0000-0000-000000000000",
"company": {
"id": 1000000,
"name": "Sample Company",
"visibleName": "Sample Company",
"isAccreditedIT": true,
"isTrusted": true,
"category": "COMPANY",
"state": "APPROVED",
"siteUrl": "https://www.example.com/",
"logoUrl": "https://hh.ru/employer-logo-original/0000000.png",
"logos": [
{ "type": "ORIGINAL", "url": "https://hh.ru/employer-logo-original/0000000.png" },
{ "type": "vacancyPage", "url": "https://hh.ru/employer-logo/0000000.png" }
],
"badges": [{ "type": "hrbrand", "description": "Sample badge" }]
},
"salaryFrom": 200000,
"salaryTo": 300000,
"salaryCurrency": "RUR",
"salaryGross": false,
"salaryMode": "MONTH",
"salaryFrequency": "TWICE_PER_MONTH",
"area": { "id": 1, "name": "ะœะพัะบะฒะฐ", "path": ".113.1." },
"address": {
"city": "ะœะพัะบะฒะฐ",
"street": "Sample Street",
"building": "1",
"displayName": "ะœะพัะบะฒะฐ, Sample Street, 1",
"lat": 55.7558,
"lng": 37.6173,
"metroStations": [
{ "id": 1, "name": "Sample Station", "lineColor": "#000000" }
],
"district": "Sample District"
},
"workExperience": "between3And6",
"employment": "FULL",
"employmentForm": "FULL",
"workSchedule": "remote",
"workScheduleByDays": ["FIVE_ON_TWO_OFF"],
"workFormats": ["REMOTE"],
"workingHours": ["HOURS_8"],
"nightShifts": false,
"internship": false,
"responseLetterRequired": false,
"acceptHandicapped": false,
"acceptLaborContract": true,
"responsesCount": 42,
"totalResponsesCount": 100,
"onlineUsersCount": 5,
"professionalRoleIds": [96, 156],
"languages": [{ "id": "eng", "name": "English", "level": "b2" }],
"userLabels": [],
"description": "<p>Full HTML description text goes here. Includes responsibilities, requirements, and conditions.</p>",
"descriptionText": "Full plain-text description text goes here. Includes responsibilities, requirements, and conditions.",
"keySkills": ["Python", "Django", "PostgreSQL", "Docker", "Git"],
"contactInfo": {
"name": "Contact Name",
"email": "contact@example.com",
"phones": [
{ "country": "7", "city": "495", "number": "0000000", "comment": null, "formatted": "7 495 0000000" }
],
"contactsHidden": false
},
"scrapedAt": "2026-05-05T12:00:00.000Z"
}

Plan requirement

  • Free Apify plan works. The default proxy is Apify Proxy datacenter, which is included on every plan and passes hh.ru reliably.
  • Residential RU is optional. If you want geo-pinned results (e.g. for region-specific salary surveys), pick Residential + RU in the proxy field. Requires Starter plan or higher.
  • Pagination cap: hh.ru caps each filter at 2000 vacancies (40 pages of 50). Use multiple queries or areas to slice past the cap.
  • maxListings: 0 = unlimited. Bounded only by maxPages and the 2000-cap above.

Tips

  • Russian keywords work. Pass "queries": ["ะฟั€ะพะณั€ะฐะผะผะธัั‚"] directly.
  • Get the latest postings: set "orderBy": "publication_time" to walk newest-first.
  • Skip detail pages for speed: set "fetchDetails": false to scrape pure SERP data (~30 listings per second). Keeps vacancyId, salary, area, address, company basics, work format, but drops description, keySkills, contactInfo.
  • Quick fan-out across regions: pass multiple areas (e.g. ["1", "2", "4"] for Moscow + St Petersburg + Novosibirsk) to compare a single keyword across markets.