# Welcome to the Jungle Jobs Scraper (WTTJ) (`scrapemint/welcome-to-the-jungle-jobs-scraper`) Actor

Welcome to the Jungle jobs in France, the US, the UK and beyond: company size and sector, city, contract, remote policy, salary range, experience, missions, plus optional full description, skills and apply link. Past the 1,000-result cap. $0.002 per job.

- **URL**: https://apify.com/scrapemint/welcome-to-the-jungle-jobs-scraper.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Welcome to the Jungle Jobs Scraper (WTTJ)

Jobs from **Welcome to the Jungle** (welcometothejungle.com, ex-Otta) as clean rows: title, **company with size, sector, founded year and logo**, city and country with coordinates, contract (CDI, internship, alternance, freelance...), **remote policy**, **salary range**, minimum experience, profession, key missions and requirements. Turn on details for the **full description, skills, tools, hiring process and the apply link** (often straight to the company's Greenhouse, Lever or Workday page).

France, the US, the UK, Germany, Spain and more: about 89,000 live jobs. Paste a search URL with any filters, or set keywords and filters here. Searches with more than 1,000 results are split by date automatically, so one run can export a whole country.

No API key, no login, no proxy. $0.002 per job, no start fee.

### What you get per job

- `title`, `url`, `jobId`, `publishedAt`, `language`
- `companyName`, `companyUrl`, `companySize` (employees), `companyFoundedYear`, `companySummary`, `companyLabels`, `companyLogo`
- `sectors`, `sectorGroups`, `profession`, `professionCategory`, `professionSubcategory`
- `city`, `state`, `country`, `countryCode`, `latitude`, `longitude`, `offices`
- `contractType`, `contractDurationMinMonths`, `contractDurationMaxMonths`
- `remote`: fulltime, partial (hybrid), punctual (occasional), no, unknown
- `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `salaryYearlyMin`
- `experienceMinYears`, `educationLevel`
- `summary`, `keyMissions`, `requirements`, `benefits`

With **Full description, skills and apply link** on:

- `description`, `requirementsFull`, `recruitmentProcess`
- `skills`, `tools` (e.g. Looker, NetSuite, Figma)
- `address`, `startDate`, `updatedAt`
- `applyUrl`, `ats`

### Example input

A search copied from the site, with its filters:

```json
{
  "searchUrls": ["https://www.welcometothejungle.com/en/jobs?query=marketing&refinementList%5Boffices.country_code%5D%5B%5D=US&refinementList%5Bremote%5D%5B%5D=fulltime"]
}
```

Every internship and apprenticeship in Paris and Lyon from the last 7 days:

```json
{
  "cities": ["Paris", "Lyon"],
  "contractTypes": ["internship", "apprenticeship"],
  "postedWithinDays": 7,
  "maxItemsPerSearch": 20000
}
```

Data engineering jobs in France, with full text and apply links:

```json
{
  "queries": ["data engineer"],
  "countries": ["FR"],
  "includeDetails": true
}
```

### Example output

```json
{
  "title": "Marketing Analytics Director",
  "url": "https://www.welcometothejungle.com/en/companies/grafana-labs/jobs/marketing-analytics-director_us_tnjnjieb",
  "companyName": "Grafana Labs",
  "companySize": 1601,
  "sectors": ["Software", "Big Data"],
  "profession": "Marketing Manager",
  "country": "United States",
  "countryCode": "US",
  "contractType": "full_time",
  "remote": "fulltime",
  "salaryMin": 178503,
  "salaryMax": 214203,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "publishedAt": "2026-10-08T00:21:23Z",
  "tools": ["Grafana", "Looker", "Google BigQuery", "Tableau", "Snowflake", "SQL", "Python"],
  "applyUrl": "https://job-boards.greenhouse.io/grafanalabs/jobs/6107094004"
}
```

### Uses

- **Recruiters and agencies:** who is hiring for which profiles in Paris, London or New York, with company size and sector to qualify the lead
- **Job boards and aggregators:** a daily feed of new jobs with salary, remote policy and apply link
- **Students:** every internship, alternance and VIE in one export
- **Salary and labour research:** pay ranges by profession, city, contract and experience
- **Sales prospecting:** fast-growing companies (by size, labels and job volume) to approach

### Pricing

- **$0.002** per job
- **$0.003** per job with Full description, skills and apply link on (instead of $0.002, not on top)
- No start fee. A search with no results is free.

### Notes

- Ads are in the language the company wrote them in (mostly French or English); `language` tells you which. Filter with Job ad language.
- `city` and `country` are the job's first office; `offices` lists all of them. A country or city filter matches any office.
- Salary fields are filled when the company published a range (more common in the US and UK).
- A job that shows up in two of your searches is kept once.
- For other job sites, see [Indeed Jobs Scraper](https://apify.com/scrapemint/indeed-jobs-scraper), [LinkedIn Jobs Scraper](https://apify.com/scrapemint/linkedin-jobs-scraper) and [Dice Jobs Scraper](https://apify.com/scrapemint/dice-jobs-scraper).

# Actor input Schema

## `searchUrls` (type: `array`):

Job search pages copied from welcometothejungle.com/en/jobs (or /fr/jobs) with any filters set on the site: country, contract, remote, profession, sector... Each URL is one search.

## `queries` (type: `array`):

Or build searches here. One search per keyword, e.g. data engineer, product manager, stage marketing. Leave empty with filters set to get every job matching the filters.

## `countries` (type: `array`):

Two-letter country codes, e.g. FR, US, GB, DE, ES. Empty means all.

## `cities` (type: `array`):

City names as the site writes them, e.g. Paris, Lyon, London, New York. Empty means all.

## `contractTypes` (type: `array`):

Any of these. Empty means all.

## `remote` (type: `array`):

Any of these. Empty means all.

## `languages` (type: `array`):

Language the ad is written in, e.g. en, fr, de, es. Empty means all.

## `postedWithinDays` (type: `integer`):

Only jobs published in the last this many days. Empty means any time.

## `includeDetails` (type: `boolean`):

Reads each job for its full description, requirements, hiring process, skills, tools, street address, start date and the apply link (often the company's ATS). $0.003 per job instead of $0.002.

## `maxItemsPerSearch` (type: `integer`):

Newest first. Searches with more than 1,000 results are split by date, so a broad search can return tens of thousands.

## Actor input object example

```json
{
  "searchUrls": [],
  "queries": [
    "data engineer"
  ],
  "countries": [],
  "cities": [],
  "contractTypes": [],
  "remote": [],
  "languages": [],
  "includeDetails": false,
  "maxItemsPerSearch": 1000
}
```

# Actor output Schema

## `jobs` (type: `string`):

Title, company, location, contract, remote, salary, experience, profession, missions and requirements, and the full description when asked for.

## `summary` (type: `string`):

Job counts per search and any searches that failed.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "data engineer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/welcome-to-the-jungle-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": ["data engineer"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/welcome-to-the-jungle-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "data engineer"
  ]
}' |
apify call scrapemint/welcome-to-the-jungle-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapemint/welcome-to-the-jungle-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/P6xAhUMYlgDDeoJou/builds/TmphFiA7cgkotMU0a/openapi.json
