Jobs.cz - Czech Jobs, Salary, Benefits & GPS
Pricing
from $1.20 / 1,000 job results
Jobs.cz - Czech Jobs, Salary, Benefits & GPS
Scrape Czech job listings from Jobs.cz. Search builder (keyword, location, field, salary, employment type) or paste any Jobs.cz URL. Title, company, salary range with currency and period, benefits, GPS coordinates, required education and languages, employer contact info, remote/hybrid flag,.
Pricing
from $1.20 / 1,000 job results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Jobs.cz Scraper
Turn Jobs.cz, the largest job board in the Czech Republic, into structured hiring data. Build a search (keyword, location, field, salary range, employment type) or paste any Jobs.cz URL, and get one clean row per job with salary, benefits, GPS coordinates, required education and languages, the full description, and employer contact info.
Why use this scraper?
- Search builder + URL mode — build a search from Czech-language keywords, locations, fields, salary range and employment type, or paste any Jobs.cz listing/search/position URL (they mix freely in one run).
- No empty rows — jobs published on Jobs.cz itself come back fully populated, and so do employer micro-sites that expose their listing. When a page genuinely cannot be read, the run says so instead of returning a row of nulls you would still be billed for.
- Rich structured output — salary min/max with currency and period, GPS coordinates, benefits, required education and languages, employment/contract type, suitability flags, employer phone/email/contact, remote/hybrid flag, posting date, and the full HTML + plain-text description.
- Czech-language aware — field labels (
Požadované vzdělání,Požadované jazyky,Typ pracovního poměru, …) and descriptions are extracted and normalized, and the salary text (150 000 – 185 000 Kč) parses into structuredsalary.min/salary.max. - Incremental monitoring — schedule a daily run against the same search and get only what changed (NEW / UPDATED / REAPPEARED / EXPIRED), remembering state itself between runs.
- Cheap — light footprint, runs at 512 MB (vs. heavier scrapers), over Apify datacenter or residential proxy.
Inputs
Search mode
Jobs.cz has two kinds of search input, and they behave differently. Keyword and field say what to look for and the site treats them as alternatives — adding a field returns more jobs, not fewer. Everything else narrows what those matched.
| Input | Kind | Description |
|---|---|---|
keyword | what to look for | Free-text search, e.g. python, programátor, účetní. Czech text works. |
field | what to look for | Professional field (obor) as Jobs.cz names it, e.g. IS/IT, Doprava. Looked up in the site's field list for you. Widens the results — use it on its own to sweep a whole field. |
location | narrows | Free-text location, e.g. Praha, Brno, Plzeň. Resolved to a Jobs.cz locality automatically. |
minSalary | narrows | Minimum gross salary in CZK/month. |
employmentType | narrows | Full-time, part-time, employment contract, trade license, agreement, or internships. |
education | narrows | Required education: without diploma / high-school / university. |
arrangement | narrows | Work arrangement: partial from home, mostly from home, flexible hours. |
How much each one narrows, measured live on 2026-08-10 against a 247-job
python search: minimum salary 60 000 CZK → 178 · 150 000 CZK → 15 · full-time
→ 239 · part-time → 13 · internships → 7 · employment contract → 222 · trade
licence → 20 · agreement → 7 · without diploma → 2 · high-school → 117 ·
university → 108 · partial from home → 153 · mostly from home → 22 · flexible
hours → 159 · Praha → 160.
URL mode
Paste any Jobs.cz URL — listing pages (/prace/{profession}/, /prace/{location}/, filtered searches) and direct position URLs (/rpd/{id}/) are auto-classified and mixed freely.
A direct position URL whose job has been taken down returns no row and is
reported as gone (and, in incremental mode, marked EXPIRED). A position whose
page could not be read at all — a block, or an employer careers template this
Actor cannot parse — also returns no row, but is reported as unread: nothing
is billed for it, nothing is marked expired, and the incremental baseline is
left untouched so a temporary failure cannot look like a job disappearing.
Output and limits
maxItems is the run's cap (default 20). maxPages is unlimited by default and defers to maxItems.
Resume & recurring updates
resumeFromRunId— continue ONE interrupted crawl without re-returning already-collected jobs.incrementalMode— recurring monitoring: the actor remembers the previous run of the same search itself (keyed on the search setup) and returns only NEW / UPDATED / REAPPEARED / EXPIRED jobs.
EXPIRED is only ever emitted after a run that read every search page it asked for. If a run is capped by maxItems/maxPages, resumed from a run id, or stopped because a page could not be read, the actor keeps the previous state as-is, tells you so in the log, and does not advance its saved baseline, so a temporary block can never mark your tracked jobs as gone (and never bills you for those rows, nor for the REAPPEARED rows when they come back).
Send results into your apps (MCP connectors)
| Input | Description |
|---|---|
mcpConnectors | Optional MCP connectors to export results into (Notion, Linear, Airtable, Apify). Leave empty to skip. |
notionParentPageUrl | Notion connector only: the page under which item pages are created. |
maxNotifyListings | Cap on items exported to each connector per run (default 50). Does not affect the dataset. |
Detail enrichment (optional surcharge)
fetchDetails (off by default) opens each job's detail page and adds the full description, structured salary, benefits, GPS, education/languages, employer contact and remote/hybrid flags. It adds one request per job and is billed as a separate detail-enrichment surcharge on top of the base result price.
You are charged the surcharge only for rows you actually receive, and only when their detail page was really read — never more than once per job:
- A minority of Jobs.cz positions live on an employer careers site that publishes no readable detail page. Those jobs are still returned, with their search-page fields and
detailSource: null, and are not charged. If a whole run turns out to be like that, the actor stops opening detail pages altogether and says so in the log and in the run summary (detailEnrichmentDisabled), rather than paying for pages it cannot read. - In Incremental mode an unchanged job's detail page still has to be read to tell whether anything changed, but if the row is suppressed (not delivered) it is not charged. A run that returns nothing therefore costs no surcharge at all.
Output
Each dataset item is one job. Key fields:
| Category | Fields |
|---|---|
| Identity | jobId, jobUrl, title |
| Employer | companyName, companyLogo, employerPhone, employerEmail, contactName, contactCompanyName, companyAddress, employerProfileUrl |
| Location | location, addressLocality, addressRegion, postcode, country, coordinates (latitude/longitude) |
| Compensation | salary (currency, min, max, unit, raw), salaryRaw |
| Classification | categories, employmentTypes, contractType, contractDuration, hoursPerWeek, requiredEducation, requiredLanguages, benefits, remote, arrangement |
| Suitability | suitableForGraduate, suitableForDisabled, suitableForPensioner, suitableForMaternityLeave |
| Dates | postedDate |
| Content | description (HTML), descriptionText (plain), teaser |
| Apply | applyUrl, applyType |
| Meta | detailSource (job-page / employer-site), scrapedAt |
| Incremental | changeType (NEW / UPDATED / REAPPEARED / EXPIRED), changedFields, firstSeenAt, lastSeenAt |
Output sample
Illustrative only — the employer, contact details and coordinates below are fictional placeholders, not a real posting.
{"jobId": "0000000000","jobUrl": "https://www.jobs.cz/rpd/0000000000/","title": "Senior Data Science, Python Developer","companyName": "Example Company s.r.o.","location": "Praha 1, Hlavní město Praha","coordinates": { "latitude": 50.0755, "longitude": 14.4378 },"salary": { "currency": "CZK", "min": 140000, "max": 180000, "unit": "měsíc", "raw": "140000–180000 Kč měsíc" },"employmentTypes": ["Práce na plný úvazek"],"requiredEducation": "Vysokoškolské / univerzitní","requiredLanguages": ["Čeština — Výborná"],"benefits": ["Firemní akce", "Možnost občasné práce z domova", "Nadstandardní lékařská péče"],"remote": true,"arrangement": "hybrid","postedDate": "2026-06-12T16:22:22+02:00","employerPhone": "+420 555 010 042","employerEmail": "kariera@example.com","detailSource": "employer-site","descriptionText": "Hledáme datového vědce se znalostí Pythonu…"}
Proxy
Jobs.cz works over both the Apify datacenter and residential proxy groups. Leave the default (no group) for the cheapest runs; switch to Residential with country CZ for larger runs where a Czech exit improves reliability. The actor fails fast on a repeated block rather than grinding.
If it cannot read a single search page after retrying on fresh exit IPs, the run fails with a message saying so, rather than finishing green with an empty dataset. A run that read some pages but not all finishes with a partial-results warning. Either way nothing is marked EXPIRED and the incremental baseline is left untouched. Re-run, ideally on Residential with country CZ.
Free-tier users: the actor works over the Apify proxy included with your plan. Larger runs work best on a paid plan with residential access.
Send results into your apps (MCP connectors)
Optionally pipe results into the apps you already use through Model Context
Protocol (MCP) connectors. Authorize a connector once under Apify, Settings,
Integrations, then select it in the mcpConnectors field. Each connector
receives a condensed, human-readable summary per job (title plus key fields),
while the complete record always stays in the Apify dataset. For Notion, set
notionParentPageUrl to the page the item pages should be created under, and
use maxNotifyListings to cap how many items are exported per connector per
run. Supported connectors: Notion, Linear, Airtable and Apify. Leave the field
empty to skip; it never changes the dataset output.
FAQ
Does it return salary for every job? No — many Czech listings don't publish one. When the site shows a salary, it's parsed into salary.min/salary.max with currency and period.
Does it return GPS for every job? Employer-branded micro-site listings come back with exact coordinates. Other listings are geocoded from their address (best-effort). Not every job publishes an address.
How do I get only fresh jobs? Turn on Incremental mode and schedule the run. Every later run of the same search returns only what changed — new jobs, jobs whose details moved, and (optionally) jobs that have gone.
What does detailSource mean? Which page a row's fields came from: job-page for a listing hosted on Jobs.cz itself, employer-site for one published on the employer's own careers micro-site.
Legal
This Actor is an independent tool and is not affiliated with or endorsed by Jobs.cz, Alma Career, or LMC s.r.o. It accesses only publicly available job-listing pages. Users are responsible for complying with Jobs.cz's Terms of Service and applicable law.