{
  "openapi": "3.0.1",
  "info": {
    "title": "GastroJobs.cz Scraper ($1.75/1K): Czech Hospitality Jobs",
    "description": "Scrape GastroJobs.cz, the Czech job board for hotels, restaurants and catering: jobs with salary, employer, type of venue, place and company ID. Track new and removed jobs. Unofficial.",
    "version": "0.0",
    "x-build-id": "6szgZ5s5P2ePcJOSD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tsutseisoftware~gastrojobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tsutseisoftware-gastrojobs-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~gastrojobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tsutseisoftware-gastrojobs-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~gastrojobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tsutseisoftware-gastrojobs-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": "URLs",
            "type": "array",
            "description": "Optional. Job URLs from GastroJobs.cz, e.g. https://www.gastrojobs.cz/cs/inzerat/16194-15372-customer-support-specialist-hpp/ (each is read with its details), or the list of jobs https://www.gastrojobs.cz/cs/inzeraty/. Empty = the whole list of jobs. The website keeps its own filters in a server session, not in the URL, so use the filters below instead.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Keep only jobs whose title, employer name or type of employer contains at least one of these words, e.g. 'kuchař', 'číšník', 'recepční', 'barman' (case and diacritics don't matter). Checked by the actor on the list of jobs, so skipped jobs are not charged (only listing pages read beyond the saved jobs, $0.0002 each). Empty = all jobs.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep only jobs whose place of work, district or region contains one of these texts, e.g. 'Praha', 'Brno', 'Špindlerův Mlýn', 'Jihomoravský'. Most jobs on GastroJobs.cz are in Prague.",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Only jobs in these regions (kraj). The region comes from the place of work and the official list of Czech municipalities (known for about 97 % of jobs).",
            "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": [
                "Hlavní město Praha",
                "Středočeský kraj",
                "Jihočeský kraj",
                "Plzeňský kraj",
                "Karlovarský kraj",
                "Ústecký kraj",
                "Liberecký kraj",
                "Královéhradecký kraj",
                "Pardubický kraj",
                "Kraj Vysočina",
                "Jihomoravský kraj",
                "Olomoucký kraj",
                "Zlínský kraj",
                "Moravskoslezský kraj"
              ]
            }
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs saved. You pay per saved job. 0 = no limit (the whole website has about 430 jobs).",
            "default": 100
          },
          "includeDetails": {
            "title": "Add description and details",
            "type": "boolean",
            "description": "Open each job page to add the description (e-mails, phone numbers removed), the address of the workplace, the employer's website, the legal entity behind the venue with its company ID (IČO), required languages, software skills and the start date. Included in the price per job; one more request per job, so the run takes longer. The page's phone number and contact person are never read.",
            "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
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "With \"Add description and details\": the description as plain text (default), clean HTML or Markdown. HTML and Markdown keep the ad's headings (Náplň práce, Požadujeme, Nabízíme), paragraphs, lists and bold text; e-mails and phone numbers are removed in every format.",
            "default": "text"
          },
          "employmentTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Only jobs with at least one of these employment types (a job can have several).",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "partTime",
                "temporary",
                "seasonal",
                "eventHelp",
                "freelance",
                "internship",
                "trainee"
              ],
              "enumTitles": [
                "Full-time (hlavní pracovní poměr)",
                "Part-time (částečný úvazek)",
                "Side job (brigáda)",
                "Seasonal work (sezonní práce)",
                "Help at an event (výpomoc na akci)",
                "External cooperation (externí spolupráce)",
                "Internship (praxe & stáž)",
                "Trainee"
              ]
            }
          },
          "employerTypes": {
            "title": "Type of employer",
            "type": "array",
            "description": "Only jobs of these kinds of venues, as the website labels the employer (about 60 % hotels, 30 % restaurants).",
            "items": {
              "type": "string",
              "enum": [
                "Hotel",
                "Resort",
                "Ost. Ubytováni",
                "Restaurace",
                "Bar",
                "Bistro",
                "Kavárna",
                "Diskotéka/Club",
                "Party-/Eventcatering",
                "Závodní nebo školní stravování",
                "Průmyslový catering",
                "Lázně",
                "Dodavatele služeb",
                "Dodavatele softwaru"
              ],
              "enumTitles": [
                "Hotel",
                "Resort",
                "Other accommodation (ost. ubytování)",
                "Restaurant (restaurace)",
                "Bar",
                "Bistro",
                "Café (kavárna)",
                "Club (diskotéka/club)",
                "Party and event catering",
                "Canteen (závodní nebo školní stravování)",
                "Industrial catering (průmyslový catering)",
                "Spa (lázně)",
                "Service suppliers (dodavatelé služeb)",
                "Software suppliers (dodavatelé softwaru)"
              ]
            }
          },
          "onlyWithSalary": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Skip jobs that don't show a salary amount on the website (employers type the salary as free text; about a third of the ads give an amount).",
            "default": false
          },
          "minSalary": {
            "title": "Salary from (CZK per month)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs offering at least this monthly salary, e.g. 40000 (hourly and daily amounts are converted: 160 hours or 20 days a month). Jobs without an amount pass; add \"Only jobs with a salary\" to drop them."
          },
          "onlyForGraduates": {
            "title": "Only jobs suitable for graduates",
            "type": "boolean",
            "description": "Keep only jobs the employer marked as suitable for graduates (the \"A\" label in the list).",
            "default": false
          },
          "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 (the website moves the date when an ad is refreshed). The actor stops reading the list once only older jobs follow. 0 = any time."
          },
          "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', 'pokojská'.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Employer",
            "type": "array",
            "description": "Keep only jobs of employers whose name contains one of these texts, e.g. 'Marriott', 'Ambiente'.",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude employers",
            "type": "array",
            "description": "Skip jobs of employers whose name contains any of these texts.",
            "items": {
              "type": "string"
            }
          },
          "descriptionKeywords": {
            "title": "Title or description must contain",
            "type": "array",
            "description": "Keep only jobs whose title or description contains at least one of these words, e.g. 'sushi', 'ubytování', 'angličtina' (case and diacritics don't matter). The description is only on the job page, so this turns on \"Add description and details\" for the run (same price per job). Job pages read for jobs without the words are not saved and count as extra pages ($0.0002 each); combine it with the other filters, which are checked on the list first.",
            "items": {
              "type": "string"
            }
          },
          "onlyNewOrChanged": {
            "title": "Monitoring: only new or changed jobs",
            "type": "boolean",
            "description": "Return only jobs that are new or whose title, employer, 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.0002 (the monitoring-page event; the whole website is about 15 pages = $0.003 per run).",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring key",
            "type": "string",
            "description": "Name of the saved state. Use a different key for each watched set of filters (e.g. 'kuchar-praha'). 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 list, as rows with changeType \"removed\", removedAt, firstSeenAt, daysOnline and the last known title, employer, place and salary; a job that comes back is \"reappeared\". Only after a run that read the whole list. Removed rows are charged like any other job.",
            "default": false
          },
          "compact": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Keep only the core fields of every row: id, title, employer, type of employer, place, region, salary, employment type, posting date, link (and the monitoring fields).",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Leave out empty fields",
            "type": "boolean",
            "description": "Drop fields that are null or an empty list from every row (id, source, url, jobId, title and scrapedAt always stay).",
            "default": false
          },
          "slackWebhookUrl": {
            "title": "Notifications: Slack webhook URL",
            "type": "string",
            "description": "Incoming webhook of your Slack channel (https://hooks.slack.com/services/...). Stored encrypted."
          },
          "discordWebhookUrl": {
            "title": "Notifications: Discord webhook URL",
            "type": "string",
            "description": "Webhook of your Discord channel (https://discord.com/api/webhooks/...). Stored encrypted."
          },
          "telegramBotToken": {
            "title": "Notifications: Telegram bot token",
            "type": "string",
            "description": "Token of your Telegram bot (from @BotFather). Used with \"Telegram chat ID\". Stored encrypted."
          },
          "telegramChatId": {
            "title": "Notifications: Telegram chat ID",
            "type": "string",
            "description": "Chat, group or channel ID the bot writes to (e.g. -1001234567890)."
          },
          "webhookUrl": {
            "title": "Notifications: webhook URL",
            "type": "string",
            "description": "Any HTTPS URL (Zapier, Make, n8n, your server): 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
          },
          "fastMode": {
            "title": "Fast mode",
            "type": "boolean",
            "description": "Reads GastroJobs.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 goes back to the normal speed. Extra $0.01 per 1 000 jobs saved while the fast mode is on (the fast-mode event). Useful with \"Add description and details\"; the list alone is 15 requests.",
            "default": false
          },
          "maxPages": {
            "title": "Max pages",
            "minimum": 0,
            "type": "integer",
            "description": "Safety limit of listing pages read (30 jobs per page; the whole website has about 15 pages). 0 = no limit.",
            "default": 50
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed: GastroJobs.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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}