Praca.pl Scraper - Polish Job Listings · $1/1K
Pricing
from $0.50 / 1,000 result items
Praca.pl Scraper - Polish Job Listings · $1/1K
Extract job postings from Praca.pl (Poland) by keyword and location: title, employer, place, contract type, salary range, posting date, URL.
Pricing
from $0.50 / 1,000 result items
Rating
0.0
(0)
Developer
Yusuke Suda
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Praca.pl Scraper — Polish job listings by keyword and town
Extract job postings from Praca.pl (Poland) by keyword and location: title, employer, place, contract type, salary range, posting date, URL.
Three rows from a real run
| Title | Employer | Location | Salary | Posted |
|---|---|---|---|---|
| Specjalista / Specjalistka do spraw cyberbezpieczeństwa – be… | Centrum Informatyki Statystycznej | Warszawa, al. Niepodległości 208 | 8000–11500 PLN per month | 2026-10-10 |
| Inżynier Automatyk / Inżynierka Automatyczka | Katcon Polska Sp. z o.o. | Błonie | 2026-10-13 | |
| Starszy Specjalista / Starsza Specjalistka ds. Systemów Jako… | POLPHARMA S.A. | Starogard Gdański | 2026-10-13 |
A run with searchTerms: ["python"] and maxItems: 500 on 2026-10-14 returned 37 postings in 6 seconds and would cost about $0.04 at the current price. Full fields for every row are shown below.
Praca.pl is one of Poland's established job boards, with around 18,000 live postings: over 1,300 in Kraków alone, and large numbers in Warszawa, Wrocław, Poznań and Gdańsk. This Actor turns its search results into a clean table: the job title, the employer, the workplace, the contract and working time, the salary the employer states, the day the posting went online, and the link to the posting.
Press Start. The prefilled input searches for kierowca (driver) in Warszawa,
so the first run needs no configuration.
Looking for daily counts instead of rows? The Praca.pl Job Market Stats Actor gives live, new and removed postings and the median advertised salary by voivodeship and job category, every day.
Use cases
- Tracking which companies in a Polish city are hiring, week by week.
- Salary benchmarking from the ranges employers state, by contract type.
- Feeding a job board or a newsletter with Polish openings in a niche, such as drivers, warehouse staff or accountants.
- Research on the Polish labour market that needs structured rows rather than a page of links.
Input
| Field | What it does |
|---|---|
searchTerms | Keywords, e.g. kierowca, księgowa, magazynier. Each keyword is its own search. Leave empty for everything. |
location | A Polish town, with or without Polish letters (Warszawa, Kraków, Bielsko-Biała), or a voivodeship such as mazowieckie or śląskie on its own, without a keyword. Leave empty, or write Polska, for the whole country. Warsaw, Cracow and other English names work too. A place praca.pl does not know returns no rows, with a warning in the log: never an unfiltered list. |
postedAfter | Only postings from this day on, e.g. 2026-09-20. |
sinceDays | The same, as a rolling window: 1 keeps yesterday and today, 7 the last week. Set it once on a scheduled task and never edit the date again. |
maxItems | A hard stop, so your bill is predictable. |
proxyConfiguration | Off by default. Most runs do not need a proxy. |
Output
What a row looks like
{"title": "Operator wózka widłowego (K/M)","company": "Operis HR sp. z o.o.","location": "Warszawa","employment_type": "umowa o pracę, pełny etat","salary_min": 11000,"salary_max": 15000,"salary_currency": "PLN","salary_period": "month","posted_at": "2026-09-22","source_url": "https://www.praca.pl/operator-wozka-widlowego-k-m_11492461.html","external_id": "11492461"}
company is the employer as the list shows it. When the employer hides its
name (the site then shows "Klient portalu Praca.pl"), company is empty.
Business names only: where the site marks the advertiser as a private person, or the name on the card is or contains a person's name (a sole trader's trade name), the field is left empty. Contact
persons, email addresses and phone numbers are never collected. This Actor
reads the search results only and never opens the job text.
location is the workplace the posting names: a town, a district
("Warszawa, Ursynów"), a voivodeship, or the employer's street address. A
posting offered in several places ("3 regiony" on the site) is several postings,
each with its own ID and link, and each becomes its own row. remote is true
when the posting says fully remote work ("praca zdalna"), and empty otherwise.
employment_type is the contract and the working time as praca.pl writes them,
in Polish: umowa o pracę (employment contract), umowa zlecenie (civil-law
contract), kontrakt B2B, pełny etat (full-time), część etatu
(part-time). salary_* is the pay the employer states, in złoty, per month or
per hour as the posting says. Where the employer states nothing, the columns
are empty.
Every row also carries source_site and scraped_at.
| Field | What it holds | How often it is filled |
|---|---|---|
title, location, posted_at | Job title; town; posted (day) | Always |
company | Employer | About 7 in 10 (13,294 of 18,119). Empty when the site hides the employer ("Klient portalu Praca.pl", 2,794) or the name is a person's or a sole trader's trade name carrying one (2,031) |
employment_type | Contract and working time | About 7 in 10 (12,542 of 18,119) |
salary_min, salary_max, salary_currency, salary_period | Salary range, PLN, per month / hour / year | About 2 in 10 (3,479 of 18,119) |
remote | true when the card says the work is remote | Few (627 of 18,119) |
source_url, external_id | Posting URL; posting ID | Always |
application_deadline, company_url, company_rating, workplace_postal_code, workplace_address, latitude, longitude | Catalogue-wide columns; praca.pl's list does not show them | Always empty here |
Fill rates are from the whole list, 18,119 rows, on 2 October 2026.
Posting dates
praca.pl shows each posting's age ("3 godz.", "2 dni"), not a date. posted_at
is the Polish calendar day on which that age began. Because the site rounds
ages down, a posting shown as "1 dni" gets the later of its two possible days.
A "posted after" filter therefore never drops a posting that may belong inside
it. The filter compares days, not times.
Daily new listings
Make a task from this Actor, set sinceDays to 1 with your search, and
schedule it each morning. Every run then returns only what was posted since
the previous day, in the same columns as a full run. praca.pl lists a search
in two blocks, each newest first, so the run reads the whole search and keeps
what is new; nothing newer further down the list is missed. praca.pl shows
posting dates for roughly the last 15 days; sinceDays above 15 returns the
same rows as 15.
FAQ
Can I search a whole voivodeship? Yes, without a keyword: mazowieckie or śląskie alone. With a keyword, give a town; the site does not combine a keyword with a voivodeship, so that input returns no rows, with a warning in the log, instead of returning something else. Nothing is charged for it.
Why is posted_at a day, not a time? praca.pl shows ages ("3 godz.", "2 dni"), not dates. posted_at is the Polish calendar day on which that age began; a "posted after" filter compares days and never drops a posting that may belong inside it.
Why is the employer sometimes empty? Either the site hides it ("Klient portalu Praca.pl") or the name is a person's name or a sole trader's trade name carrying one; both are left empty.
Is there a limit to one search? The site's pager stops at page 255 (about 12,750 cards). A larger search is reported as capped; more keywords or towns reach the rest.
Can I get only new postings each day? Yes: set sinceDays to 1 on a scheduled task. The run reads the whole search and keeps what is new.
Do I need a proxy? Usually not. Leave it off unless runs start to fail with 403 or 429.
For AI agents & LLM apps
Give an AI agent or an LLM app this Actor as a tool through Apify's MCP server: add https://mcp.apify.com?tools=listingworks/praca-scraper to any MCP client (Claude, ChatGPT, Cursor and others). The client signs you in to Apify in the browser the first time, or you send your API token as Authorization: Bearer <token>. The agent then calls the Actor with the same input as the form above, for example {"searchTerms": ["kierowca"], "location": "Warszawa", "maxItems": 20}, and gets the rows back as JSON: Polish postings it can count, compare or summarise. Keep maxItems small in a chat so answers stay quick; every row is billed as in a normal run.
How much one run returns
praca.pl serves 50 cards per page in two date-ordered blocks (see "Daily new
listings" below), and the run follows the site's own "next page" link until
the list ends or maxItems is reached. The site states how many postings a
search holds, and the run report shows that number next to the rows delivered.
The site's pager stops at page 255. A search larger than that is reported as
capped, and more keywords or towns reach the rest. If you search several
keywords, a posting that matches more than one is delivered only once per run.
How this compares
Other praca.pl Actors are on the Store. Checked on 2 October 2026 against the two most used, from their own Store descriptions and input forms:
- Results page only. Both can open each posting for its details. This Actor never opens a posting: it reads the search results only.
- No personal data. Neither advertises contact persons. This Actor
collects no contact person, e-mail address or phone number;
companyis the employer's name only. - One price per row. Both also charge per row. Here every row costs the same, and you pay only for rows you receive.
- Daily new postings. Neither has a date filter. Here
sinceDaysis a rolling window you set once on a scheduled task.
Scope and limits
The Actor reads public listings only, from the search results pages. praca.pl's robots.txt allows these for all crawlers. No API is called, and job pages are not opened. The promoted "week offers" above the results and the labour-office list below them are not part of your search and are not delivered.
A town that praca.pl does not recognise returns no rows, with a warning in the log saying so and what to type instead. On the site, an unknown town looks like a search with no results and other postings suggested below it; this Actor never delivers or charges for those.
Every page is checked against what you asked for: keyword, town, page number and date order. If the site answered something else, the run fails rather than return rows you did not ask for and charge you for them.
If praca.pl changes its page structure, the run goes red. It does not return zero rows and report success. A silent scraper is worse than a broken one, because you only find out weeks later.
A run that is blocked or cut short partway also goes red, even though the rows it did collect are in the dataset and yours to keep. Red here means "this is not the complete answer", not "you lost the data". On a schedule, a run that quietly came back short is the thing you most need to hear about.
Pricing
$1.00 per 1,000 postings ($0.85 on the Bronze plan, $0.70 on Silver, $0.50 on Gold), plus $0.005 each time a run starts. Platform usage is not passed on to you.
You are charged only for rows you actually receive. If you set a maximum charge for the run, it stops cleanly at that limit instead of going over it.
Legal notice
This Actor reads public search-result pages of praca.pl only, on the paths its robots.txt allows (the search pages), one request at a time. It never opens a posting's own page and collects no personal data: no contact person, e-mail address or phone number, and an employer name that is or contains a person's name is left empty. Praca.pl was told about this Actor in writing on 29 September and 6 October 2026. You decide what you do with the rows; data-protection and database law where you use them is yours to follow.
Same shape, other sites
This Actor shares its output shape with:
- the Jobware Scraper (Germany)
- the jobs.ch, jobup.ch and JobScout24 Scrapers (Switzerland)
- the Jobindex Scraper (Denmark)
- the Jobs.cz Scraper (Czech Republic)
- the BestJobs Scraper (Romania)
A parser you write for one keeps working on the others, and on the countries added next.
Support
Open an issue on this Actor with the run ID and your input. We answer within one business day.