Posao.hr Scraper: Croatia Jobs + Salary avatar

Posao.hr Scraper: Croatia Jobs + Salary

Pricing

from $1.20 / 1,000 results

Go to Apify Store
Posao.hr Scraper: Croatia Jobs + Salary

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

CEE Jobs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

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 id of the form posao-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:

  • postedAt is always null. The board publishes a countdown to the application deadline ("Expires in 13 days") and nothing about when the ad went up. That countdown is expiresAt.
  • salary is 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 tag salary-disclosed and leave salary empty. Turn includeDetails on to get the figure itself.
  • minEurMonth / maxEurMonth are null on 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 keeps min, max, currency and raw and earns no conversion — filing take-home pay next to gross pay in the same column would be worse than leaving the comparison to you.
  • remote is three-valued. true when the place of work is nothing but home, false when it names a workplace and home ("Zagreb (hybrid)", "ured u Zagrebu ili rad od kuće"), null when the ad says nothing. Only the board's own place field is read; "remote" in a job title is the employer's copywriting.
  • tags are the board's own categories from the ad's page, plus salary-disclosed and hzz (an ad syndicated from the Croatian public employment service) where they apply.

Anything the board did not publish is null, never missing.

Input

FieldTypeDefaultWhat it does
extraobject{}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.
keywordsarray 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.
locationstring""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.
maxItemsinteger100Hard stop after this many jobs. This is the cost dial.
includeDetailsbooleanfalseAlso 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.
postedWithinDaysinteger0No effect on this board — it publishes no posting dates, so there is nothing to filter on.
startUrlsarray[]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.
proxyConfigurationobjectApify proxyApify 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.