{
  "openapi": "3.0.1",
  "info": {
    "title": "Jobs.ch Scraper - Swiss Job Board",
    "description": "Scrape job listings from Jobs.ch: search by keyword, location, or canton, paste a pre-filtered search URL, or check specific job URLs. Full descriptions, contacts, and company data. Export JSON, CSV, Excel.",
    "version": "1.0",
    "x-build-id": "f5qEUiLkRYxhzVHaW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parsebird~jobs-ch-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parsebird-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/parsebird~jobs-ch-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parsebird-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/parsebird~jobs-ch-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parsebird-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Pre-filtered jobs.ch search URLs, copied straight from your browser. All filters in the URL (keywords, locations, categories, employment type, workload) are extracted automatically.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "directUrls": {
            "title": "Direct job URLs",
            "type": "array",
            "description": "Specific jobs.ch job detail URLs to check. Skips search entirely and returns each job's status (online, offline, expired) plus full data if still available. Useful for periodic \"still alive\" checks.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "One or more keywords to search. Used when Start URLs and Direct URLs are both empty. Leave empty (single blank entry) to browse by location/canton only.",
            "items": {
              "type": "string"
            },
            "default": [
              "Software Engineer"
            ]
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Company names to search for, in addition to (or instead of) keyword search. Each name is searched and results are confirmed to actually mention that company.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "City or region names, e.g. Zurich, Basel. Leave empty to search all of Switzerland.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "cantons": {
            "title": "Cantons",
            "type": "array",
            "description": "Swiss canton codes. Each selected canton gets its own result quota (Max results per query applies per canton). Results are strictly filtered to jobs confirmed to be in a selected canton.",
            "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 (AG)",
                "Appenzell Innerrhoden (AI)",
                "Appenzell Ausserrhoden (AR)",
                "Bern (BE)",
                "Basel-Landschaft (BL)",
                "Basel-Stadt (BS)",
                "Fribourg (FR)",
                "Geneva (GE)",
                "Glarus (GL)",
                "Graubünden (GR)",
                "Jura (JU)",
                "Lucerne (LU)",
                "Neuchâtel (NE)",
                "Nidwalden (NW)",
                "Obwalden (OW)",
                "St. Gallen (SG)",
                "Schaffhausen (SH)",
                "Solothurn (SO)",
                "Schwyz (SZ)",
                "Thurgau (TG)",
                "Ticino (TI)",
                "Uri (UR)",
                "Vaud (VD)",
                "Valais (VS)",
                "Zug (ZG)",
                "Zurich (ZH)"
              ]
            },
            "default": []
          },
          "language": {
            "title": "Language",
            "enum": [
              "de",
              "fr",
              "en"
            ],
            "type": "string",
            "description": "Search UI language. Sets which language-specific jobs.ch URLs are returned; jobs in all languages still match your search.",
            "default": "de"
          },
          "maxResultsPerQuery": {
            "title": "Max results per query",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum results per keyword/location/canton combination.",
            "default": 100
          },
          "maxResults": {
            "title": "Max total results",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap across all queries combined. 0 = unlimited (bounded only by maxResultsPerQuery per combination).",
            "default": 0
          },
          "employmentType": {
            "title": "Employment type",
            "enum": [
              "",
              "permanent",
              "temporary",
              "freelance"
            ],
            "type": "string",
            "description": "Filter by contract type.",
            "default": ""
          },
          "workloadMin": {
            "title": "Workload min %",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Minimum workload / Pensum percentage."
          },
          "workloadMax": {
            "title": "Workload max %",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum workload / Pensum percentage."
          },
          "publicationDate": {
            "title": "Posted within",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "30"
            ],
            "type": "string",
            "description": "Only return jobs posted within this window. Ideal for daily scheduled runs that only want new listings.",
            "default": ""
          },
          "searchMode": {
            "title": "Search mode",
            "enum": [
              "semantic",
              "classic"
            ],
            "type": "string",
            "description": "semantic uses jobs.ch's AI-powered relevance ranking; classic uses plain keyword matching.",
            "default": "semantic"
          },
          "companyFilter": {
            "title": "Company type",
            "enum": [
              "all",
              "exclude-hr",
              "only-hr"
            ],
            "type": "string",
            "description": "Filter results by whether the poster looks like an HR/recruitment agency (matched by company name).",
            "default": "all"
          },
          "includeJobDetails": {
            "title": "Include full job details",
            "type": "boolean",
            "description": "Fetch each job's detail page for the full description, requirements, contacts, and company data. Turn off for a fast, cheap title/company/location-only pass.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Parallel detail-page workers.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Datacenter proxy is sufficient for jobs.ch.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}