{
  "openapi": "3.0.1",
  "info": {
    "title": "Jobs.ch Scraper: Swiss Job Postings, Workload & Salary Estimate",
    "description": "Scrape jobs.ch Stellenangebote (Swiss jobs) by keyword, canton, city, postal code, field, contract and workload %. Rows give company, address with coordinates and benefits. Optional full details add description, apply link and CHF salary estimate. Monitor new postings on a schedule.",
    "version": "0.1",
    "x-build-id": "hjLFZtbe4vXUINNUv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~jobs-ch-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-jobs-ch-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/getascraper~jobs-ch-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-jobs-ch-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/getascraper~jobs-ch-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-jobs-ch-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": {
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Job titles or skills to search for, one per row, for example \"software engineer\" or \"Pflegefachperson\". Each keyword is searched separately and duplicates are removed. Leave empty to browse by filters only.",
            "default": [
              "software engineer"
            ],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Search links",
            "type": "array",
            "description": "Optional jobs.ch search links copied from your browser. Their keyword and filters are used as they are, in addition to the keywords above.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "cantons": {
            "title": "Cantons",
            "type": "array",
            "description": "Limit results to one or more of the 26 Swiss cantons. Several cantons are combined, so a posting in any of them matches.",
            "items": {
              "type": "string",
              "enum": [
                "AG",
                "AI",
                "AR",
                "BE",
                "BL",
                "BS",
                "FR",
                "GE",
                "GL",
                "GR",
                "JU",
                "LU",
                "NE",
                "NW",
                "OW",
                "SG",
                "SH",
                "SO",
                "SZ",
                "TG",
                "TI",
                "UR",
                "VD",
                "VS",
                "ZG",
                "ZH"
              ],
              "enumTitles": [
                "Aargau",
                "Appenzell Innerrhoden",
                "Appenzell Ausserrhoden",
                "Bern",
                "Basel-Landschaft",
                "Basel-Stadt",
                "Fribourg",
                "Geneva",
                "Glarus",
                "Graubünden",
                "Jura",
                "Lucerne",
                "Neuchâtel",
                "Nidwalden",
                "Obwalden",
                "St. Gallen",
                "Schaffhausen",
                "Solothurn",
                "Schwyz",
                "Thurgau",
                "Ticino",
                "Uri",
                "Vaud",
                "Valais",
                "Zug",
                "Zurich"
              ]
            },
            "default": []
          },
          "locations": {
            "title": "Cities or postal codes",
            "type": "array",
            "description": "Cities, towns or postal codes such as \"Zürich\", \"Lausanne\" or \"8001\". Several entries are combined, so a posting in any of them matches.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Job regions",
            "type": "array",
            "description": "The site's own job regions, for example \"Region of Basel\" or \"Ticino\". Useful for commuter areas that cross canton borders.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12",
                "13",
                "14",
                "15",
                "16",
                "17",
                "18",
                "19",
                "20",
                "21",
                "22",
                "23",
                "24",
                "25"
              ],
              "enumTitles": [
                "German part of Switzerland",
                "Western Switzerland",
                "Ticino",
                "Abroad",
                "Region of Geneva",
                "Region of Zurich / Schaffhausen",
                "Region of Neuchâtel / Jura",
                "Region of Fribourg",
                "Region of Vaud / Valais",
                "Eastern Switzerland / GR / FL",
                "Mittelland (AG / SO)",
                "Region of Bern",
                "Region of Basel",
                "Central Switzerland",
                "Region of Oberwallis",
                "Wil / Toggenburg",
                "Thurgau / Lake Constance",
                "City of Zurich / Lake Zurich",
                "Zurich Oberland",
                "St Gall / Appenzell",
                "Zurich Unterland / Limmattal",
                "Rheintal / FL / Sargans / Linth",
                "Graubünden",
                "Region of Winterthur / Schaffhausen"
              ]
            },
            "default": []
          },
          "categories": {
            "title": "Occupational fields",
            "type": "array",
            "description": "Broad fields such as Information Technology, Medicine or Construction. Several fields are combined.",
            "items": {
              "type": "string",
              "enum": [
                "97",
                "98",
                "99",
                "100",
                "101",
                "102",
                "103",
                "104",
                "105",
                "106",
                "107",
                "108",
                "109",
                "110",
                "111",
                "112",
                "113",
                "114",
                "115",
                "116",
                "117"
              ],
              "enumTitles": [
                "Commercial",
                "Technical",
                "Service",
                "Admin. / HR / Consulting / CEO",
                "Finance / Trusts / Real Estate",
                "Banking / Insurance",
                "Purchasing / Logistics / Trading",
                "Marketing / Communications / Editorial",
                "Sales / Customer Service / Admin.",
                "Information Technology / Telecom.",
                "Chemical / Pharma / Biotechnology",
                "Electronics / Engineering / Watches",
                "Machine / Plant Engin. / Manufacturing",
                "Construction / Architecture / Engineer",
                "Vehicles / Craft / Warehouse / Transport",
                "Medicine / Care / Therapy",
                "Public Admin. / Education / Social",
                "Catering / Food / Tourism",
                "Graphic Art / Typography / Printing",
                "Surveillance / Police / Customs / Rescue",
                "Sport / Spas&Wellness / Culture"
              ]
            },
            "default": []
          },
          "employmentTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Permanent, temporary, freelance, internship, apprenticeship or supplementary income. Several types are combined.",
            "items": {
              "type": "string",
              "enum": [
                "5",
                "1",
                "2",
                "3",
                "6",
                "4"
              ],
              "enumTitles": [
                "Permanent position",
                "Temporary",
                "Freelance",
                "Internship",
                "Apprenticeship",
                "Supplementary income"
              ]
            },
            "default": []
          },
          "positionLevels": {
            "title": "Position levels",
            "type": "array",
            "description": "Executive position, specialist or employee. Several levels are combined.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3"
              ],
              "enumTitles": [
                "Executive position",
                "Specialist",
                "Employee"
              ]
            },
            "default": []
          },
          "workloadMin": {
            "title": "Minimum workload",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Lowest workload (Pensum) you accept, from 0 to 100. Roles that offer a range reaching this level still match, so a 60 to 100 percent role matches a minimum of 80. 0 means no lower limit.",
            "default": 0
          },
          "workloadMax": {
            "title": "Maximum workload",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Highest workload (Pensum) you accept, from 0 to 100. Roles whose range starts at or below this level still match, so a 60 to 100 percent role matches a maximum of 60. 100 means no upper limit.",
            "default": 100
          },
          "languageSkills": {
            "title": "Required languages",
            "type": "array",
            "description": "Keep postings that ask for German, French, English or Italian. Several languages are combined, so a posting asking for any of them matches.",
            "items": {
              "type": "string",
              "enum": [
                "de",
                "fr",
                "en",
                "it"
              ],
              "enumTitles": [
                "German",
                "French",
                "English",
                "Italian"
              ]
            },
            "default": []
          },
          "homeOfficeOnly": {
            "title": "Home office offered only",
            "type": "boolean",
            "description": "Keep only postings whose employer lists working from home as a benefit.",
            "default": false
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Keep only postings published in this time window. Pair it with a monitor name to follow fresh postings on a schedule.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first returns the most recently published postings and is the right choice for monitoring. Relevance follows the site's own keyword ranking.",
            "default": "newest"
          },
          "language": {
            "title": "Site language",
            "enum": [
              "en",
              "de",
              "fr"
            ],
            "type": "string",
            "description": "Language of the jobs.ch interface used for links and site texts. Posting texts keep the language the employer wrote them in. Labels in the dataset are always English.",
            "default": "en"
          },
          "includeDetails": {
            "title": "Fetch full posting details",
            "type": "boolean",
            "description": "Open every posting to add the full description, the direct application link, jobs.ch's salary estimate in CHF, skills, language requirements, contact person and company profile (size, website, rating). Slower, because each posting is one extra request.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "both"
            ],
            "type": "string",
            "description": "Plain text is easiest to read and search. HTML keeps the employer's formatting. Both returns two fields. Only used when full posting details are on.",
            "default": "text"
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Give this search a short name to turn the run into a monitor. The first run remembers what it saw, and each later run with the same name and searches returns only postings that are new since then. Leave empty to always return everything.",
            "default": ""
          },
          "maxItems": {
            "title": "Maximum postings",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Total number of postings to return across all keywords. With several keywords the budget is shared evenly between them. Raise it for bigger exports.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "The Actor connects directly first and only switches to the datacenter proxy when the site refuses a request. The default works for almost every run.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}