Pracuj.pl Jobs Scraper - New Jobs Monitor (Poland)
Pricing
from $1.79 / 1,000 job returneds
Pracuj.pl Jobs Scraper - New Jobs Monitor (Poland)
For recruiters, staffing agencies, job alert bots and hiring trackers: Pracuj.pl jobs (oferty pracy) with company, location, work mode, contract, level and salary as listed. With monitor mode on, each scheduled run returns only new jobs, salary changes and removed jobs. JSON, CSV or Excel.
Pricing
from $1.79 / 1,000 job returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Security
Limited permissionsShare
For recruiters, staffing agencies, job alert bots and anyone tracking hiring in Poland: the newest jobs on Pracuj.pl (nowe oferty pracy) with the company, location, work mode, contract type, level, the salary as listed (plus the amounts in PLN when they can be read), the publish date and the job link.
Schedule it with monitor mode on → each run returns only new jobs. Run it hourly or daily on a Pracuj.pl search and each run returns only the jobs published since the last run, plus salary changes and removed jobs, so you pay for what changed, not for the whole list again.
Start with just a keyword, a city or a pasted Pracuj.pl search URL. Export as JSON, CSV or Excel, or send the new jobs to Slack, email or a sheet with an Apify integration.
What you get
- New jobs only, on a schedule (
monitorMode). Each row says what happened inchangeType:new(published since the last run),changed(the salary changed; the previous salary is inpreviousSalaryLabel,previousSalaryMin,previousSalaryMax, andsalaryDirectionsaysupordownwhen both salaries are comparable amounts), orremoved(a job you received is no longer in the newest-first list on two checks in a row; jobs near the bottom of the window are not judged). The first run returns the newestmaxResultsPerSearchjobs (default 100, charged) as the starting point; a search added to an existing watch starts the same way. - Newest first, 100 jobs per search by default, up to 2,000.
- Salary you can sort.
salaryLabelkeeps the text exactly as listed (20 000–25 000 zł netto (+ VAT) / mies.,35–45 zł brutto / godz.).salaryMin,salaryMax,salaryPeriod(monthorhour) andsalaryBasis(grossfor brutto,netfor netto) are read from it, withsalaryCurrencyPLN. When a job shows no pay, or the text is not one clear range in zł, these stay empty; nothing is guessed. - The filters Pracuj.pl has: keywords, city with distance, region (województwo, or abroad), remote work (praca zdalna) and other work modes, contract type (umowa o pracę, B2B, umowa zlecenie and more), position level (junior, mid, senior, manager and more), working time, posted within 1-30 days, and jobs with salary only. Or paste any Pracuj.pl search URL with your filters already set.
- Each job once. A job found by two searches of the same run is returned and charged once. In monitor mode, a job you already received is not returned as
newagain (each watch remembers the 4,000 jobs it saw most recently), even when it shows up under another search of the same watch, and older jobs that only moved up the list are not returned as new. - Nothing new? You get a free row saying so, and no job is charged.
Output
One row per job. Main columns:
| Column | Meaning |
|---|---|
status | ok for a job row. Other values are free rows (below) |
changeType | Monitor mode: new, changed, removed or unchanged (only with includeUnchanged). Empty in a normal search. removed rows carry the title, company, last salary, date and link only |
isFirstCheck | true on the first run of a watch, when the current jobs are returned as the starting point |
id, url | Pracuj.pl job ID and the job page |
offerIds, offerUrls | One offer number and link per city the job is posted in |
title | Job title |
companyName, companyId, companyProfileUrl, logoUrl | The employer as listed |
location, locations, remoteWorkAllowed | Where the job is, and whether remote work is allowed |
workModes, contractTypes, workSchedules, positionLevels | As listed on Pracuj.pl, in Polish (Praca zdalna, Kontrakt B2B, Pełny etat, Specjalista (Mid / Regular)) |
salaryLabel, salaryMin, salaryMax, salaryPeriod, salaryBasis, salaryCurrency | Salary text as listed, and the amounts read from it |
previousSalaryLabel, previousSalaryMin, previousSalaryMax, previousSalaryPeriod, previousSalaryBasis, salaryDirection | Monitor mode, changed rows: the salary before the change, and up or down when both are amounts per the same period and gross/net basis |
descriptionSnippet | The short text shown in the search results |
publishedAt, firstPublishedAt, isRepublished, expiresAt | Last publish date, first publish date, whether it was published again, and the closing date (UTC) |
oneClickApply, cvOptional | One-click apply, and whether a CV is optional |
positionInSearch, jobsInSearch | Position in the newest-first list, and the number of jobs Pracuj.pl reports for the search |
searchKeywords, searchCity, searchRegion, searchUrl | The search the row came from; searchUrl opens the same search on Pracuj.pl |
watchName, checkedAt | The watch name you gave, and the time of the check |
note | Free rows only: what happened and what to do |
Free rows (never charged)
No jobs, no changes or a spending limit come back as a free row that says why. If Pracuj.pl refuses every request, the run ends as failed and says so.
status | When |
|---|---|
no-results | Pracuj.pl lists no job for this search. |
no-changes | Monitor mode: no new jobs, salary changes or removed jobs since the last run. |
none-matching | Pracuj.pl has jobs, but each one was already returned by an earlier search of the same run or watch. |
more-not-returned | Fewer jobs came back than maxResultsPerSearch, because one search reads at most its newest 2,000 listings; the row says how many jobs the search has. Every job row also has that total in jobsInSearch. Monitor mode: more changes than maxResultsPerSearch (a later run returns them), or on the first run, how many jobs became the starting point. |
more-new-than-readable | Monitor mode: more jobs were published since the last run than this run read, so some new ones may have been missed. Run the watch more often or raise maxResultsPerSearch. |
incomplete | A page of the list could not be read. The jobs before it were returned; in monitor mode nothing is judged and nothing is remembered, and the next run checks again. |
not-found | Pracuj.pl could not use the search (for example a pasted address that is not a search page). |
blocked | Pracuj.pl showed a check page or refused the request each time it was asked, from different IP addresses. The run stops, says which searches were not run, and remembers nothing; running it again later usually works. |
unreadable | A page could not be read, even after asking again. Nothing is guessed. |
budget-reached | The run reached the maximum total charge you set; the rest was not returned and not charged (in monitor mode the next run returns them). |
bad-input | The input could not be used (for example a region name that is not a voivodeship). Nothing was requested. |
Input
| Field | What it does |
|---|---|
keywords | What you would type into Pracuj.pl: python, księgowa, kierowca, data analyst. Each keyword is searched in each city and region. No keyword, city, region, URL or filter at all = python jobs in all of Poland. |
cities, radiusKm | Polish towns or cities: Warszawa, Kraków, Wrocław, Gdańsk; optionally 0-100 km around them. Empty = the whole country. |
regions | Voivodeships, for example mazowieckie, małopolskie, śląskie, or abroad for jobs outside Poland. Each region is one search. |
remoteOnly | Only jobs listed as remote work (praca zdalna). |
workModes | Office, hybrid, remote, mobile. Empty = all. |
contractTypes | Employment contract, contract for specific work, mandate contract, B2B, replacement, agency, temporary work, internship. Empty = all. |
positionLevels | Trainee, assistant, junior, mid, senior, expert, team leader, manager, director, president, manual worker. Empty = all. |
workSchedules | Full time, part time, temporary. Empty = all. |
postedWithinDays | Only jobs published within 1, 3, 7, 14 or 30 days. |
salaryOnly | Only jobs that show a salary. |
searchUrls | Pracuj.pl search pages copied from the browser, for example https://www.pracuj.pl/praca/python;kw/warszawa;wp. Each is read newest first with its own filters. |
maxResultsPerSearch | Newest jobs to read per search, 1-2000. Empty = 100. In monitor mode, the window checked for new jobs and changes on each run. |
monitorMode | Return only jobs that are new since the last run, salary changes and removed jobs. |
includeChanged, includeRemoved | Monitor mode: return salary changes and removed jobs. Empty = yes. |
includeUnchanged | Monitor mode: also return jobs already received that did not change (each one is charged). Empty = no. |
watchName | Give each schedule its own name so separate schedules keep separate memories. |
resetMonitoringState | Forget what this watch remembered; this run is a first check again. |
Up to 10 searches per run (keywords times cities and regions, plus search URLs).
Examples
New Python jobs in Kraków or remote, every hour:
{ "keywords": ["python"], "cities": ["Kraków"], "remoteOnly": true, "monitorMode": true, "watchName": "py-krakow" }
Senior B2B jobs in Warszawa published in the last 3 days:
{ "cities": ["Warszawa"], "contractTypes": ["b2b"], "positionLevels": ["senior"], "postedWithinDays": "3" }
The newest 1,000 jobs in a region:
{ "regions": ["mazowieckie"], "maxResultsPerSearch": 1000 }
Monitor mode, step by step
- First run: reads the newest
maxResultsPerSearchjobs of each search, returns them once (changeType: new,isFirstCheck: true) and remembers them as the starting point. - Later runs: read the same window again and return only jobs published since the last run (
new), jobs you received whose salary changed (changed, with the previous salary), and jobs you received that are gone from the list two runs in a row (removed). When nothing moved, one freeno-changesrow comes back and only the run start fee is charged. - Jobs not returned because of
maxResultsPerSearchor a spending limit come back first in the next run. Nothing is judged from a list that could not be read in full.
Keep one schedule per input and watchName. Two overlapping runs of the same watch can both return the same new job.
Pricing
You pay per job row returned, plus a small start fee once per run. In monitor mode the start fee pays for the check, also when nothing changed. Free rows are never charged, and unchanged jobs are not returned or charged unless you turn on includeUnchanged.
The first run of a watch returns and charges up to maxResultsPerSearch jobs per search (default 100) as the starting point; set it lower for a cheap first run.
FAQ
How do I get new job offers from Pracuj.pl automatically? Turn on monitorMode, enter your keywords, city or a pasted search URL, and add a schedule (hourly or daily). Each run returns only the jobs published since the last run.
Is there a Pracuj.pl API for job listings? This Actor gives you the Pracuj.pl search results as structured rows (JSON, CSV, Excel) through the Apify API, with the same filters the site has.
How often should I schedule it? Hourly or daily. A busy search (for example a keyword across all of Poland) can get more new jobs in a day than a 100-job window holds; run it more often or raise maxResultsPerSearch, and a free row tells you when that happened.
What counts as a salary change? Any change of the salary text the job shows, including a salary added to a job that had none. A salary that disappears is not reported as a change.
Can I watch remote jobs only (praca zdalna)? Yes. Tick remoteOnly, or choose work modes, with or without a city.
Good to know
- Works without a Pracuj.pl account, and reads only what the site shows anyone without logging in.
- Unofficial and not affiliated with Pracuj.pl.
- Personal contact details (names, phone numbers, emails) are not returned; the company is.
- Polski: monitor nowych ofert pracy z Pracuj.pl. Ustaw harmonogram, a każde uruchomienie zwróci tylko nowe oferty, zmiany wynagrodzenia i oferty usunięte.
Thanks for using this Actor
We build these tools for people who run them every day, and we improve them from what users tell us.
- Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
- Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.
If this Actor saved you time, a short review helps other people find it.