Praca.pl Scraper - Polish Job Listings · $1/1K avatar

Praca.pl Scraper - Polish Job Listings · $1/1K

Pricing

from $0.50 / 1,000 result items

Go to Apify Store
Praca.pl Scraper - Polish Job Listings · $1/1K

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

Yusuke Suda

Maintained by Community

Actor 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

TitleEmployerLocationSalaryPosted
Specjalista / Specjalistka do spraw cyberbezpieczeństwa – be…Centrum Informatyki StatystycznejWarszawa, al. Niepodległości 2088000–11500 PLN per month2026-10-10
Inżynier Automatyk / Inżynierka AutomatyczkaKatcon Polska Sp. z o.o.Błonie2026-10-13
Starszy Specjalista / Starsza Specjalistka ds. Systemów Jako…POLPHARMA S.A.Starogard Gdański2026-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

FieldWhat it does
searchTermsKeywords, e.g. kierowca, księgowa, magazynier. Each keyword is its own search. Leave empty for everything.
locationA 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.
postedAfterOnly postings from this day on, e.g. 2026-09-20.
sinceDaysThe 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.
maxItemsA hard stop, so your bill is predictable.
proxyConfigurationOff 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.

FieldWhat it holdsHow often it is filled
title, location, posted_atJob title; town; posted (day)Always
companyEmployerAbout 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_typeContract and working timeAbout 7 in 10 (12,542 of 18,119)
salary_min, salary_max, salary_currency, salary_periodSalary range, PLN, per month / hour / yearAbout 2 in 10 (3,479 of 18,119)
remotetrue when the card says the work is remoteFew (627 of 18,119)
source_url, external_idPosting URL; posting IDAlways
application_deadline, company_url, company_rating, workplace_postal_code, workplace_address, latitude, longitudeCatalogue-wide columns; praca.pl's list does not show themAlways 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; company is 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 sinceDays is 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.

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.