{
  "openapi": "3.0.1",
  "info": {
    "title": "Welcome to the Jungle Jobs Scraper",
    "description": "Scrape Welcome to the Jungle (WTTJ) jobs by keyword, location, salary, remote, or direct URLs. Extract titles, companies, salaries, skills & apply links — no login. Ideal for recruiting intel, salary research, and job aggregators. Export JSON/CSV.",
    "version": "1.0",
    "x-build-id": "gdAUc5pkb7e6nWEuk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/insights_data~welcome-to-the-jungle-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-insights_data-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/insights_data~welcome-to-the-jungle-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-insights_data-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/insights_data~welcome-to-the-jungle-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-insights_data-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": {
          "startUrls": {
            "title": "🔗 Direct Job URLs (optional — overrides search)",
            "type": "array",
            "description": "⚠️ Only fill this in if you want to scrape specific listings instead of searching. Paste one or more direct Welcome to the Jungle job links here to scrape exactly those, skipping keyword search entirely. Supports bulk input. Leave this EMPTY (the default) to use the search & filters below — that's what most users want.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "query": {
            "title": "🔍 Search Query",
            "type": "string",
            "description": "Free-text keyword to search for jobs — job title, skill, or company. Examples: \"python developer\", \"product manager\", \"data scientist\". Leave empty to return all jobs matching your other filters.",
            "default": ""
          },
          "searchOnlyInJobTitle": {
            "title": "🎯 Match query in job title only",
            "type": "boolean",
            "description": "When enabled, your search query is matched only against job titles instead of the full listing. Useful for precise title searches.",
            "default": false
          },
          "websiteCountry": {
            "title": "🌍 Website Region",
            "enum": [
              "en",
              "fr",
              "es",
              "cs",
              "sk"
            ],
            "type": "string",
            "description": "Which regional Welcome to the Jungle site to use. Translates category, sector and benefit labels into the local language — job titles & descriptions stay in their original language.",
            "default": "en"
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "City, region or country name to search around, e.g. \"Paris\", \"Berlin\", \"Remote\". Leave empty for no location filter."
          },
          "locationRadius": {
            "title": "📏 Search Radius (miles)",
            "enum": [
              "5",
              "10",
              "20",
              "50",
              "100"
            ],
            "type": "string",
            "description": "How far around the location above to search. Only applies when Location is set.",
            "default": "20"
          },
          "countryCode": {
            "title": "🏳️ Country Filter",
            "type": "string",
            "description": "Filter by the ISO country code of the job's office (e.g. US, FR, DE, GB, ES). Overrides the Location field above when set."
          },
          "sortBy": {
            "title": "↕️ Sort Results By",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Order results by relevance to your search, or by newest posting date first.",
            "default": "relevance"
          },
          "datePosted": {
            "title": "🗓️ Posted Within",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Only return jobs posted within this time window. Widen the window if a niche search returns very few results.",
            "default": "any"
          },
          "contractTypes": {
            "title": "📄 Contract Type",
            "type": "array",
            "description": "Filter by one or more employment contract types. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "PART_TIME",
                "INTERNSHIP",
                "APPRENTICESHIP",
                "FREELANCE",
                "TEMPORARY",
                "GRADUATE_PROGRAM",
                "VIE",
                "VOLUNTEER",
                "OTHER"
              ],
              "enumTitles": [
                "Full-time (permanent)",
                "Part-time",
                "Internship",
                "Apprenticeship / Work-study",
                "Freelance / Contract",
                "Temporary",
                "Graduate program",
                "VIE (international volunteer)",
                "Volunteer",
                "Other"
              ]
            }
          },
          "remote": {
            "title": "🏠 Remote Work Policy",
            "type": "array",
            "description": "Filter by how remote-friendly the role is. Leave empty to include every policy.",
            "items": {
              "type": "string",
              "enum": [
                "fulltime",
                "partial",
                "punctual",
                "no",
                "unknown"
              ],
              "enumTitles": [
                "🏡 Fully remote",
                "🔀 Hybrid (partial)",
                "🗓️ Occasional remote",
                "🏢 On-site only",
                "❓ Unknown"
              ]
            }
          },
          "sector": {
            "title": "🏭 Industry Sector",
            "type": "array",
            "description": "Filter by company industry. Type a keyword (e.g. \"tech\", \"finance\", \"retail\") — it's matched against Welcome to the Jungle's live sector list, so it always reflects their current categories.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "Tech",
                "Industry",
                "Distribution",
                "Education, Training & Recruitment",
                "Consulting & Audit",
                "Banking, Insurance & Finance",
                "Health, Social & Environment",
                "Food & Beverage",
                "Advertising / Marketing / Agency",
                "Public Administration",
                "Engineering",
                "Mobility & Transport",
                "Fashion, Luxury, Beauty & Lifestyle",
                "Real Estate",
                "Culture, Media & Entertainment",
                "Hotel, Tourism & Leisure",
                "Corporate Services",
                "Nonprofit & Association",
                "Architecture",
                "Legal & Law"
              ]
            }
          },
          "categories": {
            "title": "🗂️ Job Category",
            "type": "array",
            "description": "Filter by profession category. Type a keyword — e.g. \"tech\" matches Tech & Engineering, \"sales\" matches Sales & Customer Service, \"marketing\" matches Communication & Marketing, \"hr\" matches HR & People. Matched against Welcome to the Jungle's live category list. When 'Include Full Job Details' is on, this filter is also verified against each job's full record for accuracy.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "Sales & Customer Service",
                "Tech & Engineering",
                "Business & Finance",
                "Project & Product Management",
                "HR & People",
                "Research & Development",
                "Transport & Logistics",
                "Communication, Marketing & Advertising",
                "Healthcare",
                "Construction",
                "Hospitality",
                "Consulting & Strategy",
                "Legal",
                "Education",
                "Culture & Arts",
                "Craftsmanship & Manual Labor"
              ]
            }
          },
          "experienceLevel": {
            "title": "🎓 Experience Level",
            "enum": [
              "0-1",
              "1-3",
              "3-5",
              "5-10",
              "10+"
            ],
            "type": "string",
            "description": "Filter by required years of experience. Ignored if Min/Max Experience below are set."
          },
          "experienceMin": {
            "title": "🎓 Min Experience (years)",
            "type": "integer",
            "description": "Only jobs requiring at least this many years of experience. Overrides Experience Level above when set."
          },
          "experienceMax": {
            "title": "🎓 Max Experience (years)",
            "type": "integer",
            "description": "Only jobs requiring at most this many years of experience."
          },
          "salaryMin": {
            "title": "💰 Minimum Yearly Salary",
            "type": "integer",
            "description": "Only return jobs with a disclosed minimum yearly salary at or above this value (in the job's local currency). Only applies to listings that publish salary info."
          },
          "companySize": {
            "title": "🏢 Company Size",
            "enum": [
              "0-15",
              "15-50",
              "50-250",
              "250-2000",
              "2000+"
            ],
            "type": "string",
            "description": "Filter by number of employees at the hiring company."
          },
          "language": {
            "title": "🈯 Job Content Language",
            "type": "array",
            "description": "Only return jobs written in these language(s). Leave empty for all languages.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "fr",
                "de",
                "es",
                "it",
                "pt",
                "cs",
                "nl",
                "pl",
                "ar",
                "da",
                "fi",
                "ja",
                "no"
              ],
              "enumTitles": [
                "English",
                "French",
                "German",
                "Spanish",
                "Italian",
                "Portuguese",
                "Czech",
                "Dutch",
                "Polish",
                "Arabic",
                "Danish",
                "Finnish",
                "Japanese",
                "Norwegian"
              ]
            }
          },
          "maxItems": {
            "title": "📊 Maximum Jobs to Scrape",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many job listings. Set to 0 for unlimited (the Actor paginates automatically through every matching result).",
            "default": 100
          },
          "includeDetails": {
            "title": "📝 Include Full Job Details",
            "type": "boolean",
            "description": "When enabled, fetches the complete listing for every job — full description, apply link, required skills & tools, benefits and extended company info. Disable for a much faster run that returns only core search fields.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy Configuration",
            "type": "object",
            "description": "By default the Actor connects directly (no proxy). If a request gets blocked, it automatically escalates to a datacenter proxy, then a residential proxy, and sticks with whichever tier works. You can also pin a specific proxy group here if you prefer.",
            "default": {
              "useApifyProxy": false
            }
          },
          "concurrency": {
            "title": "⚙️ Concurrent Requests",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many job detail pages to fetch in parallel. Higher is faster but more likely to trigger rate limits.",
            "default": 8
          },
          "maxRetries": {
            "title": "🔁 Max Retries per Request",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many times to retry a failed or blocked request (at the top proxy tier) before giving up on it.",
            "default": 3
          },
          "requestDelay": {
            "title": "⏱️ Delay Between Search Pages (seconds)",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Polite delay between paginated search requests when a very large result set has to be split into multiple pages. Doesn't apply to per-job detail fetches.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}