Pracuj.pl Jobs Scraper avatar

Pracuj.pl Jobs Scraper

Pricing

Pay per event

Go to Apify Store
Pracuj.pl Jobs Scraper

Pracuj.pl Jobs Scraper

Extract Pracuj.pl vacancies with employer, location, salary, contract, work mode, technologies, dates, descriptions, and application links.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Extract pracuj.pl jobs into normalized vacancy records for recruiting research, salary analysis, hiring intelligence, and repeatable job feeds.

Search by keyword and location, process an existing Pracuj.pl results URL, or enrich an individual public offer URL. Each record can include the offer ID, employer, workplaces, salary, contracts, work mode, dates, description, technologies, responsibilities, requirements, benefits, application links, and canonical URL.

The Actor uses a resource-blocked browser session and handles Pracuj.pl's public anti-bot page automatically. No Pracuj.pl account is required.

What can you do with this Pracuj.pl jobs scraper?

  • Export Polish vacancies to JSON, CSV, Excel, XML, or RSS.
  • Compare salary ranges across roles, cities, employers, and contract types.
  • Build a recurring feed keyed by stable Pracuj.pl offer IDs.
  • Track active hiring by employer, region, or technology.
  • Collect complete vacancy details for recruiting and labor-market analysis.
  • Send results to a database, spreadsheet, webhook, Make, Zapier, or an AI workflow.

The Actor extracts current public records. It does not submit applications, upload a CV, log in, or contact employers.

Who is it for?

Recruiting teams can identify active employers, technologies, contract models, and salary signals.

Labor-market analysts can collect consistently shaped observations for regional or occupational studies.

Job-feed and integration developers can consume stable IDs, canonical URLs, structured dates, and normalized arrays.

Candidates and career-tool builders can compare current public openings without manually copying fields from many offer pages.

Sales and staffing teams can study employer hiring activity using publicly displayed company and vacancy information.

What data does it extract?

Field groupExamples
IdentityofferId, groupId, canonicalUrl
Vacancytitle, description, categories
Employeremployer, employerId, employerProfileUrl
Placelocations, region, country, coordinates
CompensationsalaryText, salaryMin, salaryMax, salaryCurrency, salaryPeriod
Work termscontractTypes, positionLevels, workModes, workSchedules, isRemote
Detail sectionsresponsibilities, requirements, benefits, technologies
DatespostedAt, updatedAt, expiresAt, scrapedAt
ApplicationapplyUrl, externalApplyUrl, isOneClickApply, remoteRecruitment
TraceabilitysourceQuery, sourceUrl

Unavailable source fields are returned as null or an empty array instead of being invented.

How to scrape Pracuj.pl vacancies

  1. Open the Actor in Apify Console.
  2. Enter one or more job keywords in Search queries.
  3. Optionally enter a Polish city or region.
  4. Keep Include full job details enabled for descriptions, technologies, requirements, benefits, structured salary fields, and apply links.
  5. Set the maximum number of jobs and pages.
  6. Click Start.
  7. Open the Jobs dataset and export it in your preferred format.

A useful first input is:

{
"queries": ["Java developer"],
"location": "Kraków",
"includeDetails": true,
"maxItems": 10,
"maxPagesPerSearch": 2
}

Input parameters

InputTypeDefaultWhat it does
queriesstring arrayJob keywords to search on Pracuj.pl.
locationstringemptyCity or region applied to every query.
startUrlsURL arrayemptyPublic Pracuj.pl search or individual offer URLs.
includeDetailsbooleantrueOpens offer pages for full detail enrichment.
maxItemsinteger50Stops after 1–1,000 unique jobs.
maxPagesPerSearchinteger10Processes at most 1–20 pages per search.

Provide at least one query or URL. When both are supplied, the Actor processes both and deduplicates results by offerId.

The location field applies to generated query searches. Existing startUrls keep the filters encoded in their URLs.

Search URLs and individual offer URLs

You can paste a real search URL when you have already configured filters on Pracuj.pl:

{
"startUrls": [
{ "url": "https://www.pracuj.pl/praca/data%20analyst;kw/warszawa;wp" }
],
"includeDetails": true,
"maxItems": 25
}

You can also enrich one public offer directly:

{
"startUrls": [
{ "url": "https://www.pracuj.pl/praca/java-developer-krakow,oferta,1005020652" }
],
"includeDetails": true,
"maxItems": 1
}

Only pracuj.pl search and offer URLs are accepted. Unsupported domains and malformed limits fail with a clear error.

Example output

This shortened record reflects the current output shape:

{
"offerId": 1005002751,
"title": "Java Script / Mashup Developer",
"employer": "Mindbox Sp. z o.o.",
"locations": ["Kraków"],
"region": "małopolskie",
"country": "Poland",
"salaryText": "26 000–29 000 zł netto (+ VAT) / mies.",
"salaryMin": 26000,
"salaryMax": 29000,
"salaryCurrency": "PLN",
"contractTypes": ["B2B contract"],
"workModes": ["hybrid work"],
"technologies": ["React.js", "TypeScript", "QlikSense"],
"postedAt": "2026-07-31T22:00:00Z",
"expiresAt": "2026-08-30T21:59:59Z",
"applyUrl": "https://www.pracuj.pl/aplikuj/java-script-mashup-developer-krakow,oferta,1005002751",
"canonicalUrl": "https://www.pracuj.pl/praca/java-script-mashup-developer-krakow,oferta,1005002751"
}

The complete dataset includes all fields declared in the dataset schema.

Listing mode versus detail mode

With includeDetails: false, the Actor returns useful listing fields such as offer identity, title, employer, locations, salary text, work terms, dates, and URL. This is efficient for broad recurring monitoring.

With includeDetails: true, it also opens each offer page and adds structured salary values, full workplace metadata, categories, responsibilities, requirements, benefits, technologies, and apply fields.

If one detail page fails after a valid search result was obtained, the Actor preserves the listing record. A failed or challenged search page fails the run rather than silently returning an empty dataset.

How much does it cost to extract Pracuj.pl jobs?

The Actor uses pay-per-event pricing:

  • Start: $0.01 once per run.
  • Job item: tiered by your Apify plan; the BRONZE price is $0.0016 per saved job.
  • Detail enrichment is included in the job item event and has no separate event charge.

At BRONZE rates, approximate Actor charges are:

Saved jobsApproximate charge
1$0.0116
10$0.026
100$0.17

Apify platform usage and proxy transfer can vary with page size, challenge handling, and run duration. Check Console for the exact charge and platform usage of each run.

Tips for reliable recurring monitoring

  • Keep the same query and filter scope between scheduled runs.
  • Use offerId as the primary deduplication key.
  • Compare updatedAt, expiresAt, salary fields, and normalized arrays to detect changes.
  • Disable details for a broad first-stage feed, then enrich selected offer URLs in a second task.
  • Use smaller scheduled runs instead of repeatedly downloading a large catalog.
  • Set a realistic maxPagesPerSearch; the Actor stops early when no additional records are found.

The Actor does not maintain a hidden cross-run database. Your dataset, storage, or downstream workflow should retain prior snapshots when change history is required.

Export and integration workflows

After a run, export the default dataset as JSON, CSV, Excel, XML, or RSS.

Common workflows include:

  1. Schedule a daily task and append records to a warehouse.
  2. Use a webhook to send new vacancies to Make or Zapier.
  3. Join employerId and offerId with internal recruiting data.
  4. Load salary fields into a notebook or BI dashboard.
  5. Feed vacancy text and technology arrays into a search or RAG index.
  6. Send expiring offers to an internal review queue.

Apify integrations can connect datasets to Google Sheets, Slack, GitHub, Airbyte, Keboola, and custom webhooks.

Run through the Apify API with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~pracuj-pl-jobs-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"queries": ["data analyst"],
"location": "Warszawa",
"includeDetails": true,
"maxItems": 20
}'

The response contains the run and default dataset identifiers. Poll the run or use a webhook before downloading results.

Use from JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/pracuj-pl-jobs-scraper').call({
queries: ['data analyst'],
location: 'Warszawa',
includeDetails: true,
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use from Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/pracuj-pl-jobs-scraper').call(run_input={
'queries': ['data analyst'],
'location': 'Warszawa',
'includeDetails': True,
'maxItems': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with MCP and AI agents

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/pracuj-pl-jobs-scraper"

Claude Desktop

Add this server to the Claude Desktop MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/pracuj-pl-jobs-scraper"
}
}
}

Cursor

Open Settings → MCP, add a remote HTTP server named apify, and use:

https://mcp.apify.com?tools=automation-lab/pracuj-pl-jobs-scraper

VS Code

Add the same remote HTTP endpoint to your workspace MCP server configuration, then enable the automation-lab/pracuj-pl-jobs-scraper tool.

Example prompts:

  • “Find three Java developer openings in Kraków and compare their salary and work mode.”
  • “Extract this Pracuj.pl search URL and group jobs by employer.”
  • “Return current accounting vacancies as a compact feed for my monitoring workflow.”

Limitations and troubleshooting

Pracuj.pl can change its page structure, filters, and anti-bot rules. The Actor validates the current structured page state and fails clearly when it cannot recognize it.

A search may naturally have no results. Try the same search in a browser, broaden the keyword or location, and confirm that the offer is still active.

Detail fields vary by employer. Salary, external application URL, coordinates, technologies, or remote-recruitment status may be absent.

Expired, withdrawn, login-only, and non-public records are not accessible. The Actor does not solve interactive CAPTCHAs or access private candidate data.

Large detail runs take longer because each vacancy document is fetched through the same cleared browser session.

Responsible use and legality

This Actor extracts publicly visible vacancy information. Web-scraping rules depend on the jurisdiction, source terms, data type, and intended use.

  • Review Pracuj.pl's terms and robots guidance for your use case.
  • Respect applicable copyright, database, privacy, and employment laws.
  • Avoid excessive collection and retain only data you need.
  • Do not use results for unlawful discrimination, spam, or automated application abuse.
  • Secure exported datasets and honor valid deletion or correction requests.

You are responsible for deciding whether your collection and downstream processing are lawful.

FAQ

Does it require a Pracuj.pl account?

No. It processes public search and offer pages anonymously.

Can it search more than one keyword?

Yes. Add multiple strings to queries; the Actor deduplicates overlapping offers by offerId.

Can it process filters selected on Pracuj.pl?

Yes. Supply the resulting public search URL in startUrls. Its encoded search scope is preserved.

Why are some salary fields null?

Many employers do not publish salary ranges. salaryText comes from the listing, while numeric salary fields require structured detail data.

Why did a run fail instead of returning zero records?

The Actor fails when Pracuj.pl returns a persistent challenge or an unrecognized page. This prevents a blocked page from being mistaken for a genuine empty search.

Can I monitor new and changed jobs?

Yes. Schedule a consistent input and compare records downstream by offerId, updatedAt, and the fields important to your workflow. The Actor does not itself retain historical snapshots.

For salary-focused Polish technology vacancies, use NoFluffJobs Tech Jobs Scraper.

For public ATS boards, Breezy HR Jobs Scraper and Pinpoint ATS Jobs Scraper cover their respective sources.