Pracuj.pl Scraper avatar

Pracuj.pl Scraper

Pricing

from $1.80 / 1,000 results

Go to Apify Store
Pracuj.pl Scraper

Pracuj.pl Scraper

[💰 $1.8 / 1K] Extract job listings from Pracuj.pl — Poland's largest job board. Search 60,000+ offers by keyword, location, category, contract type, and work mode. Returns titles, companies, salaries, descriptions, requirements, benefits, and contacts.

Pricing

from $1.80 / 1,000 results

Rating

0.0

(0)

Developer

SolidCode

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Pull job postings from Pracuj.pl — Poland's largest job board — at scale. Get titles, companies, structured salaries, multi-city locations, full descriptions, requirements / responsibilities / benefits, direct apply links, and recruiter contacts across roughly 80,000 active offers nationwide. Built for Polish recruiters, staffing firms, and talent intelligence teams who need fresh CEE labor-market data without wrestling with a Polish-language site one page at a time.

Why This Scraper?

  • 35 verified job categories — IT software development, finance & accounting, sales, marketing, engineering, healthcare, logistics, construction, public sector, and 26 more from Pracuj.pl's own taxonomy. Combine several in a single run.
  • 11 position levels and 8 contract types — slice senior B2B from junior employment contracts in one query; covers intern, assistant, junior, mid, senior, expert, team leader, manager, director, C-level, and blue-collar.
  • Structured salary with canonical period and currency — every offer that publishes a salary returns {min, max, currency, period, displayText}. Currency is PLN / EUR / USD; period is normalized to one of hour, day, week, month, year, or once — never the raw Polish strings — ready for compensation dashboards.
  • Three parallel content arraysrequirements, responsibilities, and benefits arrive pre-split as clean bullet lists, not a wall of HTML. Average 10 requirements and 7 responsibilities per posting.
  • Multi-city postings collapsed into one row — nationwide retail and banking roles republished across up to 37 cities arrive as a single row with a bounded locations[] array, not 37 near-duplicates. You pay for unique jobs, not city copies.
  • Direct apply URLs plus one-click apply flagsapplyUrl returns the external ATS form (Greenhouse, Traffit, SmartRecruiters, and similar) when the employer wires one through, otherwise the Pracuj.pl-hosted apply page. isOneClickApply and isOptionalCv booleans let you spot quick-apply roles instantly.
  • Polish-friendly location input — type Warszawa, Kraków, Wrocław, Gdańsk, Łódź, or any of 16 voivodeships in Polish characters. Combine with a + 10 / 20 / 30 / 50 km radius widget that mirrors Pracuj.pl's own search.
  • startUrls power-user mode — paste any pracuj.pl listing URL with your filters already dialed in (e.g. /praca/javascript;kw/warszawa;wp?et=17&p=7) and the actor reproduces it exactly, skipping the guided fields.
  • Flat $1.80 per 1,000 results — detail-rich rows included — the competing actor charges $3 per 1k for list-only rows and $5 per 1k once you turn on detail enrichment. Here, full descriptions and contacts are on by default at one flat rate.

Use Cases

Recruiting & Sourcing

  • Build candidate-targeting lists by combining role, seniority, and city
  • Monitor competitor hiring in IT software development, finance, or sales
  • Track new B2B contracts in Warszawa, Kraków, and Wrocław for tech sourcing
  • Surface fresh openings every morning to feed your ATS

Market & Salary Intelligence

  • Compare salary ranges by position level, contract type, and voivodeship
  • Benchmark Polish IT, finance, and manufacturing compensation across cities
  • Track demand for specific tech stacks (java, python, react, sap)
  • Detect seasonal hiring waves by re-running with publishedWithin: "7"

Job-Board & ATS Integration

  • Aggregate Polish listings into a niche vertical board (tech, healthcare, finance)
  • Enrich existing job feeds with structured salary and category data
  • Power CEE coverage in a pan-European job aggregator
  • Schedule daily runs to keep listings current

Candidate-Side Automation

  • Build automated job-search pipelines filtered to remote + senior + B2B
  • Pull only postings published in the last 24 hours for "new today" alerts
  • Match jobs against a skills list using the requirements array

Academic & Policy Research

  • Analyze the Polish labor market by category, region, and contract type
  • Study the share of remote vs hybrid vs office roles over time
  • Quantify the gap between salary-disclosed and salary-hidden offers

Getting Started

The fastest way to start — one keyword, default limits:

{
"searchQueries": ["javascript"],
"maxResults": 100
}

Keyword + Location + Radius (Remote Roles in Warszawa)

Narrow to remote roles within 30 km of the capital:

{
"searchQueries": ["python developer"],
"location": "Warszawa",
"radius": "30",
"workModes": ["home-office"],
"maxResults": 200
}

Filter Combo — Senior B2B in IT with Disclosed Salary

Ideal for compensation benchmarking:

{
"searchQueries": ["backend"],
"category": ["it-software-development"],
"positionLevels": ["senior", "expert"],
"contractTypes": ["b2b"],
"withSalaryOnly": true,
"publishedWithin": "14",
"maxResults": 500
}

Paste a Pre-Built Pracuj.pl URL

Already filtered a search in your browser? Drop the URL in directly:

{
"startUrls": [
"https://www.pracuj.pl/praca/javascript;kw/warszawa;wp?et=17&p=7"
],
"maxResults": 200
}

Input Reference

Search & Location

ParameterTypeDefaultDescription
searchQueriesstring[]["javascript"]Polish or English keywords. Each runs as its own search; rows matching multiple keywords are deduplicated automatically. Leave empty to scrape the unfiltered all-Poland listing.
locationstringnullCity (Warszawa, Kraków, Gdańsk) or voivodeship (mazowieckie, małopolskie). Polish characters accepted. Empty = all of Poland.
radiusselectExact area only (0 km)Expand the search by + 10 km, + 20 km, + 30 km, or + 50 km. Mirrors the Pracuj.pl radius widget. Ignored when Location is empty.

Filters

ParameterTypeDefaultDescription
categoryselect[][]One or more of 35 job categories: IT — Software Development, Finance & Economics, Sales, Marketing, Engineering, Production, Health / Beauty / Recreation, and more.
contractTypesselect[][]One or more of 8 contract types: Employment contract, B2B contract, Mandate contract, Specific-task contract, Substitution, Agency, Temporary employment, Internship.
workModesselect[][]One or more of 4 work modes: Office, Hybrid, Remote, Mobile / field work.
workScheduleselect[][]One or more of 3 schedules: Full-time, Part-time, Additional / temporary.
positionLevelsselect[][]One or more of 11 seniority levels: Intern, Assistant, Junior, Mid, Senior, Expert, Team leader, Manager, Director, President / C-level, Blue-collar worker.
publishedWithinselectAny (all active offers)Recency window: Last 24 hours, 3 days, 7 days, 14 days, or 30 days.
withSalaryOnlybooleanfalseSkip offers that don't publish a salary range. Useful for compensation research.

Source URLs

ParameterTypeDefaultDescription
startUrlsstring[][]Power-user input. Paste Pracuj.pl listing URLs (/praca/javascript;kw/warszawa;wp) or individual offer URLs (/praca/...,oferta,1234567). When provided, these override the guided Search and Filters fields above.

Limits

ParameterTypeDefaultDescription
maxResultsinteger100Maximum number of job postings to collect across all searches and URLs. Set to 0 for no cap (an internal safety limit of 100,000 still applies). Results are collected in full pages of ~50 offers, so the final page may overshoot this number by a few rows.

Output

One row per unique job posting. Multi-location postings (e.g. a nationwide retail role published in 25 cities) arrive as a single row with every city listed in the locations array.

{
"id": "12345678-90ab-cdef-1234-567890abcdef",
"partitionId": 1004811129,
"title": "Senior Python Developer",
"url": "https://www.pracuj.pl/praca/senior-python-developer-warszawa,oferta,1004811129",
"company": {
"name": "Acme Software Sp. z o.o.",
"url": "https://www.pracuj.pl/praca/acme-software;p,123456",
"website": null,
"logoUrl": "https://static.pracuj.pl/employers/123456/logo.png",
"id": 123456
},
"salary": {
"min": 18000,
"max": 24000,
"currency": "PLN",
"period": "month",
"displayText": "18 000–24 000 zł brutto / mies."
},
"contractTypes": ["b2b", "permanent"],
"workModes": ["hybrid"],
"workSchedules": ["full-time"],
"positionLevels": ["senior"],
"categories": ["it-software-development"],
"locations": [
{
"city": "Warszawa",
"region": "mazowieckie",
"country": "Poland",
"isWholePoland": false,
"displayWorkplace": "Warszawa, Mokotów",
"partitionId": 1004811129,
"url": "https://www.pracuj.pl/praca/senior-python-developer-warszawa,oferta,1004811129"
}
],
"primaryLocation": {
"city": "Warszawa",
"region": "mazowieckie",
"country": "Poland",
"isWholePoland": false,
"displayWorkplace": "Warszawa, Mokotów",
"partitionId": 1004811129,
"url": "https://www.pracuj.pl/praca/senior-python-developer-warszawa,oferta,1004811129"
},
"descriptionSnippet": "We are looking for an experienced Python engineer to join our platform team...",
"descriptionText": "Responsibilities:\n- Design and ship backend services in Python 3.12\n- Own deployment and observability\n\nRequirements:\n- 5+ years of Python experience\n- Strong SQL and Postgres\n...",
"requirements": [
"5+ years of Python experience",
"Strong SQL and Postgres knowledge",
"Experience with AWS or GCP"
],
"responsibilities": [
"Design and ship backend services in Python 3.12",
"Own deployment and observability of your services"
],
"benefits": [
"Private medical care",
"Multisport card",
"Annual training budget"
],
"applyUrl": "https://acme-software.com/careers/apply/python-senior",
"applyEmail": null,
"contactPhone": null,
"isOneClickApply": false,
"isOptionalCv": false,
"isRemoteWorkAllowed": false,
"isSuperOffer": true,
"postedAt": "2026-05-20T08:00:00Z",
"expiresAt": "2026-06-19T22:59:59Z",
"searchQuery": "python developer",
"sourceListUrl": "https://www.pracuj.pl/praca/python%20developer;kw/warszawa;wp?rd=30&pn=1",
"scrapedAt": "2026-05-23T14:30:00Z",
"sourcePlatform": "pracuj.pl"
}

Core Fields

FieldTypeDescription
idstringStable identifier for the grouped posting (groupId).
partitionIdnumberNumeric Pracuj.pl offer ID of the primary location.
titlestringJob title as published.
urlstringCanonical detail URL of the primary location.
descriptionSnippetstringShort list-page teaser.
descriptionTextstringFull plain-text description, composed across every detail-page section (responsibilities, requirements, benefits, about-us, etc.) into one readable block — typically 1.5–4 KB per posting.
postedAtstringISO 8601 timestamp when the posting was last (re-)published.
expiresAtstringISO 8601 timestamp when the posting expires.
scrapedAtstringISO 8601 timestamp of data collection.
sourcePlatformstringAlways "pracuj.pl".

Company

FieldTypeDescription
company.namestringEmployer's display name.
company.urlstringPracuj.pl company-profile URL.
company.websitestringCompany's own site, when available.
company.logoUrlstringCompany logo image URL.
company.idnumberPracuj.pl numeric employer ID.

Salary

FieldTypeDescription
salary.minnumberLower bound of published salary (null when not disclosed).
salary.maxnumberUpper bound of published salary (null when not disclosed).
salary.currencystringCurrency code — typically PLN, also EUR and USD.
salary.periodstringPay period — one of hour, day, week, month, year, or once. Normalized from Pracuj.pl's mixed Polish / English source values, so you never have to handle both.
salary.displayTextstringRaw salary string as shown on Pracuj.pl.

Locations

FieldTypeDescription
locationsobject[]Every city the posting was published in (bounded — typically 1–5, up to ~37 for nationwide roles).
locations[].citystringCity name.
locations[].regionstringPolish voivodeship.
locations[].countrystringAlways "Poland".
locations[].isWholePolandbooleantrue when Pracuj.pl tags the role as also acceptable nationwide (can co-exist with a specific city).
locations[].urlstringDirect URL to that location's offer copy.
primaryLocationobjectFirst entry of locations flattened to the top level for convenient tabular views.

Categorization

FieldTypeDescription
categoriesstring[]One or more of the 35 Pracuj.pl category slugs (e.g. it-software-development).
contractTypesstring[]One or more of 8 contract slugs (b2b, permanent, mandate, …).
workModesstring[]One or more of 4 work-mode slugs (hybrid, home-office, full-office, mobile).
workSchedulesstring[]One or more of 3 schedule slugs (full-time, part-time, additional).
positionLevelsstring[]One or more of 11 level slugs (junior, senior, manager, …).

Content & Apply

FieldTypeDescription
requirementsstring[]Pre-split requirement bullets (avg ~10 per posting).
responsibilitiesstring[]Pre-split responsibility bullets (avg ~7 per posting).
benefitsstring[]Pre-split benefit / perk bullets when published.
applyUrlstringExternal ATS form URL (Greenhouse, Traffit, SmartRecruiters, etc.) when the employer wires one through, otherwise the Pracuj.pl-hosted apply page.
applyEmailstringRecruiter email when published either in the structured applying block or in the free-text body. Often null — most Polish employers route applications through their ATS instead.
contactPhonestringRecruiter phone when published in the structured applying block. Often null — most postings omit it.
isOneClickApplybooleanTrue when Pracuj.pl supports one-click apply.
isOptionalCvbooleanTrue when CV upload is optional.
isRemoteWorkAllowedbooleanTrue when the listing tags remote work.
isSuperOfferbooleanTrue for Pracuj.pl's "promoted" listings.

Run Metadata

FieldTypeDescription
searchQuerystringWhich input keyword surfaced this row (null when from startUrls).
sourceListUrlstringListing URL the row was discovered on.

Tips for Best Results

  • Use Polish keywords for the widest coverage. Searching programista or inżynier typically returns 30–40% more rows than the English equivalents on Polish-only roles. Pair English tech terms (python, react) with Polish job nouns when in doubt.
  • Combine positionLevels with contractTypes to slice the same query. Run one pass for ["senior"] + ["b2b"] and another for ["mid"] + ["permanent"] against the same keyword — that's two clean benchmarking datasets for the same role.
  • Power-user startUrls mirrors what you see in your browser. Build the search on pracuj.pl with every filter you need, copy the URL, and paste it in — the actor honors it exactly. Useful when the guided fields don't cover an edge case.
  • Polish characters in location just work. Type Łódź, Kraków, Gdańsk, or Wrocław directly; the actor folds them to the right city slug. Voivodeship names (mazowieckie, małopolskie) are also accepted.
  • withSalaryOnly: true for compensation research. Roughly two-thirds of Pracuj.pl offers publish a salary — flipping this filter on gives you a clean, structured dataset for benchmarking without post-processing.
  • Start small to verify. Run with maxResults: 50 first to confirm the filter combo matches your intent. Pages return ~50 rows each, so the actor will overshoot small caps to keep the last page intact.
  • publishedWithin: "1" for daily alerts. Schedule the actor every morning with the 24-hour window to feed only fresh-today rows into your CRM, Slack, or ATS.

Pricing

$1.80 per 1,000 results — pay-per-result pricing, dramatically cheaper than the headline $3.00–$5.00 / 1k of competing Pracuj.pl scrapers, with full descriptions and contacts included at the flat rate.

ResultsCost
100$0.18
1,000$1.80
10,000$18.00
100,000$180.00

No compute charges — you only pay per result returned. A "result" is one unique job posting row. Multi-location postings are collapsed into a single row with every city listed inside, so you never pay for city-duplicate noise. Platform fees (storage, transfer) are additional and depend on your Apify plan.

Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

  • Zapier / Make / n8n — Workflow automation
  • Google Sheets — Direct spreadsheet export, refreshed on every run
  • Slack / Email — Notifications on new results
  • Webhooks — Trigger custom APIs on run completion
  • Apify API — Full programmatic access to runs, datasets, and schedules

Schedule the actor to run daily to keep a live feed of Polish job postings flowing into your CRM, BI tool, or candidate database.

This actor is designed for legitimate recruitment, market intelligence, salary benchmarking, and labor-market research. You are responsible for complying with applicable laws (including GDPR and Polish data-protection rules), Pracuj.pl's Terms of Service, and the policies of any system you forward the data into. Do not redistribute recruiter contact information without consent, and do not use the extracted data for spam, harassment, or any illegal purpose. When in doubt, consult your legal team before running large collections.