Robota.Ua Scraper
Pricing
from $1.59 / 1,000 results
Robota.Ua Scraper
Scrape robota.ua — one of Ukraine's largest job boards. Extracts titles, structured UAH salary, company profiles and page links, skill tags, employment clusters and GPS coordinates. Filter by city, category, schedule, salary and date. No contact-person data. No API key required.
Pricing
from $1.59 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
3
Bookmarked
11
Total users
4
Monthly active users
2 days ago
Last modified
Categories
Share

Extract job listings from robota.ua, one of Ukraine's largest job boards, 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, categories, locations and currency (UAH) are tuned for robota.ua.
📄 Complete job data
Job title, teaser and — with fetchDetails — the full description in HTML, plain text and Markdown, plus the external application URL when the employer uses one.
💶 Structured salary
Minimum and maximum pay in UAH, a fixed figure where one is posted, and the free-text salary note. Undisclosed salaries are returned as null so you can filter them out. Roughly a third of listings publish a salary.
🏢 Company data
Employer name, robota.ua company ID and a link to the company page. Agency listings are flagged, and verified employers are marked (with fetchDetails).
📍 Precise location
City, district and nearest metro station where published, plus exact latitude/longitude for mapping.
🔁 Change detection
Every record carries a stable content hash and a change status (NEW, UPDATED, UNCHANGED, REAPPEARED) so you can track new and changed vacancies across runs. Cross-run deduplication is on by default.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | "developer" | Keyword to search for. Leave empty to return all vacancies. |
cityId | integer | (empty) | robota.ua city ID (e.g. 1 = Kyiv, 2 = Dnipro, 4 = Odesa, 5 = Kharkiv). Empty = all cities. |
scheduleId | integer | (empty) | Employment schedule: 1 = full-time, 2 = part-time, 3 = remote, 4 = freelance, 5 = internship. |
rubricIds | array | (empty) | One or more category (rubric) IDs, e.g. ["1"] for IT/Computers. Empty = all categories. |
salary | integer | (empty) | Minimum monthly salary in UAH. Empty = any salary. |
period | integer | (empty) | Only vacancies published in the last N days (e.g. 1, 7, 30). Empty = any time. |
language | integer | 2 | Text language: 1 = Ukrainian, 2 = Russian. |
maxResults | integer | 5 | Maximum number of listings to scrape (max 1500). You pay per result — keep low for tests. |
fetchDetails | boolean | false | Fetch the full description, employer website, tags, clusters, branch, seniority and agency flag per listing. |
skipDedup | boolean | false | Re-scrape all listings, including ones seen in previous runs. |
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.
Always present
| Field | Type | Description |
|---|---|---|
jobId | integer | robota.ua vacancy ID. |
title | string | Job title. |
url | string | Direct URL to the vacancy. |
companyName | string | Employer name. |
companyId | integer | null | robota.ua company ID. |
companyUrl | string | null | Link to the employer's company page on robota.ua. |
isAgency | boolean | Whether the poster is a recruitment agency. Resolved accurately with fetchDetails; false otherwise. |
cityName | string | City. |
cityId | integer | robota.ua city ID. |
districtName | string | null | City district, when published (~18% of listings). |
metroName | string | null | Nearest metro station, when published (~26% of listings). |
latitude | number | null | GPS latitude. |
longitude | number | null | GPS longitude. |
salary | number | null | Fixed monthly salary in UAH, when a single figure is posted. |
salaryFrom | number | null | Lower salary bound in UAH. |
salaryTo | number | null | Upper salary bound in UAH. |
salaryMin | number | null | Alias of salaryFrom. |
salaryMax | number | null | Alias of salaryTo. |
salaryComment | string | null | Free-text salary note. |
currency | string | Salary currency — always UAH. |
publishDate | string | Publication date, YYYY-MM-DD. |
publishDateISO | string | Publication timestamp, ISO 8601. |
isHot | boolean | Premium/urgent listing flag. |
publicationType | integer | robota.ua advertisement tier. |
badges | array | Listing badge labels (perks/benefits). |
shortDescription | string | Teaser text from the search card. |
applyUrl | string | null | External application form URL, when the employer uses one. |
changeStatus | string | NEW, UPDATED, UNCHANGED or REAPPEARED. |
contentHash | string | Stable hash of core fields for change detection. |
detailFetched | boolean | Whether detail fields were fetched for this record. |
With fetchDetails: true
| Field | Type | Description |
|---|---|---|
description | string | null | Full job description, plain text/Markdown. |
descriptionHtml | string | null | Full job description, HTML. |
descriptionMarkdown | string | null | Full job description, Markdown. |
contactUrl | string | null | Employer's public website. |
vacancyAddress | string | null | Street address of the vacancy. |
branchName | string | null | Industry / branch name. |
branchId | integer | null | Industry / branch ID. |
scheduleId | integer | null | Employment schedule ID. |
profLevelId | integer | null | Seniority level ID. |
tags | array | Skill and keyword tags. |
clusters | array | Grouped attributes (category → values), e.g. language, employment type. |
verifiedCompany | boolean | null | Whether robota.ua has verified the employer. |
Example record
{"jobId": 11244003,"title": "Livelihood Officer","url": "https://robota.ua/ua/vacancy/11244003","companyName": "Polish Humanitarian Action","companyId": 3415203,"companyUrl": "https://robota.ua/company3415203/vacancies","isAgency": false,"cityName": "Kyiv","cityId": 1,"districtName": "Holosiivskyi","metroName": "Universytet","latitude": 50.4459,"longitude": 30.5142,"salary": null,"salaryFrom": 80000,"salaryTo": 95000,"salaryMin": 80000,"salaryMax": 95000,"salaryComment": null,"currency": "UAH","publishDate": "2026-07-06","publishDateISO": "2026-07-06T04:01:00.15","isHot": true,"publicationType": 1,"badges": ["Additional days off"],"shortDescription": "General information: Organization: Polish Humanitarian Action...","applyUrl": "https://system.erecruiter.pl/FormTemplates/Recruitment.aspx?...","changeStatus": "NEW","contentHash": "a1b2c3d4e5f6a7b8","detailFetched": true,"description": "General information...","descriptionHtml": "<p>General information...</p>","descriptionMarkdown": "General information...","contactUrl": "http://www.pah.org.pl/","vacancyAddress": "vul. Bohdana Khmelnytskoho","branchName": "NGO / Non-profit","branchId": 37,"scheduleId": 1,"profLevelId": 3,"tags": ["Social project manager"],"clusters": [{ "category": "Language", "values": ["English"] }],"verifiedCompany": true}
Examples
1. Keyword search in a city
{ "searchQuery": "developer", "cityId": 1, "maxResults": 50 }
2. Remote vacancies posted in the last 7 days
{ "scheduleId": 3, "period": 7, "maxResults": 100 }
3. Full detail for a category above a salary floor
{ "rubricIds": ["1"], "salary": 40000, "fetchDetails": true, "maxResults": 100 }
4. Daily incremental feed (only new/changed jobs)
{ "searchQuery": "accountant", "period": 1, "maxResults": 200 }
💰 Pricing
$1.99 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.20 |
| 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.19 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 |
Enabling fetchDetails adds one request per listing, so detailed runs take longer.
Known limitations
- Salary is often absent. Around two-thirds of listings do not publish a salary; those fields are
null. - District and metro are sparse. Only listings in metro cities carry
metroName, and only some carrydistrictName. - Detail fields require
fetchDetails. Description, tags, clusters, branch, seniority, employer website and the verified/agency flags are only populated whenfetchDetailsis on. - Source cap. robota.ua's search returns at most 1,500 results per query; narrow with filters to go deeper.
Technical details
- Source: robota.ua — Ukraine job listings
- Coverage: nationwide, filterable by city, category, schedule, salary and recency
- Privacy: no contact-person data is collected — recruiter names, phones and photos are never returned
- 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