# Profesia.sk & .cz Scraper ($1.29/1K): Slovak Jobs & Salaries (`tsutseisoftware/profesia-scraper`) Actor

Scrape Profesia.sk and Profesia.cz jobs: salary in EUR/CZK, company, region and district, remote work, employment type, categories, benefits and requirements. 25+ filters, monitoring of new and removed jobs. Unofficial.

- **URL**: https://apify.com/tsutseisoftware/profesia-scraper.md
- **Developed by:** [Tomáš Buchta](https://apify.com/tsutseisoftware) (community)
- **Categories:** Jobs, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.09 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Profesia.sk & Profesia.cz Scraper: Slovak Jobs & Salaries

Get job listings from **Profesia.sk**, the largest Slovak job board, and from **Profesia.cz** as clean structured data. Search by **keywords**, **towns, districts and regions**, the **website's own filters** (work area, employment type, salary, work from home, posting date, employer type, language skills, language of the ad, graduates, people from Ukraine) or paste any Profesia search URL. For each job you get the title, company, place of work with its **region (kraj) and district (okres)**, **salary in EUR or CZK** (with monthly and hourly equivalents), work arrangement (on site, hybrid, remote), posting date and the website's labels (apply without a CV, accommodation, transport, ends soon). Optionally the actor opens each job page and adds the **description** (with e-mails and phone numbers removed), employment and contract types, **categories and positions**, benefits, required education, languages, skills, driving licence, years of experience, start date, **base salary**, company size and description and the end of publication.

Built for **watching the Slovak job market**: schedule it daily in monitoring mode and you get, and pay for, only jobs that are new or changed, plus, if you want, the jobs that **disappeared**, checked on the job page (ad ended or no longer matching the search) with the number of days they were online. Every run also saves a free **market summary** (salary median and quartiles by region and category, top employers, remote share).

The output has the same fields and values as our **Jobs.cz** and **Prace.cz** scrapers, so Slovak and Czech job data can go into one table.

### Why use this Profesia scraper?

- 🔎 **More website filters than any other Profesia scraper,** applied by the website itself (filtered-out jobs cost nothing): 37 work areas, 8 regions and **all 79 districts**, employment type (full-time, part-time, brigáda/dohoda, živnosť, internship), minimum monthly or hourly salary, work from home, posted in the last 1/2/7/31 days, direct employers / agencies / TOP employers, 11 language skills, the language of the ad, graduates and people from Ukraine.
- 🧮 **Plus filters the website doesn't have:** only with a salary, salary up to, title must (not) contain, company include/exclude, only "apply without a CV", only with accommodation or transport, exclude jobs with travelling.
- 🗺️ **Region and district for almost every job,** worked out from the place of work with the full list of 2 890 Slovak municipalities (and the official Czech list for Profesia.cz), including Bratislava and Košice boroughs ("Petržalka" → Bratislava), without extra requests.
- 💰 **Salaries you can compute with.** Slovak ads must show a salary, so almost every job has `salaryMin` (and `salaryMax` for ranges), currency and period as numbers, monthly and hourly equivalents, the text as shown and, with details, the **base salary** (základná zložka mzdy).
- 📬 **Monitoring mode:** a daily feed of new and changed jobs (`changeType`), optionally with **removed jobs** whose job page was checked: `removedReason` `expired` (the ad ended) or `noLongerMatches`, with `daysOnline`.
- ⚡ **Fast and cheap:** one request gives 20 jobs, pages of a search are read in parallel, and only the part of each page with data is downloaded. Big searches (over the website's 10 000 limit, e.g. all of Slovakia) are read region by region automatically.
- 🔒 **Privacy first.** Recruiter contacts only if you turn them on (off by default); e-mails and phone numbers inside descriptions are replaced with `[e-mail removed]` / `[phone removed]`; employers that are private persons are never named.
- 🇸🇰🇨🇿 **Both countries in one actor:** Profesia.sk and Profesia.cz (switch **Website**); URLs of both sites always work.

### What data can you get?

| Field | Example |
|---|---|
| Title, company, company ID | Automechanik/automechanička, AUTO-ŠENY s.r.o., 127542 |
| Location, district, region | Malacky, Malacky, Bratislavský kraj |
| Street, city part | Priemyselná 5353; Petržalka |
| Work arrangement, travelling | onsite / hybrid / remote, travelRequired |
| Salary | 1 400 – 1 800 EUR per month (monthly 1 400 – 1 800, hourly 8.75 – 11.25), "1 400 - 1 800 EUR/mesiac" |
| Labels | applyWithoutCv, accommodationProvided, transportProvided, expiringSoon, suitableFor `refugees` |
| Posted, refreshed | 2026-10-19, 2026-10-19T09:41Z |
| With **Add description and details** | description, employmentType, contractTypes, categories, professions, benefits, education, field of study, languages, skills, driving licence, years of experience, start date, base salary, company size and description, valid through, apply URL, ad language |
| With **Monitoring: include removed jobs** | changeType `removed` with removedReason, removedAt, firstSeenAt, lastSeenAt, daysOnline; `reappeared` |

See the **Output** tab for all fields. The dataset has views for **Overview**, **Salaries**, **Places**, **Details**, **Companies**, **Labels**, **Monitoring** and **Removed jobs**.

### How to scrape Profesia.sk

1. Enter **Search queries** (e.g. `python`, `skladník`) and pick **Regions** or **Districts**, type **Locations** (e.g. `bratislava`, `kosice`, `okres-malacky`), or paste Profesia URLs into **Profesia URLs**: set your search and filters on the website and copy the URL, e.g. `https://www.profesia.sk/praca/bratislavsky-kraj/?search_anywhere=python`.
2. Optionally set website filters (work area, employment type, salary, work from home…) and actor filters.
3. Turn on **Add description and details** if you need the description, employment type, categories and requirements.
4. Set **Max jobs** and click **Start**. Download the results as JSON, CSV or Excel, or connect them to Google Sheets, Slack or Make.

### Use cases

#### New Python jobs in Bratislava every morning

Schedule a daily run in monitoring mode; each run returns only new or changed jobs (and those that disappeared).

```json
{
  "searchQueries": ["python", "data engineer"],
  "districts": ["bratislava"],
  "maxItems": 0,
  "onlyNewOrChanged": true,
  "includeRemovedJobs": true,
  "monitoringKey": "python-bratislava"
}
```

#### Salary research for a region and work area

```json
{
  "regions": ["kosicky-kraj"],
  "categories": ["informacne-technologie", "elektrotechnika-a-energetika"],
  "includeDetails": true,
  "maxItems": 1000
}
```

The free `SUMMARY` record has the salary median and quartiles overall, by region and by category.

#### Side jobs (brigády) with accommodation for people from Ukraine

```json
{
  "jobTypes": ["temporary"],
  "suitableFor": ["refugees"],
  "onlyWithAccommodation": true,
  "maxItems": 200
}
```

#### Remote jobs in English from direct employers, at least 2 500 EUR

```json
{
  "workArrangement": ["remote"],
  "adLanguage": "en",
  "employerType": "directEmployer",
  "minSalary": 2500,
  "maxItems": 300
}
```

#### The whole job market of Slovakia

```json
{
  "maxItems": 0,
  "fastMode": true
}
```

With no search at all the actor reads every job on Profesia.sk (about 13 000). The website shows at most 10 000 jobs per search, so the actor reads it region by region (plus abroad, the whole country and remote jobs) and removes duplicates.

#### Czech jobs on Profesia.cz

```json
{
  "country": "cz",
  "regions": ["praha", "jihomoravsky-kraj"],
  "includeDetails": true,
  "maxItems": 200
}
```

#### Website filters (applied by Profesia)

| Input | Website filter |
|---|---|
| Categories (work area) | pracovná oblasť, 37 areas |
| Regions, Districts, Locations | kraj, okres, town (one search each) |
| Employment type | plný úväzok, skrátený úväzok, na dohodu (brigády), živnosť, internship |
| Work from home / remote | iba na pracovisku, čiastočne z domu, iba z domu |
| Salary from + Salary period | od X EUR/mesiac or EUR/hod. |
| Posted in the last N days | 1 day, 2 days, 1 week, 1 month |
| Employer type | zamestnávatelia, personálne agentúry, TOP klienti |
| Language skills | Slovak, Czech, English, German, Hungarian, Polish, Ukrainian, Russian, French, Italian, Spanish |
| Language of the ad | Slovak, Czech, English, German, Hungarian |
| Suitable for | absolventi, people from Ukraine |

#### Filters (applied by the actor, you don't pay for filtered-out jobs)

Only jobs with a salary, Salary up to, Title must contain, Title must not contain, Company, Exclude companies, Only "apply without a CV", Only with accommodation, Only with transport, Exclude jobs with travelling.

#### Region and district

The region and district come from the place of work: the actor looks the town up in the list of all Slovak municipalities (Wikidata, CC0) and, on Profesia.cz, in the official Czech list. Boroughs of Bratislava and Košice are recognized ("Ružinov" → Bratislava). With details, the places as the job page lists them are used. Jobs for "the whole of Slovakia", abroad or from home have no region. The website (and this actor) treats **Bratislava (I–V)** and **Košice (I–IV)** as one district each.

#### Monitoring mode explained

With **Monitoring: only new or changed jobs** the actor remembers the jobs of the previous run with the same **Monitoring key** and saves only jobs that are new (`changeType: new`) or whose title, company, salary, place or work arrangement changed (`updated`, with `changedFields`). Unchanged jobs are free. With **Monitoring: include removed jobs**, jobs of the previous run that are no longer in the search are checked on their job page and returned as `removed` with `removedReason` `expired` (the ad ended) or `noLongerMatches` (the ad is live but left the search, e.g. its salary changed). When a removed job comes back it is returned as `reappeared`. Removed jobs are only checked when the run read every search completely.

#### Market summary (SUMMARY)

Every run saves a free JSON record `SUMMARY` in the key-value store: number of jobs, salary median and quartiles (in the site's currency) overall, by region and by category, top 20 employers, the share of on-site/hybrid/remote jobs, employment types and regions.

#### Recruiter contacts and privacy (optional, personal data)

Off by default. With **Include recruiter contacts** (needs **Add description and details**) the actor adds `recruiterName`, `recruiterPhone` and, when shown, `recruiterEmail` from the job page's "Kontakt" block. These are personal data and you are the data controller (GDPR): use them only to contact the person about that job ad, inform them at the latest at the first contact (Art. 14 GDPR), respect objections and delete them when no longer needed. Unsolicited marketing e-mails, SMS and calls are illegal in Slovakia and Czechia. Contacts are never returned for private employers, and descriptions always have e-mails and phone numbers removed. To object to the processing of your data, open an issue in the actor's **Issues** tab or write to Apify (privacy@apify.com).

#### Fast mode (optional, small extra charge)

Up to 240 requests per minute and 8 at a time instead of 90 and 4. When the website answers "too many requests", shows a challenge or slows down, the run switches back to the normal speed for the rest of the run.

### How much does it cost to scrape Profesia.sk?

This actor uses pay-per-event pricing: you pay for each job saved in the dataset, the same price with or without details (see the **Pricing** tab). The residential proxy that Profesia requires is included in the price. Filtered-out jobs, unchanged jobs in monitoring mode and the market summary are free. You can set a maximum cost per run; the actor stops when it is reached.

### Input example

```json
{
  "searchQueries": ["python"],
  "districts": ["bratislava", "kosice"],
  "includeDetails": true,
  "maxItems": 100
}
```

### Output example

```json
{
  "id": "profesia:5377689",
  "source": "profesia.sk",
  "url": "https://www.profesia.sk/praca/auto-seny/O5377689",
  "jobId": "5377689",
  "title": "Automechanik/automechanička",
  "company": "AUTO-ŠENY s.r.o.",
  "companyId": "127542",
  "location": "Malacky",
  "locations": ["Malacky"],
  "region": "Bratislavský kraj",
  "district": "Malacky",
  "streetAddress": "Priemyselná 5353",
  "workArrangement": "onsite",
  "remote": false,
  "salaryMin": 1400,
  "salaryMax": 1800,
  "salaryCurrency": "EUR",
  "salaryPeriod": "month",
  "salaryMonthlyMin": 1400,
  "salaryMonthlyMax": 1800,
  "salaryHourlyMin": 8.75,
  "salaryHourlyMax": 11.25,
  "employmentType": ["fullTime"],
  "contractTypes": ["employee"],
  "education": "stredoškolské bez maturity",
  "languagesRequired": [],
  "language": "sk",
  "categories": ["Automobilový priemysel"],
  "professions": ["Automechanik/automechanička"],
  "benefits": ["Koncoročné odmeny za prácu", "Práca v modernom servise", "Školenia a odborný rast"],
  "postedAt": "2026-10-19",
  "validThrough": "2026-11-19",
  "companyEmployeeRange": "10-19",
  "description": "Informácie o pracovnom mieste\n\nNáplň práce, právomoci a zodpovednosti\n\n- Diagnostikujete a opravujete poruchy…",
  "detailScraped": true,
  "country": "SK",
  "salaryText": "1 400 - 1 800 EUR/mesiac",
  "baseSalary": 1400,
  "applyWithoutCv": false,
  "startDate": "ihneď",
  "experienceYears": 2,
  "drivingLicense": ["B"],
  "educationField": "automechanik",
  "companyDescription": "Autorizovaný predaj a servis značky PEUGEOT a SUZUKI.",
  "scrapedAt": "2026-10-19T10:00:00Z"
}
```

### Limitations

- Profesia shows at most 500 pages (10 000 jobs) per search. Searches without a place are read region by region automatically; a single region never comes close to the limit.
- The list shows no employment type, categories or education: they need **Add description and details** (one more request per job).
- `isAgency` is known only with the **Employer type** filter.
- Profesia (AWS WAF) lets in only residential IP addresses from Slovakia or Czechia. The default proxy (Apify Proxy, RESIDENTIAL, SK) is included in the price; datacenter proxies and runs without a proxy end with "rejecting requests".
- Ads with the employer's own page design have fewer details (no labelled sections); their description is still returned.

### For AI agents and API users

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("tsutseisoftware/profesia-scraper").call(run_input={
    "searchQueries": ["python"], "regions": ["bratislavsky-kraj"], "maxItems": 100,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["company"], job["salaryMin"], job["salaryCurrency"])
```

### Troubleshooting

- **"rejecting requests (AWS WAF)"**: keep the default **Proxy configuration** (Apify Proxy, RESIDENTIAL, country SK or CZ).
- **"Location not found"**: type the place as in the website URL (`bratislava`, `okres-malacky`, `kosicky-kraj`) or pick it in **Regions** / **Districts**.
- **Fewer jobs than expected**: check the filters summary in the status message ("filtered out: …") and **Max jobs per search** / **Max pages per search**.

### FAQ

#### Is it legal to scrape Profesia.sk?

The actor reads only data that Profesia publishes for everyone without logging in, at a moderate speed. Recruiter contacts are off by default, e-mails and phone numbers in descriptions are removed, and private persons who advertise are never named. You are responsible for how you use the data (GDPR, database rights and the website's terms); if in doubt, consult a lawyer. This actor is not affiliated with Profesia or Alma Career.

#### Does it scrape Profesia.cz too?

Yes. Set **Website** to Profesia.cz, or paste Profesia.cz URLs. Both sites share job IDs, so the same ad has the same `id` on both.

#### How are region and district determined?

From the place of work and the list of Slovak (or Czech) municipalities; with details from the places the job page lists. See [Region and district](#region-and-district).

#### Do I need a proxy?

Yes, a residential one: the default setting already uses it and its cost is included in the price.

#### Can I get recruiters' e-mails or phone numbers?

Only with **Include recruiter contacts** (off by default) and only as the job page shows them. Profesia almost never shows an e-mail: applications go through its form.

***

Also known as a Profesia API, Profesia.sk job scraper, "ponuky práce Profesia export" or "Profesia pracovné ponuky do Excelu".

# Actor input Schema

## `country` (type: `string`):

Which site the searches below read. Start URLs and job URLs of either site always work. Both sites are the same job board (Alma Career), so the results have the same fields.

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

Search or listing URLs from Profesia.sk or Profesia.cz, e.g. https://www.profesia.sk/praca/bratislavsky-kraj/?search_anywhere=python (set the search and filters on the website and paste the URL), company offer lists (https://www.profesia.sk/praca/<company>/C<id>) or job URLs (https://www.profesia.sk/praca/<company>/O<id>). Website filters below are added to these URLs too, unless the URL already sets them.

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

Keywords to search for, e.g. "python", "skladník", "účtovník". Each query is a separate search (combined with the places and website filters). At most 20.

## `locations` (type: `array`):

Towns, districts or regions as in the website URL or as their name, one search each, e.g. "bratislava", "kosice", "malacky", "okres-malacky", "zilinsky-kraj", "zahranicie" (abroad); on Profesia.cz e.g. "praha", "brno", "okres-pisek". A place the website doesn't know is reported, not replaced by the whole country.

## `regions` (type: `array`):

Regions (kraj) to search, one search each, applied by the website (you pay and wait only for those jobs). Slovak regions work with Profesia.sk, Czech ones with Profesia.cz.

## `districts` (type: `array`):

Slovak districts (okres), one search each, applied by the website. The website treats Bratislava (Bratislava I–V) and Košice (Košice I–IV) as one place each; Košice-okolie is read from the Košice region and filtered by the district of each job. Profesia.sk only.

## `jobIds` (type: `array`):

Profesia job IDs (the number after "O" at the end of a job URL, e.g. 5377689) to read one by one with all details. At most 2000.

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

Maximum number of jobs saved. You pay per saved job. 0 = no limit.

## `maxItemsPerStartUrl` (type: `integer`):

Limit for each search or URL separately, so one large search doesn't use up the whole Max jobs. 0 = no limit.

## `includeDetails` (type: `boolean`):

Open each job page to add the description (e-mails and phone numbers removed), employment and contract types, categories, positions, benefits, required education, languages, skills, driving licence, years of experience, start date, base salary, company size and description, publication end and the apply link. One extra request per job (only the needed part of the page is downloaded).

## `descriptionMaxLength` (type: `integer`):

With "Add description and details": shorten the description to about this many characters (e.g. 300 for a snippet). 0 = full text.

## `categories` (type: `array`):

Only jobs in at least one of these work areas (pracovná oblasť), applied by the website.

## `jobTypes` (type: `array`):

Only these employment types. Several values = any of them.

## `workArrangement` (type: `array`):

Only jobs with this place of work. One value is applied by the website; with several values the actor checks each job.

## `minSalary` (type: `integer`):

Only jobs offering at least this salary in the site's currency (EUR on Profesia.sk, CZK on Profesia.cz) per "Salary period", e.g. 1500 per month or 8 per hour. Applied by the website.

## `salaryPeriod` (type: `string`):

The period of "Salary from" and "Salary up to".

## `postedWithinDays` (type: `integer`):

Only jobs posted in the last N days. 1, 2, 7 and 31 days are applied by the website; for other values the website gives the next longer period and the actor checks the posting date. 0 = any time.

## `employerType` (type: `string`):

Direct employers or recruitment agencies only. Sets isAgency in the results.

## `languages` (type: `array`):

Only jobs that ask for one of these languages.

## `adLanguage` (type: `string`):

Only ads written in this language, e.g. English for jobs open to foreigners.

## `suitableFor` (type: `array`):

Only jobs the employer marked as suitable for these groups.

## `onlyWithSalary` (type: `boolean`):

Skip jobs that show no salary.

## `maxSalary` (type: `integer`):

Skip jobs whose salary starts above this amount (per "Salary period"), e.g. to find entry-level jobs. Jobs without a salary are kept.

## `titleKeywords` (type: `array`):

Keep only jobs whose title contains at least one of these words (case and diacritics don't matter).

## `excludeKeywords` (type: `array`):

Skip jobs whose title contains any of these words, e.g. "senior", "brigáda".

## `companies` (type: `array`):

Keep only jobs of companies whose name contains one of these texts.

## `excludeCompanies` (type: `array`):

Skip jobs of companies whose name contains any of these texts.

## `onlyApplyWithoutCv` (type: `boolean`):

Only jobs where you can respond without a CV (Reagujte bez životopisu).

## `onlyWithAccommodation` (type: `boolean`):

Only jobs labelled "accommodation provided" (zabezpečené ubytovanie).

## `onlyWithTransport` (type: `boolean`):

Only jobs labelled "transport provided" (zabezpečená doprava).

## `excludeTravel` (type: `boolean`):

Skip jobs whose place says that the work requires travelling (práca vyžaduje cestovanie).

## `includeRecruiterContacts` (type: `boolean`):

Off by default. Adds recruiterName, recruiterPhone and recruiterEmail exactly as the job page shows them in its "Kontakt" block (the site almost never shows an e-mail: applications go through its form). Needs "Add description and details". Never for private employers; nothing is guessed or looked up elsewhere, and e-mails and phones in descriptions stay removed. These are personal data and YOU are the data controller (GDPR): use them only to contact the person about that specific job ad, inform them (Art. 14 GDPR) at the latest when you first contact them, respect objections and delete the data when no longer needed. Unsolicited marketing e-mails, SMS and calls are illegal in Slovakia and Czechia. Don't use the contacts for marketing, don't resell them and don't build contact databases. No extra charge.

## `onlyNewOrChanged` (type: `boolean`):

Return only jobs that are new or whose title, company, salary, place or work arrangement changed since the previous run with the same Monitoring key. Unchanged jobs are free.

## `monitoringKey` (type: `string`):

Name of the saved state. Use a different key for each watched search (e.g. "python-bratislava").

## `includeRemovedJobs` (type: `boolean`):

With "Monitoring: only new or changed jobs": also return jobs of the previous run that are no longer in the search, as rows with changeType "removed" and removedReason "expired" (the ad ended) or "noLongerMatches" (the ad is live but no longer matches the search), checked on the job page. Checked only when the run reads every search completely (limits, unread pages or rejected requests skip the check, and the status message says why). Removed rows are charged like any other job.

## `fastMode` (type: `boolean`):

Reads up to 2.7x faster: at most 240 requests per minute and 8 at a time instead of 90 and 4. It stays polite: the moment the website answers "too many requests", shows a challenge or slows down, the run switches back to the normal speed for the rest of the run, and it never changes IP address to get around a limit. Extra charge "Fast mode" (see the Pricing tab) only for jobs saved while the fast speed was on.

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

Order of the website's search results (matters with Max jobs). Profesia URLs keep their own order.

## `maxPages` (type: `integer`):

Safety limit for each search or URL (20 jobs per page). The website shows at most 500 pages (10 000 jobs) per search; bigger searches without a place are read region by region automatically. 0 = no limit.

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

Profesia (AWS WAF) lets in only residential IP addresses from Slovakia or Czechia; datacenter IPs and runs without a proxy get a challenge page. Keep the default (Apify Proxy, RESIDENTIAL, SK; CZ works too). The residential traffic is included in the price.

## Actor input object example

```json
{
  "country": "sk",
  "searchQueries": [
    "python"
  ],
  "maxItems": 20,
  "maxItemsPerStartUrl": 0,
  "includeDetails": false,
  "descriptionMaxLength": 0,
  "salaryPeriod": "month",
  "employerType": "any",
  "adLanguage": "any",
  "onlyWithSalary": false,
  "onlyApplyWithoutCv": false,
  "onlyWithAccommodation": false,
  "onlyWithTransport": false,
  "excludeTravel": false,
  "includeRecruiterContacts": false,
  "onlyNewOrChanged": false,
  "monitoringKey": "default",
  "includeRemovedJobs": false,
  "fastMode": false,
  "sortBy": "newest",
  "maxPages": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SK"
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `summary` (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 = {
    "country": "sk",
    "searchQueries": [
        "python"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "SK"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tsutseisoftware/profesia-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 = {
    "country": "sk",
    "searchQueries": ["python"],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "SK",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tsutseisoftware/profesia-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 '{
  "country": "sk",
  "searchQueries": [
    "python"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SK"
  }
}' |
apify call tsutseisoftware/profesia-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tsutseisoftware/profesia-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/qw4VBcfl0J0sDaHdP/builds/TUabgUVNOCYZxS62V/openapi.json
