{
  "openapi": "3.0.1",
  "info": {
    "title": "Welcome to the Jungle Jobs Scraper - Daily New Job Alerts",
    "description": "Scrape Welcome to the Jungle jobs in France, Europe and the US: title, company, salary, remote, contract (CDI, CDD, internship, alternance), description and apply link. Search by keyword, city or company. Schedule it daily: only new jobs. Error rows are free.",
    "version": "0.1",
    "x-build-id": "D4jLtQQ4mrmsLoFga"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~welcome-to-the-jungle-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-welcome-to-the-jungle-jobs",
        "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/scrapewise~welcome-to-the-jungle-jobs/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-welcome-to-the-jungle-jobs",
        "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/scrapewise~welcome-to-the-jungle-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-welcome-to-the-jungle-jobs",
        "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": {
          "startUrls": {
            "title": "Welcome to the Jungle URLs",
            "type": "array",
            "description": "Welcome to the Jungle links, one per line: search URLs copied from your browser after setting the filters on welcometothejungle.com (for example https://www.welcometothejungle.com/en/jobs?query=python&sortBy=mostRecent), company URLs (https://www.welcometothejungle.com/en/companies/<name>) or job URLs. Every filter in a search URL is kept. Job URLs come back with the full description. Leave empty to search with the fields below. Also accepts 'searchUrls' or 'urls'.",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords, one per line (for example python, product manager, data). Each term is a separate search with the locations and filters below, and every row keeps its term. Leave empty for every job matching the filters. Also accepts 'queries', 'query' or 'keywords'.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, regions or countries, one per line (for example Paris, London, Berlin, Ile-de-France, France, Germany). English, French or local names work, in any case and with or without accents (London or Londres, Munich or München). Several locations are combined into one search. Use 'remote' for fully remote jobs. Leave empty for every location. Also accepts 'location', 'cities' or 'city'.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Company names or Welcome to the Jungle company URLs, one per line (for example doctolib or https://www.welcometothejungle.com/en/companies/<name>). Returns that company's open jobs, with the search terms, locations and filters applied when given. Also accepts 'companyUrls' or 'company'.",
            "items": {
              "type": "string"
            }
          },
          "contractTypes": {
            "title": "Contract types",
            "uniqueItems": true,
            "type": "array",
            "description": "Only these contract types (permanent, fixed-term, freelance, internship, apprenticeship, part time and more). Pick one or more; empty means any. Through the API, French values such as CDI, CDD, stage or alternance also work. Also accepts 'contractType' or 'contract'.",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "temporary",
                "freelance",
                "internship",
                "apprenticeship",
                "partTime",
                "vie",
                "graduateProgram",
                "volunteer",
                "other"
              ],
              "enumTitles": [
                "Permanent, full time (CDI)",
                "Fixed-term (CDD)",
                "Freelance",
                "Internship (stage)",
                "Apprenticeship / work-study (alternance)",
                "Part time",
                "VIE (international volunteer program)",
                "Graduate program",
                "Volunteer",
                "Other"
              ]
            }
          },
          "remote": {
            "title": "Remote work",
            "uniqueItems": true,
            "type": "array",
            "description": "Only jobs with these remote policies: fully remote, hybrid (partial remote), occasional remote, on site or not specified. Pick one or more; empty means any. Also accepts 'remoteTypes'.",
            "items": {
              "type": "string",
              "enum": [
                "fullRemote",
                "hybrid",
                "occasional",
                "onSite",
                "unknown"
              ],
              "enumTitles": [
                "Fully remote",
                "Hybrid (partial remote)",
                "Occasional remote",
                "On site, no remote",
                "Not specified"
              ]
            }
          },
          "experienceLevels": {
            "title": "Experience",
            "uniqueItems": true,
            "type": "array",
            "description": "Minimum experience the job asks for (less than 6 months, 6 months to 1 year, 1 to 3 years, 3 to 5 years, 5 to 10 years, more than 10 years). Pick one or more; empty means any. Through the API, junior, mid, senior and expert also work. Also accepts 'experienceLevel' or 'seniority'.",
            "items": {
              "type": "string",
              "enum": [
                "lessThan6Months",
                "6MonthsTo1Year",
                "1To3Years",
                "3To5Years",
                "5To10Years",
                "moreThan10Years"
              ],
              "enumTitles": [
                "Less than 6 months",
                "6 months to 1 year",
                "1 to 3 years",
                "3 to 5 years",
                "5 to 10 years",
                "More than 10 years"
              ]
            }
          },
          "professions": {
            "title": "Job categories",
            "type": "array",
            "description": "Welcome to the Jungle job categories or subcategories, one per line (for example Tech & Engineering, Data & Business Intelligence, Product Management, Sales). Close names match too. Empty means any. Also accepts 'jobCategories' or 'profession'.",
            "items": {
              "type": "string"
            }
          },
          "sectors": {
            "title": "Company sectors",
            "type": "array",
            "description": "Company industries, one per line (for example Tech, Software, Artificial Intelligence, Banking, Fintech). Close names match too. Empty means any. Also accepts 'industries' or 'sector'.",
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Job language",
            "uniqueItems": true,
            "type": "array",
            "description": "Only jobs written in these languages (for example English, French, German, Spanish). Pick one or more; empty means any. Useful to find English-language jobs in France. Also accepts 'language'.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "fr",
                "de",
                "es",
                "it",
                "pt",
                "nl"
              ],
              "enumTitles": [
                "English",
                "French",
                "German",
                "Spanish",
                "Italian",
                "Portuguese",
                "Dutch"
              ]
            }
          },
          "minSalary": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs that publish a salary with a yearly minimum at or above this amount, in the job's own currency (EUR, GBP or USD), for example 50000. Jobs without a published salary are left out when this is set. Leave empty for no salary filter. Also accepts 'minYearlySalary'."
          },
          "postedWithinDays": {
            "title": "Posted in the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs published in the last N days (for example 7). Empty means any date. Also accepts 'maxAgeDays'."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Newest (default) reads newest first and goes past Welcome to the Jungle's 1,000-results cap per search. Relevance uses the site's ranking but stops at 1,000 results per search. 'Only new jobs' always reads newest first. Also accepts 'sort'.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max jobs per search",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum jobs for each search term, company or URL (default 50). 0 means up to 5,000. You pay per job delivered, so with 3 terms and 50 here a run delivers up to 150 jobs. Also accepts 'maxItemsPerSearch', 'maxResults' or 'limit'.",
            "default": 50
          },
          "includeDescription": {
            "title": "Include the full job description",
            "type": "boolean",
            "description": "Reads each job's own page for the full description, recruitment process, skills, tools, start date and the external apply link (ATS). Charged as a separate 'Full job description' event per job, and the run is slower. Every row already has the summary, key missions and candidate profile without it. Off by default. Also accepts 'includeDetails'.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Text format",
            "enum": [
              "markdown",
              "text",
              "html"
            ],
            "type": "string",
            "description": "Format of the description, recruitment process and candidate profile fields: Markdown (default, keeps headings and lists), plain text, or the original HTML.",
            "default": "markdown"
          },
          "includeCompanies": {
            "title": "Add a row per company",
            "type": "boolean",
            "description": "Adds one company row per company found (website, employee count, sectors, headquarters and offices, labels), charged as a separate 'Company profile' event, once per company per run however many of its jobs are delivered. Off by default. Also accepts 'includeCompanyDetails'.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "For scheduled runs. Remembers which jobs each search (same terms, locations and filters) already returned, in a named key-value store in your account ('welcome-to-the-jungle-jobs-state'), and delivers only jobs published since. The first run delivers up to the limit and marks what it read as seen. Seen jobs are not delivered and not charged. Forces newest first. Delete the store to start over. Also accepts 'onlyNewJobs'.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "The default Apify Proxy (datacenter) works. Refused IPs are dropped and replaced; if the datacenter keeps being refused, the Actor moves to the residential group by itself when your account has it. Keep the default.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}