# Profesia.sk Scraper (`unfenced-group/profesia-sk-scraper`) Actor

Extract job listings from Profesia.sk — Slovakia largest job board. Filter by keyword, region and contract type. No API key required.

- **URL**: https://apify.com/unfenced-group/profesia-sk-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 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

## Profesia.sk Scraper

![Profesia.sk Scraper](https://i.imgur.com/wgDDKKb.png)

Scrape structured job listings from [Profesia.sk](https://www.profesia.sk) — Slovakia. 30,000+ active listings. No API key required.

---

### Why this scraper?

#### 🌍 Profesia.sk — Slovakia's job market
Scrape structured job data from Profesia.sk, one of the leading employment platforms in Slovakia.

#### 📄 Full job descriptions
Enable `fetchDetails` to retrieve complete job descriptions in HTML, plain text, and Markdown format.

#### 💰 Structured salary data
Salary ranges extracted and normalised into structured `salaryMin`, `salaryMax`, `salaryCurrency`, and `salaryPeriod` fields where published.

#### 🔄 Repost detection
Cross-run deduplication with a 90-day TTL. Use `skipReposts: true` to receive only genuinely new listings.

#### 🔗 Direct URL scraping
Supply specific Profesia.sk search or category URLs via `startUrls` for precise targeting.

#### ⚙️ No API key required
Runs without any third-party credentials.

---

### Input parameters

| Parameter | Type | Description | Default |
|---|---|---|---|
| `keywords` | string | Job title, keyword, or skill to search for. | — |
| `location` | string | City or region to filter by. Leave empty to search all locations. | `all` |
| `contractType` | string | Contract type filter (e.g. permanent, contract, temporary). | `all` |
| `maxResults` | integer | Maximum number of results to return. | `5` |
| `daysOld` | integer | Only return listings published within the last N days. | — |
| `fetchDetails` | boolean | Fetch full job description from each listing detail page. Disable for faster list-only results. | `true` |
| `skipReposts` | boolean | Skip listings already seen in previous runs (90-day deduplication window). | `true` |
| `startUrls` | array | List of specific URLs to scrape. Bypasses the search input. | — |

---

### Output schema

Each result contains the following fields.

**Always present:**

| Field | Type | Description |
|---|---|---|
| `id` | string | Unique job listing ID from the source platform. |
| `url` | string | Direct URL to the job listing. |
| `title` | string | Job title as published. |
| `company` | string | Employer / company name. |
| `location` | string | Full location string as published. |
| `city` | string | City of the work location. |
| `country` | string | Country code (ISO 3166-1 alpha-2). |
| `contractType` | string | Contract type (permanent, contract, temporary, etc.). |
| `workSchedule` | string | Work schedule (full-time, part-time, etc.). |
| `salaryMin` | number | Minimum salary (null if not published by employer). |
| `salaryMax` | number | Maximum salary (null if not published by employer). |
| `salaryCurrency` | string | ISO 4217 currency code (null if no salary published). |
| `salaryPeriod` | string | Salary period: YEAR / MONTH / WEEK / DAY / HOUR. |
| `publishDate` | string | Publication date (YYYY-MM-DD). |
| `publishDateISO` | string | Publication date in ISO 8601 format. |
| `source` | string | Source domain name. |
| `scrapedAt` | string | ISO 8601 timestamp of when this item was scraped. |
| `contentHash` | string | MD5 hash of key fields for change detection (16 chars). |
| `summary` | string | Human-readable one-line summary of the listing. |
| `changeStatus` | string | Change status: NEW / MODIFIED / UNCHANGED. |
| `isRepost` | boolean | True if this listing was seen in a previous run (90-day window). |
| `originalPublishDate` | string | Original publish date if this is a repost (null otherwise). |
| `originalUrl` | string | Original URL if this is a repost (null otherwise). |

**With `fetchDetails: true` (default):**

| Field | Type | Description |
|---|---|---|
| `descriptionHtml` | string | Full job description as raw HTML (null if fetchDetails is false). |
| `descriptionText` | string | Full job description as plain text (null if fetchDetails is false). |
| `descriptionMarkdown` | string | Full job description in Markdown format (null if fetchDetails is false). |

**Example output record:**

```json
{
  "id": "123456",
  "url": "https://www.profesia.sk/jobs/senior-developer/123456",
  "title": "Software Developer",
  "company": "Kia Slovakia",
  "location": "Bratislava",
  "city": "Bratislava",
  "country": "SK",
  "contractType": "Permanent",
  "workSchedule": "Full-time",
  "salaryMin": 45000,
  "salaryMax": 60750,
  "salaryCurrency": "EUR",
  "salaryPeriod": "YEAR",
  "publishDate": "2026-04-15",
  "publishDateISO": "2026-04-15",
  "source": "profesia.sk",
  "scrapedAt": "2026-04-24T09:00:00.000Z",
  "contentHash": "a3f1b2c4d5e67890",
  "summary": "Software Developer · Kia Slovakia · Bratislava",
  "changeStatus": "NEW",
  "isRepost": false,
  "originalPublishDate": null,
  "originalUrl": null,
  "descriptionHtml": "<p>We are looking for an experienced professional to join our growing team...</p>",
  "descriptionText": "We are looking for an experienced professional to join our growing team...",
  "descriptionMarkdown": "We are looking for an experienced professional to join our growing team..."
}
````

***

### Examples

#### 1 — Search for Software Developer roles in Bratislava

```json
{
  "searchQuery": "v\u00fdvoj\u00e1r",
  "location": "Bratislava",
  "maxResults": 100
}
```

#### 2 — Filter by contract type — permanent positions only

```json
{
  "searchQuery": "",
  "contractType": "permanent",
  "maxResults": 200
}
```

#### 3 — Scrape a specific search page directly via startUrls

```json
{
  "startUrls": [
    {
      "url": "https://www.profesia.sk/jobs?q=v\u00fdvoj\u00e1r"
    }
  ],
  "maxResults": 50
}
```

#### 4 — Daily feed — new listings only, past 24 hours, no reposts

```json
{
  "searchQuery": "",
  "fetchDetails": false,
  "daysOld": 1,
  "skipReposts": true,
  "maxResults": 1000
}
```

***

### 💰 Pricing

**$1.50 per 1,000 results** — you only pay for successfully retrieved listings.
Failed retries and filtered reposts are never charged.

| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |

> Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Use the **Max results** cap in the input to control your spend exactly.

***

### Performance

| Run size | Approx. time |
|---|---|
| 100 listings | ~2 min |
| 1,000 listings | ~15 min |
| 10,000 listings | ~2.5 hours |

***

### Known limitations

- **Salary:** Not all employers publish salary information — `salaryMin` and `salaryMax` may be `null`.
- **fetchDetails:** Setting `fetchDetails: false` returns list-page fields only; description fields will be `null`.

***

### Technical details

- **Source:** profesia.sk — Slovakia's job market
- **Memory:** 256 MB
- **Repost storage:** KeyValueStore `profesia-sk-job-dedup`, 90-day TTL
- **Retry:** Automatic retry on network errors, exponential backoff, 3 attempts per request

***

### Additional services

Need a custom actor, additional filters, scheduled runs, or integration support?
Send an email to <info@unfencedgroup.nl> — we build on request.

***

*Part of the [Unfenced Group](https://apify.com/unfenced-group) European job board scraper portfolio — 50+ job markets covered.*
*Built by [unfenced-group](https://apify.com/unfenced-group) · Issues? Open a ticket or send a message.*

# Actor input Schema

## `keywords` (type: `string`):

Search keywords to filter job listings (e.g. 'programátor', 'accountant', 'marketing').

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

Filter jobs by Slovak region. Select 'All regions' to search nationwide.

## `contractType` (type: `string`):

Filter by contract type. 'All types' includes permanent positions, internships and other types.

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

Maximum number of job listings to return. Increase for larger data sets.

## `daysOld` (type: `integer`):

Only return jobs posted within this many days. Leave empty to return all jobs.

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

When enabled, each job page is visited to extract salary, contract type, full description, education requirements, and language skills. Recommended for complete data. Disabling speeds up the scraper at the cost of these fields.

## `skipReposts` (type: `boolean`):

Detect and skip job listings that have already been collected in previous runs (90-day memory). Useful for incremental scraping workflows.

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

Optional: provide specific Profesia.sk listing page URLs to scrape instead of using the search filters above.

## Actor input object example

```json
{
  "location": "all",
  "contractType": "all",
  "maxResults": 5,
  "fetchDetails": true,
  "skipReposts": true
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/profesia-sk-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/profesia-sk-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 '{}' |
apify call unfenced-group/profesia-sk-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Profesia.sk Scraper",
        "description": "Extract job listings from Profesia.sk — Slovakia largest job board. Filter by keyword, region and contract type. No API key required.",
        "version": "0.0",
        "x-build-id": "emarrngHKbfFB5ydE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unfenced-group~profesia-sk-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unfenced-group-profesia-sk-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/unfenced-group~profesia-sk-scraper/runs": {
            "post": {
                "operationId": "runs-sync-unfenced-group-profesia-sk-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/unfenced-group~profesia-sk-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-unfenced-group-profesia-sk-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": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Search keywords to filter job listings (e.g. 'programátor', 'accountant', 'marketing')."
                    },
                    "location": {
                        "title": "Region",
                        "enum": [
                            "all",
                            "bratislavsky-kraj",
                            "trnavsky-kraj",
                            "trenciansky-kraj",
                            "nitriansky-kraj",
                            "zilinsky-kraj",
                            "banskobystricky-kraj",
                            "presovsky-kraj",
                            "kosicky-kraj",
                            "zahranicie"
                        ],
                        "type": "string",
                        "description": "Filter jobs by Slovak region. Select 'All regions' to search nationwide.",
                        "default": "all"
                    },
                    "contractType": {
                        "title": "Contract type",
                        "enum": [
                            "all",
                            "brigady"
                        ],
                        "type": "string",
                        "description": "Filter by contract type. 'All types' includes permanent positions, internships and other types.",
                        "default": "all"
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of job listings to return. Increase for larger data sets.",
                        "default": 5
                    },
                    "daysOld": {
                        "title": "Maximum age (days)",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Only return jobs posted within this many days. Leave empty to return all jobs."
                    },
                    "fetchDetails": {
                        "title": "Fetch full job details",
                        "type": "boolean",
                        "description": "When enabled, each job page is visited to extract salary, contract type, full description, education requirements, and language skills. Recommended for complete data. Disabling speeds up the scraper at the cost of these fields.",
                        "default": true
                    },
                    "skipReposts": {
                        "title": "Skip duplicate listings",
                        "type": "boolean",
                        "description": "Detect and skip job listings that have already been collected in previous runs (90-day memory). Useful for incremental scraping workflows.",
                        "default": true
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional: provide specific Profesia.sk listing page URLs to scrape instead of using the search filters above.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
