# Pracuj.pl Scraper · Poland Job Listings & Salaries (`memo23/pracuj-scraper`) Actor

Scrape Pracuj.pl — Poland's #1 job board. Any search URL returns job title, company, salary, contract, work mode, location and an AI summary. Optional detail mode adds the full description, responsibilities, skills, tech stack and apply link. JSON or CSV.

- **URL**: https://apify.com/memo23/pracuj-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, AI, Agents
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 job 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 Scraper

Scrape job listings from **Pracuj.pl** — Poland's #1 job board. Paste any search URL and get clean, structured rows: job title, company, salary, contract type, work mode, location, an AI summary and more. One row per job. Pure HTTP, no browser.

![How it works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-pracuj.png)

### Why use this scraper

- **Everything on the results page** — title, company, salary, contract type, work mode, location and an AI requirements summary all come from one fetch; no slow per-job crawling.
- **Any search** — keyword, location, category, contract, work mode or salary filters are all honoured and paginated automatically.
- **Salary when shown** — Pracuj surfaces salary ranges on many offers; you get the displayed text verbatim.
- **Clean, flat output** — one row per job; nested locations/skills flattened for CSV by default.
- **Pure HTTP, no browser** — fast and cheap; no Playwright, no headless Chrome.
- **Optional deep detail** — turn on `fetchDetails` to add the full description, responsibilities, required & optional skills, technologies, job categories, the apply URL and contact phone.

### What it does

Give it one or more Pracuj.pl **search** URLs. For each, it reads the live results and emits one dataset row per job with all the fields below. Searches paginate automatically (`?pn=N`) until you hit `Maximum items`.

### Supported inputs

| Input | Example |
|---|---|
| By location | `pracuj.pl/praca/warszawa;wp` |
| By keyword | `pracuj.pl/praca/python;kw` |
| By category | open the IT / Finance / Sales category on pracuj.pl |
| Filtered search | run any search on pracuj.pl, copy the URL from the address bar |

### Use cases

- **Labour-market & salary research** across Polish cities, roles and industries.
- **Lead generation** — company names, company profiles, and (with `fetchDetails`) apply URLs and contact phones.
- **Recruitment & sourcing** — track who's hiring for which roles, with what tech stack and contract.
- **Aggregation & job boards** — pull fresh Polish job postings into your own product.

### How it works

1. You paste Pracuj.pl search URLs.
2. The actor reads each results page's embedded job data and paginates through results.
3. Each job is normalised into one flat row and pushed to the dataset (optionally enriched from its detail page).

### Input configuration

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | Pracuj.pl **search** URLs (auto-paginated). |
| `maxItems` | integer | Hard cap on jobs collected. Default 10000. |
| `fetchDetails` | boolean | Opt-in: open each job's detail page for the **full description**, **responsibilities**, **required & optional skills**, **technologies**, **categories**, the **apply URL** and **contact phone**. +1 request/job, billed per `additional-data` event. Default off. |
| `flatten` | boolean | Flatten nested objects/arrays into CSV columns (default on). |
| `enrichEmails` | boolean | Opt-in employer contact-email enrichment (billed per email found). |
| `maxConcurrency` | integer | Parallel row processing. Default 8. |
| `proxy` | object | Proxy config. **Residential required** (Pracuj blocks datacenter IPs); defaults to Apify Residential. |

### Output sample

```json
{
  "portal": "pracuj",
  "offerId": "1004884392",
  "url": "https://www.pracuj.pl/praca/...,oferta,1004884392",
  "jobTitle": "Service Delivery Manager (K/M/X)",
  "companyName": "E.ON Polska IT Support Sp. z o.o.",
  "companyId": "1074157434",
  "salaryText": "8 000–10 000 zł brutto / mies.",
  "typesOfContract": ["Umowa o pracę"],
  "workModes": ["Praca hybrydowa"],
  "isRemoteWorkAllowed": false,
  "locations": [{ "workplace": "Warszawa", "url": "https://www.pracuj.pl/praca/...,oferta,1004884392" }],
  "aiSummary": "Masz minimum 2 lata doświadczenia…",
  "publishedDate": "2026-06-21T12:50:34.257Z"
}
````

### Key output fields

| Field | Description |
|---|---|
| `offerId` / `groupId` / `url` | Pracuj offer id, group id + detail URL |
| `jobTitle` | job title |
| `companyName` / `companyId` / `companyProfileUrl` / `companyLogoUrl` | employer |
| `salaryText` | displayed salary range (when shown) |
| `typesOfContract` / `workSchedules` / `workModes` | employment type, schedule, on-site/hybrid/remote |
| `positionLevels` | seniority (junior / mid / senior…) |
| `isRemoteWorkAllowed` / `isOneClickApply` | flags |
| `locations` | per-city postings (workplace, offer id, URL, coordinates) |
| `aiSummary` | AI-generated requirements summary |
| `publishedDate` / `expirationDate` | posting dates |
| `description` | full job description *(with `fetchDetails`)* |
| `responsibilities` / `requiredSkills` / `optionalSkills` / `technologies` | structured JD sections *(with `fetchDetails`)* |
| `categories` / `applyUrl` / `contactPhone` | job categories, application link, recruiter phone *(with `fetchDetails`)* |

### FAQ

**Which searches work?** Any Pracuj.pl `/praca/` search — by keyword (`;kw`), location (`;wp`), category, or any combination of on-site filters.

**Do I get the salary?** Yes, when the employer displays it (`salaryText`). Many Polish postings hide salary; those come back empty.

**How do I get the full job description and apply link?** Turn on `fetchDetails` — it adds the full description, responsibilities, required/optional skills, technologies, the apply URL and contact phone.

**Why is a proxy required?** Pracuj.pl blocks datacenter IPs with a 403 challenge. The actor uses residential proxies (Apify Residential by default) and retries on a block, rotating IP. No browser or CAPTCHA solving.

### Support

Found an issue or want a field added? Open an issue on the actor's Issues tab and we'll take a look.

### Additional services

Need employer contact emails? Turn on `enrichEmails` to append a best-effort contact email + website per company (billed only when an email is found).

### Explore more scrapers

Check the publisher's profile for more job-board and directory scrapers (LinkedIn Jobs, Naukri, SEEK, Jobstreet, Indeed-style boards and more).

### ⚠️ Disclaimer

This actor collects only publicly available job-listing data for legitimate research, lead-generation and recruitment use. Respect Pracuj.pl's terms of service and applicable laws (including data-protection rules) in your jurisdiction. You are responsible for how you use the scraped data.

### SEO Keywords

pracuj scraper, pracuj.pl scraper, pracuj api, poland job scraper, polish jobs data, job listings poland, oferty pracy scraper, praca warszawa scraper, salary data poland, recruitment data poland, IT jobs poland scraper, job board scraper, employer leads poland, pracuj export

# Actor input Schema

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

Full Pracuj.pl /praca/ search URLs. Each is paginated automatically (?pn=N) until `Maximum items` is reached.

## `flatten` (type: `boolean`):

When enabled (default), nested objects/arrays (e.g. `locations`, `technologies`, `responsibilities`) are flattened into CSV-friendly columns. Disable to keep the full nested JSON.

## `fetchDetails` (type: `boolean`):

If enabled, opens each job's detail page to add the **full description**, **responsibilities**, **required & optional skills**, **technologies**, **job categories**, the **apply URL** and the **contact phone**. Adds one extra request per job and charges an `additional-data` event each time. Leave off for the fast/cheap search-only output.

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email for each employer by discovering the company's website (Clearbit) and reading its contact/about pages. Adds contactEmail + contactWebsite columns. Best-effort, billed per email found; never charged for misses.

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

Hard cap on the number of jobs collected. Each search page returns ~50 jobs and paginates automatically; use this cap to control billing.

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

Maximum number of rows processed in parallel (mainly relevant when detail-fetch or employer-email enrichment is on). 6-12 is the sweet spot.

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

Number of retries before a failed request is given up.

## `proxy` (type: `object`):

Pracuj.pl blocks datacenter IPs (403), so **residential proxies are required**. Defaults to Apify Residential; the scraper retries on a block, rotating IP.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.pracuj.pl/praca/warszawa;wp",
    "https://www.pracuj.pl/praca/python;kw"
  ],
  "flatten": true,
  "fetchDetails": false,
  "enrichEmails": false,
  "maxItems": 10000,
  "maxConcurrency": 8,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        "https://www.pracuj.pl/praca/warszawa;wp",
        "https://www.pracuj.pl/praca/python;kw"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/pracuj-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": [
        "https://www.pracuj.pl/praca/warszawa;wp",
        "https://www.pracuj.pl/praca/python;kw",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/pracuj-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": [
    "https://www.pracuj.pl/praca/warszawa;wp",
    "https://www.pracuj.pl/praca/python;kw"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/pracuj-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pracuj.pl Scraper · Poland Job Listings & Salaries",
        "description": "Scrape Pracuj.pl — Poland's #1 job board. Any search URL returns job title, company, salary, contract, work mode, location and an AI summary. Optional detail mode adds the full description, responsibilities, skills, tech stack and apply link. JSON or CSV.",
        "version": "0.0",
        "x-build-id": "YkvqbnZBJv2PJ63QQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~pracuj-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-pracuj-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/memo23~pracuj-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-pracuj-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/memo23~pracuj-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-pracuj-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": "Pracuj.pl search URLs",
                        "type": "array",
                        "description": "Full Pracuj.pl /praca/ search URLs. Each is paginated automatically (?pn=N) until `Maximum items` is reached.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "flatten": {
                        "title": "Flatten nested fields for CSV-friendly output",
                        "type": "boolean",
                        "description": "When enabled (default), nested objects/arrays (e.g. `locations`, `technologies`, `responsibilities`) are flattened into CSV-friendly columns. Disable to keep the full nested JSON.",
                        "default": true
                    },
                    "fetchDetails": {
                        "title": "Fetch full job details (description, responsibilities, skills, technologies, apply link)",
                        "type": "boolean",
                        "description": "If enabled, opens each job's detail page to add the **full description**, **responsibilities**, **required & optional skills**, **technologies**, **job categories**, the **apply URL** and the **contact phone**. Adds one extra request per job and charges an `additional-data` event each time. Leave off for the fast/cheap search-only output.",
                        "default": false
                    },
                    "enrichEmails": {
                        "title": "Enrich with employer contact emails (experimental, billed per email)",
                        "type": "boolean",
                        "description": "If enabled, tries to find a contact email for each employer by discovering the company's website (Clearbit) and reading its contact/about pages. Adds contactEmail + contactWebsite columns. Best-effort, billed per email found; never charged for misses.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum items to scrape",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on the number of jobs collected. Each search page returns ~50 jobs and paginates automatically; use this cap to control billing.",
                        "default": 10000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of rows processed in parallel (mainly relevant when detail-fetch or employer-email enrichment is on). 6-12 is the sweet spot.",
                        "default": 8
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of retries before a failed request is given up.",
                        "default": 5
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Pracuj.pl blocks datacenter IPs (403), so **residential proxies are required**. Defaults to Apify Residential; the scraper retries on a block, rotating IP."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
