{
  "openapi": "3.0.1",
  "info": {
    "title": "Welcome to the Jungle Jobs Scraper",
    "description": "Welcome to the Jungle Jobs Scraper SD - Welcome to the Jungle Jobs Scraper is a job data tool that extracts WTTJ job listings by keyword, company or URL: title, company, salary, remote policy, contract, offices, skills, apply link and full description. No login.",
    "version": "1.0",
    "x-build-id": "WFGvGmMtawb2m4p9K"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neuro-scraper~welcome-to-the-jungle-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neuro-scraper-welcome-to-the-jungle-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/neuro-scraper~welcome-to-the-jungle-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-neuro-scraper-welcome-to-the-jungle-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/neuro-scraper~welcome-to-the-jungle-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-neuro-scraper-welcome-to-the-jungle-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": {
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Keyword searched across Welcome to the Jungle's whole job board (title, company, missions, profile), e.g. \"data engineer\", \"product manager\", \"marketing\". Leave empty and set filters (contract type, country ...) to list every job that matches them."
          },
          "searches": {
            "title": "More search queries",
            "type": "array",
            "description": "Extra keywords, one per line, each searched separately with the same filters, e.g. \"devops\", \"UX designer\". Jobs found by several searches are output once.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Welcome to the Jungle URLs",
            "type": "array",
            "description": "Job search URLs (the query and refinementList[...] filters in the URL are kept, e.g. https://www.welcometothejungle.com/en/jobs?query=python&refinementList%5Bcontract_type%5D%5B%5D=full_time), company URLs (https://www.welcometothejungle.com/en/companies/anthropic - all its open jobs) or single job URLs (https://www.welcometothejungle.com/en/companies/<company>/jobs/<job>).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Company slugs or company page URLs, one per line, e.g. \"anthropic\", \"doctolib\", https://www.welcometothejungle.com/en/companies/qonto. Lists every open job of each company (the filters below still apply).",
            "items": {
              "type": "string"
            }
          },
          "websiteCountry": {
            "title": "Website language",
            "enum": [
              "en",
              "fr",
              "es",
              "cs",
              "sk"
            ],
            "type": "string",
            "description": "Which language version of the site to read: the language of category, sector and benefit names and of the job URLs. Every version holds the same jobs.",
            "default": "en"
          },
          "language": {
            "title": "Job language",
            "type": "array",
            "description": "Keep only jobs written in these languages (Welcome to the Jungle's language facet). Empty = all languages.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "fr",
                "de",
                "es",
                "it",
                "pt",
                "nl",
                "cs",
                "sk",
                "pl"
              ],
              "enumTitles": [
                "English",
                "French",
                "German",
                "Spanish",
                "Italian",
                "Portuguese",
                "Dutch",
                "Czech",
                "Slovak",
                "Polish"
              ]
            },
            "default": []
          },
          "contractType": {
            "title": "Contract type",
            "type": "array",
            "description": "Keep only these contract types (several = any of them). Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "internship",
                "apprenticeship",
                "temporary",
                "freelance",
                "vie",
                "graduate_program",
                "other"
              ],
              "enumTitles": [
                "Permanent / full-time",
                "Part-time",
                "Internship",
                "Apprenticeship / work-study",
                "Temporary / fixed-term",
                "Freelance",
                "VIE (international volunteer)",
                "Graduate program",
                "Other"
              ]
            },
            "default": []
          },
          "remote": {
            "title": "Remote policy",
            "type": "array",
            "description": "Keep only these remote-work policies (several = any of them). Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "fulltime",
                "partial",
                "punctual",
                "no",
                "unknown"
              ],
              "enumTitles": [
                "Fully remote",
                "Partial remote (hybrid)",
                "Occasional remote",
                "No remote",
                "Not specified"
              ]
            },
            "default": []
          },
          "experienceLevel": {
            "title": "Experience required",
            "enum": [
              "any",
              "0-1",
              "1-3",
              "3-5",
              "5-10",
              "10+"
            ],
            "type": "string",
            "description": "Keeps jobs whose minimum required experience falls in this band (Welcome to the Jungle's experience_level_minimum, in years).",
            "default": "any"
          },
          "educationLevel": {
            "title": "Education level",
            "type": "array",
            "description": "Keep only jobs asking for these education levels (French levels, as on the site). Most jobs state none, so this filter shrinks results a lot.",
            "items": {
              "type": "string",
              "enum": [
                "no_diploma",
                "cap",
                "bep",
                "bac",
                "bac_1",
                "bac_2",
                "bac_3",
                "bac_4",
                "bac_5",
                "phd"
              ],
              "enumTitles": [
                "No diploma",
                "CAP",
                "BEP",
                "Baccalaureate",
                "Bac +1",
                "Bac +2",
                "Bac +3 (bachelor)",
                "Bac +4",
                "Bac +5 (master)",
                "PhD"
              ]
            },
            "default": []
          },
          "salaryMin": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keeps jobs whose published yearly minimum salary is at least this amount (in the job's own currency), e.g. 60000. Jobs without a salary are left out when this is set. 0 = off.",
            "default": 0
          },
          "onlyWithSalary": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "Keeps only jobs that disclose a salary range.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keeps jobs published in the last N days, e.g. 1 (last 24 hours), 7 or 30. 0 = any time.",
            "default": 0
          },
          "countryCode": {
            "title": "Country code",
            "type": "array",
            "description": "Two-letter office country codes, e.g. \"FR\", \"US\", \"GB\", \"DE\" (any of them). Empty = worldwide.",
            "items": {
              "type": "string"
            }
          },
          "city": {
            "title": "City",
            "type": "array",
            "description": "Office city names as the site writes them, e.g. \"Paris\", \"New York\", \"London\", \"Lyon\" (any of them). For a radius search use Location instead.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Place name resolved with the site's own location search, e.g. \"Paris\", \"Berlin\", \"San Francisco\", \"France\". A city searches around it (Radius); a country keeps offices in that country. \"Worldwide\" or empty = no location filter."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Search radius around Location or Latitude/Longitude, in kilometres, e.g. 25.",
            "default": 25
          },
          "latitude": {
            "title": "Latitude",
            "type": "string",
            "description": "Centre of a radius search, e.g. \"48.8566\" (with Longitude). Overrides Location."
          },
          "longitude": {
            "title": "Longitude",
            "type": "string",
            "description": "Centre of a radius search, e.g. \"2.3522\" (with Latitude)."
          },
          "sector": {
            "title": "Company sector",
            "type": "array",
            "description": "Company sectors by name or Welcome to the Jungle reference, e.g. \"Tech\", \"Software\", \"Banking / Insurance / Finance\", \"artificial-intelligence-machine-learning\". Matched against the site's own sector filter at run time (any of them).",
            "items": {
              "type": "string"
            }
          },
          "profession": {
            "title": "Job category / profession",
            "type": "array",
            "description": "Job categories or sub-categories by name or reference, e.g. \"Tech & Engineering\", \"Data / Business Intelligence\", \"Sales\", \"product-management\". Matched against the site's own category filter at run time (any of them).",
            "items": {
              "type": "string"
            }
          },
          "companySize": {
            "title": "Company size",
            "enum": [
              "any",
              "0-15",
              "15-50",
              "50-250",
              "250-2000",
              "2000+"
            ],
            "type": "string",
            "description": "Keeps jobs at companies of this size (number of employees published on the company profile).",
            "default": "any"
          },
          "onlyPromoted": {
            "title": "Only promoted jobs",
            "type": "boolean",
            "description": "Keeps only jobs the employer boosts (sponsored listings).",
            "default": false
          },
          "searchInTitleOnly": {
            "title": "Match the query in the job title only",
            "type": "boolean",
            "description": "Searches the keyword in job titles only (e.g. \"data\" 9,454 jobs anywhere vs 2,749 in titles, measured 2026-10-09).",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Order of the results (beyond the first 1,000 jobs of a search the rest follow in the board's own order).",
            "default": "relevance"
          },
          "includeDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Opens each job's detail data for the full description (text + HTML), recruitment process, skills, tools, apply link, ATS, start date and company facts (average age, gender parity, revenue, website). One extra request per job; off = search data only (faster).",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel detail requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many job details are fetched at the same time, each through its own proxy session.",
            "default": 3
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many jobs in total (all searches together). The scraper follows the result pages (30 jobs each) and, past 1,000 jobs of one search, the board's browse cursor until this number or the end.",
            "default": 30
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Welcome to the Jungle answered every logged-out request without a challenge in tests; residential proxies are the default for steady runs on the Apify platform.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}