{
  "openapi": "3.0.1",
  "info": {
    "title": "JenPráce.cz Scraper ($1.44/1K): Czech Jobs & Salaries",
    "description": "Scrape JenPráce.cz jobs and side jobs with salary, company, region and contract type. Tell own ads from Labour Office vacancies, track new and removed jobs. Unofficial.",
    "version": "0.0",
    "x-build-id": "kZoVX8KbMXTT2w73x"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tsutseisoftware~jenprace-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tsutseisoftware-jenprace-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/tsutseisoftware~jenprace-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tsutseisoftware-jenprace-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/tsutseisoftware~jenprace-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tsutseisoftware-jenprace-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "JenPráce.cz URLs",
            "type": "array",
            "description": "Search or listing URLs from JenPráce.cz, e.g. https://www.jenprace.cz/nabidky/brno or https://www.jenprace.cz/brigady/cesko (set the search and filters on the website and paste the URL), or job URLs, e.g. https://www.jenprace.cz/nabidka/<id>/<title>. Website filters below are added to these URLs too, unless the URL already sets them.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Keywords to search for, e.g. 'skladník', 'účetní', 'python'. Each query is a separate search (combined with Locations and the website filters). The website first lists jobs matching the position and then jobs that only mention the word in their text (see \"Skip text-only matches\"). At most 20.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Towns, Prague or regions, one search each, as on the website: 'Praha', 'Brno', 'Ostrava', 'Hradec Králové', 'Jihomoravský kraj', 'Celá ČR'. A town is looked up in the website's list of places (one small request). At most 20. Not used for JenPráce.cz URLs.",
            "items": {
              "type": "string"
            }
          },
          "radiusKm": {
            "title": "Distance from the town",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "With a town in Locations: also jobs up to this distance (0, 10, 20, 30, 40 or 50 km, as on the website; other values are rounded down). Empty = the website's default for the town. Results then have distanceKm."
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Only jobs in these regions (kraj). Without Locations and URLs, the actor runs one website search per region (the website's region search lists only its own ads, not Labour Office vacancies; with \"Ad source: Labour Office vacancies only\" the whole country is read and each job is checked by its region). With Locations or URLs, it checks the region of each job.",
            "items": {
              "type": "string",
              "enum": [
                "praha",
                "stredocesky-kraj",
                "jihocesky-kraj",
                "plzensky-kraj",
                "karlovarsky-kraj",
                "ustecky-kraj",
                "liberecky-kraj",
                "kralovehradecky-kraj",
                "pardubicky-kraj",
                "kraj-vysocina",
                "jihomoravsky-kraj",
                "olomoucky-kraj",
                "zlinsky-kraj",
                "moravskoslezsky-kraj"
              ],
              "enumTitles": [
                "Prague (Hlavní město Praha)",
                "Central Bohemia (Středočeský kraj)",
                "South Bohemia (Jihočeský kraj)",
                "Plzeň (Plzeňský kraj)",
                "Karlovy Vary (Karlovarský kraj)",
                "Ústí nad Labem (Ústecký kraj)",
                "Liberec (Liberecký kraj)",
                "Hradec Králové (Královéhradecký kraj)",
                "Pardubice (Pardubický kraj)",
                "Vysočina (Kraj Vysočina)",
                "South Moravia (Jihomoravský kraj)",
                "Olomouc (Olomoucký kraj)",
                "Zlín (Zlínský kraj)",
                "Moravia-Silesia (Moravskoslezský kraj)"
              ]
            }
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs saved. You pay per saved job. 0 = no limit.",
            "default": 100
          },
          "maxItemsPerStartUrl": {
            "title": "Max jobs per search",
            "minimum": 0,
            "type": "integer",
            "description": "Limit for each search or URL separately, so one large search doesn't use up the whole Max jobs. 0 = no limit.",
            "default": 0
          },
          "includeDetails": {
            "title": "Add description and details",
            "type": "boolean",
            "description": "Open each job page to add the description (e-mails, phone numbers and named contact persons removed), contract type, minimum education, languages, driving licence, benefits, categories, professions, postal code and the end of the ad. Slower: one extra request per job (2 seconds each). Same price per job.",
            "default": false
          },
          "descriptionMaxLength": {
            "title": "Description length limit",
            "minimum": 0,
            "type": "integer",
            "description": "With \"Add description and details\": shorten the description to about this many characters (e.g. 300 for a snippet). 0 = full text.",
            "default": 0
          },
          "adSource": {
            "title": "Ad source",
            "enum": [
              "all",
              "jenprace",
              "labourOffice"
            ],
            "type": "string",
            "description": "JenPráce.cz lists its own ads and, after them, vacancies of the Czech Labour Office (Úřad práce ČR). Keep both, only the website's own ads (in searches without a keyword the actor stops reading once only Labour Office vacancies follow, so it's also faster), or only Labour Office vacancies. Every job has isLabourOfficeJob.",
            "default": "all"
          },
          "jobTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Only these types. 'Side job (brigáda)' is the website's separate side jobs section; without a choice both the job board and side jobs are searched. Several values = any of them.",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "partTime",
                "trainee",
                "temporary"
              ],
              "enumTitles": [
                "Full-time (plný úvazek)",
                "Part-time (zkrácený úvazek)",
                "Trainee program",
                "Side job (brigáda)"
              ]
            }
          },
          "contractTypes": {
            "title": "Contract type",
            "type": "array",
            "description": "Only these contract types. Several values = any of them.",
            "items": {
              "type": "string",
              "enum": [
                "employee",
                "freelance",
                "workAgreement",
                "civilService"
              ],
              "enumTitles": [
                "Employment contract (HPP)",
                "Self-employed (OSVČ, živnostenský list)",
                "Work agreement (DPP, DPČ)",
                "Civil service (služební poměr)"
              ]
            }
          },
          "minSalary": {
            "title": "Salary from (CZK per month)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs offering at least this monthly salary, e.g. 40000. The website knows 10 000, 15 000, 20 000, 25 000, 30 000, 40 000, 50 000 and 60 000; other amounts are checked by the actor on the salary shown. The website also matches jobs that show no salary; such jobs are returned without a salary (combine with \"Only jobs with a salary\" to skip them)."
          },
          "education": {
            "title": "Minimum education",
            "enum": [
              "elementary",
              "apprenticeship",
              "highSchool",
              "higherVocational",
              "bachelor",
              "university",
              "postgraduate"
            ],
            "type": "string",
            "description": "Only jobs with this minimum education, as in the website's filter."
          },
          "workArrangement": {
            "title": "Workplace",
            "type": "array",
            "description": "Only jobs on site, combined (hybrid) or from home. With exactly one value, the results have workArrangement set (the list doesn't show it otherwise).",
            "items": {
              "type": "string",
              "enum": [
                "onsite",
                "hybrid",
                "remote"
              ],
              "enumTitles": [
                "On site (na místě)",
                "Hybrid (kombinace)",
                "From home (z domova)"
              ]
            }
          },
          "languages": {
            "title": "Language skills",
            "type": "array",
            "description": "Only jobs that ask for one of these languages (or no language).",
            "items": {
              "type": "string",
              "enum": [
                "cs",
                "en",
                "de",
                "fr",
                "es",
                "ru",
                "none"
              ],
              "enumTitles": [
                "Czech",
                "English",
                "German",
                "French",
                "Spanish",
                "Russian",
                "No language needed"
              ]
            }
          },
          "suitableFor": {
            "title": "Suitable for",
            "type": "array",
            "description": "Only jobs the employer marked as suitable for these groups.",
            "items": {
              "type": "string",
              "enum": [
                "graduates",
                "foreigners",
                "students",
                "seniors",
                "parentsOnLeave",
                "disabled"
              ],
              "enumTitles": [
                "Graduates",
                "Foreigners",
                "Students",
                "Seniors",
                "Parents on leave",
                "People with disabilities"
              ]
            }
          },
          "accommodation": {
            "title": "Accommodation",
            "type": "array",
            "description": "Only jobs with accommodation provided or a housing allowance.",
            "items": {
              "type": "string",
              "enum": [
                "provided",
                "allowance"
              ],
              "enumTitles": [
                "Accommodation provided",
                "Housing allowance"
              ]
            }
          },
          "drivingLicence": {
            "title": "Driving licence",
            "enum": [
              "B",
              "C",
              "any"
            ],
            "type": "string",
            "description": "Only jobs that ask for this driving licence."
          },
          "postedWithinDays": {
            "title": "Posted in the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose date on the website is within the last N days (employers can refresh an ad, which moves its date). Checked by the actor; searches without a keyword stop reading once only older jobs follow. 0 = any time."
          },
          "excludeTextMatches": {
            "title": "Skip text-only matches",
            "type": "boolean",
            "description": "With Search queries: keep only the jobs the website matches by position (title, profession or company), not those that only mention the word in their text (matchedBy \"text\"). Saves pages too.",
            "default": false
          },
          "onlyWithSalary": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Skip jobs that don't show a salary on the website.",
            "default": false
          },
          "titleKeywords": {
            "title": "Title must contain",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these words (case and diacritics don't matter).",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Title must not contain",
            "type": "array",
            "description": "Skip jobs whose title contains any of these words, e.g. 'brigáda', 'senior'.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Company",
            "type": "array",
            "description": "Keep only jobs of companies whose name contains one of these texts, e.g. 'Kaufland', 'Globus'.",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Skip jobs of companies whose name contains any of these texts, e.g. agencies.",
            "items": {
              "type": "string"
            }
          },
          "includeCompanyInfo": {
            "title": "Add company data from ARES (extra charge)",
            "type": "boolean",
            "description": "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; jobs without a match cost nothing extra. Matching is by the exact company name including its legal form, so some jobs stay without company data. Private persons are never looked up or returned. About 1 second per new company name.",
            "default": false
          },
          "onlyNewOrChanged": {
            "title": "Monitoring: only new or changed jobs",
            "type": "boolean",
            "description": "Return only jobs that are new or whose title, company, salary, place or employment type 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).",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring: key",
            "type": "string",
            "description": "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": {
            "title": "Monitoring: include removed jobs",
            "type": "boolean",
            "description": "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.",
            "default": false
          },
          "fastMode": {
            "title": "Fast mode (small extra charge)",
            "type": "boolean",
            "description": "Reads JenPráce.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. Please don't run several fast-mode runs at the same time.",
            "default": false
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Safety limit for each search or URL (100 jobs per page). The whole country has about 240 pages. 0 = no limit.",
            "default": 50
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed: JenPráce.cz works without a proxy. You can use Apify Proxy or your own proxies if you prefer.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}