Work.ua Scraper avatar

Work.ua Scraper

Pricing

from $1.60 / 1,000 results

Go to Apify Store
Work.ua Scraper

Work.ua Scraper

Scrape job listings from Work.ua, Ukraine's #1 job board with 100,000+ active vacancies. Returns titles, salaries, companies, skills, geolocation and full descriptions. Incremental change tracking, compact LLM mode, keyword, date, category and salary filters. No API key required.

Pricing

from $1.60 / 1,000 results

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

2

Bookmarked

31

Total users

7

Monthly active users

0.32 hours

Issues response

2 days ago

Last modified

Share

Work.ua Scraper

Extract job listings from work.ua — Ukraine's #1 job board with 100,000+ active vacancies — in a clean, consistent structure ready for analysis, job boards, recruiting tools and market research. No API key required.


Why this scraper?

🎯 Built for Ukraine

A dedicated Ukrainian scraper, not a global tool with a country dropdown. Search, locations and currency (UAH) are tuned for work.ua.

📄 Complete job data

Full job title and description (text, HTML and Markdown), direct listing URL and publish date for every record.

💶 Salary data

Salary information parsed from the listing where the employer publishes it, in UAH. Missing salaries are returned as null, never guessed.

🏢 Company & location

Hiring company name, logo, company page, VIP/anonymous flags, plus structured location with street and geolocation (latitude/longitude) where available.

🏷️ Rich work.ua flags

Per-listing signals such as student-, veteran-, disability- and retiree-friendly, hybrid work, military-deferment eligibility, and above-market salary.

♻️ Incremental change tracking

Turn on incremental mode to tag every job NEW / UPDATED / UNCHANGED with first- and last-seen timestamps, and receive only changed listings on scheduled runs.

🤖 LLM-ready output

Compact mode returns core fields only, and you can pick a single description format (text, HTML or Markdown) or truncate it — ideal for AI-agent and MCP workflows.

🔎 Precise filtering

Filter by keyword include/exclude, date range, category, and minimum salary.


Input parameters

ParameterTypeDefaultDescription
searchQuerystring"developer"Job search keywords (e.g. 'developer', 'менеджер', 'python'). Leave empty to return all jobs.
locationstring(empty)City name in English or Ukrainian (e.g. 'Kyiv', 'Київ', 'Lviv', 'Одеса'). Leave empty for all of Ukraine.
daysOldinteger(empty)Return only jobs posted within this many days. Accepted values: 1, 7, 14, 30. Leave empty for all dates.
sortBystring"date"Sort order for results on Work.ua.
maxResultsinteger5Maximum number of job listings to return.
fetchDescriptionbooleantrueVisit each job's detail page to retrieve the full description (HTML, text, Markdown), skills list and employment type. Slower but richer. Salary and company data are returned either way.
proxyobject{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}RESIDENTIAL proxy is required for Work.ua. Defaults to Apify RESIDENTIAL.
startUrlsarray(empty)Optional: Work.ua search or job URLs as objects, e.g. [{"url": "https://www.work.ua/jobs-developer/"}]. When set, keywords and location are ignored.
minSalaryinteger(empty)Only return jobs offering at least this monthly salary in UAH.
categoryIdsarray(empty)Work.ua category IDs to filter by, e.g. [1, 23].
compactbooleanfalseReturn core fields only — ideal for LLM / AI-agent workflows.
descriptionFormatstring"all"Which description variants to emit: all, text, html, or markdown.
descriptionMaxLengthinteger0Truncate descriptions to N characters. 0 = no truncation.
excludeEmptyFieldsbooleanfalseDrop null / empty fields from each record.
includeKeywordsarray(empty)Keep only jobs whose title or description contains ANY of these words.
excludeKeywordsarray(empty)Drop jobs whose title or description contains ANY of these words.
fromDatestring(empty)Only include jobs posted on or after this date (YYYY-MM-DD).
toDatestring(empty)Only include jobs posted on or before this date (YYYY-MM-DD).
incrementalModebooleanfalseTag jobs NEW / UPDATED / UNCHANGED across runs and emit only changed listings.
stateKeystring(auto)Stable identifier for the tracked search. Auto-generated from search terms if empty.
emitUnchangedbooleanfalseWhen incremental, also emit unchanged jobs.

Output schema

Every field below is present on every record. Fields the source does not publish for a given job are returned as null rather than omitted.

FieldTypeDescription
jobIdstringWork.ua internal listing ID
titlestringJob title
urlstringDirect link to the listing
publishDatestringDate posted
companystringHiring company name
companyIdstringWork.ua company ID
companyUrlstringLink to the company's page on the source.
companyVerifiedbooleantrue if the company is verified on Work.ua
companyLogoUrlstringCompany logo url.
companyIsVipbooleantrue if the company holds a VIP placement on Work.ua
companyIsAnonymousbooleantrue if the employer is posted anonymously
locationstringLocation as displayed
streetstringStreet address, when the listing provides one
latitudenumberJob latitude, when geolocated
longitudenumberJob longitude, when geolocated
regionIdnumberWork.ua numeric region ID
categoryIdsarrayWork.ua category IDs for the listing
salaryRawstringSalary text as displayed
salaryMinnumberMinimum salary (numeric), or null
salaryMaxnumberMaximum salary (numeric), or null
currencystringSalary currency, e.g. UAH, USD
salaryCommentstringSalary comment.
salaryAboveMarketAveragebooleanWork.ua's flag that the salary is above market average
employmentTypestringe.g. Повна зайнятість, Часткова зайнятість
isHotbooleantrue for urgently hiring listings
isHybridbooleantrue for hybrid-work listings
isNoResumeRequiredbooleantrue if applying needs no resume
isStudentFriendlybooleantrue if suitable for students
isDisabilityFriendlybooleantrue if suitable for people with disabilities
isVeteranFriendlybooleantrue if suitable for veterans
isRetiredFriendlybooleantrue if suitable for retirees
isDefermentEligiblebooleantrue if the role qualifies for military service deferment
skillsarraySkills listed on the posting.
descriptionHtmlstringFull job description in HTML.
descriptionTextstringFull job description in plain text.
descriptionMarkdownstringFull description converted to Markdown.
scrapedAtstringISO 8601 scrape timestamp

With incremental mode

FieldTypeDescription
changeTypestringNEW, UPDATED or UNCHANGED relative to previous runs
contentHashstringContent hash used for change detection
firstSeenAtstringISO timestamp the job was first seen
lastSeenAtstringISO timestamp the job was last seen

Example record

{
"jobId": "8174430",
"title": "Рекрутер",
"url": "https://www.work.ua/jobs/8174430/",
"publishDate": "2026-06-24",
"company": "Pro recruitment",
"companyId": "2436992",
"companyUrl": "https://www.work.ua/jobs/by-company/2436992/",
"companyVerified": true,
"companyLogoUrl": "https://i.work.ua/employer_design/9/9/2/2436992_company_logo_4.png",
"location": null,
"salaryRaw": "45000 – 64000 грн",
"salaryMin": 45000,
"salaryMax": 64000,
"currency": "UAH",
"salaryComment": null,
"employmentType": "Повна зайнятість",
"isHot": true,
"skills": [
"Ведення CRM",
"Комунікабельність",
"Підбір персоналу",
"Оцінка кандидатів"
],
"descriptionHtml": "<p>Шукаємо <b>Рекрутера</b>, який стане ключовим рушієм у формуванні команди офісного напрямку компанії.</p><p>Ви буде відповідати за побудову системного, передбачуваного і швидкого процесу залучення …",
"descriptionText": "Шукаємо Рекрутера , який стане ключовим рушієм у формуванні команди офісного напрямку компанії. Ви буде відповідати за побудову системного, передбачуваного і швидкого процесу залучення найкращих фахів …",
"descriptionMarkdown": "Шукаємо **Рекрутера**, який стане ключовим рушієм у формуванні команди офісного напрямку компанії.\n\nВи буде відповідати за побудову системного, передбачуваного і швидкого процесу залучення найкращих ф …",
"scrapedAt": "2026-07-02T15:21:15.293Z"
}

Examples

Search for бухгалтер roles in Київ:

{
"searchQuery": "бухгалтер",
"location": "Київ",
"maxResults": 100
}

Only jobs from the last 3 days:

{
"searchQuery": "бухгалтер",
"location": "Київ",
"maxResults": 100,
"daysOld": 3
}

Scrape a specific search URL:

{
"startUrls": [
{
"url": "https://www.work.ua/"
}
],
"maxResults": 200
}

Daily feed (run on a schedule):

{
"searchQuery": "бухгалтер",
"daysOld": 1,
"maxResults": 500
}

Schedule this input to run once a day in the Apify Scheduler — each run returns only jobs posted in the last 24 hours.


💰 Pricing

$1.99 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.

ResultsCost
100~$0.199
1,000~$1.99
10,000~$19.90
100,000~$199

Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Subscription tiers lower the rate further, down to $1.20 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.


Performance

Run sizeTypical time
100 resultsunder 1 minute
1,000 results2–4 minutes
10,000 results20–35 minutes

Known limitations

  • Salary is only returned when the employer publishes it — many listings carry null salary fields.
  • Company details vary per listing; the scraper returns what the source publishes and never invents data.
  • Very large result sets are bounded by the source's own paging limits.
  • Listings can be removed by the source at any time, so a small share of URLs may expire shortly after scraping.

Technical details

  • Source: work.ua — Ukraine job listings
  • Coverage: everything the public search exposes, filterable via the input parameters above
  • Retry: automatic retry on network errors with exponential backoff

Need a custom scraper?

Unfenced Group builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

Get in touch: www.unfencedgroup.nl