Poland IT Jobs Scraper: Tech Jobs & Developer Jobs, 3 Boards
Pricing
from $1.10 / 1,000 job scrapeds
Poland IT Jobs Scraper: Tech Jobs & Developer Jobs, 3 Boards
Scrape Poland IT jobs, tech jobs and developer jobs from justjoin.it, pracuj.pl and NoFluffJobs in one run. One actor, one normalized schema, parsed salaries, cross-board dedup. A job scraper for salary benchmarks and recruiting. Pay-per-event.
Pricing
from $1.10 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Atlas Dataworks
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
3
Monthly active users
4 days ago
Last modified
Categories
Share
Poland IT Jobs Scraper: Tech Jobs & Developer Jobs from justjoin.it, pracuj.pl, NoFluffJobs
Scrape IT jobs, tech jobs and developer jobs in Poland from the three job boards that matter, justjoin.it, it.pracuj.pl and nofluffjobs.com, in a single run. This job scraper returns every job offer in one normalized schema, with parsed salaries and cross-board deduplication. $1.50 per 1,000 jobs, and you pay only for jobs delivered.
What does this Poland jobs scraper do?
- Reads three boards in one run: justjoin.it, the IT section of pracuj.pl and NoFluffJobs. Pick any of them.
- Parses salaries from each board's own format into
{min, max, currency, period, gross}, so "13 000–15 000 zł / mies." and a NoFluffJobs salary object land in the same fields. - Merges duplicates across boards: a job posted on two boards comes back once, with every board and URL it appeared on.
- Normalizes the rest: company, locations, remote, hybrid or onsite, seniority, contract types (B2B, permanent), tech stack, posted and expiry dates.
- Adds full job descriptions when you switch on Fetch full details (justjoin.it and NoFluffJobs).
Who uses it
- Salary benchmarking. Median salary by role, seniority and contract type in the Polish IT market, refreshed on a schedule.
- Recruiters and staffing agencies. Which companies are hiring for which stacks, and where, in one feed instead of three.
- Job-market analytics and HR tech. Demand by technology over time from the three main boards.
- Job boards and aggregators. One normalized feed to build on.
- AI agents. Call it as an MCP tool and get typed JSON back (see below).
How much does it cost to scrape Polish IT jobs?
Pay per event: you pay per job delivered (job-scraped, $0.0015), plus $0.005 per job when you ask
for its full description (job-detail), not for run time, proxies or compute.
| What you scrape | Jobs | Cost |
|---|---|---|
| The prefilled run (20 per board, three boards) | up to 60 | up to $0.09 |
| 1,000 jobs | 1,000 | $1.50 |
| 1,000 jobs, each with its full description | 1,000 | $6.50 ($1.50 + $5.00) |
The table shows the Free-plan price. On Apify's paid plans each job costs less: $1.40 per 1,000 on Bronze, $1.25 on Silver, $1.10 on Gold and above, and full descriptions $4.50, $4.00 and $3.50.
Set Budget cap (USD) and the run stops at it: it delivers what fits, tells you how much of the result set that was, and never charges past the cap.
How to scrape IT jobs in Poland
- Click Try for free (or Start). The input is prefilled with all three boards and 20 jobs per board, so one click returns data.
- Add a keyword (
python,data engineer,devops) and raise the per-board limit. - Run it, then download the results as JSON, CSV, Excel, XML or HTML, or read them through the Apify API, a schedule, or an integration (Make, Zapier, n8n, Google Sheets, webhooks).
Why this Poland jobs scraper
- 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.orgbaseSalaryblocks 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/expiresAtcome from the boards themselves.
Output schema
One record per job, pushed to the default dataset:
| Field | Type | Notes |
|---|---|---|
source | justjoin | pracuj | nofluffjobs | Board the record came from (first board, if merged) |
sourceUrl | string | Canonical offer URL |
externalId | string | Board-native id / slug |
title | string | Job title |
company | string | Employer name |
locations | {city?, country?}[] | All named workplaces; country normalized to ISO alpha-2 (best effort, unrecognized values pass through as published) |
remote | remote | hybrid | onsite | unknown | Normalized work mode |
seniority | string? | junior / mid / senior / expert / manager / intern when derivable |
contractTypes | string[]? | 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 |
techStack | string[]? | Technologies named by the board |
postedAt / expiresAt | ISO date? | As published |
description | string? | Full description, only with Fetch full details |
scrapedAt | ISO date | Run 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 premiumjob-detailevent.proxyConfiguration: used only for pracuj.pl; the default (Apify datacenter groupBUYPROXIES94952) is the cheapest tier that passes.
Pricing (pay-per-event)
| Event | Fires | Price |
|---|---|---|
job-scraped | per normalized job record delivered | $0.0015 ($1.50 / 1,000 jobs) on Free; $1.40 Bronze, $1.25 Silver, $1.10 Gold and above |
job-detail | per record enriched with a full description | $0.005 ($5.00 / 1,000 details) on Free; $4.50 Bronze, $4.00 Silver, $3.50 Gold and above |
Actor Start | per run, one per GB of memory (the default 2 GB is two), charged by the platform | $0.00005 ($0.05 / 1,000 runs) |
Result | per 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; a run at the default 2 GB pays two starts, $0.0001) 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-scraperwith{"keyword": "data engineer", "maxJobsPerBoard": 50}and summarize median salary by seniority.
Or via the API:
curl -X POST "https://api.apify.com/v2/acts/atlasdataworks~cee-tech-jobs-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": "python", "maxJobsPerBoard": 100}'
FAQ
Is it legal to scrape job boards? The actor reads public job listings that the boards show to any visitor without a login, and it collects job and company data, not personal profiles. Check the boards' terms for your own use of the data.
Does it cover all of pracuj.pl? It covers the IT section, it.pracuj.pl. Jobs outside IT are not in scope.
Why did a keyword run return fewer jobs than my limit? justjoin.it and pracuj.pl filter the keyword on our side after reading their listing pages, so a narrow keyword can return fewer jobs than the per-board limit. NoFluffJobs searches on its own side and has no such limit.
Are salaries gross or net? As published: gross is set only when the board says brutto or netto.
B2B rates carry no gross or net flag by nature. Currency is kept as published (almost always PLN).
Can I get only new jobs each day? Schedule the actor and compare on externalId and sources:
each record carries the board's own id and its posted date.
Also from Atlas DataWorks
- EU & Poland Tenders Monitor: public procurement notices from TED and BZP, only new notices each run.
- Amazon Product Scraper, Walmart Product Scraper and AliExpress Search Scraper.
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
maxJobsPerBoardrecords 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
grossis 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.