Posao.hr Scraper: Croatia Jobs + Salary
Pricing
from $1.20 / 1,000 results
Posao.hr Scraper: Croatia Jobs + Salary
Scrape Posao.hr (www.posao.hr) job listings into clean JSON: title, company, location, salary normalized to EUR/month, application deadline, tags, optional full description. Pay per result, no subscription.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
CEE Jobs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Posao.hr Jobs Scraper — Croatia job listings with salary, location and application deadline
Extract Posao.hr job listings with salary, location and application deadline for Croatia market
research, recruiting and lead generation. Posao.hr publishes no posting dates — not on the
results page and not on a job's own page — so every row carries the deadline the board does
print (expiresAt) and a postedAt of null.
What you get
- Every job on www.posao.hr, as one structured row each: title, employer, place of work, the date the ad stops accepting applications, and the board's own job URL.
- Salary normalized to EUR per month (
salary.minEurMonth/salary.maxEurMonth) next to the raw label the board printed, so rows priced in different currencies sort together. - A stable
idof the formposao-hr:<ad id>, so repeat runs deduplicate against your own database instead of against a row number.
Sample item
One real ad, includeDetails on:
{"id": "posao-hr:1239282","url": "https://www.posao.hr/oglasi/automehanicar-automehatronicar-m-z/1239282/","title": "Automehaničar / Automehatroničar (m/ž)","company": "Autoservis Turkalj","companyUrl": "https://www.posao.hr/autoservis-turkalj-svi-poslovi/548364/","location": {"raw": "Sisak","city": "Sisak","country": "HR"},"remote": null,"employmentType": "permanent employment","salary": {"min": 2000,"max": 2500,"currency": "EUR","period": "month","raw": "from 2 000 € to 2 500 € net","minEurMonth": null,"maxEurMonth": null},"postedAt": null,"expiresAt": "2026-09-27","description": "About the job Job description: Servisiranje vozila: Samostalno obavljanje redovnih servisa i popravaka na vozilima. Dijagnostika kvarova: Detekcija me …","tags": ["salary-disclosed","Electrical & mechanical engineering","Installation, maintenance & repair","Machinery & ship construction","Production, craft & industry"],"source": {"board": "posao-hr","boardJobId": "1239282","scrapedAt": "2026-08-23T09:14:03.221Z"}}
Without includeDetails the same ad ships as the results page has it: companyUrl,
employmentType, description and every salary field null, tags just
["salary-disclosed"], and expiresAt the same day worked out from the board's countdown.
Reading the fields this board fills differently from most:
postedAtis alwaysnull. The board publishes a countdown to the application deadline ("Expires in 13 days") and nothing about when the ad went up. That countdown isexpiresAt.salaryis only ever filled by the detail fetch. The results page prints the words "Salary disclosed" on ads that name a figure and nothing at all on the rest; those words are a marker, not an amount, so they become the tagsalary-disclosedand leavesalaryempty. TurnincludeDetailson to get the figure itself.minEurMonth/maxEurMontharenullon a net amount. Croatian ads usually state pay net, and the board's salary cell says which. Those two fields are gross by definition, so a net label keepsmin,max,currencyandrawand earns no conversion — filing take-home pay next to gross pay in the same column would be worse than leaving the comparison to you.remoteis three-valued.truewhen the place of work is nothing but home,falsewhen it names a workplace and home ("Zagreb (hybrid)", "ured u Zagrebu ili rad od kuće"),nullwhen the ad says nothing. Only the board's own place field is read; "remote" in a job title is the employer's copywriting.tagsare the board's own categories from the ad's page, plussalary-disclosedandhzz(an ad syndicated from the Croatian public employment service) where they apply.
Anything the board did not publish is null, never missing.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
extra | object | {} | The way to search this board. {"occupation": "programer"} crawls https://www.posao.hr/zanimanja/programer/; {"field": "informatika-i-telekomunikacije"} crawls https://www.posao.hr/djelatnosti/informatika-i-telekomunikacije/. Take the slug straight out of a posao.hr URL (lowercase ASCII, no diacritics) — e.g. occupations vozac, konobar, prodavac, zavarivac; fields ekonomija-racunovodstvo-financije, strojarstvo-i-brodogradnja. Set one or the other, not both. |
keywords | array of strings | [] | Job title, skill or company words, matched here rather than on the board — posao.hr has no keyword search a crawler can address (see Limitations). Without an extra filter the actor walks the board's whole listing, ~337 pages of 15 rows, which takes roughly 1–3 minutes and finds nothing if your keyword is not Croatian. Prefer extra. |
location | string | "" | City or region in the board's own spelling, with or without diacritics — Zagreb, Split, sibenik. Matched against each row's own place of work, because the board's place filter lives on a path robots.txt disallows. |
maxItems | integer | 100 | Hard stop after this many jobs. This is the cost dial. |
includeDetails | boolean | false | Also open each job's own page for the description, the salary figure, the exact application deadline, the employer's page and the board's categories. Roughly 1.5x slower. |
postedWithinDays | integer | 0 | No effect on this board — it publishes no posting dates, so there is nothing to filter on. |
startUrls | array | [] | Listing URLs on www.posao.hr to crawl directly. /poslovi/, /zanimanja/<slug>/ and /djelatnosti/<slug>/ are paged; any other URL is crawled as the single page it is. |
proxyConfiguration | object | Apify proxy | Apify datacenter proxy groups only; residential groups and custom proxy URLs are rejected. |
Pricing
$2 per 1,000 jobs, plus $2 per 1,000 when includeDetails is on. No subscription.
Limitations
Public listing data only — no recruiter names or e-mail addresses, no data behind a login. The
crawler obeys www.posao.hr's robots.txt, including for URLs you pass in startUrls, and runs on
datacenter proxies without any CAPTCHA or challenge circumvention: a challenge page is reported
as an error, not retried through another browser. Apify datacenter proxy groups only; residential
groups and custom proxy URLs are rejected before the run starts. Jobs the board removes between
the listing page and the detail fetch are skipped rather than shipped half-filled.
posao.hr has no keyword search this crawler can use. Its search box POSTs to the site rather
than putting the term in a URL, and the query parameters that look like a search (?keywords=,
?sKljucne=, ?q=) are ignored — the board answers all of them with its unfiltered listing.
Whatever path the form does reach lives under /poslovi/<something>/, which robots.txt
disallows. That is why keywords is applied to rows after they are fetched, and why the
occupation and field filters are the ones to reach for: an occupation listing is a handful of
pages, the whole board is ~337.
The board's ad pages come in two shapes — a structured template and one the employer designed
themselves — and only the structured one carries an employment type or a salary figure, so those
two fields are filled on some rows and not others even with includeDetails on. On the
structured template the employer's address, telephone and e-mail block is dropped whole rather
than scrubbed, so a description never carries a way of reaching a named person.