{
  "openapi": "3.0.1",
  "info": {
    "title": "Czech Jobs Aggregator: Jobs.cz, Prace.cz, Úřad práce & more",
    "description": "All Czech job boards in one run: Jobs.cz, Prace.cz, Labour Office (Úřad práce), JenPráce, StartupJobs, Práce za rohem and Profesia.cz. One row per job with duplicates merged, salary, region, monitoring, market summary, notifications. Unofficial.",
    "version": "0.0",
    "x-build-id": "XsxZmI0enIeVDnczW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tsutseisoftware~czech-jobs-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tsutseisoftware-czech-jobs-aggregator",
        "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~czech-jobs-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-tsutseisoftware-czech-jobs-aggregator",
        "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~czech-jobs-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-tsutseisoftware-czech-jobs-aggregator",
        "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": {
          "sources": {
            "title": "Job portals",
            "type": "array",
            "description": "Portals to read, one after another. A job found on several portals is one row and pays the price of its cheapest portal once. Profesia.cz and Fajn-brigady.cz + INwork.cz (temporary jobs, brigády) use a residential proxy (included in the price). GastroJobs.cz (hotels, restaurants and catering) is read when you pick it.",
            "items": {
              "type": "string",
              "enum": [
                "jobs-cz",
                "prace-cz",
                "urad-prace",
                "jenprace",
                "startupjobs",
                "pracezarohem",
                "profesia-cz",
                "fajn-brigady",
                "gastrojobs"
              ],
              "enumTitles": [
                "Jobs.cz ($0.49 / 1 000)",
                "Prace.cz ($0.49 / 1 000)",
                "Úřad práce ČR (MPSV) ($0.95 / 1 000)",
                "JenPráce.cz ($1.44 / 1 000)",
                "StartupJobs.cz ($1.45 / 1 000)",
                "Práce za rohem ($2.39 / 1 000)",
                "Profesia.cz ($1.29 / 1 000)",
                "Fajn-brigady.cz + INwork.cz ($1.75 / 1 000)",
                "GastroJobs.cz ($1.75 / 1 000)"
              ]
            },
            "default": [
              "jobs-cz",
              "prace-cz",
              "urad-prace",
              "jenprace",
              "startupjobs"
            ]
          },
          "searchQueries": {
            "title": "Search terms",
            "type": "array",
            "description": "Job titles or keywords, e.g. \"skladník\", \"účetní\", \"python\". Each portal searches them its own way (the Labour Office data: words at the start of the title or profession; Fajn-brigady.cz + INwork.cz: words in the title; GastroJobs.cz: words in the title, employer name or type of venue). Empty = the newest jobs.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Towns",
            "type": "array",
            "description": "Czech towns, e.g. \"Brno\", \"Ostrava\", \"Praha\".",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Regions (kraje)",
            "type": "array",
            "description": "Czech regions.",
            "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": [
                "Praha",
                "Středočeský",
                "Jihočeský",
                "Plzeňský",
                "Karlovarský",
                "Ústecký",
                "Liberecký",
                "Královéhradecký",
                "Pardubický",
                "Vysočina",
                "Jihomoravský",
                "Olomoucký",
                "Zlínský",
                "Moravskoslezský"
              ]
            }
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs saved (after merging duplicates). 0 = no limit.",
            "default": 200
          },
          "maxItemsPerSource": {
            "title": "Max jobs per portal",
            "minimum": 0,
            "type": "integer",
            "description": "How many jobs each portal reads at most. 0 = its share of \"Max jobs\" (Max jobs ÷ number of portals + 20 %).",
            "default": 0
          },
          "maxPagesPerSearch": {
            "title": "Max pages per search",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "How many result pages each portal reads per search term and town. Empty or 0 = about twice what the portal needs for its share of \"Max jobs\" (at most 50). Raise it for narrow filters (a company, words, \"only with salary\"): pages a portal reads beyond one per saved job pay a small fee of $0.10 per 1 000 (Profesia.cz $0.60, Fajn-brigady.cz + INwork.cz $0.70, GastroJobs.cz $0.15)."
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs published in the last N days. Empty = any age."
          },
          "minSalary": {
            "title": "Minimum monthly salary (CZK)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs with at least this monthly salary in CZK (Czech portals; jobs without a salary are kept by the portals that keep them, use \"Only with salary\" to drop them)."
          },
          "onlyWithSalary": {
            "title": "Only with salary",
            "type": "boolean",
            "description": "Only jobs that show a salary.",
            "default": false
          },
          "excludeKeywords": {
            "title": "Exclude words",
            "type": "array",
            "description": "Leave out jobs with one of these words in the title.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Only these companies",
            "type": "array",
            "description": "Only jobs of companies whose name contains one of these.",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Leave out jobs of companies whose name contains one of these (e.g. agencies).",
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "Add description and details",
            "type": "boolean",
            "description": "Open each job page for the description and details (slower: one request per job). The Labour Office data always have them; Fajn-brigady.cz + INwork.cz show the wage only there. A job page pays what the portal's own scraper charges for it: Jobs.cz $0.45 per 1 000 from 23 December 2026, Profesia.cz $0.10; the other portals include it. A job on several portals pays its page once, at the cheapest portal whose page was read.",
            "default": false
          },
          "mergeDuplicates": {
            "title": "Merge duplicates across portals",
            "type": "boolean",
            "description": "One row per job when the same job (title, employer, town) is on several portals, with all its portals and links in \"portals\" and \"sources\". Off = one row per ad.",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "Format of \"description\", the same for every portal: plain text, Markdown (headings and lists, good for AI agents and Notion) or simple HTML (<h3>, <ul>, <p>).",
            "default": "text"
          },
          "compactOutput": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Only the core fields (id, portals, URL, title, company, town, region, salary, employment type, work arrangement, dates), plus the description and the monitoring fields when those are on. Smaller rows for AI agents, MCP clients and spreadsheets.",
            "default": false
          },
          "onlyNewOrChanged": {
            "title": "Monitoring: only new or changed jobs",
            "type": "boolean",
            "description": "Return only jobs that are new or whose title, company, salary, town or portals changed since the previous run with the same Monitoring key. Unchanged jobs are not saved and pay only a small check fee ($0.02 per 1 000, see the README).",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring: key",
            "type": "string",
            "description": "Name of the remembered state; use a different key for each search you monitor."
          },
          "telegramBotToken": {
            "title": "Notifications: Telegram bot token",
            "type": "string",
            "description": "Token of your Telegram bot (from @BotFather). Used with \"Telegram chat ID\"."
          },
          "telegramChatId": {
            "title": "Notifications: Telegram chat ID",
            "type": "string",
            "description": "Chat, group or channel ID the bot writes to (e.g. -1001234567890)."
          },
          "slackWebhookUrl": {
            "title": "Notifications: Slack webhook URL",
            "type": "string",
            "description": "Incoming webhook of your Slack channel (https://hooks.slack.com/services/...)."
          },
          "discordWebhookUrl": {
            "title": "Notifications: Discord webhook URL",
            "type": "string",
            "description": "Webhook of your Discord channel (https://discord.com/api/webhooks/...)."
          },
          "webhookUrl": {
            "title": "Notifications: webhook URL",
            "type": "string",
            "description": "Any HTTPS URL: gets a POST with JSON {title, summary, totalSaved, runUrl, datasetUrl, items}."
          },
          "notificationLimit": {
            "title": "Notifications: max jobs per message",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many jobs are listed in one notification (the rest as \"…and N more\").",
            "default": 10
          },
          "notifyOnlyChanges": {
            "title": "Notifications: only when something was saved",
            "type": "boolean",
            "description": "Send nothing when the run saved no job (e.g. a monitoring run without new jobs).",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}