Pracuj.pl Scraper
Pricing
from $1.20 / 1,000 results
Pracuj.pl Scraper
Scrape pracuj.pl for structured Polish job data: titles, companies, salaries in PLN, contract types (B2B, umowa o pracę), tech stacks, requirements & full descriptions. 200k+ listings with repost detection.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
23
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share

Extract job listings from pracuj.pl at scale, in a clean, consistent structure ready for analysis, job boards, recruiting tools and market research. No API key required.
Why this scraper?
🎯 Built for Poland
A dedicated Polish scraper, not a global tool with a country dropdown. Search, locations and currency (PLN) are tuned for pracuj.pl.
📄 Complete job data
Full job title and description, direct listing URL and publish date for every record.
💶 Salary data
Salary information parsed from the listing where the employer publishes it, in PLN. Missing salaries are returned as null, never guessed.
🏢 Company details
Hiring company name plus the profile details the source publishes, such as logo and company page.
📍 Location fields
Structured location data for every listing, ready for filtering and analysis.
🔁 Repost & change detection
Every record carries isRepost and changeStatus, so daily feeds return genuinely new jobs instead of reposted duplicates.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
location | string | "Warszawa" | City or region to search in, e.g. 'Warszawa', 'Kraków', 'Wrocław'. Leave empty to search all of Poland. |
daysOld | integer | (empty) | Only return jobs posted within this many days. Accepted values: 1, 3, 7, 14, 30. Leave empty for all listings. |
contractType | string | "any" | Filter by Polish contract type. |
workMode | string | "any" | Filter by work location mode. |
workSchedule | string | "any" | Filter by working hours. |
skipReposts | boolean | false | Skip job listings that were already seen in previous runs of this actor. Repost history is stored for 90 days. |
startUrls | array | (empty) | Optional list of specific Pracuj.pl search result URLs to scrape. When provided, the keywords/location fields are ignored and pagination is disabled. Example: https://www.pracuj.pl/praca/developer;kw/wroclaw;wp |
fetchDetails | boolean | false | Fetch full job details from individual listing pages. |
keywords | string | "Java Developer" | Job title or keyword to search for, e.g. 'Java Developer' or 'Project Manager'. |
maxItems | integer | 5 | Maximum number of job listings to return. Each result triggers one detail page request. |
Output schema
Every field below is present on every record. Fields the source does not publish for a given job are returned as null rather than omitted.
| Field | Type | Description |
|---|---|---|
id | string | Unique listing ID from the source. |
groupId | string | Group id. |
url | string | Direct link to the listing |
title | string | Job title |
company | string | Hiring company name |
location | string | Location as displayed |
city | string | City of the position. |
region | string | Region or state of the position. |
country | string | Country of the position. |
salaryMin | string | Minimum salary (numeric), or null |
salaryMax | string | Maximum salary (numeric), or null |
salaryCurrency | string | Currency code, e.g. PLN, EUR |
salaryPeriod | string | Pay period the salary refers to (e.g. year, month, hour). |
salaryText | string | Raw salary text as displayed (null if not published). |
level | string | Level. |
contract | string | Contract. |
workMode | string | e.g. remote, hybrid, office |
workSchedule | string | e.g. fulltime, parttime |
skills | array | Skills listed on the posting. |
descriptionHtml | string | Full job description in HTML. |
descriptionText | string | Full job description in plain text. |
descriptionMarkdown | string | Description markdown. |
publishDate | string | Date posted |
publishDateISO | string | Publish date iso. |
expirationDate | string | Expiration date. |
isWholePoland | boolean | Is whole poland. |
isRepost | boolean | true if seen in a previous run |
originalPublishDate | string | Original publish date. |
originalUrl | string | Original url. |
isSuperOffer | boolean | Is super offer. |
source | string | Source. |
scrapedAt | string | Timestamp when this record was scraped. |
contentHash | string | Stable hash of the listing content, used for repost and change detection. |
changeStatus | string | NEW, CHANGED or UNCHANGED compared to the previous time this job was seen. |
Example record
{"id": "1004881579","groupId": "5c130000-56be-0050-3029-08dec165d1f7","url": "https://www.pracuj.pl/praca/senior-java-developer-warszawa,oferta,1004881579","title": "Senior Java Developer","company": "NATEK POLAND","location": "Warszawa","city": "Warszawa","region": null,"country": "PL","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"salaryText": null,"level": "Specjalista / Specjalistka (mid / Regular)","contract": "Umowa o pracę","workMode": "Praca hybrydowa","workSchedule": "Pełny etat","skills": [],"descriptionHtml": "Your responsibilities, Design, develop and maintain business-critical payment processing applications using Java and related technologies., Contribute to the ongoing modernization of a large-scale ban …","descriptionText": "Your responsibilities, Design, develop and maintain business-critical payment processing applications using Java and related technologies., Contribute to the ongoing modernization of a large-scale ban …","descriptionMarkdown": "Your responsibilities, Design, develop and maintain business-critical payment processing applications using Java and related technologies., Contribute to the ongoing modernization of a large-scale ban …","publishDate": "2026-06-26","publishDateISO": "2026-06-26T14:12:44.033Z","expirationDate": "2026-07-03T21:59:59Z","isWholePoland": true,"isRepost": false,"originalPublishDate": null,"originalUrl": null,"isSuperOffer": true,"source": "pracuj.pl","scrapedAt": "2026-06-26T14:14:36.166Z","contentHash": "f61ee5d8815f3cb8","changeStatus": "NEW"}
Examples
Search for księgowy roles in Warszawa:
{"keywords": "księgowy","location": "Warszawa","maxItems": 100}
Filter by contract type:
{"keywords": "księgowy","location": "Warszawa","maxItems": 100,"contractType": "any"}
Scrape a specific search URL:
{"startUrls": [{"url": "https://www.pracuj.pl/"}],"maxItems": 200}
Daily feed (run on a schedule):
{"keywords": "księgowy","daysOld": 1,"skipReposts": true,"maxItems": 500}
Schedule this input to run once a day in the Apify Scheduler — each run returns only jobs posted in the last 24 hours.
💰 Pricing
$1.5 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.5 |
| 10,000 | ~$15 |
| 100,000 | ~$150 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Subscription tiers lower the rate further, down to $0.9 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 results | under 1 minute |
| 1,000 results | 2–4 minutes |
| 10,000 results | 20–35 minutes |
Known limitations
- Salary is only returned when the employer publishes it — many listings carry
nullsalary fields. - Company details vary per listing; the scraper returns what the source publishes and never invents data.
- Very large result sets are bounded by the source's own paging limits.
- Listings can be removed by the source at any time, so a small share of URLs may expire shortly after scraping.
Technical details
- Source: pracuj.pl — Poland job listings
- Coverage: everything the public search exposes, filterable via the input parameters above
- Retry: automatic retry on network errors with exponential backoff
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl