{
  "openapi": "3.0.1",
  "info": {
    "title": "Jobs.ch Scraper - Swiss Job Board Data Extraction",
    "description": "Scrapes job listings from jobs.ch, Switzerland's largest job board powered by JobCloud.",
    "version": "1.0",
    "x-build-id": "k1gZP9mMiVAhVhLfc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santamaria-automations~jobs-ch-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santamaria-automations-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/santamaria-automations~jobs-ch-scraper/runs": {
      "post": {
        "operationId": "runs-sync-santamaria-automations-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/santamaria-automations~jobs-ch-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-santamaria-automations-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": {
          "directUrls": {
            "title": "Direct Job URLs",
            "type": "array",
            "description": "List of job detail page URLs to scrape directly (skips search). Use this for 'still alive' checks or re-scraping specific jobs.",
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Company Names",
            "type": "array",
            "description": "Search for specific companies and return all their job listings. Enter exact company names. The actor searches for each company, finds their ID, then retrieves all their active jobs. Useful for monitoring specific companies' hiring activity.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search Keywords",
            "type": "array",
            "description": "One or more search keywords. Each keyword runs as a separate search. Results are deduplicated across queries.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Search Query (single, legacy)",
            "type": "string",
            "description": "Single search keyword (backward compatible). Use 'searchQueries' for multiple keywords.",
            "default": ""
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, canton, or region name (e.g., 'Zurich', 'Bern', 'Basel'). Leave empty for all of Switzerland.",
            "default": ""
          },
          "canton": {
            "title": "Canton",
            "enum": [
              "",
              "ZH",
              "BE",
              "LU",
              "UR",
              "SZ",
              "OW",
              "NW",
              "GL",
              "ZG",
              "FR",
              "SO",
              "BS",
              "BL",
              "SH",
              "AR",
              "AI",
              "SG",
              "GR",
              "AG",
              "TG",
              "TI",
              "VD",
              "VS",
              "NE",
              "GE",
              "JU"
            ],
            "type": "string",
            "description": "Filter by specific Swiss canton (e.g., 'ZH', 'BE', 'AG'). Leave empty for all cantons.",
            "default": ""
          },
          "language": {
            "title": "Language",
            "enum": [
              "de",
              "fr",
              "en"
            ],
            "type": "string",
            "description": "Search interface language. Note: This sets the UI language but jobs.ch shows listings in all languages.",
            "default": "de"
          },
          "maxResultsPerQuery": {
            "title": "Max Results per Query",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum results per search keyword. Each query gets up to this many results (deduplicated).",
            "default": 100
          },
          "maxResults": {
            "title": "Max Total Results",
            "minimum": 0,
            "type": "integer",
            "description": "Total cap across all queries. Set to 0 for unlimited (each query limited by maxResultsPerQuery).",
            "default": 0
          },
          "employmentType": {
            "title": "Employment Type",
            "enum": [
              "",
              "permanent",
              "temporary",
              "freelance"
            ],
            "type": "string",
            "description": "Filter by employment type",
            "default": ""
          },
          "workloadMin": {
            "title": "Minimum Workload (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Minimum workload/Pensum percentage (e.g., 60 for 60%). Leave empty for no minimum."
          },
          "workloadMax": {
            "title": "Maximum Workload (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum workload/Pensum percentage (e.g., 100 for 100%). Leave empty for no maximum."
          },
          "searchMode": {
            "title": "Search Mode",
            "enum": [
              "semantic",
              "classic"
            ],
            "type": "string",
            "description": "Search mode: 'semantic' uses AI-powered search matching the new jobs.ch website (understands synonyms, e.g. 'nodejs' finds 'Node.js' jobs). 'classic' uses exact keyword matching (faster, supports location/canton/filter params).",
            "default": "semantic"
          },
          "includeJobDetails": {
            "title": "Include Job Details",
            "type": "boolean",
            "description": "Fetch full job descriptions from detail pages using a browser (slower but provides complete data including description, requirements, contact info).",
            "default": true
          },
          "companyFilter": {
            "title": "Company Filter",
            "enum": [
              "all",
              "exclude-hr",
              "only-hr"
            ],
            "type": "string",
            "description": "Filter jobs by company type: 'all' includes all companies, 'exclude-hr' removes HR/recruitment agencies, 'only-hr' shows only HR/recruitment agencies",
            "default": "all"
          },
          "llmApiKey": {
            "title": "LLM API Key (Optional)",
            "type": "string",
            "description": "API key for LLM contact extraction. Supports: Groq (gsk_...) or OpenRouter (sk-or-...). Leave empty to skip LLM extraction."
          },
          "llmModel": {
            "title": "LLM Model",
            "enum": [
              "none",
              "llama-3.1-8b-instant",
              "mistral-small-3.1-24b-instruct"
            ],
            "type": "string",
            "description": "Model to use for contact extraction. Select 'None' to skip LLM extraction.",
            "default": "none"
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Apify proxy settings",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}