{
  "openapi": "3.0.1",
  "info": {
    "title": "HelloWork Jobs Scraper API - France Job Board",
    "description": "When a French employer publishes no salary, HelloWork prints its own estimate in the same slot, labelled Estimation Hellowork. Every row says which you're holding. Title, company, city, department, CDI, CDD, interim, stage, alternance, skills and posted date. $0.49 per 1,000.",
    "version": "0.1",
    "x-build-id": "2CxTgVPeLEQYrpFCs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~hellowork-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-hellowork-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/dami_studio~hellowork-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-hellowork-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/dami_studio~hellowork-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-hellowork-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": {
          "searchQueries": {
            "title": "Job keywords",
            "type": "array",
            "description": "One or more searches, exactly as you would type them into HelloWork. French works best (\"développeur\", \"comptable\", \"aide soignant\"), English job titles also match. Each keyword is walked separately, so [\"développeur\", \"data analyst\"] runs two searches.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, department or region in France, for example \"Paris\", \"Lyon\", \"Bordeaux\" or \"Île-de-France\". Leave empty to search the whole country."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Search radius around the location, in kilometres. Only used when a location is set."
          },
          "contractTypes": {
            "title": "Contract type",
            "type": "array",
            "description": "Restrict to one or more French contract types. Leave empty for all of them.",
            "items": {
              "type": "string",
              "enum": [
                "cdi",
                "cdd",
                "interim",
                "stage",
                "alternance",
                "freelance",
                "independant",
                "fonctionnaire",
                "franchise",
                "associe",
                "stage-lycee"
              ],
              "enumTitles": [
                "CDI (permanent)",
                "CDD (fixed term)",
                "Intérim (temp work)",
                "Stage (internship)",
                "Alternance (apprenticeship)",
                "Freelance",
                "Indépendant",
                "Fonctionnaire (public sector)",
                "Franchise",
                "Associé (partner)",
                "Stage de lycée (school placement)"
              ]
            },
            "default": []
          },
          "telework": {
            "title": "Remote work",
            "type": "array",
            "description": "Restrict to HelloWork's own télétravail bands. Note that only about 18% of postings carry any remote tag at all, so filtering here narrows results hard.",
            "items": {
              "type": "string",
              "enum": [
                "full",
                "partial",
                "occasional",
                "none"
              ],
              "enumTitles": [
                "Full remote (télétravail complet)",
                "Hybrid (télétravail partiel)",
                "Occasional remote",
                "No remote work"
              ]
            },
            "default": []
          },
          "workingTime": {
            "title": "Working time",
            "type": "array",
            "description": "Full time, part time, or postings that do not say.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "unspecified"
              ],
              "enumTitles": [
                "Full time (temps plein)",
                "Part time (temps partiel)",
                "Not specified"
              ]
            },
            "default": []
          },
          "experience": {
            "title": "Experience required",
            "type": "array",
            "description": "HelloWork's own experience bands.",
            "items": {
              "type": "string",
              "enum": [
                "0-1",
                "2-3",
                "4-5",
                "6-10",
                "10+",
                "unspecified"
              ],
              "enumTitles": [
                "0-1 year (beginners accepted)",
                "2-3 years",
                "4-5 years",
                "6-10 years",
                "More than 10 years",
                "Not specified"
              ]
            },
            "default": []
          },
          "employerType": {
            "title": "Employer type",
            "type": "array",
            "description": "Who is hiring: the company itself, a recruitment agency, a consultancy (ESN), a temp agency or a training centre.",
            "items": {
              "type": "string",
              "enum": [
                "company",
                "agency",
                "consultancy",
                "temp-agency",
                "training-centre"
              ],
              "enumTitles": [
                "Company (entreprise)",
                "Recruitment agency (cabinet de recrutement)",
                "Consultancy / ESN",
                "Temp agency (travail temporaire)",
                "Training centre"
              ]
            },
            "default": []
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "",
              "day",
              "3days",
              "week",
              "month"
            ],
            "type": "string",
            "description": "Only postings published inside this window. Every row also carries the posted date, so you can filter afterwards too.",
            "default": ""
          },
          "minSalary": {
            "title": "Minimum salary (EUR / year)",
            "minimum": 0,
            "type": "integer",
            "description": "Only postings at or above this yearly salary, using HelloWork's own salary filter. Careful: HelloWork applies it to its own salary estimate as well as to employer-published figures, so most matches still have no published salary. Combine it with \"Only postings that show a salary\" if you want real numbers."
          },
          "onlyWithSalary": {
            "title": "Only postings that show a salary",
            "type": "boolean",
            "description": "Ask HelloWork for postings that display a salary. Measured on a 35,033-result search, this cut it to 27,696 and every card on the first page carried an employer-published figure. Leaving it off returns more rows but only about 63% of them have a salary.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "HelloWork's own ordering: its relevance ranking, or newest first.",
            "default": "relevance"
          },
          "startUrls": {
            "title": "HelloWork URLs",
            "type": "array",
            "description": "Paste HelloWork URLs instead of building a search. Works with a single posting (https://www.hellowork.com/fr-fr/emplois/82120782.html) and with a search page (https://www.hellowork.com/fr-fr/emploi/recherche.html?k=comptable&l=Lyon).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeDetails": {
            "title": "Open each posting for the full record",
            "type": "boolean",
            "description": "Reads each posting's own page, which adds the exact posted date and expiry date, postal code and region, sector, required skills, education level, the company's HelloWork profile, the job reference, and HelloWork's salary estimate when the employer published none. Turn this off for a faster, listing-only run: you keep title, company, location, contract, salary and the approximate posted date.",
            "default": true
          },
          "includeDescription": {
            "title": "Include the full job description",
            "type": "boolean",
            "description": "Adds the complete posting text as HTML and as plain text, plus the requirements section. Needs \"Open each posting\" to be on. It comes from the same request, so it costs no extra time and no extra charge - it only makes the rows larger.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum postings",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many postings. HelloWork serves at most 74 pages (2,220 postings) per individual search, so use several keywords, cities or filters to go beyond that.",
            "default": 50
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave as is. HelloWork answers the plain Apify address, so no proxy is needed; supply your own servers here only if you have a reason to.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}