Work.ua Scraper
Pricing
from $1.60 / 1,000 results
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
Maintained by CommunityActor stats
2
Bookmarked
31
Total users
7
Monthly active users
0.32 hours
Issues response
2 days ago
Last modified
Categories
Share

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
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | "developer" | Job search keywords (e.g. 'developer', 'менеджер', 'python'). Leave empty to return all jobs. |
location | string | (empty) | City name in English or Ukrainian (e.g. 'Kyiv', 'Київ', 'Lviv', 'Одеса'). Leave empty for all of Ukraine. |
daysOld | integer | (empty) | Return only jobs posted within this many days. Accepted values: 1, 7, 14, 30. Leave empty for all dates. |
sortBy | string | "date" | Sort order for results on Work.ua. |
maxResults | integer | 5 | Maximum number of job listings to return. |
fetchDescription | boolean | true | Visit 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. |
proxy | object | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} | RESIDENTIAL proxy is required for Work.ua. Defaults to Apify RESIDENTIAL. |
startUrls | array | (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. |
minSalary | integer | (empty) | Only return jobs offering at least this monthly salary in UAH. |
categoryIds | array | (empty) | Work.ua category IDs to filter by, e.g. [1, 23]. |
compact | boolean | false | Return core fields only — ideal for LLM / AI-agent workflows. |
descriptionFormat | string | "all" | Which description variants to emit: all, text, html, or markdown. |
descriptionMaxLength | integer | 0 | Truncate descriptions to N characters. 0 = no truncation. |
excludeEmptyFields | boolean | false | Drop null / empty fields from each record. |
includeKeywords | array | (empty) | Keep only jobs whose title or description contains ANY of these words. |
excludeKeywords | array | (empty) | Drop jobs whose title or description contains ANY of these words. |
fromDate | string | (empty) | Only include jobs posted on or after this date (YYYY-MM-DD). |
toDate | string | (empty) | Only include jobs posted on or before this date (YYYY-MM-DD). |
incrementalMode | boolean | false | Tag jobs NEW / UPDATED / UNCHANGED across runs and emit only changed listings. |
stateKey | string | (auto) | Stable identifier for the tracked search. Auto-generated from search terms if empty. |
emitUnchanged | boolean | false | When 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.
| Field | Type | Description |
|---|---|---|
jobId | string | Work.ua internal listing ID |
title | string | Job title |
url | string | Direct link to the listing |
publishDate | string | Date posted |
company | string | Hiring company name |
companyId | string | Work.ua company ID |
companyUrl | string | Link to the company's page on the source. |
companyVerified | boolean | true if the company is verified on Work.ua |
companyLogoUrl | string | Company logo url. |
companyIsVip | boolean | true if the company holds a VIP placement on Work.ua |
companyIsAnonymous | boolean | true if the employer is posted anonymously |
location | string | Location as displayed |
street | string | Street address, when the listing provides one |
latitude | number | Job latitude, when geolocated |
longitude | number | Job longitude, when geolocated |
regionId | number | Work.ua numeric region ID |
categoryIds | array | Work.ua category IDs for the listing |
salaryRaw | string | Salary text as displayed |
salaryMin | number | Minimum salary (numeric), or null |
salaryMax | number | Maximum salary (numeric), or null |
currency | string | Salary currency, e.g. UAH, USD |
salaryComment | string | Salary comment. |
salaryAboveMarketAverage | boolean | Work.ua's flag that the salary is above market average |
employmentType | string | e.g. Повна зайнятість, Часткова зайнятість |
isHot | boolean | true for urgently hiring listings |
isHybrid | boolean | true for hybrid-work listings |
isNoResumeRequired | boolean | true if applying needs no resume |
isStudentFriendly | boolean | true if suitable for students |
isDisabilityFriendly | boolean | true if suitable for people with disabilities |
isVeteranFriendly | boolean | true if suitable for veterans |
isRetiredFriendly | boolean | true if suitable for retirees |
isDefermentEligible | boolean | true if the role qualifies for military service deferment |
skills | array | Skills listed on the posting. |
descriptionHtml | string | Full job description in HTML. |
descriptionText | string | Full job description in plain text. |
descriptionMarkdown | string | Full description converted to Markdown. |
scrapedAt | string | ISO 8601 scrape timestamp |
With incremental mode
| Field | Type | Description |
|---|---|---|
changeType | string | NEW, UPDATED or UNCHANGED relative to previous runs |
contentHash | string | Content hash used for change detection |
firstSeenAt | string | ISO timestamp the job was first seen |
lastSeenAt | string | ISO 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.
| Results | Cost |
|---|---|
| 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 size | Typical time |
|---|---|
| 100 results | under 1 minute |
| 1,000 results | 2–4 minutes |
| 10,000 results | 20–35 minutes |
Known limitations
- Salary is only returned when the employer publishes it — many listings carry
nullsalary 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