{
  "openapi": "3.0.1",
  "info": {
    "title": "arbeit.swiss Jobs Scraper: Swiss Federal Job-Room",
    "description": "Scrape jobs from the Swiss federal job portal (arbeit.swiss, travail.swiss, lavoro.swiss, work.swiss, Job-Room). All cantons; filter by canton, workload % and date. Employer, location, contract type and description.",
    "version": "1.3",
    "x-build-id": "QQuoda30hwV0LNwit"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santamaria-automations~arbeit-swiss-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santamaria-automations-arbeit-swiss-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~arbeit-swiss-scraper/runs": {
      "post": {
        "operationId": "runs-sync-santamaria-automations-arbeit-swiss-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~arbeit-swiss-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-santamaria-automations-arbeit-swiss-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": "Job URLs to fetch directly (job-room.ch, arbeit.swiss, travail.swiss, lavoro.swiss, work.swiss) or bare job ids (UUIDs). Each job is loaded via the detail API and returned as one row; duplicates are removed and URLs without a job id are skipped with a warning. Jobs that are not found or expired are skipped without charge. If you also set Search Keywords, the listed jobs are fetched first and the search then runs, sharing Max Results and the duplicate check. With directUrls only, no search runs. Example: https://www.job-room.ch/job-search/50431565-628c-40a4-bf79-8fcba7973b5c",
            "default": [],
            "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"
            }
          },
          "keywords": {
            "title": "Search Keywords (single, legacy)",
            "type": "array",
            "description": "Legacy: Job titles, skills, or keywords to search for. Use 'searchQueries' instead for multiple keywords.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "cantonCodes": {
            "title": "Canton Codes",
            "type": "array",
            "description": "Swiss canton codes to filter by (e.g., 'ZH', 'BE', 'SG'). Leave empty for all cantons.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort Order",
            "enum": [
              "",
              "newest",
              "oldest"
            ],
            "type": "string",
            "description": "Sort search results by date. arbeit.swiss only supports date-based sorting (no relevance sort). 'newest' maps to date_desc; 'oldest' maps to date_asc.",
            "default": "newest"
          },
          "workloadMin": {
            "title": "Minimum Workload (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Minimum workload percentage (Pensum)",
            "default": 10
          },
          "workloadMax": {
            "title": "Maximum Workload (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum workload percentage (Pensum)",
            "default": 100
          },
          "postedWithinDays": {
            "title": "Posted Within (Days)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return jobs posted within the last N days. 1=24h, 7=one week, etc. Default: 0 (no age filter). Server-side filter passed directly to the arbeit.swiss API.",
            "default": 0
          },
          "onlineSinceDays": {
            "title": "Posted Within (Days, legacy)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Optional legacy: prefer postedWithinDays. Only include jobs posted within this many days. Passed to arbeit.swiss API as onlineSince.",
            "default": 60
          },
          "maxResultsPerQuery": {
            "title": "Max Results per Query",
            "minimum": 0,
            "type": "integer",
            "description": "Per-keyword cap. Total possible results = maxResultsPerQuery × number of searchQueries (deduplicated). Example: 100 × 8 queries = up to 800 results. Set to 0 for unlimited per query (only maxResults caps the total).",
            "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
          },
          "includeJobDetails": {
            "title": "Include Full Job Descriptions",
            "type": "boolean",
            "description": "When enabled, each search result is enriched with the full job description fetched from the detail endpoint (paragraph breaks, headings and bullets preserved). Disable to return only the short search-result teaser and save request volume.",
            "default": true
          },
          "titleFilter": {
            "title": "Filter by Job Title",
            "type": "string",
            "description": "Comma-separated list of terms to match against job titles (case-insensitive OR-match, substring). Example: Laborant, Chemiker, QC. Only jobs whose title contains one of the terms are returned. Non-matching rows are dropped before the detail fetch, so you do not pay for detail on filtered-out jobs. Leave empty to disable.",
            "default": ""
          },
          "detailWorkers": {
            "title": "Detail Fetch Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Number of parallel workers fetching full job descriptions. Higher = faster but more concurrent requests against arbeit.swiss. Ignored if 'Include Full Job Descriptions' is off.",
            "default": 5
          },
          "statsMode": {
            "title": "Statistics output",
            "enum": [
              "off",
              "include",
              "only"
            ],
            "type": "string",
            "description": "Per-query statistics: total jobs arbeit.swiss reports for the query, pages available, how far we got, and why we stopped. 'Only' mode is fast/cheap for labour-market snapshots — one SERP fetch per query, no job data extracted.",
            "default": "off"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}