{
  "openapi": "3.0.1",
  "info": {
    "title": "Welcome to the Jungle Jobs Scraper – WTTJ Jobs & Salary Data",
    "description": "Extract job listings from Welcome to the Jungle (WTTJ): titles, salaries, remote policy, contract type, experience level and full company data (size, funding, website). Filter by keyword, category and experience. Export to JSON, CSV or Excel. Fast Algolia API — no proxy or login required.",
    "version": "1.0",
    "x-build-id": "ktckN5Xn84lW0nSAU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~welcome-to-the-jungle-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-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/logiover~welcome-to-the-jungle-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-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/logiover~welcome-to-the-jungle-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-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": "Free-text keyword to search for jobs. Examples: 'python developer', 'product manager', 'data scientist', 'UX designer'. Matched against job title and description. Leave empty to return all jobs without a keyword filter.",
            "default": ""
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "fr"
            ],
            "type": "string",
            "description": "Language of the job listings to return. Use 'en' for English-language jobs (international companies) or 'fr' for French-language jobs (primarily French companies). This also determines the WTTJ index searched.",
            "default": "en"
          },
          "contractTypes": {
            "title": "Contract Types",
            "type": "array",
            "description": "Filter by employment contract type. Accepted values: 'full_time' (permanent), 'internship', 'part_time', 'freelance' (contract/consulting), 'apprenticeship' (work-study, also accepts 'alternating'), 'temporary', 'graduate_program', 'vie' (French international volunteer program), 'volunteer', 'other'. Multiple values can be combined. Leave empty for all contract types.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remote": {
            "title": "Remote Policy",
            "type": "array",
            "description": "Filter by remote work policy. Accepted values: 'full' (fully remote), 'partial' (hybrid), 'no' (on-site only), 'punctual' (occasional remote). Multiple values can be combined. Leave empty to include all policies.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Job Categories",
            "type": "array",
            "description": "Filter by profession category. Enter a keyword and it is matched against WTTJ's live category list — e.g. 'tech' matches Tech & Engineering, 'sales' matches Sales & Customer Service, 'finance' matches Business & Finance, 'marketing' matches Communication, Marketing & Advertising, 'hr' matches HR & People, 'product' matches Project & Product Management. Other categories include healthcare, hospitality, construction, logistics, consulting. Multiple values can be combined. Leave empty for all categories.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "experienceMin": {
            "title": "Min Experience (years)",
            "type": "integer",
            "description": "Filter to jobs requiring at least this many years of experience. For example, set 3 to exclude entry-level and junior roles. Leave empty to include all experience levels.",
            "default": null
          },
          "experienceMax": {
            "title": "Max Experience (years)",
            "type": "integer",
            "description": "Filter to jobs requiring at most this many years of experience. For example, set 2 to return only junior and entry-level roles. Leave empty to include all experience levels.",
            "default": null
          },
          "salaryMin": {
            "title": "Minimum Yearly Salary",
            "type": "integer",
            "description": "Only return jobs with a disclosed minimum yearly salary above this value (in the job's local currency). For example, set 50000 to exclude low-salary listings. Only applies to jobs that have published salary information.",
            "default": null
          },
          "maxJobs": {
            "title": "Max Jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of job listings to save to the dataset. The scraper fetches 30 jobs per page and paginates automatically until this limit is reached. Set to 0 for unlimited results.",
            "default": 100
          },
          "fetchJobDetails": {
            "title": "Fetch Full Job Details",
            "type": "boolean",
            "description": "When enabled, the scraper makes an additional REST API call per job to retrieve the full job description and any extra salary information not available from the search index. Produces richer output but is significantly slower.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}