Work.ua Job Scraper: Ukraine Vacancies & Salary avatar

Work.ua Job Scraper: Ukraine Vacancies & Salary

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Work.ua Job Scraper: Ukraine Vacancies & Salary

Work.ua Job Scraper: Ukraine Vacancies & Salary

Scrape Work.ua, Ukraine's job board, by keyword, city or category: vacancy title, employer, city, salary range in hryvnia as numbers, experience, schedule and posting date. Optional full description and skills. Job ads only, no CVs or phone numbers.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

reventadata

reventadata

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

Categories

Share

Unofficial. This Actor is not affiliated with, authorised by, endorsed by, or in any way officially connected to Work.ua. "Work.ua" is a trademark of its respective owner and is used here only to describe what this tool reads. It reads the same public vacancy pages a browser does.

Search Work.ua, Ukraine's job board (work.ua), by keyword, city or category and get one clean row per vacancy: title, employer, location, salary range in hryvnia, experience, schedule, posting date and, if you ask for it, the full description, requirements and skills.

What does it do?

For each search term it walks the result pages of the Work.ua vacancy search and saves one row per vacancy. With Fetch full vacancy pages switched on it also opens each vacancy page and adds the description, requirements, skill tags, work place and the company link. Only job ads are read: employer names, titles, salaries and locations the site shows to anyone. No CVs, no phone numbers, no e-mail addresses.

Why use it?

  • Salary as numbers. When the vacancy shows a bold salary range (for example 35 000 – 50 000 грн), salaryMin, salaryMax and salaryCurrency hold it as integers and salaryAfterDeductions says whether it is net of tax. Wording the employer typed instead (Договірна, від 1200$, an hourly rate) stays in salaryText and is never guessed into a number.
  • Any keyword, any city, any category. Ukrainian or English terms, a city slug such as kyiv or lviv, one of 28 work.ua categories, or the remote-work listing.
  • Filters that run before you pay. Salary band, posted within N days, maximum required experience, verified companies only, words the vacancy must or must not contain. Rows they drop are not charged.
  • Flags work.ua adds. Remote and hybrid, hot (paid promotion), new, reservation for employees (hasDeferment), salary above the average for the role, who the employer is ready to hire (suitableFor), verified and VIP company.
  • Dates in Kyiv time. postedDate on every row, postedAt as a timestamp with the Kyiv offset where the site gives one.

How to use it

  1. Put one or more terms in searchQueries, for example python or водій. Leave it empty and pick a city, a category or Remote only to list everything there.
  2. Set maxItems (rows to save) and, if you want, filters.
  3. Run the Actor and download the dataset as JSON, CSV or Excel.

Input

FieldTypeDescription
searchQueriesarrayJob titles or keywords, one search per term. Empty: list every vacancy under the chosen city, category or remote listing.
maxItemsintegerTotal rows to save across all queries, counted after the filters. Default 100. Queries run in the order given and the run stops once the cap is reached.
maxPagesintegerResult pages per query, 1 to 500. Default 10 (14 vacancies a page, up to 140 per query). The Actor stops earlier at the last page the site has.
citystringwork.ua city slug: kyiv, lviv, odesa, dnipro, kharkiv, zaporizhzhya, ivano-frankivsk. Full list at work.ua/jobs/by-region/. An unknown slug returns no vacancies. Cannot be combined with remoteOnly.
remoteOnlybooleanSearch work.ua's remote-work listing. Cannot be combined with city.
categorystringOne of 28 work.ua category slugs, for example it, sales, retail, accounting.
includeDetailsbooleanOpen every vacancy page for the full description, requirements, skills, work place, schedule and company link. One extra request per vacancy, so the run is slower. Default off.
minSalary, maxSalaryintegerSalary band in hryvnia against the bold numeric range. Vacancies without a numeric range are dropped when either is set.
onlyWithSalarybooleanDrop vacancies without a numeric salary range.
postedWithinDaysintegerKeep vacancies posted in the last N days, Kyiv time (0 = today).
maxExperienceYearsintegerKeep vacancies asking for at most N years. Vacancies that state none pass.
verifiedCompaniesOnlybooleanKeep only companies carrying work.ua's verified tick.
includeKeywords, excludeKeywordsarrayWords the title, company or snippet must / must not contain, ignoring case and accents.
proxyConfigurationobjectApify Unblocker (default, and the only transport measured to work).

Sample input

{
"searchQueries": ["python"],
"remoteOnly": true,
"category": "it",
"minSalary": 50000,
"postedWithinDays": 14,
"maxItems": 50
}

Output

One row per vacancy:

FieldTypeDescription
id, urlstringwork.ua vacancy id and page URL.
titlestringVacancy title.
companystring / nullEmployer name. Null when work.ua shows Компанія прихована (company hidden); companyHidden is then true.
companyVerified, companyIsVipbooleanwork.ua's verified tick and VIP label.
companyLogostring / nullLogo image URL.
locationstringCity or place as shown (Київ, Вся Україна, Дистанційно). The distance suffix is split into distanceFromCenterKm.
isRemote, isHybridbooleanLocation is Дистанційно; conditions list Гібридний формат.
conditionsarrayThe card's conditions line split on the dot: experience, employment type, schedule.
experienceYearsMininteger / nullYears from Досвід від N, null when none is stated.
suitableFor, studentsWelcomestring / booleanThe card's Кому підходить line, and whether it names students.
contactMethodsarrayWays the employer accepts contact (Телефон, Чат). No numbers or addresses are collected.
salaryTextstring / nullSalary as shown.
salaryMin, salaryMax, salaryCurrencyinteger / string / nullThe bold range in hryvnia (UAH); null when there is none.
salaryAfterDeductionsboolean / nullПісля всіх відрахувань (net) shown next to the range.
salaryNotestring / nullThe employer's remark next to the range.
snippetstringTwo-line excerpt from the listing.
isHot, isNew, hasDeferment, salaryAboveAveragebooleanLabels Гаряча, Нове, Бронювання, Вища за середню.
postedAt, postedDatestring / nullTimestamp with Kyiv offset (null on hot cards, which show a date only) and the date YYYY-MM-DD.
matchedKeyword, pagestring, integerThe query that returned the row (empty with no keyword) and its result page.
scrapedAtstringISO 8601 UTC timestamp.

With Fetch full vacancy pages each row also has: detailFetched (false when the vacancy was closed or unreachable, then the fields below are null or empty), description, requirements, skills, workplace, employmentSchedule, companyId, companyUrl, detailPostedAt.

Sample output

Listing row, from a real run on 2026-10-21 (scrapedAt set to a fixed time):

{
"id": "8554021",
"url": "https://www.work.ua/jobs/8554021/",
"title": "Молоший оператор АЗК, заправник (р-н Корчуватого, подобово)",
"company": "OKKO",
"companyHidden": false,
"companyVerified": false,
"companyIsVip": true,
"companyLogo": "https://assets.work.ua/employer_design/19423/company_logo_v8.png",
"location": "Київ",
"distanceFromCenterKm": 11,
"isRemote": false,
"isHybrid": false,
"conditions": [
"Позмінний графік: 1/3, 2/2"
],
"experienceYearsMin": null,
"suitableFor": "Готові взяти студентів, людей з інвалідністю, пенсіонерів",
"studentsWelcome": true,
"contactMethods": [
"Телефон",
"Чат"
],
"salaryText": "16 000 грн",
"salaryMin": 16000,
"salaryMax": 16000,
"salaryCurrency": "UAH",
"salaryAfterDeductions": true,
"salaryNote": "+чайові",
"snippet": "ОККО — це місце, де робота кожного важлива та має значення. Тому без тебе ніяк! Долучайся до команди ОККО, формуймо надійний тил нашої країни разом! Шукаємо МОЛ…",
"isHot": false,
"isNew": true,
"hasDeferment": false,
"salaryAboveAverage": false,
"postedAt": "2026-10-21T17:10:04+03:00",
"postedDate": "2026-10-21",
"matchedKeyword": "",
"page": 27,
"scrapedAt": "2026-10-21T12:00:00+00:00"
}

A row with Fetch full vacancy pages on (same day; description and snippet shortened here):

{
"id": "8337576",
"url": "https://www.work.ua/jobs/8337576/",
"title": "Фахівець з аналітики",
"company": "Ekipazh, завод",
"companyHidden": false,
"companyVerified": true,
"companyIsVip": false,
"companyLogo": "https://assets.work.ua/employer_design/510829/company_logo_v2.png",
"location": "Златопіль",
"distanceFromCenterKm": null,
"isRemote": false,
"isHybrid": false,
"conditions": [
"Стандартний графік: 5/2"
],
"experienceYearsMin": null,
"suitableFor": null,
"studentsWelcome": false,
"contactMethods": [
"Чат"
],
"salaryText": "20 000 грн",
"salaryMin": 20000,
"salaryMax": 20000,
"salaryCurrency": "UAH",
"salaryAfterDeductions": true,
"salaryNote": null,
"snippet": "Вища освіта. Привіт! Ми — команда EKIPAZH, один із лідерів ринку світлопрозорих конструкцій в Україні, який вже понад 15…",
"isHot": false,
"isNew": true,
"hasDeferment": true,
"salaryAboveAverage": false,
"postedAt": "2026-10-21T15:07:05+03:00",
"postedDate": "2026-10-21",
"matchedKeyword": "data analyst",
"page": 1,
"description": "Привіт! Ми — команда EKIPAZH, один із лідерів ринку світлопрозорих конструкцій в Україні, який вже понад 15 років створює якісний продукт, що прикрашає будівлі не лише в нашій країн. Запрошує до своєї…",
"requirements": [
"Вища освіта."
],
"skills": [
"MS Excel",
"Користувач 1С",
"Ведення управлінського обліку",
"Користувач ERP-системи",
"Формування зведених таблиць",
"Уважність",
"Планування бюджету",
"Аналіз даних",
"Економічний аналіз",
"Аналіз вимог",
"Робота з великим обсягом інформації",
"Аудит"
],
"workplace": "Златопіль",
"employmentSchedule": "Повна зайнятість · Стандартний графік: 5/2",
"companyId": "510829",
"companyUrl": "https://www.work.ua/jobs/by-company/510829/",
"detailPostedAt": "2026-10-21T15:07:05+03:00",
"detailFetched": true,
"scrapedAt": "2026-10-21T12:00:00+00:00"
}

Limits

  • Work.ua's own filters are not used. Its robots.txt disallows the filter parameters (salaryfrom=, days=, experience= and others), so the salary, date and experience filters here run on the rows after they are read. A narrow filter on a broad search therefore reads many pages for few rows; maxPages bounds it.
  • Page one of a broad search is mostly promoted vacancies. In a 1,000-row run on the whole Kyiv listing (2026-10-21), 358 rows carried the Гаряча label and had no postedAt; the other 642 did.
  • Salary numbers are the bold range only. In that run 675 of 1,000 rows had one and 762 had some salary text. Employer wording such as 40 000 грн (до оподаткування) stays text.
  • Promoted inserts are skipped. work.ua puts an extra sponsored card (the Defence Forces slot) into some result pages that its own count leaves out; it is not saved.
  • Search matching is the site's. work.ua matches loosely: a search for data analyst returned accounting vacancies that list data analysis among their skills. Use includeKeywords to tighten it.
  • A hyphen inside a search term can be read by work.ua as a city or category prefix. Write multi-word terms with spaces.
  • Pages past the last page of a query come back empty; the Actor stops there.
  • A run that saves zero rows fails instead of finishing empty, so a mistyped slug or an over-strict filter is visible.

How fast is it?

About 7 seconds per result page of up to 14 vacancies. Measured 2026-10-21: 1,000 rows over 77 pages of the Kyiv listing in 8 minutes 38 seconds. With Fetch full vacancy pages the Actor opens four vacancy pages at a time: 28 vacancies plus 2 result pages took 27 seconds.

How much does it cost to scrape Work.ua?

Pay-per-event: $0.001 per result saved to the dataset ($1.00 per 1,000 results), plus $0.00005 charged once when the run starts. No subscription. Filters run before a row is saved, so rows they drop are not charged.

FAQ

Is a proxy required? Yes. Work.ua sits behind a Cloudflare challenge: plain, datacenter and residential requests got an HTTP 403 challenge page on 73 of 75 test pages (one page got through, one request failed), and Apify Unblocker returned a real page on 25 of 25 (2026-10-21). The Actor defaults to Unblocker.

Does it collect CVs, phone numbers or e-mail addresses? No. It reads vacancy ads and the public employer names shown on them. The phone-reveal and resume pages are never requested.

Why is postedAt empty on some rows? Work.ua shows a time only on non-promoted cards. Promoted (isHot) cards carry a date, in postedDate.

Why is company null? The employer chose to hide its name; work.ua shows Компанія прихована. companyHidden is true.

Does it cover Robota.ua or other Ukrainian job boards? No. It reads work.ua only.

More scrapers

ActorWhat it scrapes
Gupy Jobs Brazil ScraperCareers and openings on Gupy, Brazil
Amazon Product & Price ScraperAmazon product listings and prices
Idealo Price Comparison ScraperIdealo price comparison listings