{
  "openapi": "3.0.1",
  "info": {
    "title": "Swiss Jobs Scraper — jobs.ch & jobup.ch, Salary & Workload %",
    "description": "Scrape Swiss job ads from jobs.ch and jobup.ch in one run: title, company, place with address and canton, workload %, contract type, position, benefits, dates and links. Optional full details: description, salary estimate, category, industry, work hours, apply link, employer profile. No login.",
    "version": "0.1",
    "x-build-id": "rbR4YHYz3QkvqZBxg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~swiss-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-swiss-jobs-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/yugenox~swiss-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-swiss-jobs-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/yugenox~swiss-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-swiss-jobs-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": {
          "keywords": {
            "title": "🔎 Keywords",
            "type": "array",
            "description": "Job titles, skills or companies to search for, one per line (e.g. \"data analyst\", \"Pflegefachfrau\", \"comptable\"). Each keyword is searched on every site you pick. Leave empty and add a place or a filter to list all jobs there; with nothing at all, the run collects the newest jobs (published in the last 24 hours).",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "📍 Place",
            "type": "string",
            "description": "City, postcode, canton or region, as you would type it on jobs.ch (e.g. \"Zürich\", \"8001\", \"Genève\", \"Bern\", \"Ticino\"). Leave empty for all of Switzerland."
          },
          "locations": {
            "title": "📍 More places",
            "type": "array",
            "description": "Optional: more places, one per line. Every keyword is searched in every place.",
            "items": {
              "type": "string"
            }
          },
          "sites": {
            "title": "🇨🇭 Sites",
            "type": "array",
            "description": "Which job boards to search. jobs.ch is the biggest Swiss board (German-speaking Switzerland first); jobup.ch is its sister site for French-speaking Switzerland. A job listed on both is saved once.",
            "items": {
              "type": "string",
              "enum": [
                "jobs.ch",
                "jobup.ch"
              ],
              "enumTitles": [
                "jobs.ch",
                "jobup.ch"
              ]
            },
            "default": [
              "jobs.ch",
              "jobup.ch"
            ]
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Maximum number of jobs for the whole run, shared fairly between your searches. 0 = everything (each search lists at most 2,000 jobs — split big searches by place, workload or contract type).",
            "default": 50
          },
          "includeDetails": {
            "title": "Include full details",
            "type": "boolean",
            "description": "Also open each job's own page: the full job description (plus the site's English or French translation), the site's salary estimate (CHF per year), category, industry, work hours, contract start, expiry date, how to apply + the application link, skills and the employer profile (website, size, rating). Charged once per job as \"Job full details\".",
            "default": false
          },
          "onlyNew": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Skip jobs that an earlier run with the same searches already saved (they are not charged). Made for daily or hourly monitoring: with the newest-first order, a search stops as soon as it reaches the jobs saved last time.",
            "default": false
          },
          "workloadMin": {
            "title": "Workload from (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only jobs whose workload (Pensum) reaches at least this percentage, e.g. 80 for 80–100% jobs. Leave empty for any."
          },
          "workloadMax": {
            "title": "Workload up to (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only jobs that can be done at this percentage or less, e.g. 60 for part-time jobs. Leave empty for any."
          },
          "employmentTypes": {
            "title": "Contract type",
            "type": "array",
            "description": "Only these contract types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "PERMANENT",
                "TEMPORARY",
                "FREELANCE",
                "INTERNSHIP",
                "SIDE_JOB",
                "APPRENTICESHIP"
              ],
              "enumTitles": [
                "Permanent position",
                "Temporary",
                "Freelance",
                "Internship",
                "Supplementary income / side job",
                "Apprenticeship"
              ]
            }
          },
          "positions": {
            "title": "Position",
            "type": "array",
            "description": "Only these position levels. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "EXECUTIVE",
                "SPECIALIST",
                "EMPLOYEE"
              ],
              "enumTitles": [
                "Executive / management position",
                "Specialist / position with responsibilities",
                "Employee"
              ]
            }
          },
          "postedWithinDays": {
            "title": "Published",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "30"
            ],
            "type": "string",
            "description": "Only jobs published in this period.",
            "default": "any"
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "date",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first (best for monitoring and with \"Only new jobs\") or the sites' own relevance order.",
            "default": "date"
          },
          "startUrls": {
            "title": "🔗 jobs.ch / jobup.ch URLs",
            "type": "array",
            "description": "Optional: job ad URLs (jobs.ch/en/vacancies/detail/…/, jobup.ch/fr/emplois/detail/…/) or search-result URLs copied from your browser — the filters in a search URL are kept. A job URL is always read with its full details.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "language": {
            "title": "Language of labels and links",
            "enum": [
              "en",
              "de",
              "fr"
            ],
            "type": "string",
            "description": "Language of contract types, categories, benefits, regions and job links. jobup.ch has no German version, so its jobs come in English when German is chosen. The job description itself is always in the employer's language; with full details, the site's translation is added when the ad is in another language.",
            "default": "en"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy (datacenter) is the default and comes with every Apify plan. If the sites refuse datacenter IPs for a while, the run switches to residential proxies when your account has them.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}