CEE Tech Jobs Scraper — justjoin.it + pracuj.pl + NoFluffJobs avatar

CEE Tech Jobs Scraper — justjoin.it + pracuj.pl + NoFluffJobs

Pricing

from $1.50 / 1,000 job scrapeds

Go to Apify Store
CEE Tech Jobs Scraper — justjoin.it + pracuj.pl + NoFluffJobs

CEE Tech Jobs Scraper — justjoin.it + pracuj.pl + NoFluffJobs

One actor, three Polish tech-job boards, one normalized schema with salary normalization and cross-board dedup. Pay-per-event.

Pricing

from $1.50 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Atlas Dataworks

Atlas Dataworks

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

CEE Tech Jobs Scraper — justjoin.it, pracuj.pl, NoFluffJobs in one actor

Scrape Polish tech job offers from the three boards that matter — justjoin.it, it.pracuj.pl, and nofluffjobs.com — in a single run, with one normalized schema, normalized salaries, and cross-board deduplication. Built for job-market analytics, salary benchmarking, recruiting intelligence, and AI agents.

Why this actor

  • 3 boards, 1 schema. Every existing scraper covers a single board with its own field names. This one returns identical records regardless of source, so your pipeline has exactly one shape to handle.
  • Salary normalization. "13 000–15 000 zł / mies. (zal. od umowy)", NoFluffJobs salary objects, and schema.org baseSalary blocks all become {min, max, currency, period, gross}. Currency is recorded as published — no FX guessing.
  • Cross-board dedup. The same job posted on two or three boards becomes one record with a sources[] array listing every board and URL it appeared on.
  • Freshness. Runs read the boards live; postedAt / expiresAt come from the boards themselves.

Output schema

One record per job, pushed to the default dataset:

FieldTypeNotes
sourcejustjoin | pracuj | nofluffjobsBoard the record came from (first board, if merged)
sourceUrlstringCanonical offer URL
externalIdstringBoard-native id / slug
titlestringJob title
companystringEmployer name
locations{city?, country?}[]All named workplaces; country normalized to ISO alpha-2 (best effort — unrecognized values pass through as published)
remoteremote | hybrid | onsite | unknownNormalized work mode
senioritystring?junior / mid / senior / expert / manager / intern when derivable
contractTypesstring[]?e.g. b2b, permanent, mandate
salary{min?, max?, currency, period, gross?}?Only when the board discloses it; one-sided offers ("od 8 000 zł") keep only the disclosed bound
techStackstring[]?Technologies named by the board
postedAt / expiresAtISO date?As published
descriptionstring?Full description — only with Fetch full details
scrapedAtISO dateRun timestamp
sources{source, sourceUrl}[]?Present when boards were merged by dedup

Input

{
"boards": ["justjoin", "pracuj", "nofluffjobs"],
"keyword": "python",
"maxJobsPerBoard": 100,
"fetchDetails": false
}
  • keyword — server-side search on NoFluffJobs; title/company/tech-stack match on justjoin.it and pracuj.pl.
  • maxJobsPerBoard — strict per-board cap.
  • fetchDetails — adds full descriptions (justjoin.it JSON-LD, NoFluffJobs detail API) and fires the premium job-detail event.
  • proxyConfiguration — used only for pracuj.pl; the default (Apify datacenter group BUYPROXIES94952) is the cheapest tier that passes.

Pricing (pay-per-event)

EventFiresPrice
job-scrapedper normalized job record delivered$0.0015 ($1.50 / 1,000 jobs)
job-detailper record enriched with a full description$0.005 ($5.00 / 1,000 details)
Actor Startonce per run, charged by the platform$0.00005 ($0.05 / 1,000 runs)
Resultper record stored, charged by the platform$0.00005 ($0.05 / 1,000 records)

job-detail is charged in addition to job-scraped, not instead of it — a job delivered with its full description costs $0.0065. Details are charged after deduplication, over records actually delivered.

The last two rows are Apify platform events rather than ours. They are small (a 10,000-job run pays about $0.50 across both) and they are listed here so this table matches the pricing shown on the Store page exactly. Platform usage — compute and proxies — is bundled: there is no separate usage line on your bill.

You pay for delivered records, not runtime. Runs respect your budget cap (maxTotalChargeUsd): when the cap is reached the actor stops delivering, reports how much of the result set was delivered, and never charges past it.

Using it from an AI agent (MCP)

The actor is callable as an MCP tool via Apify's MCP server. Example agent prompt:

Call cee-tech-jobs-scraper with {"keyword": "data engineer", "maxJobsPerBoard": 50} and summarize median salary by seniority.

Or via the API:

curl -X POST "https://api.apify.com/v2/acts/<user>~cee-tech-jobs-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keyword": "python", "maxJobsPerBoard": 100}'

Honest limits

  • justjoin.it depth: one listing page yields ~100 offers per run (the listing is an infinite-scroll app). Enough for fresh-offers monitoring; not a full-board dump.
  • pracuj.pl descriptions: listing-level data only in this version — full pracuj descriptions are on the roadmap.
  • Dedup key is normalized company+title, matched across boards. Two consequences to know about: (a) false negatives — the same employer often spells its name differently per board ("Acme" vs "Acme Sp. z o.o."), and those records will NOT merge; (b) over-merges — distinct openings sharing both company and title (e.g. the same role posted separately per city) merge into one record, with every posting's URL kept in sources[] and all locations unioned. sources[] can therefore also list the same board twice.
  • Keyword runs on pracuj.pl and justjoin.it filter client-side (title/company/tech match) after fetching listing pages, so a keyword run can return fewer than maxJobsPerBoard records from those boards even when more matches exist deeper in the listing. NoFluffJobs applies the keyword server-side and does not have this limit.
  • Salary gross is only set when the board says brutto/netto explicitly; B2B rates carry no gross/net flag by nature.
  • No FX conversion by design — currency is reported as published (almost always PLN).
  • Boards change their markup; the pracuj extractor has a built-in DOM fallback, but a board redesign can still degrade a run. Scheduled test runs guard freshness.