# Praca.gov.pl Job Scraper (`trev0n/praca-gov-pl-scraper`) Actor

Fast scraper for praca.gov.pl, the Polish public job portal (CBOP) ePraca. Extract job offers, salaries, employers, locations, requirements and contacts with keyword, location, salary and contract filters.

- **URL**: https://apify.com/trev0n/praca-gov-pl-scraper.md
- **Developed by:** [Paweł](https://apify.com/trev0n) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

## 💼 praca.gov.pl Job Scraper

🎯 **Pull every public job offer from Poland's official government job portal — fast, structured, and ready to use.**

This scraper collects clean, structured job data from **praca.gov.pl** (the Central Job Offers Database / CBOP run by Polish public employment services): positions, employers, salaries, locations, contract types, full requirements, work conditions, and direct employer contacts. Search by keyword, city, region, salary or contract type — or paste exact offer links — and export everything in one run.

### 🚀 What Does It Do?

This scraper automatically searches praca.gov.pl and collects **structured, ready-to-use data** for every matching offer — no manual browsing needed. Just set your filters and hit Start.

💡 **Two modes of operation:**

1. **🔍 Discovery Mode** — Give it a keyword, city, region, salary range or contract type; it pages through all matching results and exports every offer. Turn on **full details** to enrich each one with employer tax id, phone, email, full requirements and work conditions.
2. **📋 Direct URL Mode** — Paste links to specific offers (or their ids) and get the complete detail record for each.

### 👥 Who Is This For?

| 🏢 Use Case                           | 💬 How It Helps                                                                            |
| ------------------------------------- | ------------------------------------------------------------------------------------------ |
| 🧑‍💼 **Recruiters & staffing agencies** | Track public-sector and regional openings and spot fresh postings the moment they appear   |
| 📊 **Labor-market analysts**          | Build salary benchmarks and hiring-trend datasets across all 16 voivodeships               |
| 🤖 **Job-board aggregators**          | Feed a continuously updated, deduplicated stream of government listings into your own site |
| 🎯 **Lead-gen agencies**              | Find employers that are actively hiring and pull their NIP, phone and email                |
| 🌍 **EURES & relocation services**    | Surface offers open to candidates from abroad, with relocation and accommodation info      |
| 🧑‍🎓 **Job seekers & career coaches**   | Filter for roles matching very specific keyword, city and salary criteria                  |

### ✨ Features

- 🇵🇱 **Whole country** — Every offer in the national CBOP database, across all 16 voivodeships and abroad (EURES)
- 🔎 **Powerful filters** — Keyword, city (with radius), voivodeship, salary range, contract type, offer type, immediate-start, disability-friendly and more
- 📄 **Full offer details** — Optional deep extraction: employer NIP, website, phone, email, full required/desired requirements, work hours, shifts, bonuses and benefits
- 🏢 **Employer & office contacts** — Company name, address, NIP, plus the handling labor office's name, address and email
- 💰 **Salary data** — Gross salary text and ranges exactly as published
- 📍 **Geo-ready** — Latitude/longitude plus Google Maps and OpenStreetMap links for every workplace
- ⚡ **Fast & lightweight** — Runs without a proxy and without a browser, so large exports stay cheap
- 🗂️ **Clean output** — Flat, camelCase fields with a timestamp on every record, ready for Sheets, CSV or your database

### ⚙️ Filters & Options

| 🎛️ Option                    | 💬 What It Does                                                             |
| ---------------------------- | --------------------------------------------------------------------------- |
| 🔗 **startUrls**             | Scrape specific offers directly by URL or id (skips all filters)            |
| 🔤 **searchTerms**           | One or more keyword phrases matched against the job position                |
| 🏙️ **location**              | City to search in (resolved to the official locality automatically)         |
| 📏 **locationRadius**        | Include offers within X km of the chosen city                               |
| 🗺️ **voivodeships**          | Limit results to one or more of Poland's 16 regions                         |
| 🌍 **country**               | All offers, Poland only, or abroad (EURES) only                             |
| 📋 **offerTypes**            | Job offer, internship, traineeship, volunteering, and more                  |
| 📝 **contractTypes**         | Indefinite, fixed-term, mandate, specific-task, managerial, and more        |
| 💵 **salaryFrom / salaryTo** | Minimum and maximum gross salary in PLN                                     |
| ♿ **onlyForDisabled**       | Only offers dedicated to people with disabilities                           |
| ⚡ **immediateStart**        | Only offers marked as immediate start                                       |
| ⏳ **temporaryWork**         | Only temporary-work offers                                                  |
| ↕️ **sortBy / sortOrder**    | Sort by date, salary, employer, position and more — ascending or descending |
| 📚 **extractFullDetails**    | Fetch each offer's full detail record (contacts, requirements, conditions)  |
| 🔢 **maxItems**              | Cap the number of offers (0 = no limit)                                     |

### 📦 Output Fields

Each offer is returned as a flat record. Fields below marked _(details)_ are only populated when **extractFullDetails** is enabled or in Direct URL mode.

#### Core

| Field         | Example                                                                                            |
| ------------- | -------------------------------------------------------------------------------------------------- |
| id            | `46d4ef5f69ddda93943adf70f8074a8b`                                                                 |
| url           | `https://oferty.praca.gov.pl/portal/index.cbop#/szczegoly-oferty/46d4ef5f69ddda93943adf70f8074a8b` |
| position      | `Magazynier-kasjer (ul. Soczi) K/M`                                                                |
| offerType     | `oferta pracy`                                                                                     |
| offerTypeCode | `OFERTA_PRACY`                                                                                     |
| contractType  | `Umowa o pracę na okres próbny`                                                                    |
| salary        | `od 5 300 do 8 000 PLN`                                                                            |
| addedAt       | `23.06.2026`                                                                                       |
| validUntil    | `23.07.2026`                                                                                       |
| startDate     | `23.06.2026`                                                                                       |

#### Employer & Location

| Field           | Example                                            |
| --------------- | -------------------------------------------------- |
| employer        | `FRAC BIS SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ` |
| employerAddress | `Warszawa, mazowieckie`                            |
| workplace       | `Warszawa, mazowieckie`                            |
| latitude        | `52.1815449`                                       |
| longitude       | `21.0533064`                                       |
| mapGoogleUrl    | `https://maps.google.pl/maps?q=Warszawa...`        |
| mapOsmUrl       | `https://www.openstreetmap.org/search?query=...`   |
| laborOffice     | `Urząd Pracy Miasta Stołecznego Warszawy`          |
| addedBy         | `PUP`                                              |

#### Contact & Requirements

| Field             | Example                                            |
| ----------------- | -------------------------------------------------- |
| applicationMethod | `P`                                                |
| phone             | `694 441 910`                                      |
| email             | `rekrutacja@frac.pl`                               |
| responsibilities  | `- przyjmowanie i wykładanie towarów; ...`         |
| requirements      | `wykształcenie - brak lub niepełne podstawowe ...` |
| workingTime       | `1`                                                |
| forRegisteredOnly | `false`                                            |
| forDisabled       | `false`                                            |

#### Full Details _(details)_

| Field                 | Example                                              |
| --------------------- | ---------------------------------------------------- |
| offerNumber           | `StPr/26/05112`                                      |
| euresNumber           | `1420@StPr/26/05112`                                 |
| vacancies             | `4`                                                  |
| employerNip           | `7010394240`                                         |
| employerWww           | `www.frac.pl`                                        |
| employerEmail         | `rekrutacja@frac.pl`                                 |
| employerPhone         | `694 441 910`                                        |
| applicationLanguage   | `polski`                                             |
| requiredDocuments     | `Po uzgodnieniu z pracodawcą.`                       |
| laborOfficeName       | `Urząd Pracy Miasta Stołecznego Warszawy`            |
| laborOfficeAddress    | `Grochowska 171b, 04-111 Warszawa, woj. mazowieckie` |
| laborOfficeEmail      | `sekretariat.grochowska@up.warszawa.pl`              |
| weeklyHours           | `40`                                                 |
| monthlyHours          | `160`                                                |
| shiftWork             | `dwie zmiany`                                        |
| workModes             | `Stacjonarna`                                        |
| salaryGross           | `od 5 300 do 8 000 PLN`                              |
| bonuses               | `null`                                               |
| benefits              | `null`                                               |
| profession            | `magazynier`                                         |
| mealsProvided         | `false`                                              |
| accommodationProvided | `false`                                              |
| immediateStart        | `true`                                               |
| requirementsRequired  | `{ "jezyk": ["polski, w mowie - C2 ..."], ... }`     |
| requirementsDesired   | `{ "jezyk": [], "uprawnienie": [], ... }`            |
| experienceMonths      | `null`                                               |
| scrapedAt             | `2026-06-29T14:11:40.921Z`                           |

### 📤 Example Output

```json
{
    "id": "46d4ef5f69ddda93943adf70f8074a8b",
    "url": "https://oferty.praca.gov.pl/portal/index.cbop#/szczegoly-oferty/46d4ef5f69ddda93943adf70f8074a8b",
    "position": "Magazynier-kasjer (ul. Soczi) K/M",
    "offerType": "oferta pracy",
    "offerTypeCode": "OFERTA_PRACY",
    "contractType": "Umowa o pracę na okres próbny",
    "employer": "FRAC BIS SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
    "employerAddress": "Warszawa, mazowieckie",
    "workplace": "Warszawa, mazowieckie",
    "latitude": 52.1815449,
    "longitude": 21.0533064,
    "salary": "od 5 300 do 8 000 PLN",
    "responsibilities": "- przyjmowanie i wykładanie towarów; - sprawdzanie zgodności dostaw...",
    "workingTime": "1",
    "phone": "694 441 910",
    "email": "rekrutacja@frac.pl",
    "validFrom": "23.06.2026",
    "validUntil": "23.07.2026",
    "addedAt": "23.06.2026",
    "laborOffice": "Urząd Pracy Miasta Stołecznego Warszawy",
    "addedBy": "PUP",
    "offerNumber": "StPr/26/05112",
    "euresNumber": "1420@StPr/26/05112",
    "vacancies": 4,
    "employerNip": "7010394240",
    "employerWww": "www.frac.pl",
    "weeklyHours": 40,
    "monthlyHours": 160,
    "shiftWork": "dwie zmiany",
    "workModes": "Stacjonarna",
    "salaryGross": "od 5 300 do 8 000 PLN",
    "profession": "magazynier",
    "immediateStart": true,
    "scrapedAt": "2026-06-29T14:11:40.921Z"
}
````

### 📊 Dataset Views

- **Overview** — The essentials at a glance: position, employer, workplace, salary, contract, type, dates and link.
- **Detailed** — Every scraped field, ideal for export to CSV, Excel or your database.

### ❓ FAQ

**🤔 Do I need a praca.gov.pl account or login?**
No. The scraper only reads publicly available offers — no account, no login.

**🤔 Does it cover the whole country?**
Yes. It searches the national CBOP database, covering every voivodeship plus offers abroad (EURES).

**🤔 What's the difference between the fast mode and full details?**
Without full details you already get rich listing data (position, employer, salary, location, dates). Turn on full details to also pull employer NIP, phone, email, full requirements and work conditions — at the cost of one extra request per offer.

**🤔 Can I scrape specific offers only?**
Yes. Paste their URLs (or ids) into startUrls and you'll get the complete detail record for each.

**🤔 In what formats can I export the data?**
JSON, CSV, Excel, XML, HTML and RSS. You can also push data to Google Sheets, Zapier, Make, or any webhook/API endpoint.

**🤔 How often should I run this?**
For fresh data, run daily or weekly. You can schedule automatic runs on Apify with just a few clicks.

**🤔 Does it work with proxies?**
It runs fine without one. You can enable Apify's proxy service for very large or frequent runs.

### 🛠️ Need Custom Filters or Features?

**I'm happy to customize this scraper for your specific needs!** 🤝

Whether you need:

- 🎯 Additional filters (specific employer watchlists, profession codes, exact salary bands, multi-keyword searches)
- 📊 Extra data fields or custom output formats
- 🔄 Integration with your CRM, Google Sheets, or database
- ⏰ Scheduled monitoring with automatic deduplication and instant alerts
- 🌐 Scraping from other Polish job platforms (Pracuj.pl, theProtocol, OLX Praca) alongside praca.gov.pl

👉 **Don't hesitate to reach out via private message** — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!

### ⚖️ Legal & Ethical Use

This scraper collects **only publicly available information** from praca.gov.pl. It does not access private data, bypass authentication, or log into any account. Please use the data responsibly and in compliance with applicable laws and platform terms of service.

# Actor input Schema

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

Optional. Paste links to individual praca.gov.pl offers (e.g. https://oferty.praca.gov.pl/portal/index.cbop#/szczegoly-oferty/<id>) or raw offer ids. When set, filters below are ignored and each offer is fetched with full details.

## `searchTerms` (type: `array`):

Free-text phrases matched against the job position, e.g. "kierowca", "programista", "magazynier". Leave empty to scrape all offers.

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

City name to search in (e.g. "Warszawa", "Kraków"). Resolved to the official locality automatically.

## `locationRadius` (type: `integer`):

Include offers within this many kilometres of the chosen city. 0 = exact city only.

## `voivodeships` (type: `array`):

Limit results to one or more Polish voivodeships.

## `country` (type: `string`):

Restrict to offers in Poland or abroad (EURES). Default: all.

## `offerTypes` (type: `array`):

Limit to specific proposal types (job, internship, traineeship, volunteering...).

## `contractTypes` (type: `array`):

Limit to specific contract types.

## `salaryFrom` (type: `integer`):

Only offers with gross salary at least this amount.

## `salaryTo` (type: `integer`):

Only offers with gross salary up to this amount.

## `onlyForDisabled` (type: `boolean`):

Return only offers dedicated to people with disabilities.

## `immediateStart` (type: `boolean`):

Return only offers marked as immediate start (zatrudnienie od zaraz).

## `temporaryWork` (type: `boolean`):

Return only temporary-work offers (praca tymczasowa).

## `sortBy` (type: `string`):

Field to sort search results by.

## `sortOrder` (type: `string`):

Sort direction.

## `extractFullDetails` (type: `boolean`):

Fetch each offer's detail page for extra fields (NIP, contacts, full requirements, work conditions, labor office). Slower — one extra request per offer.

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

Maximum number of offers to scrape. 0 = no limit.

## `maxConcurrency` (type: `integer`):

Maximum number of parallel requests.

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

The API is public and works without a proxy. Use one only if you hit rate limits.

## Actor input object example

```json
{
  "startUrls": [],
  "searchTerms": [
    "kierowca"
  ],
  "location": "Warszawa",
  "locationRadius": 0,
  "voivodeships": [],
  "country": "ALL",
  "offerTypes": [],
  "contractTypes": [],
  "onlyForDisabled": false,
  "immediateStart": false,
  "temporaryWork": false,
  "sortBy": "dateAdded",
  "sortOrder": "DESC",
  "extractFullDetails": false,
  "maxItems": 100,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [],
    "searchTerms": [],
    "voivodeships": [],
    "offerTypes": [],
    "contractTypes": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("trev0n/praca-gov-pl-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 = {
    "startUrls": [],
    "searchTerms": [],
    "voivodeships": [],
    "offerTypes": [],
    "contractTypes": [],
}

# Run the Actor and wait for it to finish
run = client.actor("trev0n/praca-gov-pl-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 '{
  "startUrls": [],
  "searchTerms": [],
  "voivodeships": [],
  "offerTypes": [],
  "contractTypes": []
}' |
apify call trev0n/praca-gov-pl-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Praca.gov.pl Job Scraper",
        "description": "Fast scraper for praca.gov.pl, the Polish public job portal (CBOP) ePraca. Extract job offers, salaries, employers, locations, requirements and contacts with keyword, location, salary and contract filters.",
        "version": "1.0",
        "x-build-id": "1EeSNE9tFJaXIeshx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trev0n~praca-gov-pl-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trev0n-praca-gov-pl-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/trev0n~praca-gov-pl-scraper/runs": {
            "post": {
                "operationId": "runs-sync-trev0n-praca-gov-pl-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/trev0n~praca-gov-pl-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-trev0n-praca-gov-pl-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": {
                    "startUrls": {
                        "title": "Direct offer URLs",
                        "type": "array",
                        "description": "Optional. Paste links to individual praca.gov.pl offers (e.g. https://oferty.praca.gov.pl/portal/index.cbop#/szczegoly-oferty/<id>) or raw offer ids. When set, filters below are ignored and each offer is fetched with full details.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "searchTerms": {
                        "title": "Search terms (position / keyword)",
                        "type": "array",
                        "description": "Free-text phrases matched against the job position, e.g. \"kierowca\", \"programista\", \"magazynier\". Leave empty to scrape all offers.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "City",
                        "type": "string",
                        "description": "City name to search in (e.g. \"Warszawa\", \"Kraków\"). Resolved to the official locality automatically."
                    },
                    "locationRadius": {
                        "title": "City radius (km)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Include offers within this many kilometres of the chosen city. 0 = exact city only.",
                        "default": 0
                    },
                    "voivodeships": {
                        "title": "Voivodeships (regions)",
                        "type": "array",
                        "description": "Limit results to one or more Polish voivodeships.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "dolnoslaskie",
                                "kujawsko-pomorskie",
                                "lubelskie",
                                "lubuskie",
                                "lodzkie",
                                "malopolskie",
                                "mazowieckie",
                                "opolskie",
                                "podkarpackie",
                                "podlaskie",
                                "pomorskie",
                                "slaskie",
                                "swietokrzyskie",
                                "warminsko-mazurskie",
                                "wielkopolskie",
                                "zachodniopomorskie"
                            ],
                            "enumTitles": [
                                "dolnośląskie",
                                "kujawsko-pomorskie",
                                "lubelskie",
                                "lubuskie",
                                "łódzkie",
                                "małopolskie",
                                "mazowieckie",
                                "opolskie",
                                "podkarpackie",
                                "podlaskie",
                                "pomorskie",
                                "śląskie",
                                "świętokrzyskie",
                                "warmińsko-mazurskie",
                                "wielkopolskie",
                                "zachodniopomorskie"
                            ]
                        }
                    },
                    "country": {
                        "title": "Country scope",
                        "enum": [
                            "ALL",
                            "POLAND",
                            "FOREIGN"
                        ],
                        "type": "string",
                        "description": "Restrict to offers in Poland or abroad (EURES). Default: all.",
                        "default": "ALL"
                    },
                    "offerTypes": {
                        "title": "Offer types",
                        "type": "array",
                        "description": "Limit to specific proposal types (job, internship, traineeship, volunteering...).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "OFERTA_PRACY",
                                "PRAKTYKI",
                                "PRAKT_STUDENT",
                                "PRZYG_ZAW",
                                "STAZ",
                                "STAZ_UP",
                                "WOLONTARIAT"
                            ],
                            "enumTitles": [
                                "Job offer",
                                "Internship",
                                "Student internship",
                                "Adult vocational training",
                                "Traineeship",
                                "Labor-office traineeship",
                                "Volunteering"
                            ]
                        }
                    },
                    "contractTypes": {
                        "title": "Contract types",
                        "type": "array",
                        "description": "Limit to specific contract types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "UMOWA_O_PRACE_CZAS_NIEOKRESLONY",
                                "UMOWA_O_PRACE_CZAS_OKRESLONY",
                                "UMOWA_O_PRACE_OKRES_PROBNY",
                                "UMOWA_O_PRACE_ZASTEPWSTWO",
                                "UMOWA_ZLECENIE",
                                "UMOWA_O_DZIELO",
                                "KONTRAKT_MENADZERSKI",
                                "UMOWA_AGENCYJNA",
                                "MIANOWANIE",
                                "POWOLANIE",
                                "WYBOR",
                                "DELEGOWANIE",
                                "SPOLDZIELCZA_UMOWA_O_PRACE",
                                "PRAKTYKA_ABSOLWENCKA",
                                "PRAKTYKA_STUDENCKA",
                                "UMOWA_POMOC_ZBIORY",
                                "WOLONTARIAT",
                                "NIE_DOTYCZY"
                            ],
                            "enumTitles": [
                                "Employment, indefinite",
                                "Employment, fixed-term",
                                "Employment, probation",
                                "Employment, replacement",
                                "Mandate (zlecenie)",
                                "Specific-task (dzieło)",
                                "Managerial contract",
                                "Agency contract",
                                "Appointment (mianowanie)",
                                "Appointment (powołanie)",
                                "Election (wybór)",
                                "Posting (delegowanie)",
                                "Cooperative employment",
                                "Graduate internship",
                                "Student internship",
                                "Harvest-help contract",
                                "Volunteering",
                                "Not applicable"
                            ]
                        }
                    },
                    "salaryFrom": {
                        "title": "Minimum gross salary (PLN)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only offers with gross salary at least this amount."
                    },
                    "salaryTo": {
                        "title": "Maximum gross salary (PLN)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only offers with gross salary up to this amount."
                    },
                    "onlyForDisabled": {
                        "title": "Only offers for people with disabilities",
                        "type": "boolean",
                        "description": "Return only offers dedicated to people with disabilities.",
                        "default": false
                    },
                    "immediateStart": {
                        "title": "Only immediate-start offers",
                        "type": "boolean",
                        "description": "Return only offers marked as immediate start (zatrudnienie od zaraz).",
                        "default": false
                    },
                    "temporaryWork": {
                        "title": "Only temporary work",
                        "type": "boolean",
                        "description": "Return only temporary-work offers (praca tymczasowa).",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "dateAdded",
                            "validUntil",
                            "salary",
                            "matchLevel",
                            "position",
                            "employer",
                            "workplace",
                            "contractType",
                            "addedBy"
                        ],
                        "type": "string",
                        "description": "Field to sort search results by.",
                        "default": "dateAdded"
                    },
                    "sortOrder": {
                        "title": "Sort order",
                        "enum": [
                            "DESC",
                            "ASC"
                        ],
                        "type": "string",
                        "description": "Sort direction.",
                        "default": "DESC"
                    },
                    "extractFullDetails": {
                        "title": "Extract full details",
                        "type": "boolean",
                        "description": "Fetch each offer's detail page for extra fields (NIP, contacts, full requirements, work conditions, labor office). Slower — one extra request per offer.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of offers to scrape. 0 = no limit.",
                        "default": 100
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of parallel requests.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "The API is public and works without a proxy. Use one only if you hit rate limits.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
