# Pracuj.pl Job Listings Scraper | Cheap 1.99$ / 1k (`trev0n/pracuj-pl-scraper-pay-per-event`) Actor

Fast and efficient job listings scraper for Pracuj.pl. Extract job offers, salaries, company info, locations, and more. Supports keyword search, filters, and pagination.

- **URL**: https://apify.com/trev0n/pracuj-pl-scraper-pay-per-event.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, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$1.99 / 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

## Pracuj.pl Job Scraper

A fast and efficient Apify Actor for scraping job listings from Pracuj.pl, Poland's leading job search portal. Extract comprehensive job data including salaries, locations, company information, work modes, and detailed job descriptions.

### Features

- **Flexible Search Options** - Use direct URLs or build searches with keyword and location
- **Advanced URL Filtering** - Apply Pracuj.pl filters via URL parameters (seniority, work mode, contract type, working time)
- **Automatic Pagination** - Scrape multiple pages automatically with configurable item limits
- **Full Job Details** - Optional extraction of complete job descriptions, requirements, responsibilities, and benefits
- **Salary Information** - Capture salary ranges when disclosed
- **Work Mode Detection** - Automatically extract work mode (remote, hybrid, office, mobile)
- **Company Data** - Extract company names and profile links
- **Text Normalization** - Clean formatting with capitalized first letters for all text fields
- **Cost-Effective** - Minimal compute usage with smart concurrency settings

### Input Configuration

The actor accepts the following input parameters:

| Parameter              | Type             | Description                                                                                              | Required | Default |
| ---------------------- | ---------------- | -------------------------------------------------------------------------------------------------------- | -------- | ------- |
| `startUrls`            | Array            | Direct URLs to Pracuj.pl search results                                                                  | No       | -       |
| `keyword`              | String           | Job search keyword (e.g., "python developer", "marketing manager")                                       | No       | -       |
| `location`             | String           | City or location (e.g., "warszawa", "krakow", "wroclaw")                                                 | No       | -       |
| `seniorityLevel`       | Array of Strings | Filter by seniority level - URL param values (e.g., ["1", "2"])                                          | No       | []      |
| `workMode`             | Array of Strings | Filter by work mode - URL param values (e.g., ["1", "2"])                                                | No       | []      |
| `contractType`         | Array of Strings | Filter by contract type - URL param values (e.g., ["1", "3"])                                            | No       | []      |
| `workingTime`          | Array of Strings | Filter by working time - URL param values (e.g., ["1"])                                                  | No       | []      |
| `maxItems`             | Integer          | Maximum items to scrape (0 = unlimited)                                                                  | No       | 100     |
| `extractFullDetails`   | Boolean          | Extract detailed sections (responsibilities, requirements, benefits) - **requires residential proxies!** | No       | false   |
| `maxConcurrency`       | Integer          | Max parallel requests (1-100)                                                                            | No       | 10      |
| `minConcurrency`       | Integer          | Min parallel requests (1-100)                                                                            | No       | 1       |
| `maxRequestRetries`    | Integer          | Max retries for failed requests                                                                          | No       | 3       |
| `maxRequestsPerMinute` | Integer          | Max requests per minute                                                                                  | No       | 120     |
| `proxyConfiguration`   | Object           | Proxy settings - **required only when extractFullDetails: true**                                         | No       | -       |

#### How Search & Filters Work

The scraper can work in two modes:

**1. Direct URLs (`startUrls`)**

- Provide complete Pracuj.pl URLs with all filters already applied
- Fastest and most reliable method
- Example: `"https://www.pracuj.pl/praca/python;kw?et=1&ct=2"`

**2. Build from keyword/location + filters**

- Provide `keyword` and/or `location` (both are optional)
- Optionally add filter parameters
- Scraper builds the URL automatically

#### Available Filter Parameters

Filters can be provided as **text values** (Polish or English) or **numeric URL parameter values**. The scraper automatically converts text values to the appropriate URL parameters.

**Seniority Level** (`seniorityLevel`)

| Polish                      | English         | URL Value |
| --------------------------- | --------------- | --------- |
| praktykant, stażysta        | intern, trainee | 1         |
| asystent                    | assistant       | 17        |
| junior, młodszy specjalista | junior          | 4         |
| mid, regular, specjalista   | mid, specialist | 16        |
| senior, starszy specjalista | senior          | 18        |
| ekspert                     | expert          | 5         |
| kierownik, koordynator      | manager         | 6         |
| menedżer                    | manager         | 7         |
| dyrektor                    | director        | 8         |
| prezes                      | ceo             | 9         |

**Contract Type** (`contractType`)

| Polish                   | English                        | URL Value |
| ------------------------ | ------------------------------ | --------- |
| umowa o pracę, uop       | employment contract, permanent | 1         |
| kontrakt b2b, b2b        | contract                       | 3         |
| umowa zlecenie, uz       | mandate contract               | 5         |
| umowa o dzieło, uod      | specific task contract         | 6         |
| umowa na zastępstwo      | temporary replacement          | 13        |
| umowa agencyjna          | agency contract                | 14        |
| umowa o pracę tymczasową | temporary work                 | 15        |
| umowa o staż, praktyki   | internship                     | 16        |

**Working Time** (`workingTime`)

| Polish                 | English               | URL Value |
| ---------------------- | --------------------- | --------- |
| pełny etat, full time  | full-time, fulltime   | 1         |
| część etatu, part time | part-time, parttime   | 2         |
| dodatkowa, tymczasowa  | additional, temporary | 3         |

**Work Mode** (`workMode`)

| Polish                                | English                 | URL Value |
| ------------------------------------- | ----------------------- | --------- |
| stacjonarna, praca stacjonarna, biuro | office, on-site, onsite | 1         |
| hybrydowa, praca hybrydowa            | hybrid                  | 2         |
| zdalna, praca zdalna                  | remote                  | 3         |
| mobilna, praca mobilna                | mobile                  | 4         |

**Usage Examples:**

```json
{
    "seniorityLevel": ["senior", "mid"],
    "contractType": ["b2b", "umowa o pracę"],
    "workMode": ["remote", "hybrid"],
    "workingTime": ["full-time"]
}
````

Or with numeric values:

```json
{
    "seniorityLevel": ["18", "16"],
    "contractType": ["3", "1"],
    "workMode": ["3", "2"],
    "workingTime": ["1"]
}
```

**Note:** Text values are case-insensitive. Both Polish and English are accepted interchangeably.

#### Example Input - Using Direct URL

```json
{
    "startUrls": [
        {
            "url": "https://www.pracuj.pl/praca/senior%20software%20engineer;kw"
        }
    ],
    "maxItems": 50,
    "extractFullDetails": false
}
```

#### Example Input - Using Keyword and Filters (Text Values)

```json
{
    "keyword": "python developer",
    "location": "warszawa",
    "seniorityLevel": ["senior", "mid"],
    "workMode": ["remote", "hybrid"],
    "contractType": ["b2b", "umowa o pracę"],
    "workingTime": ["full-time"],
    "maxItems": 100,
    "extractFullDetails": true
}
```

#### Example Input - Using English Text Values

```json
{
    "keyword": "software engineer",
    "location": "krakow",
    "seniorityLevel": ["senior", "mid"],
    "workMode": ["remote"],
    "contractType": ["contract", "permanent"],
    "workingTime": ["full-time"],
    "maxItems": 50,
    "extractFullDetails": false
}
```

#### Example Input - Using Numeric URL Values

```json
{
    "keyword": "data analyst",
    "seniorityLevel": ["18", "16"],
    "workMode": ["3", "2"],
    "contractType": ["1"],
    "maxItems": 200,
    "extractFullDetails": true
}
```

### Output Format

#### Default Output (extractFullDetails: false)

Each job listing contains comprehensive data extracted from listing pages:

```json
{
    "jobTitle": "QA Automation Test Engineer",
    "companyName": "PRETIUS SOFTWARE SP. Z O.O.",
    "companyId": 20298218,
    "companyUrl": "https://pracodawcy.pracuj.pl/company/20298218",
    "location": "Warszawa",
    "locations": ["Warszawa"],
    "salary": "110–140 zł netto (+ VAT) / godz.",
    "workMode": "Praca zdalna",
    "employmentType": "Kontrakt B2B",
    "seniorityLevel": "Starszy specjalista (Senior)",
    "workingHours": "Pełny etat",
    "publishedDate": "2025-11-18T15:07:00Z",
    "expirationDate": "2025-11-21T22:59:59Z",
    "isFeatured": true,
    "isRemoteAllowed": true,
    "aiSummary": "<ul><li>Masz doświadczenie jako <b>QA Automation Test Engineer</b> i znasz narzędzia do automatyzacji testów.</li><li>Posiadasz umiejętność <b>testowania API</b> oraz znajomość języków skryptowych, np. JavaScript i Playwright.</li><li>Pracujesz z <b>CI/CD</b> oraz narzędziami jak Jenkins lub GitLab.</li><li>Cenisz <b>benefity</b> takie jak prywatna opieka medyczna, Multisport oraz elastyczne godziny pracy.</li><li>Chcesz rozwijać i utrzymywać <b>automatyczne testy</b> oraz usprawniać procesy testowania.</li></ul>",
    "jobDescription": "Your responsibilities, Develop and execute automated test scripts using standard tools and frameworks., Perform API testing to validate the functionality, performance, and reliability of our software., Design, implement, and maintain automated...",
    "jobUrl": "https://www.pracuj.pl/praca/qa-automation-test-engineer-warszawa,oferta,1004436512",
    "allOfferUrls": ["https://www.pracuj.pl/praca/qa-automation-test-engineer-warszawa,oferta,1004436512"],
    "scrapedAt": "2025-11-18T15:10:33.335Z"
}
```

**Note:** The default mode provides comprehensive job information including AI-generated summaries. Fast, reliable, works without proxies!

#### Full Details Output (extractFullDetails: true)

When enabled, all data is **merged into a single record** including detailed sections:

```json
{
    "jobTitle": "Node.js Developer",
    "companyName": "PRETIUS SOFTWARE SP. Z O.O.",
    "companyId": 20298218,
    "companyUrl": "https://pracodawcy.pracuj.pl/company/20298218",
    "location": "Rzeszów",
    "locations": ["Rzeszów"],
    "salary": "150–180 zł netto (+ VAT) / godz.",
    "workMode": "Praca zdalna",
    "employmentType": "Kontrakt B2B",
    "seniorityLevel": "Starszy specjalista (Senior)",
    "workingHours": "Pełny etat",
    "publishedDate": "2025-11-18T15:07:00Z",
    "expirationDate": "2025-11-21T22:59:59Z",
    "isFeatured": false,
    "isRemoteAllowed": true,
    "aiSummary": "<ul><li>Masz doświadczenie w budowaniu aplikacji z użyciem <b>Node.js</b>...</li></ul>",
    "jobDescription": "Rozwój modułu zarządzania kartami płatniczymi, budżetami i transakcjami...",
    "responsibilities": [
        "Rozwój modułu zarządzania kartami płatniczymi, budżetami i transakcjami",
        "Tworzenie nowych funkcjonalności, budowa zupełnie nowego API integracyjnego",
        "Architektura mikroserwisów, 100% cloud w AWS (50+ serwisów)"
    ],
    "requirementsExpected": [
        "Doświadczenie w budowaniu aplikacji z użyciem Node",
        "Doświadczenie w pisaniu testów automatycznych",
        "Jęz. angielski na poziomie B2"
    ],
    "benefits": [
        "Stawiamy na długofalowe relacje oparte na uczciwych zasadach i rzetelności",
        "Dofinansowanie karty sportowej Multisport i opieki zdrowotnej Medicover",
        "Możliwość pracy w nowoczesnym biurze"
    ],
    "jobUrl": "https://www.pracuj.pl/praca/node-js-developer-rzeszow,oferta,1004436512",
    "allOfferUrls": ["https://www.pracuj.pl/praca/node-js-developer-rzeszow,oferta,1004436512"],
    "scrapedAt": "2025-11-18T15:10:33.335Z"
}
```

#### Output Fields Reference

**Always extracted (no proxies needed) with `extractFullDetails: false` (DEFAULT):**

- `jobTitle` - Position title
- `companyName` - Employer name
- `companyId` - Unique company identifier
- `companyUrl` - Link to company profile on Pracuj.pl
- `location` - Primary job location (e.g., "Warszawa")
- `locations` - Array of all locations for multi-location offers
- `salary` - Salary information when disclosed (cleaned - nbsp replaced with spaces)
- `workMode` - Work arrangement (e.g., "Praca zdalna", "Praca hybrydowa")
- `employmentType` - Contract type (e.g., "Kontrakt B2B", "Umowa o pracę")
- `seniorityLevel` - Position level (e.g., "Starszy specjalista (Senior)")
- `workingHours` - Working time (e.g., "Pełny etat")
- `publishedDate` - ISO 8601 timestamp when posted
- `expirationDate` - ISO 8601 timestamp when offer expires
- `isFeatured` - Boolean indicating promoted/super offer status
- `isRemoteAllowed` - Boolean indicating if remote work is allowed
- **`aiSummary`** - **AI-generated HTML summary with highlighted keywords** (very comprehensive!)
- **`jobDescription`** - Brief job description text snippet
- `jobUrl` - Primary direct URL to the job listing
- `allOfferUrls` - Array of all URLs for multi-location grouped offers
- `scrapedAt` - ISO 8601 timestamp of scraping time

**Additional fields with `extractFullDetails: true` (REQUIRES RESIDENTIAL PROXIES ⚠️):**

These fields are **merged into the same record** with all basic fields above:

- `responsibilities` - Array of job responsibilities (Twój zakres obowiązków)
- `requirementsExpected` - Array of required qualifications
- `requirementsOptional` - Array of optional qualifications (Mile widziane)
- `benefits` - Array of company benefits (To oferujemy)

**Notes:**

- Fields may be empty strings or arrays if information is not available
- Not all jobs have salary information (~40-60% don't disclose)
- Multi-location offers are grouped - check `locations` and `allOfferUrls` arrays
- Non-breaking spaces (nbsp) are automatically cleaned from salary field
- The `aiSummary` field provides comprehensive information for most use cases!

### Use Cases

- **Job Market Analysis** - Analyze salary trends and in-demand skills across Poland
- **Career Research** - Find job opportunities matching specific criteria
- **Recruitment Intelligence** - Track competitor hiring patterns and job market trends
- **Remote Work Monitoring** - Identify companies offering remote and hybrid positions
- **Salary Benchmarking** - Compare salary ranges across different positions and locations
- **Skills Analysis** - Identify most requested skills and requirements in your field
- **Company Research** - Track hiring activity of specific companies
- **Location Analysis** - Understand job market dynamics in different Polish cities

### Performance & Best Practices

#### Performance Tips

- **Use `extractFullDetails: false` (default)** for fast, cost-effective scraping
  - Default mode: ~0.5-1 second per listing (listing pages only)
  - Full details mode: ~2-3 seconds per listing (visits each job page)
  - **Default mode is recommended for 99% of use cases**
- **Set `maxItems`** to control the number of jobs scraped and limit run duration
- **Adjust concurrency carefully:**
  - Higher concurrency without proxies = guaranteed 429 errors!
- **Use specific filters** to narrow down results before scraping
- **Monitor costs** when using `extractFullDetails: true` with proxies

#### Important Notes

- **Pracuj.pl has strict rate limiting** - respect it to avoid blocks
- The scraper extracts publicly available data from Pracuj.pl
- Not all job listings have complete information:
  - Salary is often not disclosed (~40-60% of listings)
  - Some detailed fields may be empty even with `extractFullDetails: true`
- The `isFeatured` flag marks promoted/super offer listings
- Filter values are Pracuj.pl-specific and may change over time

***

### Related Actors

Check out our other scrapers for Polish e-commerce, automotive, and job market data:

- **[Pracuj.pl Job Scraper](https://apify.com/trev0n/pracuj-pl-scraper)** - Extract job listings from Poland's leading job portal
- **[Empik Product Search Scraper](https://apify.com/trev0n/empik-product-search-scraper)** - Search and scrape products from Empik.com
- **[Fast VIN Decoder](https://apify.com/trev0n/fast-vin-decoder)** - Decode vehicle VIN numbers to get detailed specifications
- **[Sinsay Scraper](https://apify.com/trev0n/sinsay-scraper)** - Extract fashion products from Sinsay online store
- **[Autoplac.pl Scraper](https://apify.com/trev0n/autoplac-pl-scraper)** - Scrape vehicle listings from Autoplac.pl marketplace

### Your Feedback

We are always working to improve Actors' performance. So, if you have any technical feedback about Pracuj.pl Job Scraper or simply found a bug, please create an issue on the Actor's Issues tab in Apify Console.

# Actor input Schema

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

List of Pracuj.pl URLs to scrape. Can be search URLs with filters or direct job listing URLs.

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

Job search keyword (e.g., 'Python Developer', 'Marketing Manager'). Used only if startUrls is not provided.

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

City or location (e.g., 'Warszawa', 'Kraków', 'Wrocław'). Optional.

## `seniorityLevel` (type: `array`):

Filter by seniority level. Accept text values (e.g., 'senior', 'mid', 'junior') in Polish or English, or numeric URL values (e.g., '18', '16', '4'). See README for all available values.

## `contractType` (type: `array`):

Filter by contract type. Accept text values (e.g., 'b2b', 'umowa o pracę', 'permanent') in Polish or English, or numeric URL values (e.g., '3', '1'). See README for all available values.

## `workingTime` (type: `array`):

Filter by working time. Accept text values (e.g., 'full-time', 'pełny etat', 'part-time') in Polish or English, or numeric URL values (e.g., '1', '2'). See README for all available values.

## `workMode` (type: `array`):

Filter by work mode. Accept text values (e.g., 'remote', 'hybrid', 'office') in Polish or English, or numeric URL values (e.g., '3', '2', '1'). See README for all available values.

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

Maximum number of job listings to scrape (0 = unlimited)

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

Maximum number of parallel requests (1-100)

## `minConcurrency` (type: `integer`):

Minimum number of parallel requests (1-100)

## `maxRequestRetries` (type: `integer`):

Maximum number of retries for failed requests

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

⚠️ REQUIRES RESIDENTIAL PROXIES! When enabled, visits each job page to extract detailed sections (responsibilities, requirements, benefits). Default false - works great without proxies and includes AI summary & description.

## `maxRequestsPerMinute` (type: `integer`):

Maximum number of requests per minute

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

Proxy settings for the scraper. Optional - works great without proxies.

## Actor input object example

```json
{
  "seniorityLevel": [
    "senior"
  ],
  "maxItems": 10,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 3,
  "extractFullDetails": false,
  "maxRequestsPerMinute": 120
}
```

# 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 = {
    "seniorityLevel": [
        "senior"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("trev0n/pracuj-pl-scraper-pay-per-event").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 = { "seniorityLevel": ["senior"] }

# Run the Actor and wait for it to finish
run = client.actor("trev0n/pracuj-pl-scraper-pay-per-event").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 '{
  "seniorityLevel": [
    "senior"
  ]
}' |
apify call trev0n/pracuj-pl-scraper-pay-per-event --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pracuj.pl Job Listings Scraper | Cheap 1.99$ / 1k",
        "description": "Fast and efficient job listings scraper for Pracuj.pl. Extract job offers, salaries, company info, locations, and more. Supports keyword search, filters, and pagination.",
        "version": "1.0",
        "x-build-id": "HXNtyZvLtvnQtO8Hv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trev0n~pracuj-pl-scraper-pay-per-event/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trev0n-pracuj-pl-scraper-pay-per-event",
                "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~pracuj-pl-scraper-pay-per-event/runs": {
            "post": {
                "operationId": "runs-sync-trev0n-pracuj-pl-scraper-pay-per-event",
                "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~pracuj-pl-scraper-pay-per-event/run-sync": {
            "post": {
                "operationId": "run-sync-trev0n-pracuj-pl-scraper-pay-per-event",
                "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": "Start URLs",
                        "type": "array",
                        "description": "List of Pracuj.pl URLs to scrape. Can be search URLs with filters or direct job listing URLs.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "keyword": {
                        "title": "Search Keyword",
                        "type": "string",
                        "description": "Job search keyword (e.g., 'Python Developer', 'Marketing Manager'). Used only if startUrls is not provided."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City or location (e.g., 'Warszawa', 'Kraków', 'Wrocław'). Optional."
                    },
                    "seniorityLevel": {
                        "title": "Seniority Level",
                        "type": "array",
                        "description": "Filter by seniority level. Accept text values (e.g., 'senior', 'mid', 'junior') in Polish or English, or numeric URL values (e.g., '18', '16', '4'). See README for all available values.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "contractType": {
                        "title": "Contract Type",
                        "type": "array",
                        "description": "Filter by contract type. Accept text values (e.g., 'b2b', 'umowa o pracę', 'permanent') in Polish or English, or numeric URL values (e.g., '3', '1'). See README for all available values.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "workingTime": {
                        "title": "Working Time",
                        "type": "array",
                        "description": "Filter by working time. Accept text values (e.g., 'full-time', 'pełny etat', 'part-time') in Polish or English, or numeric URL values (e.g., '1', '2'). See README for all available values.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "workMode": {
                        "title": "Work Mode",
                        "type": "array",
                        "description": "Filter by work mode. Accept text values (e.g., 'remote', 'hybrid', 'office') in Polish or English, or numeric URL values (e.g., '3', '2', '1'). See README for all available values.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of job listings to scrape (0 = unlimited)",
                        "default": 10
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of parallel requests (1-100)",
                        "default": 10
                    },
                    "minConcurrency": {
                        "title": "Min Concurrency",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Minimum number of parallel requests (1-100)",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max Request Retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum number of retries for failed requests",
                        "default": 3
                    },
                    "extractFullDetails": {
                        "title": "Extract Full Job Details",
                        "type": "boolean",
                        "description": "⚠️ REQUIRES RESIDENTIAL PROXIES! When enabled, visits each job page to extract detailed sections (responsibilities, requirements, benefits). Default false - works great without proxies and includes AI summary & description.",
                        "default": false
                    },
                    "maxRequestsPerMinute": {
                        "title": "Max Requests Per Minute",
                        "minimum": 10,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Maximum number of requests per minute",
                        "default": 120
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for the scraper. Optional - works great without proxies."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
