# Pracezarohem.cz Scraper ($2.39/1K): Czech Jobs, Salary & GPS (`tsutseisoftware/pracezarohem-scraper`) Actor

Scrape Práce za rohem (Pracezarohem.cz) jobs with salary, GPS, region and the portal each ad comes from. Distance search, own-ads filter, monitoring, ARES. Unofficial.

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

## Pricing

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

## Pracezarohem.cz Scraper: Czech Jobs, Salary, GPS & Source

Get job listings from **Práce za rohem** (Pracezarohem.cz), the Czech "work around the corner" job board, as clean structured data. Search by **keywords or professions**, **towns, districts and regions**, **distance from a town** and the **website's own filters** (employment type, education, minimum monthly or hourly salary), or paste any Pracezarohem.cz search URL. For every job you get the title, company, place of work with **region (kraj), district (okres), street address and GPS**, the **salary as shown** with numbers and monthly and hourly equivalents, posting and expiry dates, Atmoskop employer rating and, unique to this actor, **where the ad comes from** (`sourcePortal`).

**Where do the ads come from?** Práce za rohem shows ads from several sources, and the job ID says which: most come from the Alma Career job system behind **Jobs.cz and Prace.cz** (same operator), a large part are vacancies of **Úřad práce ČR** (the Czech labour office), a few come from **Profesia.cz**, and only about 1 to 3 % are ads placed on **Práce za rohem itself**. Every row has `sourcePortal`, the market summary counts the sources, and the filter **Only Práce za rohem's own ads** returns only those. If you need only Jobs.cz / Prace.cz ads, our Jobs.cz and Prace.cz scrapers give you more fields for them.

> **Česky:** Scraper nabídek práce z **Práce za rohem** (pracezarohem.cz): mzda, firma, GPS a hledání podle vzdálenosti, filtry webu a u každé nabídky portál, odkud pochází (Jobs.cz/Prace.cz, Úřad práce, Profesia, vlastní). Monitoring a volitelně údaje z ARES. Výstup do Excelu, CSV nebo JSON. Podporu poskytujeme i česky.

### Why use this Pracezarohem.cz scraper?

- 🧭 **Source of every ad** (`sourcePortal`: `jobs.cz/prace.cz`, `uradprace.cz`, `profesia.cz`, `pracezarohem.cz`) and a filter for **Práce za rohem's own ads** only. Useful to de-duplicate against other job boards, or to find the ads you can't get anywhere else.
- 📍 **GPS and street address for almost every job**, already in the list (no extra request), plus **region and district** from the official list of Czech municipalities.
- 🎯 **Distance search:** "jobs within 15 km of Kladno" with `distanceKm` for each job. The website's own distance search works only in its mobile app; the actor measures the straight-line distance from the GPS position of each job.
- 🗺️ **Whole country without the page limit:** the website shows at most 101 pages (5 050 jobs) per search; bigger searches are read region by region automatically.
- 💰 **Salaries you can compute with:** `salaryMin`, `salaryMax`, currency and period as numbers, monthly and hourly equivalents, and `salaryText` exactly as the site writes it. About two thirds of the ads show a salary (labour office and own ads almost always).
- 🔒 **Privacy first:** the recruiter's name, e-mail and phone that the job page shows are **never** returned; e-mails, phone numbers and the recruiter's name are removed from descriptions; employers that are private persons are returned without their name, address and GPS.
- 📬 **Monitoring mode:** a daily feed of new and changed jobs, optionally with **removed jobs** (`removedAt`, `daysOnline`).
- 📊 **Free market summary** after every run (`SUMMARY`): salary median and quartiles by region and profession, top employers, employment types, regions and sources of the ads.
- 🏢 **Company data from ARES** (optional, extra charge): IČO, legal form, registered office, employee count range, main activity.
- ⚡ **Fast and light:** one request gives 50 jobs. No browser, no proxy needed. Optional fast mode.

### What data can you get?

| Field | Example |
|---|---|
| Title, company, agency flag | Pracovník call centra, Project Prague Solutions, false |
| Ad comes from (`sourcePortal`), job ID | pracezarohem.cz, PZR-386856 |
| Location, district, region | Praha-Krč, Praha, Hlavní město Praha |
| Address, GPS | Olbrachtova, Praha; 50.044914, 14.447853 |
| Distance (with **Distance from the location**) | 3.2 km |
| Salary | "40 000 - 80 000 Kč": 40 000 – 80 000 CZK per month, hourly 250 – 500 |
| Posted, valid until | 2026-11-06, 2026-12-06 |
| Atmoskop | rating 4.8, 50 reviews, 95 % satisfied, profile URL |
| With **Add description and details** | description, employment type, contract types (HPP, IČO, DPP/DPČ), education, languages, suitable for, professions, benefits, start date ("Ihned"), full address, company website |
| With **Add company data from ARES** | IČO, legal form, registered office, employees, CZ-NACE, founding date |
| With **Monitoring: include removed jobs** | changeType `removed` (removedAt, firstSeenAt, lastSeenAt, daysOnline) and `reappeared` |

See the **Output** tab for all fields. The dataset has views **Overview**, **Where ads come from**, **Salaries**, **Map and distance**, **Companies**, **Details**, **Monitoring** and **Removed jobs**.

### How to scrape Pracezarohem.cz

1. Enter **Search queries** (e.g. `skladník`, `řidič`, `python`; professions from the website work too) and **Locations** (e.g. `Brno`, `Praha`, `okres Kladno`, `Jihomoravský kraj`) or **Regions**, or paste URLs into **Pracezarohem.cz URLs**: set your search on the website and copy the URL, e.g. `https://www.pracezarohem.cz/nabidky/jihomoravsky/brno-mesto/skladnik`. With nothing entered, the actor reads all jobs of the country.
2. Optionally choose filters, set **Max jobs**, and turn on **Add description and details** or **Add company data from ARES** if you need them.
3. Click **Start** and download the results as JSON, CSV or Excel, or use the API. The market summary is in the **Storage → Key-value store** tab as `SUMMARY` (and in the **Output** tab).

### Use cases

#### Warehouse jobs within 15 km of Kladno

```json
{
  "searchQueries": ["skladník"],
  "locations": ["obec Kladno"],
  "radiusKm": 15,
  "maxItems": 100
}
```

Every job has `distanceKm`. The actor reads Central Bohemia and Prague (Prague lies inside Central Bohemia) and keeps the jobs within the circle.

#### Only Práce za rohem's own ads in a region

```json
{
  "regions": ["jihomoravsky"],
  "onlyOwnOffers": true,
  "maxItems": 0
}
```

The ads placed directly on Práce za rohem, not available on Jobs.cz, Prace.cz or the labour office. The actor reads the whole search to find them; you pay only for the saved ones.

#### New temporary jobs (brigády) every morning

```json
{
  "jobTypes": ["temporary"],
  "regions": ["hlavni-mesto-praha"],
  "minHourlySalary": 180,
  "onlyNewOrChanged": true,
  "includeRemovedJobs": true,
  "maxItems": 0
}
```

Schedule it daily: you get, and pay for, only new and changed jobs, plus the ones that disappeared since the last run. Unchanged jobs are free.

#### Salary map of a profession

```json
{
  "searchQueries": ["řidič"],
  "onlyWithSalary": true,
  "maxItems": 0
}
```

Rows have GPS, region, district and monthly / hourly salary numbers; `SUMMARY` has the median and quartiles by region.

#### Website filters (applied by Pracezarohem.cz, free)

| Input | Values |
|---|---|
| Employment type | full-time, part-time, temporary job (brigáda) |
| Education | elementary, apprenticeship, secondary with maturita, university ("jobs open to people with this education") |
| Salary from (CZK per month) / (CZK per hour) | one of them; the website also counts jobs whose employer hides a salary that meets it |

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

**Only Práce za rohem's own ads**, **Employer type** (direct employer or agency, as the website marks it), **Only jobs with a salary**, **Posted in the last N days**, **Distance from the location**, **Title must contain / must not contain**, **Company / Exclude companies**, and with details **Contract type** (pracovní smlouva, živnostenský list / IČO, DPP / DPČ). With **Contract type**, the actor reads more job pages until it has **Max jobs** matching ones.

#### Monitoring mode explained

With **Monitoring: only new or changed jobs**, the actor keeps the last state of every job under your **Monitoring key** (in a named key-value store in your account) and saves only jobs that are new or whose title, company, salary, place or agency flag changed (`changeType` `new` or `updated`, `changedFields`). With **Monitoring: include removed jobs**, jobs that are no longer in the search are saved once as `removed`, with the last known values, `removedAt`, `firstSeenAt`, `lastSeenAt` and `daysOnline`; a removed job that comes back is saved as `reappeared`. Removed jobs are checked only after a run that read the whole search (the status message says why when not).

#### Market summary (SUMMARY)

Free, at the end of every successful run: number of jobs, share with a salary, monthly salary median and quartiles (overall, by region and by profession; groups of at least 5 jobs), top 20 employers, agencies, employment types, regions and `sourcePortals` (how many saved ads come from each source).

#### Company data from ARES (optional, extra charge)

With **Add company data from ARES**, the actor looks up the employer in ARES, the public register of economic subjects of the Czech Ministry of Finance, by the exact company name including its legal form, and adds `companyIco`, `companyLegalForm`, `companyAddress`, `companyEmployeeRange`, `companyNace` and `companyFoundedAt`. Recruitment agencies and private persons are never looked up; a name that ARES says is a natural person is hidden. Company data are cached for 30 days in your account. Off by default: then ARES is never contacted.

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

At most 120 requests per minute and 4 at a time instead of 30 and 2. The run switches back to the normal speed on the first "too many requests", "service unavailable", challenge or slow-down, waits when the website asks and never changes IP address.

### How much does it cost to scrape Pracezarohem.cz?

Pay per result, see the **Pricing** tab for the current prices and discounts for higher Apify plans:

| What | Price |
|---|---|
| Job (every saved row, including removed jobs in monitoring mode) | **$2.39 per 1 000 jobs** ($2.35 Bronze, $2.29 Silver, $2.25 Gold and higher Apify plans) |
| Description and details | no extra charge |
| **+ Company info** (only jobs that got company data from ARES) | **+$1.00 per 1 000 jobs** |
| **+ Fast mode** (only jobs saved while the optional fast mode was on) | **+$0.01 per 1 000 jobs** |
| **Monitoring: listing page checked** (only with **Monitoring: only new or changed jobs**) | **$0.10 per 1 000 listing pages** (one page = up to 50 jobs; a search of 1 page costs $0.0001 per run) |
| Filtered-out jobs, unchanged jobs in monitoring mode, the `SUMMARY` record | free |

Example: daily monitoring of one search (2 pages) with 5 new jobs costs 5 × $0.00239 + 2 × $0.0001 ≈ $0.012 a day. Monitoring all own ads of the whole country (~430 pages) with 10 changes costs ≈ $0.067 a day.

There is also a tiny start fee of $0.00005 per run.

Platform usage is included; no proxy is needed. The actor makes at most 2 requests at a time and 30 per minute, to keep the load on the website low. Typical runs:

| Scenario | Requests to Pracezarohem.cz | Typical time |
|---|---|---|
| 20 jobs from a search | 1 | a few seconds |
| 1 000 jobs from searches | ~20 | ~1 minute |
| 100 jobs with description and details | ~102 | ~3–4 minutes |
| Distance search around a town | the town's page + its region (8–85 pages; Prague and Central Bohemia together ~146) | 1–5 minutes |
| All own ads of the whole country | ~430 listing pages | ~15 minutes |

### Input example

```json
{
  "searchQueries": ["skladník"],
  "locations": ["Brno"],
  "maxItems": 100,
  "jobTypes": ["fullTime"],
  "includeDetails": false
}
```

### Output example

```json
{
  "id": "pracezarohem:PZR-386856",
  "source": "pracezarohem.cz",
  "url": "https://www.pracezarohem.cz/dl/jd/PZR-386856",
  "jobId": "PZR-386856",
  "sourcePortal": "pracezarohem.cz",
  "title": "Pracovník call centra",
  "company": "Project Prague Solutions",
  "isAgency": false,
  "location": "Praha-Krč",
  "locations": ["Praha-Krč"],
  "region": "Hlavní město Praha",
  "district": "Praha",
  "regions": ["Hlavní město Praha"],
  "address": "Olbrachtova, Praha",
  "gpsLat": 50.044914,
  "gpsLon": 14.447853,
  "distanceKm": null,
  "salaryText": "40 000 - 80 000 Kč hrubého",
  "salaryMin": 40000,
  "salaryMax": 80000,
  "salaryCurrency": "CZK",
  "salaryPeriod": "month",
  "salaryMonthlyMin": 40000,
  "salaryMonthlyMax": 80000,
  "salaryHourlyMin": 250.0,
  "salaryHourlyMax": 500.0,
  "employmentType": ["fullTime"],
  "contractTypes": ["workAgreement", "freelance", "employee"],
  "education": "Vzdělání není podstatné",
  "languagesRequired": [],
  "language": "cs",
  "suitableFor": ["graduates", "noExperience", "disabled"],
  "professions": ["Administrativní pracovník", "Marketingový výzkum", "Pracovník call centra"],
  "benefits": [],
  "postedAt": "2026-11-06T10:39:20Z",
  "validThrough": "2036-11-06T10:39:47Z",
  "startDate": null,
  "isPromoted": false,
  "atmoskopUrl": null,
  "atmoskopReviewCount": null,
  "atmoskopRating": null,
  "atmoskopSatisfactionPercent": null,
  "companyWebsite": null,
  "companyIco": null,
  "description": "• Ozýváte se klientům z existující databáze…\n\nCo požadujeme\n- Člověka, který rád mluví s lidmi…",
  "detailScraped": true,
  "changeType": null,
  "sourceUrl": "https://www.pracezarohem.cz/nabidky/hlavni-mesto-praha/praha",
  "scrapedAt": "2026-11-06T13:30:00Z"
}
```

(The other ARES and monitoring fields are `null` unless those options are on.)

### Limitations

- **Most ads are also on other websites:** in our samples of November 2026 roughly 55–65 % came from Jobs.cz / Prace.cz, 30–40 % from the labour office (Úřad práce ČR), 2–4 % from Profesia.cz and 1–3 % were Práce za rohem's own. In the website's newest-first order the labour office ads come after the others. Use `sourcePortal` to tell them apart.
- **Distance search** reads the region of the place (Prague together with Central Bohemia) and measures the straight-line distance from the place's centre as the website gives it; jobs across another region's border are not included, and jobs without a GPS position are left out. The website's own distance filter does not work in its web pages, so it isn't used.
- **At most 5 050 jobs per search** on the website: searches without a location that have more are read region by region (and a region over the limit district by district). Jobs that the website has without any location can't be reached this way; the status message gives their number.
- **Region and district** are `null` for about 6 % of the places in our sample (names shared by several municipalities, e.g. "Pavlov", "Říčany", or no place); in a search limited to one region they get that region.
- **Salary:** about two thirds of the ads show one (almost all labour office and own ads, about half of the Jobs.cz / Prace.cz ones). The website's salary filter also counts jobs that hide their salary; turn on **Only jobs with a salary** to keep only those that show it. One-off amounts ("jednorázově") have no period and no monthly equivalent.
- **Contract type, education, languages, benefits, description** are on the job page only (**Add description and details**, one request per job).
- **Recruiter contacts are never returned.** The job page shows the recruiter's name, e-mail and phone; the actor does not read them into the output and removes them from descriptions. Descriptions are written by employers and may still mention another person's first name; use them for analysis, not for republishing (they can be protected by copyright).
- **Employer names that look like a private person** (e.g. a self-employed tradesperson, many labour office ads) are returned as `null`, together with their address, GPS and Atmoskop profile. In our sample of 1 651 ads (938 employer names), 53 names (58 ads) were hidden, all of them names of persons; no company was hidden.
- **Job URLs given as input** have no `postedAt` (the job page doesn't show it) and no agency flag; **Posted in the last N days** and the distance are not checked for them.
- **Order of results:** the website's newest-first order moves while the actor reads (new ads push the older ones to later pages); jobs seen twice are saved once.
- If the website rejects a request, it is asked once more after 30 seconds from the same IP address and session (never from another IP). If it rejects a few requests in a row even so, the run stops and says so. Jobs whose page couldn't be read are returned with the listing data (`detailScraped: false`).

### For AI agents and API users

- **Minimal input:** `{"searchQueries": ["skladník"], "locations": ["Brno"], "maxItems": 20}`.
- One row = one job = one charge. `includeDetails: true` adds 1 request per job, same price per job. `includeCompanyInfo: true` adds the **Company info** charge only for rows with `companyInfoSource: "ARES"`.
- 50 jobs per listing page. `maxItems` counts saved jobs, `maxItemsPerStartUrl` limits each search or URL.
- Enum values: `sourcePortal` ∈ `jobs.cz/prace.cz`, `uradprace.cz`, `profesia.cz`, `pracezarohem.cz`; `employmentType` ⊂ `fullTime`, `partTime`, `temporary`, `internship`; `contractTypes` ⊂ `employee`, `freelance`, `workAgreement`; `salaryPeriod` ∈ `hour`, `day`, `week`, `month`, `year`; `changeType` ∈ `new`, `updated`, `removed`, `reappeared`; `regions` input ⊂ `hlavni-mesto-praha`, `stredocesky`, `jihocesky`, `plzensky`, `karlovarsky`, `ustecky`, `liberecky`, `kralovehradecky`, `pardubicky`, `vysocina`, `jihomoravsky`, `olomoucky`, `zlinsky`, `moravskoslezsky`.
- Monitoring state is kept per `monitoringKey` between runs of the same user. The market summary is the `SUMMARY` record of the run's default key-value store.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("tsutseisoftware/pracezarohem-scraper").call(run_input={
    "searchQueries": ["skladník"],
    "locations": ["Brno"],
    "maxItems": 100,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["company"], job["sourcePortal"], job["salaryMin"], job["url"])
summary = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("SUMMARY")["value"]
print(summary["sourcePortals"])
```

#### JavaScript

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('tsutseisoftware/pracezarohem-scraper').call({
    searchQueries: ['skladník'], locations: ['Brno'], maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((j) => `${j.title} (${j.company}, ${j.sourcePortal})`));
```

You can also connect the actor to Make, Zapier, n8n, Google Sheets, Slack, e-mail or webhooks and schedule it in Apify Console.

### Troubleshooting

| Status message | What to do |
|---|---|
| `Skipping unsupported URL` | Use a Pracezarohem.cz search URL (`https://www.pracezarohem.cz/nabidky/...`) or a job URL (`https://www.pracezarohem.cz/dl/jd/<id>`). |
| `"Locations": unknown place …` | Write a Czech town, `okres <name>`, a region (e.g. `Jihomoravský kraj`) or the location part of a website URL. |
| `The search page was not found (HTTP 404)` | The website doesn't know the place; open the search on the website and paste its URL instead. |
| `"Distance from the location (km)" needs a place in "Locations"` | Add the town to measure from. |
| `"Contract type" is shown only on the job page …` | Turn on **Add description and details**. |
| `This input makes N searches` | Use fewer locations, regions or search queries (at most 280 searches per run). |
| `Pracezarohem.cz is rejecting requests` | Try again later. |
| `… listing pages could not be read, so the results may be incomplete` | The website didn't answer some pages; run it again later. |
| `the site shows at most 5050 jobs per search` | Split the search by location or keywords. |
| `Saved 0 jobs (new or changed since last run…)` | Nothing changed since the previous monitoring run; that's expected. |
| `removed jobs were not checked because the run did not read the whole search (…)` | Set **Max jobs** to 0 (or high enough), remove **Max jobs per search** and **Max pages per search**, or try again. |
| `company info unavailable for the rest of the run: ARES rate limit` | ARES limited requests; the jobs were saved without company data and without the extra charge. |

### More Czech job scrapers

The same output format for the other Czech job sources (many jobs are published on several of them):

- [Czech Jobs Aggregator](https://apify.com/tsutseisoftware/czech-jobs-aggregator): all these Czech job boards in one run: duplicates merged, one output format, monitoring
- [Jobs.cz Scraper](https://apify.com/tsutseisoftware/jobs-cz-scraper): Czech jobs with salary, region, requirements, monitoring and optional ARES company data
- [Prace.cz Scraper](https://apify.com/tsutseisoftware/prace-cz-scraper): Czech jobs with salary, region, monitoring and optional ARES company data
- [Úřad práce Scraper](https://apify.com/tsutseisoftware/urad-prace-scraper): all Czech Labour Office vacancies (MPSV open data) with salary, profession, shifts and jobs for foreigners
- [JenPráce.cz Scraper](https://apify.com/tsutseisoftware/jenprace-scraper): Czech jobs and side jobs with salary, own ads told apart from Labour Office vacancies
- [StartupJobs.cz Scraper](https://apify.com/tsutseisoftware/startupjobs-scraper): IT and startup jobs with salary, technologies, seniority, remote work, company profiles and an IT market overview
- [Profesia.sk & .cz Scraper](https://apify.com/tsutseisoftware/profesia-scraper): Slovak and Czech jobs from Profesia with salary, region and monitoring
- [Fajn-brigady.cz & INwork.cz Scraper](https://apify.com/tsutseisoftware/fajn-brigady-scraper): Czech temporary and part-time jobs from two websites: hourly wage, town, start date, monitoring
- [GastroJobs.cz Scraper](https://apify.com/tsutseisoftware/gastrojobs-scraper): Czech hotel, restaurant and catering jobs: salary, type of venue, employer company ID, monitoring

### Custom scrapers and changes

Need a custom version of this actor, another field or filter, or a scraper for a different website? Write to **info@tsutsei-software.com** with the website, the data you need and how often, and we will reply with a fixed quote. We work mainly with clients from the Czech Republic and from outside the EU.

More about us and all our actors: [tsutsei-software.com](https://tsutsei-software.com).

### FAQ

#### Is it legal to scrape Pracezarohem.cz?

The actor reads only publicly available job listings, without logging in. It never returns the recruiter contacts the job pages show, removes e-mails, phone numbers and the recruiter's name from descriptions, and does not name employers that look like private persons. It makes 30 requests per minute by default, at most 120 in fast mode, and slows down when the website asks; it never changes IP address to get around a limit and never solves captchas or other challenges. Note that the terms of use of Alma Career, the operator of Práce za rohem, may restrict automated reading and further processing of the website's content. You are responsible for making sure your use of the data complies with those terms and with the law (including data protection and database rights). If unsure, consult a lawyer.

#### Are these the same jobs as on Jobs.cz and Prace.cz?

Many of them, yes: Práce za rohem is run by Alma Career, the operator of Jobs.cz and Prace.cz, and most of its ads come from the same job system (`sourcePortal: "jobs.cz/prace.cz"`). It also shows vacancies of the Czech labour office (`uradprace.cz`), ads from Profesia.cz and its own ads (`pracezarohem.cz`). What you get here on top: GPS for every job in the list, distance search, the labour office ads in the same format, the source of every ad and the own ads filter.

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

No. They are personal data and this actor never returns them.

#### How are region and district determined?

From the place of work in the list, using the official list of Czech municipalities (ČSÚ / RÚIAN open data) built into the actor. No extra requests.

#### Do I need a proxy?

No. Pracezarohem.cz answered every request without a proxy and without a challenge in our tests. You can still use Apify Proxy or your own proxies.

#### Something doesn't work

Open an issue in the **Issues** tab and include the input you used.

This is an unofficial tool, not affiliated with or endorsed by Alma Career Czechia s.r.o., the operator of Práce za rohem, by Úřad práce ČR or by the Ministry of Finance of the Czech Republic. It is also known as a Pracezarohem.cz API, Práce za rohem scraper, "nabídky práce za rohem" or "práce v okolí".

# Actor input Schema

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

Keywords or professions to search for, e.g. 'skladník', 'řidič', 'python', 'účetní'. Each query is a separate search (combined with Locations, Regions and the website filters). At most 20.

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

Czech towns, districts or regions, e.g. 'Brno', 'Praha', 'okres Kladno', 'Jihomoravský kraj', or the location part of a website URL ('stredocesky/kladno/kladno'). A town with the name of its district (Kladno, Benešov) means the whole district; write 'obec Kladno' for the town only. One search per location, at most 20.

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

Regions (kraj) to search, one search each. Can be combined with Locations.

## `radiusKm` (type: `integer`):

Only jobs at most this far (straight line) from the centre of the place in Locations, e.g. 20 for 'Kladno'. The website's own distance search works only in its app, so the actor reads the whole region of the place (Prague together with Central Bohemia) and measures the distance from each job's GPS position; the result has distanceKm. Jobs across another region's border are not included, and Regions in the same run are not limited by the distance. Slower than a plain location search: a region has 400 to 4 200 jobs (8 to 85 pages).

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

Search URLs from Pracezarohem.cz, e.g. https://www.pracezarohem.cz/nabidky/jihomoravsky/brno-mesto/skladnik (set the search on the website and paste the URL), or job URLs https://www.pracezarohem.cz/dl/jd/<id>. Website filters below are added to these URLs too, unless the URL already sets them.

## `onlyOwnOffers` (type: `boolean`):

Return only ads placed on Práce za rohem itself (ID PZR-…, sourcePortal 'pracezarohem.cz'), not the ads it shows from Jobs.cz / Prace.cz, Úřad práce (labour office) and Profesia.cz. They are about 2 % of the site, so the actor reads the whole search to find them (listing pages are not charged, only saved jobs).

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

Website filter: full-time, part-time or temporary job (brigáda). Several = any of them.

## `education` (type: `string`):

Website filter "Jaké máš vzdělání?": jobs open to people with this education.

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

Website filter: jobs that pay at least this much per month. The website decides, also for jobs whose employer does not show the salary; add "Only jobs with a salary" to keep only jobs that show one. Use this or "Salary from (CZK per hour)", not both.

## `minHourlySalary` (type: `integer`):

Website filter: jobs that pay at least this much per hour (typical for temporary jobs).

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

Keep only jobs that show a salary (about half of them).

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

Keep only jobs published at most this many days ago (postedAt). Empty or 0 = any age. Not applied to job URLs (the job page has no publication date).

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

Direct employers only or recruitment agencies only, as the website marks them.

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

Keep only jobs whose title contains one of these words (case and diacritics ignored).

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

Skip jobs whose title contains one of these words.

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

Keep only jobs whose employer name contains one of these words.

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

Skip jobs whose employer name contains one of these words.

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

Open each job page to add the description (e-mails, phone numbers and the recruiter's name removed), contract type, employment type, education, languages, suitable for, benefits, start date, full address and the company website. One extra request per job (2 seconds each at the normal speed). The recruiter's name, e-mail and phone are never returned.

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

Cut descriptions to this many characters (0 = full text).

## `contractTypes` (type: `array`):

Keep only jobs with one of these contracts (pracovní smlouva, živnostenský list / IČO, dohoda DPP/DPČ). The contract type is on the job page, so this needs "Add description and details". A job whose page could not be read is kept.

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

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

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

Maximum number of jobs saved from each search or URL. 0 = no limit.

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

Maximum listing pages (50 jobs each) read per search. 0 = until the end (the website shows at most 101 pages per search; bigger searches are read region by region automatically).

## `includeCompanyInfo` (type: `boolean`):

Add data about the employer from ARES, the public register of economic subjects of the Czech Ministry of Finance: IČO (company ID), legal form, registered office, employee count range, main activity (CZ-NACE) and founding date. Off by default: when off, the actor never contacts ARES. Extra charge "Company info" (see the Pricing tab) only for saved jobs whose company data were found and returned. Matching is by the exact company name including its legal form, so some jobs stay without company data. Recruitment agencies and private persons are never looked up or returned. About 1 second per new company name.

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

Return only jobs that are new or whose title, company, salary or place changed since the previous run with the same Monitoring key. Unchanged jobs are free; every listing page read in this mode is $0.0001 (the monitoring-page event).

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

Name of the saved state. Use a different key for each watched search (e.g. 'skladnik-brno'). Empty = "default". The value is stored encrypted.

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

With "Monitoring: only new or changed jobs": also return jobs from the previous run with the same Monitoring key that are no longer in the search, as rows with changeType "removed", removedAt, firstSeenAt, daysOnline and the last known title, company, place, salary and URL. Checked only when the run reads the whole search (Max jobs, Max jobs per search, Max pages per search, unread pages or rejected requests skip the check, and the status message says why). Removed rows are normal dataset rows and are charged like any other job.

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

Reads Pracezarohem.cz up to 4x faster: at most 120 requests per minute and 4 at a time instead of 30 per minute and 2 at a time. It stays polite: the moment the website answers "too many requests", "service unavailable" or slows down, the run switches back to the normal speed for the rest of the run, it waits when the website asks it to wait, and it never changes IP address to get around a limit. Extra charge "Fast mode" (see the Pricing tab, $0.01 per 1 000 jobs) only for jobs saved while the fast speed was on.

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

Not needed: Pracezarohem.cz answered every request without a proxy and without a challenge in our tests. You can use Apify Proxy or your own proxies if you prefer.

## Actor input object example

```json
{
  "searchQueries": [
    "skladník"
  ],
  "onlyOwnOffers": false,
  "education": "any",
  "onlyWithSalary": false,
  "employerType": "any",
  "includeDetails": false,
  "maxItems": 20,
  "maxItemsPerStartUrl": 0,
  "maxPages": 0,
  "includeCompanyInfo": false,
  "onlyNewOrChanged": false,
  "includeRemovedJobs": false,
  "fastMode": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "searchQueries": [
        "skladník"
    ],
    "maxItems": 20,
    "includeCompanyInfo": false,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tsutseisoftware/pracezarohem-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": ["skladník"],
    "maxItems": 20,
    "includeCompanyInfo": False,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("tsutseisoftware/pracezarohem-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": [
    "skladník"
  ],
  "maxItems": 20,
  "includeCompanyInfo": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call tsutseisoftware/pracezarohem-scraper --silent --output-dataset

```

## MCP server setup

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