{
  "openapi": "3.0.1",
  "info": {
    "title": "ge.ch Emploi Scraper: Geneva Canton Public Sector Jobs",
    "description": "Scrape Geneva canton public-sector jobs from ge.ch. Returns title, department, service, salary class, workload, CDI/CDD, publication date, deadline, apply link, reference number and full description (text, HTML, Markdown). No login, no proxy.",
    "version": "0.3",
    "x-build-id": "9gwgnL5f3oFSDhqXX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santamaria-automations~ge-ch-emploi-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santamaria-automations-ge-ch-emploi-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~ge-ch-emploi-scraper/runs": {
      "post": {
        "operationId": "runs-sync-santamaria-automations-ge-ch-emploi-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~ge-ch-emploi-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-santamaria-automations-ge-ch-emploi-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": {
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "French keywords, one query each (for example 'informatique', 'comptable', 'enseignant'). ge.ch has no server-side keyword search, so each keyword is matched here, ignoring case and accents, against the title, service, department and the job's own mission and profile text (generic lines such as 'maitrise des outils informatiques' are ignored). Title and service matches come first. Leave empty to return all open offers.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerQuery": {
            "title": "Max results per query",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum jobs returned for each keyword or search URL. When left empty it equals Max total results if that is set, otherwise 25."
          },
          "maxResults": {
            "title": "Max total results",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Total cap across all queries. Leave empty to use max results per query multiplied by the number of queries (plus direct URLs). The whole portal lists about 50 to 80 open offers depending on the season."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "newest",
              "oldest",
              "site"
            ],
            "type": "string",
            "description": "ge.ch has no server-side sort. Newest and oldest order jobs by publication date, read from each job page, so the newest jobs are picked even when a cap applies. Portal order keeps the site's own order and is fastest.",
            "default": "newest"
          },
          "includeJobDetails": {
            "title": "Include full job details",
            "type": "boolean",
            "description": "Return the full description (text, HTML, Markdown), profile, benefits, workplace, apply link and reference number from each job page. When off, rows carry the listing fields only (title, department, service, workload, salary class) plus the publication date.",
            "default": true
          },
          "contractType": {
            "title": "Contract type",
            "enum": [
              "any",
              "CDI",
              "CDD",
              "apprentissage"
            ],
            "type": "string",
            "description": "Filter by contract type. Applied by ge.ch itself.",
            "default": "any"
          },
          "department": {
            "title": "Department",
            "enum": [
              "any",
              "chancellerie",
              "finances",
              "instruction",
              "institutions",
              "territoire",
              "sante",
              "cohesion",
              "economie",
              "cour-des-comptes",
              "fase",
              "grand-conseil",
              "pouvoir-judiciaire",
              "partenaires",
              "autres"
            ],
            "type": "string",
            "description": "Only offers from this department. Applied by ge.ch itself.",
            "default": "any"
          },
          "minFunctionClass": {
            "title": "Minimum function class",
            "minimum": 4,
            "maximum": 33,
            "type": "integer",
            "description": "Only offers at or above this salary class (classe de fonction minimum, 4 to 33). Applied by ge.ch itself. Leave empty for all classes."
          },
          "activityDomain": {
            "title": "Activity domain",
            "enum": [
              "any",
              "00",
              "01",
              "02",
              "03",
              "04",
              "05",
              "06",
              "07",
              "08",
              "09",
              "10",
              "11",
              "12",
              "13",
              "14",
              "15",
              "16",
              "17",
              "18",
              "19",
              "20",
              "21",
              "22"
            ],
            "type": "string",
            "description": "Only offers in this domain of activity (the ge.ch 'Domaine d'activite' filter). Applied by ge.ch itself.",
            "default": "any"
          },
          "maxWorkPercentage": {
            "title": "Workload up to",
            "enum": [
              "any",
              "10",
              "20",
              "30",
              "40",
              "50",
              "60",
              "70",
              "80",
              "90",
              "100"
            ],
            "type": "string",
            "description": "Only offers whose workload (taux d'activite) starts at or below this percentage, for example 50 finds part-time roles. Applied by ge.ch itself.",
            "default": "any"
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only offers published in the last N days. Applied by this actor on each offer's publication date, so it needs to read the job pages. Leave empty for all offers."
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "ge.ch listing URLs to read, for example https://www.ge.ch/offres-emploi-etat-geneve/liste-offres?type_contrat=CDI. Each URL counts as one query.",
            "items": {
              "type": "string"
            }
          },
          "directUrls": {
            "title": "Direct job URLs",
            "type": "array",
            "description": "Individual ge.ch job page URLs, for example https://www.ge.ch/offres-emploi-etat-geneve/liste-offres/2150. Always read as full detail pages, useful to check whether a posting is still live.",
            "items": {
              "type": "string"
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Job pages fetched in parallel. Higher is faster. The default of 5 is safe for ge.ch.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}