# Pracuj.pl Job Scraper - Poland Jobs (`santamaria-automations/pracuj-pl-scraper`) Actor

Scrape job listings from Pracuj.pl, Poland's #1 job board. Extract jobs with salary ranges (PLN), company profiles, requirements, benefits, and application URLs. Supports multiple queries, employment types, and remote filtering.

- **URL**: https://apify.com/santamaria-automations/pracuj-pl-scraper.md
- **Developed by:** [Alessandro Santamaria](https://apify.com/santamaria-automations) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 job listing scrapeds

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 Scraper — Every Job in Poland

**Scrape every job on [Pracuj.pl](https://www.pracuj.pl) — Poland's #1 job board, with 80,000+ active listings from 20,000+ employers across every region and industry.**

### Note for Apify Free-Tier Users

This actor relies on Apify's proxy network to reach Pracuj.pl reliably. On free accounts without a payment method on file, Apify's proxy gateway may return 403 and the actor will fall back to direct connections — which Pracuj.pl blocks. For consistent results, use a paid plan or ensure a payment method is added to your Apify account.

Poland is the **6th largest economy in the EU** and Central Europe's biggest tech hub — home to 500,000+ software engineers, global delivery centers for every Fortune 500 consultancy, and a booming B2B contracting market where senior roles routinely pay EUR 8,000-15,000/month. If you are doing recruitment intelligence, salary benchmarking, competitive hiring analysis, or EU labor-market research, Pracuj.pl is the single most important data source in the country — and this scraper gives you structured, production-ready access to all of it.

Every result arrives as a clean JSON record with parsed salary ranges in PLN, full requirements and benefits arrays, apply URLs, publication dates, and complete company metadata. Pay only for what you scrape — no subscriptions, no monthly fees.

---

### What You Get

- **80,000+ active job listings** across all of Poland
- **Structured salary in PLN** — `salary_min`, `salary_max`, `salary_currency`, `salary_period` parsed from the raw text
- **Full requirements arrays** — mandatory skills, optional skills, technologies, operating systems
- **Full responsibilities arrays** — what the person will actually do, day-to-day
- **Full benefits arrays** — perks, health insurance, bonuses, sports cards, etc.
- **Work mode** — stationary / hybrid / remote, with remote-only filtering
- **Contract types** — Umowa o pracę (full-time), Kontrakt B2B, Umowa zlecenie, internships
- **Apply URLs + email + phone** — direct links straight to the application flow
- **Company profile + logo** — employer page URL, logo CDN URL, company name
- **Posted + expiry dates** — ISO-8601 timestamps for freshness analysis
- **Multi-keyword search** — run dozens of queries in one run, automatically deduplicated
- **City + voivodeship** — normalised Polish region names (mazowieckie, śląskie, małopolskie, ...)

---

### Output Example

A real record from a single run (Senior Java Developer, Warsaw):

```json
{
  "company_logo_url": "https://logos.gpcdn.pl/loga-firm/20062259/2c580000-43a8-f403-1fb3-08d7fbf29184_280x280.png",
  "id": "1004762431",
  "title": "Senior Java Developer",
  "url": "https://www.pracuj.pl/praca/senior-java-developer-katowice,oferta,1004762431",
  "company": "Scalo Sp. z o.o.",
  "company_url": "https://pracodawcy.pracuj.pl/company/20062259",
  "location": "Katowice",
  "city": "Katowice",
  "region": "śląskie",
  "country": "PL",
  "salary_min": 110,
  "salary_max": 140,
  "salary_currency": "PLN",
  "salary_period": "hour",
  "salary_text": "110–140 zł netto (+ VAT) / godz.",
  "employment_type": "Kontrakt B2B",
  "work_mode": "Praca zdalna",
  "description_full": "W Scalo zajmujemy się dostarczaniem projektów software'owych...\n\nYour responsibilities:\n- uczestnictwo w projekcie dot. branży bankowej\n- rozwój, projektowanie i programowanie istniejących oraz nowych modułów\n- udział w opracowywaniu architektury systemu\n...\n\nOur requirements:\n- Java\n- Spring Boot\n- PostgreSQL\n- Kafka\n- Docker, Kubernetes\n...\n\nWhat we offer:\n- umowa B2B z długoterminową współpracą\n- prywatna opieka medyczna\n- karta sportowa Multisport\n...",
  "requirements": ["Java", "Spring Boot", "PostgreSQL", "Kafka", "Docker", "Kubernetes", "AWS", "CI/CD", "Git", "REST API"],
  "responsibilities": ["uczestnictwo w projekcie dot. branży bankowej", "rozwój, projektowanie i programowanie istniejących oraz nowych modułów", "udział w opracowywaniu architektury systemu", "code review", "...(9 items total)"],
  "company_benefits": ["prywatna opieka medyczna", "karta sportowa Multisport", "budżet szkoleniowy", "praca zdalna 100%", "elastyczne godziny pracy", "...(14 items total)"],
  "posted_at": "2026-04-10T10:10:39Z",
  "expires_at": "2026-05-10T21:59:59Z",
  "apply_url": "https://www.pracuj.pl/aplikuj/senior-java-developer-katowice,oferta,1004762431",
  "apply_email": null,
  "contact_email": null,
  "contact_phone": null,
  "search_query": "Java Developer",
  "source_url": "https://www.pracuj.pl/praca/senior-java-developer-katowice,oferta,1004762431",
  "source_platform": "pracuj.pl",
  "scraped_at": "2026-04-10T10:15:02Z"
}
````

***

### Use Cases

#### Polish Tech Talent Recruitment Intelligence

Poland has 500,000+ software engineers and is the #1 outsourcing destination in Europe. Map the live job market by role, seniority, technology stack, and city — and identify which companies are hiring what, when.

#### Salary Benchmarking

The only Polish job board with structured salary ranges in PLN. Benchmark developer, data scientist, product manager, and executive compensation by role × city × company — B2B vs Umowa o pracę, hourly vs monthly, net vs gross.

#### Employer Branding Analysis

Extract the full benefits array for every employer. See who offers Multisport cards, private healthcare, share options, 4-day workweeks, or remote-first policies — and track how the offer evolves over time.

#### Regional Job Market Research

Compare hiring intensity across Warsaw (mazowieckie), Kraków (małopolskie), Wrocław (dolnośląskie), Gdańsk (pomorskie), Poznań (wielkopolskie), and Katowice (śląskie). Quantify the eastward shift of Western European tech teams into Poland.

#### Competitive Hiring Intelligence

Monitor your direct competitors' job listings — see the roles they're hiring, the technologies they're scaling up, the salary bands they're offering, and the time-to-fill by posting age.

#### Polish Labor Market & Economic Research

Feed a clean, structured, fresh dataset of Polish employment demand into your economic models, research papers, or policy analysis. Coverage of 80,000+ openings updated daily.

#### Job Board Aggregators

Integrate Pracuj.pl directly into your metasearch or vertical job board. Full content, normalised fields, company metadata, and application URLs — ready to ingest.

***

### Input Parameters

| Parameter | Type | Description | Example |
|-----------|------|-------------|---------|
| `searchQueries` | string\[] | Search keywords. Each runs as a separate search; results are deduplicated across queries. | `["Java Developer", "Python Developer", "DevOps"]` |
| `searchQuery` | string | Single keyword (legacy — prefer `searchQueries`). | `"Product Manager"` |
| `location` | string | City or voivodeship name. Leave empty to search all of Poland. | `"Warszawa"`, `"Kraków"`, `"Wrocław"`, `"Mazowieckie"` |
| `employmentType` | string | Contract type filter. | `"employment"`, `"b2b"`, `"mandate-contract"`, `"internship"` |
| `remote` | boolean | Return only jobs that allow remote work. | `true` |
| `maxResultsPerQuery` | integer | Max results per search keyword. | `100` |
| `maxResults` | integer | Total cap across all queries (0 = unlimited). | `500` |
| `includeJobDetails` | boolean | Visit each detail page for full description, requirements, responsibilities, benefits, apply URL. Highly recommended. | `true` |
| `proxyConfiguration` | object | Apify proxy settings. Auto proxy works reliably and cheaply. | `{"useApifyProxy": true}` |

#### Example input

```json
{
  "searchQueries": ["Java Developer", "Python Developer", "Data Engineer"],
  "location": "Warszawa",
  "employmentType": "b2b",
  "remote": true,
  "maxResultsPerQuery": 200,
  "includeJobDetails": true,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

***

### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `company_logo_url` | string | Company logo from Pracuj.pl's CDN |
| `id` | string | Unique offer ID |
| `title` | string | Job title |
| `url` | string | Absolute URL of the job posting |
| `company` | string | Employer name |
| `company_url` | string | Employer profile URL on Pracuj.pl |
| `company_website` | string | Employer's own website (when available) |
| `location` | string | Display workplace as shown on the listing |
| `city` | string | City name |
| `region` | string | Voivodeship (mazowieckie, śląskie, małopolskie, ...) |
| `country` | string | Always `PL` |
| `salary_min` | number | Lower bound of the parsed salary range |
| `salary_max` | number | Upper bound of the parsed salary range |
| `salary_currency` | string | `PLN`, `EUR`, or `USD` |
| `salary_period` | string | `month`, `hour`, `day`, `week`, or `year` |
| `salary_text` | string | Original salary text (e.g. `"7 000–12 000 zł brutto / mies."`) |
| `employment_type` | string | Contract type(s) — `"Umowa o pracę"`, `"Kontrakt B2B"`, ... |
| `work_mode` | string | `"Praca stacjonarna"`, `"Praca hybrydowa"`, `"Praca zdalna"` |
| `workload_min` | number | Minimum workload percentage (when available) |
| `workload_max` | number | Maximum workload percentage (when available) |
| `description_snippet` | string | Short description from the listing page |
| `description_full` | string | Full job description synthesised from every structured section (about-project, responsibilities, requirements, offered) |
| `requirements` | string\[] | Full requirements list (mandatory skills + nice-to-have + technologies + operating systems) |
| `responsibilities` | string\[] | Full responsibilities list — day-to-day tasks |
| `company_benefits` | string\[] | Full benefits list — perks, insurance, bonuses |
| `posted_at` | string | ISO-8601 publication timestamp |
| `expires_at` | string | ISO-8601 expiration timestamp |
| `apply_url` | string | Direct apply URL |
| `apply_email` | string | Apply email (when `apply_url` is a `mailto:` link) |
| `contact_email` | string | Recruiter contact email (when listed) |
| `contact_phone` | string | Recruiter phone number (when listed) |
| `search_query` | string | The keyword used to find this job |
| `source_url` | string | Canonical job URL |
| `source_platform` | string | Always `pracuj.pl` |
| `scraped_at` | string | ISO-8601 UTC scrape timestamp |

***

### Pricing

Pay only for what you scrape. No subscriptions. No monthly minimums.

| Event | Price |
|-------|-------|
| Actor start | $0.001 |
| Search result (SERP only, `includeJobDetails: false`) | $0.003 / result |
| Full detail result (`includeJobDetails: true`) | $0.005 / result |

**Example costs**

- 100 jobs with full details → **$0.50**
- 1,000 jobs with full details → **$5.00**
- 10,000 jobs with full details → **$50.00**

Compare that to manual data entry at EUR 0.50-1.00 per record, or a commercial data feed at EUR 500-2000/month.

***

### Why This Scraper

- **Poland is EU economy #6** — the most important labor market in Central Europe and the biggest offshoring destination for Western European tech teams
- **Multi-query in one run** — scrape "Java Developer", "Python Developer", and "DevOps Engineer" across Warsaw, Kraków, and Wrocław in a single invocation with automatic cross-query deduplication
- **Pay per result** — no subscriptions, no monthly fees, no minimums. Scrape 10 records or 100,000 — the price scales linearly
- **Full textSections extraction** — most scrapers return only the short SEO snippet. This one unpacks every structured section (about-project, responsibilities, requirements, requirements-optional, technologies, benefits, offered) into clean arrays
- **Parsed PLN salary** — `salary_min`, `salary_max`, `salary_currency`, `salary_period` extracted from the native Polish display text (`"15 000–25 000 zł netto (+ VAT) / mies."` → `{min: 15000, max: 25000, currency: "PLN", period: "month"}`)
- **Voivodeship-level regions** — normalised Polish region names ready for geo-aggregation
- **Production-ready** — robust pagination, retry on 429/5xx, deduplication across pages and queries, batched pushes

***

### Issues & Feedback

Facing an issue, missing a data field, or need a new filter? [Open an issue on the Issues tab](https://console.apify.com/actors/dB82lciKf29vyuJNp/issues) — we respond within 24 hours and ship fixes fast. We actively maintain this scraper and welcome feature requests for salary aggregation, industry classification, company enrichment, and more.

***

### Related Actors

If you need to scrape job boards in other European markets, check out our other scrapers:

- [StepStone.de Scraper](https://apify.com/santamaria-automations/stepstone-de-scraper) — Germany's #1 job board
- [Arbeitsagentur.de Scraper](https://apify.com/santamaria-automations/arbeitsagentur-de-scraper) — Germany's federal employment agency
- [Indeed Scraper](https://apify.com/santamaria-automations/indeed-scraper) — Global job search aggregator
- [LinkedIn Jobs Scraper](https://apify.com/santamaria-automations/linkedin-scraper) — Global professional network
- [Stellenanzeigen.de Scraper](https://apify.com/santamaria-automations/stellenanzeigen-de-scraper) — German job board
- [Reed.co.uk Scraper](https://apify.com/santamaria-automations/reed-uk-scraper) — UK's largest job board
- [Jobindex.dk Scraper](https://apify.com/santamaria-automations/jobindex-dk-scraper) — Denmark's #1 job site
- [France Travail Scraper](https://apify.com/santamaria-automations/france-travail-scraper) — France's government job portal
- [StepStone.at Scraper](https://apify.com/santamaria-automations/stepstone-at-scraper) — Austria's leading job board

Or browse all [santamaria-automations actors](https://apify.com/santamaria-automations) for the full DACH + European scraping suite.

# Actor input Schema

## `searchQueries` (type: `array`):

One or more search keywords (e.g. 'Java Developer', 'Product Manager'). Each keyword runs as a separate search. Results are deduplicated across queries.

## `searchQuery` (type: `string`):

Single search keyword (backward compatible). Use 'searchQueries' for multiple keywords.

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

City or voivodeship name (e.g. 'Warszawa', 'Kraków', 'Wrocław', 'Mazowieckie'). Leave empty to search all of Poland.

## `category` (type: `string`):

Optional industry category filter (free text, e.g. 'IT', 'Finanse', 'Sprzedaż').

## `employmentType` (type: `string`):

Filter by contract / employment type

## `remote` (type: `boolean`):

When enabled, returns only jobs that allow remote work.

## `maxResultsPerQuery` (type: `integer`):

Maximum results per search keyword. Each query gets up to this many results (deduplicated).

## `maxResults` (type: `integer`):

Total cap across all queries. Set to 0 for unlimited (each query limited by maxResultsPerQuery).

## `includeJobDetails` (type: `boolean`):

When enabled (recommended), visits each job detail page to extract full description, requirements, responsibilities, benefits, and apply URL. When disabled, only listing-page data is returned (faster, cheaper).

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

Apify proxy settings for avoiding rate limits

## Actor input object example

```json
{
  "searchQueries": [
    "Java Developer"
  ],
  "searchQuery": "Java Developer",
  "location": "Warszawa",
  "employmentType": "",
  "remote": false,
  "maxResultsPerQuery": 50,
  "maxResults": 0,
  "includeJobDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobListings` (type: `string`):

Dataset containing scraped job listings

# 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 = {
    "searchQueries": [
        "Java Developer"
    ],
    "location": "Warszawa",
    "maxResultsPerQuery": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/pracuj-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 = {
    "searchQueries": ["Java Developer"],
    "location": "Warszawa",
    "maxResultsPerQuery": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/pracuj-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 '{
  "searchQueries": [
    "Java Developer"
  ],
  "location": "Warszawa",
  "maxResultsPerQuery": 50
}' |
apify call santamaria-automations/pracuj-pl-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pracuj.pl Job Scraper - Poland Jobs",
        "description": "Scrape job listings from Pracuj.pl, Poland's #1 job board. Extract jobs with salary ranges (PLN), company profiles, requirements, benefits, and application URLs. Supports multiple queries, employment types, and remote filtering.",
        "version": "1.0",
        "x-build-id": "WWcdzoy1rKAboHYJc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/santamaria-automations~pracuj-pl-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-santamaria-automations-pracuj-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/santamaria-automations~pracuj-pl-scraper/runs": {
            "post": {
                "operationId": "runs-sync-santamaria-automations-pracuj-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/santamaria-automations~pracuj-pl-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-santamaria-automations-pracuj-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": {
                    "searchQueries": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "One or more search keywords (e.g. 'Java Developer', 'Product Manager'). Each keyword runs as a separate search. Results are deduplicated across queries.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Search Keyword (single, legacy)",
                        "type": "string",
                        "description": "Single search keyword (backward compatible). Use 'searchQueries' for multiple keywords."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City or voivodeship name (e.g. 'Warszawa', 'Kraków', 'Wrocław', 'Mazowieckie'). Leave empty to search all of Poland."
                    },
                    "category": {
                        "title": "Category",
                        "type": "string",
                        "description": "Optional industry category filter (free text, e.g. 'IT', 'Finanse', 'Sprzedaż')."
                    },
                    "employmentType": {
                        "title": "Employment Type",
                        "enum": [
                            "",
                            "employment",
                            "mandate-contract",
                            "b2b",
                            "contract-work",
                            "agency-agreement",
                            "internship",
                            "temporary-staffing"
                        ],
                        "type": "string",
                        "description": "Filter by contract / employment type",
                        "default": ""
                    },
                    "remote": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "When enabled, returns only jobs that allow remote work.",
                        "default": false
                    },
                    "maxResultsPerQuery": {
                        "title": "Max Results per Query",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum results per search keyword. Each query gets up to this many results (deduplicated).",
                        "default": 100
                    },
                    "maxResults": {
                        "title": "Max Total Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total cap across all queries. Set to 0 for unlimited (each query limited by maxResultsPerQuery).",
                        "default": 0
                    },
                    "includeJobDetails": {
                        "title": "Include Full Job Details",
                        "type": "boolean",
                        "description": "When enabled (recommended), visits each job detail page to extract full description, requirements, responsibilities, benefits, and apply URL. When disabled, only listing-page data is returned (faster, cheaper).",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy settings for avoiding rate limits",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
