# Pracuj.pl Job Offers Scraper (`piotrv1001/pracuj-pl-job-offers-scraper`) Actor

The Pracuj.pl Job Offers Scraper extracts job listings from Poland's largest job board, capturing titles, companies, salary ranges, locations, contract types, AI requirement summaries, full descriptions, and application links — ideal for recruitment analytics and labor market research.

- **URL**: https://apify.com/piotrv1001/pracuj-pl-job-offers-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 job offers

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🇵🇱 Pracuj.pl Job Offers Scraper

Easily extract job offers from [Pracuj.pl](https://www.pracuj.pl) — Poland's largest job board with tens of thousands of active listings. The **Pracuj.pl Job Offers Scraper** lets you collect structured job market data for recruitment analytics, salary benchmarking, lead generation, and labor market research — with API access, scheduling, and easy export thanks to the Apify platform.

### ✨ Features

- 🔍 **Search by keyword & location** — scrape offers for any job title, skill, or company in any Polish city or region, or across the whole country.
- 💰 **Salary data** — get the advertised salary range for offers that disclose it, including structured values (from/to, currency, gross/net, per month/hour) in detail mode.
- 🤖 **AI requirement summaries** — every offer includes Pracuj.pl's own AI-generated summary of key requirements as clean plain text.
- 📄 **Full job details (optional)** — turn on a single switch to also collect the complete description (responsibilities, requirements, benefits), required technologies, exact workplace addresses with coordinates, job categories, and direct application links.
- 🏠 **Remote & hybrid flags** — every offer carries its work modes (remote / hybrid / on-site) so you can filter results client-side.
- 🔗 **Custom search URLs** — fine-tune a search in your browser (salary, contract type, position level…) and paste the URL to scrape exactly those results.
- ⚡ **Fast & deduplicated** — offers are collected 50 per page and deduplicated across locations of the same posting.

### 🛠️ How It Works

1. **Enter a keyword and/or location** — e.g. `programista` in `Warszawa`, or leave the location empty to search all of Poland.
2. **Set the maximum number of offers** — defaults to 50.
3. **Optionally enable "Scrape full job details"** — to get complete descriptions, structured salaries, technologies, and apply links for every offer.
4. **Run the scraper** — and download your data as JSON, CSV, Excel, or HTML, or fetch it via the API.

### ⚙️ Input

| Field | Type | Description |
| --- | --- | --- |
| `keyword` | string | Job title, skill, or company to search for (e.g. `programista`, `accountant`, `python`) |
| `location` | string | City or region in Poland (e.g. `Warszawa`, `Kraków`). Empty = whole country |
| `maxItems` | integer | Maximum number of job offers to scrape (default: `50`) |
| `scrapeJobDetails` | boolean | Also visit each offer page for full details (default: `false`) |
| `startUrls` | array | Optional Pracuj.pl search URLs used instead of keyword/location |
| `proxyConfiguration` | object | Proxy settings — the default works well |

### 📊 Sample Output Data

```json
[
    {
        "id": "34300000-56be-0050-ae7c-08deb73d17b2",
        "url": "https://www.pracuj.pl/praca/senior-frontend-developer-with-aws-f-m-x-warszawa-aleja-niepodleglosci-69,oferta,1004853551",
        "title": "Senior Frontend Developer with AWS (f/m/x)",
        "company": {
            "name": "Sii Sp. z o.o.",
            "id": 20000761,
            "profileUrl": "https://pracodawcy.pracuj.pl/company/20000761",
            "logoUrl": "https://logos.gpcdn.pl/loga-firm/20000761/03000000-bb2f-3863-1665-08d6dec4c54d_280x280.jpeg"
        },
        "salary": "15 750–17 850 zł netto (+ VAT) / mies.",
        "locations": ["Warszawa, Mokotów"],
        "workModes": ["Praca stacjonarna"],
        "isRemoteWorkAllowed": false,
        "positionLevels": ["Starszy specjalista / Starsza specjalistka (senior)"],
        "typesOfContract": ["Umowa o pracę", "Kontrakt B2B"],
        "workSchedules": ["Pełny etat"],
        "publishedAt": "2026-06-05T14:19:00Z",
        "expiresAt": "2026-06-20T21:59:59Z",
        "descriptionSnippet": "Your responsibilities, Develop and maintain applications using modern front-end technologies...",
        "aiSummary": "- Masz minimum 8 lat doświadczenia w programowaniu z użyciem nowoczesnych technologii front-end lub AWS.\n- Specjalizujesz się w tworzeniu skalowalnych aplikacji i rozwiązań chmurowych.",
        "scrapedAt": "2026-06-05T15:02:11.123Z"
    }
]
````

With **Scrape full job details** enabled, every item additionally contains:

```json
{
    "salaries": [
        {
            "contractType": "B2B contract",
            "from": 15750,
            "to": 17850,
            "currency": "PLN",
            "timeUnit": "monthly",
            "kind": "net (+ VAT)"
        }
    ],
    "categories": [{ "id": 5016003, "name": "Programming", "parent": "IT software development" }],
    "technologiesExpected": ["JavaScript", "TypeScript", "React.js", "AWS"],
    "technologiesOptional": ["Node.js"],
    "descriptionSections": [
        { "type": "responsibilities", "plainText": "…", "elements": ["…"] },
        { "type": "requirements-expected", "plainText": "…", "elements": ["…"] },
        { "type": "offered", "plainText": "…", "elements": ["…"] }
    ],
    "workplaces": [
        {
            "displayAddress": "Aleja Niepodległości 69, Mokotów, Warszawa",
            "city": "Warszawa",
            "region": "Masovian",
            "country": "Poland",
            "coordinates": { "latitude": 52.1904, "longitude": 21.0157 }
        }
    ],
    "applyUrl": "https://www.pracuj.pl/aplikuj/senior-frontend-developer-with-aws-f-m-x,oferta,1004853551",
    "atsFormUrl": "https://sii.pl/en/job-ads/id/36994#apply-contact-form",
    "referenceNumber": null,
    "entirelyRemoteWork": false,
    "isActive": true,
    "firstPublishedAt": "2026-05-21T14:18:38.6Z",
    "detailsScraped": true
}
```

### 📋 Data Fields

| Field | Description |
| --- | --- |
| `title`, `company` | Job title and employer (name, profile URL, logo) |
| `salary` / `salaries` | Advertised salary as text, plus structured ranges in detail mode |
| `locations`, `workplaces` | All locations of the posting; exact addresses with coordinates in detail mode |
| `workModes`, `isRemoteWorkAllowed` | Remote / hybrid / on-site flags |
| `positionLevels`, `typesOfContract`, `workSchedules` | Seniority, contract types, full/part time |
| `aiSummary` | Pracuj.pl's AI summary of key requirements |
| `technologiesExpected` / `technologiesOptional` | Tech stack for IT offers (detail mode) |
| `descriptionSections` | Full description split into sections (detail mode) |
| `applyUrl`, `atsFormUrl` | Direct application links (detail mode) |
| `publishedAt`, `expiresAt`, `isActive` | Publication metadata |

### 💸 How much does it cost to scrape Pracuj.pl?

The Actor uses pay-per-event pricing — you pay only for what you get:

| Event | Price |
| --- | --- |
| Actor start | $0.005 per run |
| Job offer (list data) | $0.002 per offer ($2 per 1,000) |
| Job offer with full details | $0.005 per offer ($5 per 1,000) |

A typical run collecting 1,000 job offers with list data costs about **$2**. You can cap your spend with the **Maximum cost per run** option in the Run settings.

### 💡 Tips

- Keep **Scrape full job details** off if list-level data (title, company, salary text, locations, work modes, AI summary) is enough — it's faster and 2.5× cheaper.
- Use `maxItems` to control both cost and run time.
- Schedule the Actor to run daily or weekly to track new offers and salary trends over time.
- Category and work-mode URL filters are not supported in custom search URLs — use the `keyword`/`location` inputs and filter by `workModes` in your own pipeline instead.

### ❓ FAQ & Disclaimer

**Is it legal to scrape Pracuj.pl?** This scraper collects only publicly available data, without logging in. However, you are responsible for using the data in compliance with applicable laws and Pracuj.pl's terms of service. The results may contain personal data subject to GDPR — process it only with a legitimate purpose.

**Found a bug or missing a feature?** Open an issue on the Actor's **Issues** tab — feedback is welcome. Custom solutions are available on request.

Start mapping the Polish job market with the **Pracuj.pl Job Offers Scraper** today! 🚀

# Actor input Schema

## `keyword` (type: `string`):

Job title, skill, or company name to search for, e.g. <code>programista</code>, <code>accountant</code>, <code>python</code>. Leave empty to browse all offers.

## `location` (type: `string`):

City or region in Poland, e.g. <code>Warszawa</code>, <code>Kraków</code>, <code>Wrocław</code>. Leave empty to search the whole country.

## `maxItems` (type: `integer`):

Maximum number of job offers to scrape in one run.

## `scrapeJobDetails` (type: `boolean`):

Open every job offer page to also extract the full description, structured salary ranges, required technologies, exact addresses, and application links. Slower and charged at a higher rate per offer.

## `startUrls` (type: `array`):

Optional: paste Pracuj.pl search result URLs (e.g. a search you fine-tuned in the browser). When provided, these are used instead of the keyword/location fields. Note: category and work-mode URL filters are not supported.

## `proxyConfiguration` (type: `object`):

Proxy settings used for scraping. The default Apify proxy works well.

## Actor input object example

```json
{
  "keyword": "programista",
  "location": "Warszawa",
  "maxItems": 50,
  "scrapeJobDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "programista",
    "location": "Warszawa",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/pracuj-pl-job-offers-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keyword": "programista",
    "location": "Warszawa",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/pracuj-pl-job-offers-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "programista",
  "location": "Warszawa",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/pracuj-pl-job-offers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=piotrv1001/pracuj-pl-job-offers-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pracuj.pl Job Offers Scraper",
        "description": "The Pracuj.pl Job Offers Scraper extracts job listings from Poland's largest job board, capturing titles, companies, salary ranges, locations, contract types, AI requirement summaries, full descriptions, and application links — ideal for recruitment analytics and labor market research.",
        "version": "0.0",
        "x-build-id": "IlKo1eXC55FaEbfn9"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/piotrv1001~pracuj-pl-job-offers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-piotrv1001-pracuj-pl-job-offers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/piotrv1001~pracuj-pl-job-offers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-piotrv1001-pracuj-pl-job-offers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/piotrv1001~pracuj-pl-job-offers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-piotrv1001-pracuj-pl-job-offers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Job title, skill, or company name to search for, e.g. <code>programista</code>, <code>accountant</code>, <code>python</code>. Leave empty to browse all offers."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City or region in Poland, e.g. <code>Warszawa</code>, <code>Kraków</code>, <code>Wrocław</code>. Leave empty to search the whole country."
                    },
                    "maxItems": {
                        "title": "Max job offers",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of job offers to scrape in one run.",
                        "default": 50
                    },
                    "scrapeJobDetails": {
                        "title": "Scrape full job details",
                        "type": "boolean",
                        "description": "Open every job offer page to also extract the full description, structured salary ranges, required technologies, exact addresses, and application links. Slower and charged at a higher rate per offer.",
                        "default": false
                    },
                    "startUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Optional: paste Pracuj.pl search result URLs (e.g. a search you fine-tuned in the browser). When provided, these are used instead of the keyword/location fields. Note: category and work-mode URL filters are not supported.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings used for scraping. The default Apify proxy works well.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
