# Jobs.cz Scraper — Czech Vacancies, Salary & Employers (`logiover/jobs-cz-scraper`) Actor

Scrape vacancies from Jobs.cz, the Czech Republic's largest job board: title, hiring company, locality, advertised salary with a sortable numeric floor, employer review count, remote and fast-reply flags and the ad link. Keyless. JSON, CSV or Excel.

- **URL**: https://apify.com/logiover/jobs-cz-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 8 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Jobs.cz Scraper — Czech Vacancies, Salary & Employers

Export vacancies from **Jobs.cz**, the Czech Republic's largest job board — company, locality, advertised salary and employer reviews — to JSON, CSV or Excel. Keyless, no login.

### What does Jobs.cz Scraper do?

Jobs.cz (LMC) renders its search results server-side, so this Actor parses the result cards directly and walks the pagination until your target is met. No API key, no account, no cookies.

The card has one trap that decides output quality: **the salary is not a field**. It is one of the generic chips sitting alongside "possibility of occasional work from home" and "reply within 2 weeks". Read those chips positionally and a benefits blurb lands in the salary column. This Actor identifies the salary chip by its currency (`Kč`, `CZK`, `EUR`) and keeps the remaining chips in a separate `benefitTags` column. The same care applies to the footer, where the employer-rating line ("433 reviews on Atmoskop") sits next to the locality — matched by wording so it never contaminates the location.

Salaries are written with thin-space separators (`45 000 – 51 000 Kč`). The Actor keeps the original label and derives a sortable numeric floor.

### Who is it for?

- **Recruitment agencies** tracking which Czech companies are hiring and where.
- **Salary researchers** building pay benchmarks by role and region.
- **B2B sales teams** using hiring activity as a growth signal.
- **Job boards and aggregators** that need a Czech feed.
- **Market analysts** measuring demand across Prague, Brno and the regions.

### Use cases

- Build a pay benchmark for CNC operators or developers across Czech regions.
- List every company hiring in a locality, with review counts as a quality signal.
- Track how many ads offer remote work, month over month.
- Filter to ads that publish pay and rank them by advertised floor.
- Feed a niche board with fresh Czech listings.

### Why use this Actor?

- **Keyless** — nothing to sign up for.
- **18 structured fields**, with salary, benefits and locality cleanly separated.
- **Sortable salary** — original label plus a numeric floor.
- **Employer review count** pulled from the card's rating line.
- **Remote and fast-reply flags** derived from the chips.
- **Honest columns** — a chip only becomes a salary when it carries a currency.

### What data can you extract?

| Field | Type | Description |
|---|---|---|
| `jobId` | string | Jobs.cz ad ID |
| `title` | string | Job title |
| `jobUrl` | string | Public ad page |
| `companyName` | string | Hiring company |
| `companyLogoUrl` | string | Company logo |
| `locality` | string | City and district |
| `salaryLabel` | string | Salary exactly as advertised |
| `salaryFrom` | number | Numeric floor for sorting |
| `currency` | string | CZK or EUR when a salary is present |
| `employerRatingCount` | number | Number of employer reviews |
| `employerRatingUrl` | string | Link to the employer's review page |
| `remotePossible` | boolean | Work-from-home chip present |
| `fastReply` | boolean | Employer promises a fast reply |
| `benefitTags` | string | All non-salary chips |
| `adStatus` | string | Promo status, e.g. "Opportunity of the day" |
| `country` | string | Czechia |
| `source` | string | Always `jobs_cz` |
| `scrapedAt` | string | Run timestamp (ISO 8601) |

#### Example output

```json
{
  "jobId": "2001322937",
  "title": "Programátor CNC (m/ž)",
  "jobUrl": "https://www.jobs.cz/rpd/2001322937/",
  "companyName": "LAMARK s.r.o.",
  "locality": "Nový Bydžov – Zábědov",
  "salaryLabel": "45 000 – 51 000 Kč",
  "salaryFrom": 45000,
  "currency": "CZK",
  "remotePossible": false,
  "fastReply": true,
  "benefitTags": "Odpověď do 2 týdnů, Odpovězte teď a budete mezi prvními",
  "country": "Czechia",
  "source": "jobs_cz"
}
```

### How to use it

1. Enter a keyword, or leave it empty to walk the full listing.
2. Optionally narrow by locality or switch on remote-friendly only.
3. Use **Only ads with a salary** when building a pay benchmark.
4. Set **Maximum results** and run, then export JSON, CSV or Excel.

### Input example

```json
{
  "query": "programator",
  "withSalaryOnly": true,
  "maxResults": 1000
}
```

### Notes and limits

- Roughly **1 in 3** Czech ads publishes a salary. The rest leave `salaryLabel`, `salaryFrom` and `currency` as `null` — that reflects the ad, not a parsing gap.
- `employerRatingCount` only exists for companies with an Atmoskop profile.
- Jobs.cz renders 30 cards per page; the Actor stops when a page returns fewer, meaning the listing is exhausted.
- Ad text is in Czech because employers write it that way.
- You are responsible for how you use employer data, including under GDPR.

### FAQ

**Do I need a Jobs.cz account?**
No. Listings are public and this Actor needs nothing from you.

**Why is the salary missing on most rows?**
Because most Czech employers do not advertise pay. When they do, it is captured with both the original label and a numeric floor.

**Does it fetch the full job description?**
No. This Actor exports the result cards, which is what keeps bulk runs fast and cheap. Open `jobUrl` for the full text.

**Can I get only remote roles?**
Yes, switch on **Remote-friendly only**.

**How am I charged?**
Pay per result — you pay for the vacancies delivered.

# Actor input Schema

## `query` (type: `string`):

Free-text search across Jobs.cz, e.g. "programator", "ridic" or "accountant". Leave empty to walk the full listing.

## `locality` (type: `string`):

Optional Jobs.cz locality filter, e.g. "Praha" or "Brno".

## `remoteOnly` (type: `boolean`):

Keep only ads Jobs.cz flags as suitable for work from home.

## `withSalaryOnly` (type: `boolean`):

Czech employers publish pay on roughly a third of ads. Switch this on to keep only those.

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

Stop after this many ads. Jobs.cz renders 30 cards per page and the Actor walks pages until the target is met.

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

Jobs.cz serves plain HTML; the default datacenter proxy is enough.

## Actor input object example

```json
{
  "query": "programator",
  "remoteOnly": false,
  "withSalaryOnly": false,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobId` (type: `string`):

No description

## `title` (type: `string`):

No description

## `jobUrl` (type: `string`):

No description

## `companyName` (type: `string`):

No description

## `companyLogoUrl` (type: `string`):

No description

## `locality` (type: `string`):

No description

## `salaryLabel` (type: `string`):

No description

## `salaryFrom` (type: `string`):

No description

## `currency` (type: `string`):

No description

## `employerRatingCount` (type: `string`):

No description

## `employerRatingUrl` (type: `string`):

No description

## `remotePossible` (type: `string`):

No description

## `fastReply` (type: `string`):

No description

## `benefitTags` (type: `string`):

No description

## `adStatus` (type: `string`):

No description

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

No description

## `source` (type: `string`):

No description

## `scrapedAt` (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 = {
    "query": "programator",
    "locality": "",
    "remoteOnly": false,
    "withSalaryOnly": false,
    "maxResults": 500,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/jobs-cz-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 = {
    "query": "programator",
    "locality": "",
    "remoteOnly": False,
    "withSalaryOnly": False,
    "maxResults": 500,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/jobs-cz-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 '{
  "query": "programator",
  "locality": "",
  "remoteOnly": false,
  "withSalaryOnly": false,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/jobs-cz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/jobs-cz-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/Tloh6DAtW6lAk2f59/builds/Jodkn3e4DOfo7H1k7/openapi.json
