# Profesia.sk Scraper: Slovakia Jobs, Salaries and Employers (`santamaria-automations/profesia-sk-scraper`) Actor

Scrape job listings from Profesia.sk, Slovakia's #1 job board. Returns title, company, Slovak region (kraj), EUR salary, employment type, workplace type, and full HTML description.

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

## Pricing

Pay per event

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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: Slovakia Jobs, Salaries and Employers

Extract job listings from [Profesia.sk](https://www.profesia.sk) (profesia.sk), Slovakia's largest generalist job board with over 20,000 active listings and 4 million monthly visitors. Covers all job types, regions, and sectors across Slovakia.

No login required. No captcha. HTTP-only, no browser under the hood.

### What it does

Pulls live job listings from Profesia.sk. Results include Slovak-specific fields: region (kraj - 8 Slovak administrative regions), employment type in Slovak (plny uvazok / skrateny uvazok / dohoda / brigada), workplace type (on-site / hybrid / remote), EUR salary where disclosed, company profile URL for each employer with a Profesia.sk profile, and a company-info section with company about text, employee count, contact person, and apply URL. Results are sorted newest-first by default.

Use `searchUrls` to scrape a specific Profesia.sk search result URL, or `startUrls` for direct job page URLs. Use `searchQueries` to search by keyword across all of Slovakia.

Filter by:

- **Search URLs**: paste any Profesia.sk search result URL directly
- **Job detail URLs**: scrape specific listings by URL
- **Keywords**: programator, uctovnik, obchodny zastupca, logistik, etc.
- **Location**: filter by Slovak city or kraj (Bratislava, Kosice, Zilina, Nitra, Presov)

### Sample output

```json
{
  "_type": "job",
  "id": "5351509",
  "title": "Internship opportunity for students: Automation Engineer Trainee",
  "job_url": "https://www.profesia.sk/praca/zurich-insurance-company-ltd-organizacna-zlozka/O5351509",
  "source_url": "https://www.profesia.sk/praca/zurich-insurance-company-ltd-organizacna-zlozka/O5351509",
  "source_platform": "profesia.sk",
  "company_name": "Zurich Insurance Company Ltd, organizačná zložka",
  "company_website": null,
  "company_logo_url": "https://public.profesia.sk/companies/29794/company_logo/10761/cropped.png?t=1753085491",
  "company_profile_url": "https://www.profesia.sk/praca/zurich-insurance-company-ltd-organizacna-zlozka/O5351509",
  "company_about": "Zurich is a leading multi-line insurer that serves its customers in global and local markets. With about 60,000 employees it provides a wide range of property and casualty, life insurance products and services in more than 200 countries and territories.",
  "company_employee_count": "250-499 employees",
  "location": "Bratislava",
  "country": "SK",
  "county": "Bratislavsky kraj",
  "city": "Bratislava",
  "posted_at_text": "2026-08-01",
  "posted_at_datetime": "2026-08-01T00:00:00Z",
  "employment_type": "skrateny uvazok",
  "workplace_type": null,
  "salary_min": 8,
  "salary_max": null,
  "salary_currency": "EUR",
  "salary_period": "hour",
  "salary_text": "8 EUR/hour Gross",
  "description": "Our opportunity Automation Engineer Trainee We are looking for a motivated Automation Engineer Trainee...",
  "description_full": "Our opportunity\nAutomation Engineer Trainee\n...",
  "description_html": "<div class='job-info details-section'>...",
  "description_md": "**Our opportunity**\n\n**Automation Engineer Trainee**\n...",
  "contact_emails": [],
  "contact_phones": [],
  "contact_urls": [],
  "contact_person": "Nikola Bilkova",
  "contact_person_phone": null,
  "contact_email_type": "external",
  "apply_url": "https://www.profesia.sk/external-reaction-redirect?offerId=5351509&_locale=sk&inc_stat=3",
  "search_query": null,
  "scraped_at": "2026-09-02T10:30:00Z"
}
```

### Pricing

| Event | Price |
|---|---|
| Actor start | $0.001 |
| SERP result (`includeJobDetails=false`) | $0.003 per job |
| Detail result (`includeJobDetails=true`) | $0.005 per job |

Typical cost: **$3 per 1,000 jobs** in SERP mode. Detail mode ($5/1,000) adds full HTML descriptions, EUR salary, employment type, workplace type, company info section (about, employee count, contact person), and apply URL.

**New to Apify?** Every account gets a $5 free monthly platform credit, enough for around 1,000 results before you pay anything.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array of strings | - | Job titles or keywords to search on Profesia.sk. Each entry runs as a separate search. Use Slovak keywords for best results. |
| `searchUrls` | array of strings | - | Direct Profesia.sk search result URLs to crawl. Recommended for filtered results. |
| `startUrls` | array of strings | - | Direct job detail page URLs (e.g. `https://www.profesia.sk/praca/company/O5330427`). |
| `location` | string | - | Slovak city or region filter: "Bratislava", "Kosice", "Zilina", "Nitra", "Presov". Leave empty for all of Slovakia. |
| `includeJobDetails` | boolean | true | Fetch full detail page: description, salary, employment type, workplace type, company info, contact person, apply URL. Charges `job-detail-result`. |
| `includeCompanyDetails` | boolean | false | Surface company logo URL, website, company about, employee count, and company profile URL from the job detail page. |
| `sortBy` | string | "newest" | Sort order: `"newest"` sorts client-side by post date descending (recommended for scheduled scrapes); `"relevance"` keeps profesia.sk server order. |
| `maxResults` | integer | 100 | Total cap across all queries (max 5000). |
| `maxResultsPerQuery` | integer | 100 | Cap per individual keyword or URL. |
| `maxConcurrency` | integer | 5 | Parallel detail page fetches when includeJobDetails=true (max 20). |

### Output fields

**Identity**

- `id`: Profesia.sk numeric offer ID (the number after "O" in the URL)
- `title`: position title in Slovak
- `job_url`, `source_url`: canonical Profesia.sk listing URL

**Company**

- `company_name`: hiring company name
- `company_website`: company external URL (when available)
- `company_logo_url`: logo from Profesia.sk CDN (present on most company profiles)
- `company_profile_url`: Profesia.sk employer profile page (e.g. `/praca/trenkwalder-a-s/C528`) — useful for aggregating all jobs from one employer
- `company_about`: brief company description from the company-info section (up to 2000 chars, requires includeJobDetails=true)
- `company_employee_count`: employee count range string (e.g. "250-499 employees", requires includeJobDetails=true)

**Location (Slovakia)**

- `location`: display string from the job page
- `country`: always "SK"
- `county`: Slovak administrative region (kraj): Bratislavsky kraj, Trnavsky kraj, Trenciansky kraj, Nitriansky kraj, Zilinsky kraj, Banskobystricky kraj, Presovsky kraj, Kosicky kraj
- `city`: Slovak city extracted from location

**Contract and schedule (Slovak-specific)**

- `employment_type`: plny uvazok (full-time), skrateny uvazok (part-time), dohoda (contract), brigada (short-term work)
- `workplace_type`: on-site, hybrid, or remote

**Salary (EUR)**

- `salary_min`, `salary_max`: numeric values in EUR (when disclosed)
- `salary_currency`: always "EUR" when salary is present
- `salary_period`: month, hour, year, day, week
- `salary_text`: raw salary string from page (e.g. "Od 1 500 EUR/mesiac")

**Dates**

- `posted_at_text`: raw date posted string ("2026-07-28", "Pred 2 dnami", etc.)
- `posted_at_datetime`: ISO 8601 UTC

**Description (requires includeJobDetails=true)**

- `description`: ~500 character plain-text snippet
- `description_full`: full plain text with line breaks preserved
- `description_html`: raw HTML of job description
- `description_md`: Markdown rendering

**Contacts (requires includeJobDetails=true)**

- `contact_emails`: emails found in description
- `contact_phones`: Slovak phone numbers found in description (+421 prefix)
- `contact_urls`: external URLs found in description
- `contact_person`: contact person name from company-info section (e.g. "Nikola Bilkova")
- `contact_person_phone`: contact person phone from company-info section
- `contact_email_type`: `"external"` when the email button links to an external career portal, `"internal"` when it links to Profesia.sk's own CV form
- `apply_url`: external career portal URL when present (`/external-reaction-redirect?...inc_stat=3`), otherwise Profesia.sk internal apply form

### Why this scraper

Profesia.sk is the dominant job board in Slovakia, with local employer coverage that international aggregators miss. This actor uses lean Go HTTP — no browser launch, no Playwright, no Puppeteer — which means lower cost, faster runs, and no memory spikes. It covers all 8 Slovak administrative regions (kraje), correctly handles Slovak salary format (EUR/mesiac), surfaces the Profesia.sk company profile URL for each employer, and extracts the full company-info section including contact person and apply URL type — enabling employer-level aggregation and B2B lead generation.

### MCP (AI assistant integration)

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": ["-y", "@apify/actor-mcp-server"],
      "env": {
        "ACTOR_ID": "nanoscrape/profesia-sk-scraper"
      }
    }
  }
}
```

### Common use cases

- **Salary benchmarking**: collect EUR salary data across Slovak industries and regions
- **Labour market research**: track job posting volumes, employer hiring activity in Slovakia
- **Recruitment pipeline**: daily sync of new postings matching your search criteria (newest-first ordering)
- **Competitor intelligence**: monitor which companies are hiring in specific Slovak cities
- **HR analytics**: aggregate employment types and regions for workforce planning
- **B2B lead generation**: use `company_profile_url`, `contact_person`, and `company_about` to identify and research actively hiring Slovak companies

### Notes and limits

- Profesia.sk loads job listings server-side — no JavaScript execution required
- Pages return 20 results each; pagination is handled automatically up to 50 pages per query
- No rate-limiting observed on normal crawl speeds (sub-1 req/s with built-in delay)
- Salary is not always disclosed; `salary_min`/`salary_max` will be `null` when absent
- `company_logo_url` uses the `img.logo-offer` selector on detail pages and `img.toplogo` on SERP cards; present on most employer profiles with an uploaded logo
- `company_about`, `company_employee_count`, `contact_person`, `contact_person_phone`, `contact_email_type` are only populated when `includeJobDetails=true` and the employer has filled in the company-info section
- `sortBy="newest"` sorts results after collection (Profesia.sk's public URL only exposes relevance-based ordering; newest sort is applied client-side post-collection)
- Slovak diacritics (accentuated characters) are preserved in all text fields

### Related Actors

**Job aggregation**

- [Job Feed](https://apify.com/santamaria-automations/job-feed) - Unified job feed combining multiple European and global sources into one normalized stream

**Career site scrapers**

- [Career Site Jobs Scraper](https://apify.com/santamaria-automations/career-site-jobs-scraper) - Extract jobs from any company career page
- [Website Job Extractor](https://apify.com/santamaria-automations/website-job-extractor) - Generic job extraction from any website

**General job boards**

- [Indeed Scraper](https://apify.com/santamaria-automations/indeed-camoufox-scraper) - Indeed global listings including Slovakia
- [CV Library Scraper](https://apify.com/santamaria-automations/cvlibrary-scraper) - UK job board for cross-market comparison

**Regional peers**

- [Prace.cz Scraper](https://apify.com/santamaria-automations/prace-cz-scraper) - Czech Republic jobs from Prace.cz (CZ peer, neighboring market)
- [Profession.hu Scraper](https://apify.com/santamaria-automations/profession-hu-scraper) - Hungary jobs from Profession.hu (HU peer, neighboring market)

# Actor input Schema

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

One or more job titles or keywords to search on Profesia.sk. Each entry runs as a separate search. Use Slovak keywords for best results. Examples: 'programator', 'uctovnik', 'obchodny zastupca'.

## `searchUrls` (type: `array`):

Direct Profesia.sk search result URLs to crawl. Example: https://www.profesia.sk/praca/?search\_anywhere=programator

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

Direct Profesia.sk job detail page URLs to scrape. Example: https://www.profesia.sk/praca/company-name/O5330427

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

Slovak region (kraj) or city to filter results. Examples: 'Bratislava', 'Kosice', 'Zilina', 'Nitra', 'Presov'. Leave empty for all of Slovakia.

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

When enabled, fetches the full job detail page for each listing to populate description\_full, description\_html, description\_md, EUR salary, employment type, workplace type, company info section, and contact fields. Charges the job-detail-result PPE event instead of job-serp-result.

## `includeCompanyDetails` (type: `boolean`):

Surface company logo URL, company website, company about, employee count, and company profile URL from the job detail page. Requires a detail page fetch per listing.

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

Newest first is applied client-side after collection (profesia.sk's server only accepts sort\_by=relevance — other values 301-redirect). Newest is recommended for scheduled daily scrapes.

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

Total cap across all search queries.

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

Maximum results per individual search keyword or URL.

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

Maximum number of parallel detail page fetches (when includeJobDetails=true).

## Actor input object example

```json
{
  "searchQueries": [
    "programator"
  ],
  "location": "Bratislava",
  "includeJobDetails": true,
  "includeCompanyDetails": false,
  "sortBy": "newest",
  "maxResults": 100,
  "maxResultsPerQuery": 100,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Dataset containing scraped Profesia.sk Slovak job listings. Each row includes title, company, company\_profile\_url, company\_about, company\_employee\_count, location, region (kraj), employment\_type, workplace\_type, salary in EUR, description, contact\_person, contact\_person\_phone, contact\_email\_type, and apply\_url. Sorted by posted\_at\_datetime descending when sortBy=newest.

# 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": [
        "programator"
    ],
    "includeJobDetails": true,
    "includeCompanyDetails": false,
    "sortBy": "newest",
    "maxResults": 100,
    "maxResultsPerQuery": 100,
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/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 = {
    "searchQueries": ["programator"],
    "includeJobDetails": True,
    "includeCompanyDetails": False,
    "sortBy": "newest",
    "maxResults": 100,
    "maxResultsPerQuery": 100,
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/profesia-sk-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    "programator"
  ],
  "includeJobDetails": true,
  "includeCompanyDetails": false,
  "sortBy": "newest",
  "maxResults": 100,
  "maxResultsPerQuery": 100,
  "maxConcurrency": 5
}' |
apify call santamaria-automations/profesia-sk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,santamaria-automations/profesia-sk-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CFdOag2mF8JJdZki1/builds/C1Lau7qNIVlZXs2wB/openapi.json
