# Welcome to the Jungle Jobs Scraper: France, Europe, US (`themineworks/welcome-to-the-jungle-jobs-scraper`) Actor

Scrape Welcome to the Jungle jobs by keyword, country and city: title, company with size, sectors and founding year, location, remote policy, contract type, salary, posted date and link. Optional full description and company website. Only new jobs mode for schedules. No login.

- **URL**: https://apify.com/themineworks/welcome-to-the-jungle-jobs-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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: France, Europe, US

[![400 Welcome to the Jungle jobs from two searches in 11 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/welcome-to-the-jungle-jobs-scraper-hero.png)](https://console.apify.com/actors/WOI85dhHwgVpdQuEQ/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **Every job with its company.** Each row carries the company's size, sectors, founding year (on most French profiles), summary and Welcome to the Jungle page, so you can filter jobs by company and companies by hiring. Our final test returned 400 of 400 jobs from France, the US and the UK in 10.9 seconds with 7 requests, company size on 98% of them.
- **Past the 1,000 job limit.** The site's search serves 1,000 jobs per query; this actor splits bigger searches into publication date windows and reads them all, newest first. A test pulled 2,500 US jobs in 75 seconds from 4 windows, every one unique.
- **No login, and you only pay for new jobs on a schedule.** It reads the same public search anyone sees. With `onlyNewJobs` on, a repeat run skips jobs it delivered before: our second test run found 0 new jobs and charged 0. Jobs removed by a filter, duplicates and refused requests are never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/WOI85dhHwgVpdQuEQ/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Jobs and hiring family:** [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Shine.com Jobs Scraper](https://apify.com/themineworks/shine-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Internshala Scraper](https://apify.com/themineworks/internshala-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this into the input (JSON view) and press Start. It returns 20 data engineer jobs in France in about 7 seconds:

```json
{
  "keywords": ["data engineer"],
  "countries": ["FR"],
  "maxJobs": 20
}
```

`keywords` takes job titles, skills or words, one per line; each keyword is its own search. `countries` takes two letter codes (`FR`, `US`, `GB`, `DE`, `ES`, `BE`, `NL` and more); an empty list searches every country. `locations` takes city, region or French department names as the site writes them (`Paris`, `Lyon`, `Ile-de-France`, `London`, `New York`). `companies` narrows the search to companies by name or slug.

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result: https://apify.com/pricing?fpr=ymnoit

#### Copy to your AI assistant

```text
themineworks/welcome-to-the-jungle-jobs-scraper on Apify. Scrapes job listings from Welcome to the Jungle (welcometothejungle.com) in France, Europe and the US, one row per job with title, company with size, sectors, founding year and summary, city and country, remote policy, contract type, salary range, experience asked, posted date and link, with optional full description, recruitment process, tools and company website. Call ApifyClient("TOKEN").actor("themineworks/welcome-to-the-jungle-jobs-scraper").call(run_input={"keywords": ["data engineer"], "countries": ["FR"], "maxJobs": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: none (default keywords ["data engineer"], countries ["FR"]). Optional: keywords (list; empty list = all jobs), countries (two letter codes; empty list = all countries), locations (city or region names), remote (fulltime, partial, punctual, no), contractTypes (full_time, part_time, internship, apprenticeship, temporary, freelance, vie, graduate_program, other), postedWithinDays (number), onlyWithSalary (bool), salaryMin (yearly, job currency), companies (names or slugs), jobLanguages (en, fr, de, es, it, pt, nl), sortBy ("relevance" or "newest"), siteLanguage (en, fr, es, cs, sk; labels and links), maxJobs (default 100, 20 to 100000 per search), includeDescription (default false), onlyNewJobs (default false). Full spec: GET https://api.apify.com/v2/acts/themineworks~welcome-to-the-jungle-jobs-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **54 fields per job, 16 more with descriptions**: title, contract type and length, remote policy, salary range with currency and period, experience asked, education asked, profession and category, the main missions, benefits, the candidate profile, every office with coordinates, and the company's size, sectors, industry, founding year, labels, summary and page.
- **Full description on demand**: switch on `includeDescription` for the whole description, the full candidate profile, the recruitment process, the skills and tools the employer tagged, the external apply link, the office address, and the company's website, LinkedIn page, headquarters, average age, share of women and open job count.
- **Every filter the site offers**: country, city or region, remote policy (full, frequent, occasional, none), nine contract types, posted within N days, only jobs with a salary, a minimum yearly salary, companies, job ad language, and best match or newest first.
- **From 20 to 100,000 jobs per search.** Up to 1,000 come from plain pages of 100; above that the actor splits the search into publication date windows of at most 1,000 jobs each, newest first. Each keyword in each city is its own search; three run at a time.
- **Labels in five languages**: category, sector and benefit labels, and job links, in English, French, Spanish, Czech or Slovak. The job ad stays in the language the employer wrote.
- **A run summary you can audit**: the `OUTPUT` record lists every search's status, jobs found on the site, pages and date windows read, attempts and duplicates skipped.

### How to use it

#### Basic: one keyword in France

```json
{
  "keywords": ["data engineer"],
  "countries": ["FR"],
  "maxJobs": 100
}
```

#### Several keywords in several countries

Each keyword is its own search across the countries chosen: this input is 2 searches of up to 200 jobs, 400 jobs in all (our final test run, 10.9 seconds):

```json
{
  "keywords": ["data engineer", "product manager"],
  "countries": ["FR", "US", "GB"],
  "maxJobs": 200
}
```

#### Cities with full descriptions and company links

Each keyword is searched in each city. This is our description test: 60 jobs from London and New York in 19.2 seconds, all 60 with the full description, tools and company website:

```json
{
  "keywords": ["software engineer"],
  "countries": [],
  "locations": ["London", "New York"],
  "maxJobs": 30,
  "includeDescription": true
}
```

#### Job: daily alerts for internships and apprenticeships

Internships and alternance contracts in Lyon published in the last two weeks, newest first, only jobs not delivered before. Save it as a task with a daily schedule (Console > Schedules); each run returns only what appeared since the last one.

```json
{
  "keywords": ["marketing"],
  "countries": ["FR"],
  "locations": ["Lyon"],
  "contractTypes": ["internship", "apprenticeship"],
  "postedWithinDays": 14,
  "sortBy": "newest",
  "maxJobs": 200,
  "onlyNewJobs": true
}
```

#### Job: well paid remote friendly roles

Product manager jobs in France that pay at least 60,000 a year and allow full or frequent remote work:

```json
{
  "keywords": ["product manager"],
  "countries": ["FR"],
  "salaryMin": 60000,
  "remote": ["fulltime", "partial"],
  "maxJobs": 300
}
```

#### Job: track hiring at chosen companies

Every open job at a list of companies, by name or by the slug in their Welcome to the Jungle address. Count rows by `company` to compare hiring over time.

```json
{
  "keywords": [],
  "countries": [],
  "companies": ["Doctolib", "Back Market", "qonto"],
  "maxJobs": 1000
}
```

#### Job: English speaking jobs across Europe

Software jobs in Germany, the Netherlands and Spain whose ad is written in English:

```json
{
  "keywords": ["software engineer"],
  "countries": ["DE", "NL", "ES"],
  "jobLanguages": ["en"],
  "maxJobs": 500
}
```

#### Job: a full market export, newest first

Leave `keywords` empty for every job in a country. This was our large test: 2,500 US jobs in 75 seconds, read in 4 date windows, strictly newest first.

```json
{
  "keywords": [],
  "countries": ["US"],
  "sortBy": "newest",
  "maxJobs": 2500
}
```

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `keywords` | array of strings | `["data engineer"]` | Job titles, skills or words, one per line. Each is its own search in every location. An empty list returns all jobs that match the filters. |
| `countries` | array | `["FR"]` | Two letter codes: jobs with an office in one of these countries. An empty list means every country. |
| `locations` | array of strings | empty | City, region or French department names as the site writes them, not case sensitive. Each keyword is searched in each location. |
| `remote` | array | all | `fulltime` (full remote), `partial` (frequent remote), `punctual` (occasional remote), `no` (no remote). |
| `contractTypes` | array | all | `full_time` (CDI), `part_time`, `internship`, `apprenticeship` (alternance), `temporary` (CDD), `freelance`, `vie`, `graduate_program`, `other`. |
| `postedWithinDays` | integer | any date | Jobs published in the last N days. |
| `onlyWithSalary` | boolean | `false` | Only jobs whose ad gives a salary. |
| `salaryMin` | integer | none | Minimum yearly salary in the job's own currency. Jobs without a salary are left out when set. |
| `companies` | array of strings | empty | Only jobs from these companies, by name or slug, not case sensitive. Up to 100. |
| `jobLanguages` | array | all | Language of the job ad: `en`, `fr`, `de`, `es`, `it`, `pt`, `nl`. |
| `sortBy` | string | `relevance` | `relevance` (best match) or `newest`. |
| `siteLanguage` | string | `en` | Language of the labels (category, sector, benefits) and of the job links: `en`, `fr`, `es`, `cs`, `sk`. |
| `maxJobs` | integer | `100` | Most jobs per search (one keyword in one location), 20 to 100,000. Also the most you pay for per search. |
| `includeDescription` | boolean | `false` | Adds the full description and company details from the site's job API. One extra request per job. |
| `onlyNewJobs` | boolean | `false` | Skips jobs an earlier run of this actor in your account already delivered. For schedules; works best with `sortBy: "newest"`. |

### What data do you get?

One row per job. A job found by two keywords or two cities is delivered once.

**The job**: `job_id`, `wttj_reference`, `title`, `employment_type` (`full-time`, `part-time`, `intern`, `apprenticeship`, `temporary`, `contract` and so on), `contract_type` (the site's own code), `contract_duration_min_months`, `contract_duration_max_months`, `experience_min_years`, `education_level`, `profession`, `category`, `sub_category`, `key_missions`, `benefits`, `description_short`, `requirements` (the candidate profile), `job_language`, `is_featured`, `job_url`.

**The company**: `company`, `company_slug`, `company_id`, `company_url`, `company_logo_url`, `company_size` (employees), `company_founded_year`, `company_sector`, `company_sectors`, `company_industry`, `company_summary`, `company_labels` (for example `great-place-to-work`, `bcorp`), `company_equality_index` (the French gender equality index, out of 100).

**Where and how**: `location` and `locations` (every office as City, Country), `city`, `region`, `country`, `country_code`, `latitude`, `longitude`, `workplace_type` (`remote`, `hybrid`, `onsite`), `remote_policy` (`full remote`, `frequent remote`, `occasional remote`, `no remote`), `is_remote`.

**Pay and dates**: `salary_min`, `salary_max`, `salary_currency`, `salary_period`, `salary_text` (one line, for example `EUR 45,000 to 60,000 per year`), `salary_yearly_min` (the site's yearly figure), `posted_at`.

**With `includeDescription`**: `description`, the full `requirements`, `recruitment_process`, `skills`, `tools`, `start_date`, `updated_at`, `apply_url` (when the employer uses its own application page), `job_status`, `office_address`, `company_website`, `company_linkedin_url`, `company_headquarters`, `company_average_age`, `company_women_percent`, `company_jobs_count`, `company_description`, and `description_error` on a row whose details could not be read.

**The search**: `search_keyword`, `search_location`, `search_rank`, `scraped_at`.

How full the fields were in our final test runs (400 jobs from France, the US and the UK; 20 jobs from France only; 60 jobs with descriptions from London and New York):

| Field | Filled | Why not always |
|---|---|---|
| `job_id`, `title`, `company`, `company_url`, `location`, `country_code`, `employment_type`, `posted_at`, `profession`, `category`, `key_missions`, `description_short`, `job_url` | 100% | |
| `company_size` | 98% | A few companies hide it. |
| `company_sector`, `company_industry` | 94% | |
| `city` | 88% | Some offices give only a country. |
| `requirements` | 76% | Only when the employer wrote a candidate profile. |
| `remote_policy`, `workplace_type` | 72% | The employer did not set one. |
| `experience_min_years` | 68% | Only when the employer set it. |
| `company_founded_year` | 50% (100% of the 20 French jobs) | Full company profiles are mostly French; US and UK listings carry size and sector but rarely the founding year. |
| `salary_min`, `salary_text` | 50% | About half of employers publish pay. |
| `benefits` | 39% (70% of the French jobs) | Listed on full company profiles. |
| `description`, `company_website`, `company_linkedin_url`, `company_headquarters` | 100% of 60 | With `includeDescription` on. |
| `tools`, `skills` | 97% to 98% of 60 | When the employer tagged them. |
| `recruitment_process` | 13% of 60 | Only when the employer described it. |

#### Stable fields for automations

These fields were present in every row of our test runs and their names will not change:

| Field | Meaning |
|---|---|
| `job_id` | Job reference on Welcome to the Jungle, stable across runs |
| `title` | Job title |
| `company` | Company name |
| `company_slug` | Company slug in its Welcome to the Jungle address |
| `company_url` | Company page on Welcome to the Jungle |
| `location` | First office, as City, Country |
| `country_code` | Country code of the first office, for example `FR` |
| `employment_type` | `full-time`, `intern`, `temporary` and so on |
| `contract_type` | The site's contract code, for example `full_time` |
| `posted_at` | When the job was published, ISO 8601 UTC |
| `profession` | Profession, for example `Data Engineer` |
| `job_language` | Language of the ad, for example `fr` |
| `job_url` | Link to the job |
| `search_rank` | Position of the job in its search |
| `scraped_at` | When the job was read, ISO 8601 UTC |

#### Output examples

Real rows from our test runs in October 2026, trimmed for length. French ads keep their French text.

**A French job with the full company block** (search "data engineer" in FR, US, GB):

```json
{
  "job_id": "edc061ee-aac0-418d-8dbd-2447bc6542ce",
  "wttj_reference": "KIIRO_l0RpQq1",
  "title": "Data Engineer / IA",
  "company": "Kiiro",
  "company_slug": "kiiro",
  "company_id": "3LFw19",
  "company_url": "https://www.welcometothejungle.com/en/companies/kiiro",
  "company_size": 50,
  "company_founded_year": 2024,
  "company_sector": "IT / Digital",
  "company_sectors": [
    "IT / Digital",
    "SaaS / Cloud Services"
  ],
  "company_industry": "Consulting / Audit",
  "company_summary": "Pure player AWS et Databricks pour data, IA et cloud.",
  "location": "Paris, France",
  "locations": [
    "Paris, France"
  ],
  "city": "Paris",
  "region": "Ile-de-France",
  "country": "France",
  "country_code": "FR",
  "latitude": 48.87366,
  "longitude": 2.35131,
  "workplace_type": "hybrid",
  "remote_policy": "frequent remote",
  "is_remote": false,
  "employment_type": "full-time",
  "contract_type": "full_time",
  "posted_at": "2026-10-05T06:53:38Z",
  "salary_min": 45000,
  "salary_max": 60000,
  "salary_currency": "EUR",
  "salary_period": "year",
  "salary_text": "EUR 45,000 to 60,000 per year",
  "salary_yearly_min": 45000,
  "experience_min_years": 3,
  "profession": "Data Engineer",
  "category": "Tech & Engineering",
  "sub_category": "Data / Business Intelligence",
  "key_missions": [
    "Écouter et cadrer les besoins des équipes Data et métier des clients, et les traduire en exigences techniques.",
    "Concevoir, développer et optimiser les pipelines de données dans le cloud, en utilisant les outils et...",
    "Mettre en place ou aider à la migration de datalakes / data warehouses / lakehouses vers des plateformes..."
  ],
  "benefits": [
    "Flexible working hours",
    "Work from anywhere",
    "Between 2-3 days at home"
  ],
  "description_short": "Rejoignez Kiiro, une entreprise spécialisée dans la valorisation des données. En tant que Data Engineer, vous serez responsable de la conception, du...",
  "requirements": "Ce qui compte pour nous : Vous avez une expérience Data confirmée (3+ ans) : • Vous avez une maîtrise de la plateforme Databricks (Unity Catalog, Delta, Mosaic AI…)...",
  "job_language": "fr",
  "job_url": "https://www.welcometothejungle.com/en/companies/kiiro/jobs/data-engineer-hybride-cdi",
  "search_keyword": "data engineer",
  "search_rank": 5,
  "scraped_at": "2026-10-05T22:09:17.185Z"
}
```

**A US job, full remote, pay in dollars** (search "product manager"):

```json
{
  "job_id": "b180a550-3d37-461f-a897-19aef663beff",
  "title": "Senior Product Manager (Community Support Experience)",
  "company": "Airbnb",
  "company_slug": "airbnb",
  "company_id": "6Hk8wo",
  "company_url": "https://www.welcometothejungle.com/en/companies/airbnb",
  "company_size": 32609,
  "company_sector": "Software",
  "company_sectors": [
    "Software"
  ],
  "company_industry": "Tech",
  "company_summary": "Community marketplace for holiday accommodation.",
  "location": "New York, United States",
  "locations": [
    "New York, United States"
  ],
  "city": "New York",
  "country": "United States",
  "country_code": "US",
  "workplace_type": "remote",
  "remote_policy": "full remote",
  "is_remote": true,
  "employment_type": "full-time",
  "contract_type": "full_time",
  "posted_at": "2026-10-04T00:03:38Z",
  "salary_min": 179000,
  "salary_max": 207000,
  "salary_currency": "USD",
  "salary_period": "year",
  "salary_text": "USD 179,000 to 207,000 per year",
  "salary_yearly_min": 179000,
  "experience_min_years": 5,
  "profession": "Product Manager",
  "category": "Project / Product Management",
  "sub_category": "Product Management",
  "key_missions": [
    "Lead cross-functional teams to execute upon a shared vision for community support experience.",
    "Define a winning product strategy and create a sound roadmap, aligning vision, OKR, strategy, and roadmap...",
    "Prioritize work based on inputs from many stakeholders, while being flexible to iterate/change, and maintain..."
  ],
  "description_short": "Join Airbnb as a Senior Product Manager for the Community Support Experience. In this role, you will lead cross-functional collaborations to deliver a...",
  "requirements": "• Exceptional communication skills. Being able to adapt communication style for different types of audiences • 5+ years of product management, or product design...",
  "job_language": "en",
  "job_url": "https://www.welcometothejungle.com/en/companies/airbnb/jobs/senior-platform-manager-community-experience-platform-products_new-york_n7ouwvc5",
  "search_keyword": "product manager",
  "search_rank": 63,
  "scraped_at": "2026-10-05T22:09:16.926Z"
}
```

**With `includeDescription` on** (search "software engineer" in London; long texts trimmed):

```json
{
  "job_id": "63592825-cba5-4a48-b50a-288f1484b11a",
  "title": "Staff Full Stack Software Engineer",
  "company": "Runna",
  "company_slug": "runna",
  "company_id": "Twm5vg",
  "company_url": "https://www.welcometothejungle.com/en/companies/runna",
  "company_size": 182,
  "company_sector": "Software",
  "company_sectors": [
    "Software"
  ],
  "company_industry": "Tech",
  "company_summary": "Tailored running training plans.",
  "location": "London, United Kingdom",
  "locations": [
    "London, United Kingdom"
  ],
  "city": "London",
  "country": "United Kingdom",
  "country_code": "GB",
  "workplace_type": "hybrid",
  "remote_policy": "occasional remote",
  "is_remote": false,
  "employment_type": "full-time",
  "contract_type": "full_time",
  "posted_at": "2026-10-02T00:18:30Z",
  "salary_min": 110000,
  "salary_max": 131000,
  "salary_currency": "GBP",
  "salary_period": "year",
  "salary_text": "GBP 110,000 to 131,000 per year",
  "salary_yearly_min": 110000,
  "experience_min_years": 5,
  "profession": "Full Stack Developer",
  "category": "Tech & Engineering",
  "sub_category": "Software & Web Development",
  "key_missions": [
    "Lead the architectural design and technical strategy across multiple product teams, ensuring scalable,...",
    "Drive the end-to-end delivery of key initiatives, working hands-on to build, test, and ship features across...",
    "Coach and support engineers by providing technical guidance, mentorship, and code reviews without creating..."
  ],
  "description_short": "Join Runna, a fast-growing company dedicated to helping millions of runners achieve their goals. As a Staff Full Stack Software Engineer, you will play a...",
  "requirements": "• Skilled in defining and delivering features from initial architecture and design through to release, testing, and production support • 878 API releases • Able to...",
  "job_language": "en",
  "job_url": "https://www.welcometothejungle.com/en/companies/runna/jobs/staff-full-stack-software-engineer_london_yeklpmwd",
  "search_keyword": "software engineer",
  "search_location": "London",
  "search_rank": 14,
  "scraped_at": "2026-10-05T22:09:27.809Z",
  "description": "• We’re looking for a Staff Software Engineer (Full Stack) to play a pivotal role in driving the technical success of Runna • This is a hands-on role where you’ll work across multiple squads, providing architectural direction, ensuring engineering excellence,...",
  "recruitment_process": "• Screening call with Talent team (30 minute video call) • Getting to Know You + Live Coding (45-minute video call, first 25 mins will be an introductory chat followed...",
  "skills": [
    "Autonomy",
    "Infrastructure as Code (IaC)",
    "Continuous integration"
  ],
  "tools": [
    "GraphQL",
    "React Native",
    "Mixpanel"
  ],
  "updated_at": "2026-10-02T00:18:48.511671Z",
  "apply_url": "https://jobs.ashbyhq.com/runna/c17bfb35-6894-44e9-af23-23b85f2d11a4",
  "job_status": "published",
  "office_address": "London, United Kingdom",
  "company_website": "https://www.runna.com/",
  "company_linkedin_url": "https://www.linkedin.com/company/runna",
  "company_headquarters": "London, GB",
  "company_jobs_count": 8,
  "company_description": "Tailored running training plans"
}
```

### Pricing

Pay per event: you pay for the job rows you receive, plus a flat $0.005 per run, whatever memory you choose.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `job-scraped` | Once per job row stored in your dataset | $0.75 per 1,000 | $0.75 per 1,000 | $0.75 per 1,000 | $0.75 per 1,000 |
| `run-start` | Once per run, when it starts | $0.005 | $0.005 | $0.005 | $0.005 |

The price per single job is the price per 1,000 divided by 1,000. A job with the full description costs the same as one without.

Free plan runs return up to 10 results each; paid plans have no cap.

Never charged:

- search pages the site refused, and searches the run could not read;
- searches with no results, and jobs your filters leave out;
- a job already delivered earlier in the same run (found by another keyword or city);
- with `onlyNewJobs`, jobs an earlier run already delivered;
- the info row at the end of a run;
- anything past your "Max cost per run": the actor stops delivering when your limit is reached instead of sending rows for free.

### FAQ

#### What exactly does this actor read?

Welcome to the Jungle (welcometothejungle.com) is a job board and company showcase, strongest in France, that also lists jobs across Europe and the US. The actor reads the same job search index the site's own search page queries for every visitor and, with `includeDescription`, the site's public job data that each job page loads. Nothing behind a login is read.

#### How many jobs can I get?

Up to 100,000 per search (one keyword in one location). On 6 October 2026 the site listed about 88,000 jobs: about two thirds with an office in France and a fifth in the United States, then the UK, Canada, Germany, Spain and others. The site's search hands out 1,000 jobs per query, so for bigger searches the actor splits the search by publication date until every window holds 1,000 or fewer, and reads the windows newest first.

#### What do I get on the free plan?

Every run on Apify's free plan returns the first 10 results, so you can check the data and the fields before you pay. A paid Apify plan returns every result, up to the limit you set.

#### How long does a run take?

One request brings up to 100 jobs: 400 jobs from 2 searches took 10.9 seconds in our final test, and 2,500 US jobs took 75 seconds. With descriptions each job needs one more request, six at a time: 60 jobs took 19.2 seconds.

#### Which company details do I get?

Every row has the company name, slug, page link, summary and logo, and nearly every row has the number of employees and the sectors. Companies with a full Welcome to the Jungle profile, mostly French ones, also show the founding year, labels such as Great Place to Work or B Corp, the French gender equality index and a benefits list. With `includeDescription` you also get the company's website, LinkedIn page, headquarters, average employee age, share of women where published, description and number of open jobs.

#### How is the salary read?

The site stores the pay range the employer entered, with its currency and period; the actor returns it as `salary_min`, `salary_max`, `salary_currency`, `salary_period` and a one line `salary_text`, plus `salary_yearly_min`, the site's own yearly figure. Values are exactly as the employer entered them: a few employers type 48 meaning 48,000, or enter a monthly internship pay as yearly. `salaryMin` filters on the yearly figure, in the job's own currency.

#### What do the remote policies mean?

`remote_policy` is the employer's choice on the site: `full remote`, `frequent remote` (hybrid, several days a week at home), `occasional remote` (a day now and then) or `no remote`. `workplace_type` simplifies it to `remote`, `hybrid` or `onsite`, and `is_remote` is true for full remote jobs only.

#### How do locations work?

A job can have several offices; `countries` and `locations` match any of them. `locations` matches city, region and French department names as the site writes them (`Paris`, `Lyon`, `Ile-de-France`, `Hauts-de-Seine`, `London`, `England`, `New York`), not case sensitive. `location` on each row is the first office, and `locations` lists them all.

#### Do I need an account, cookies or a proxy?

No account, no cookies and nothing to set up. The actor uses the same public search the site uses, with the search only access key the site gives every visitor, over Apify's datacenter proxy. If the site changes that key, the actor reads the new one from the site and carries on. In our tests every request was answered on the first try, with no bot check.

#### What if a job is taken down while the run reads it?

The row is still delivered with everything from the search, and `description_error` says the details could not be read. In our description test all 60 of 60 were read.

#### Can I monitor new jobs over time?

Yes. Turn on `onlyNewJobs`, set `sortBy` to `newest`, save the input as a task and add a schedule. Each run skips the jobs earlier runs delivered and stops once it reaches 20 jobs in a row it has seen before. In our test the first run delivered 60 jobs and the second, minutes later, found 0 new ones and charged 0.

#### Which formats can I download?

JSON, CSV, Excel, XML, RSS and an HTML table, from the run's dataset in Console or through the API.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

- Connector URL: https://mcp.apify.com/?tools=themineworks/welcome-to-the-jungle-jobs-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http welcome-to-the-jungle-jobs-scraper "https://mcp.apify.com/?tools=themineworks/welcome-to-the-jungle-jobs-scraper"`

#### Is it legal to scrape Welcome to the Jungle?

The actor reads only job listings and company pages that the site shows publicly to anyone without signing in, and it never reads recruiter or team member profiles. Some recruitment process texts name the people you would meet; you are responsible for how you use the data, for the site's terms, and for data protection law such as GDPR in the EU and the UK and CCPA in California. If in doubt, ask a lawyer about your use case.

### Integrations

- **Google Sheets**: send each run's rows to a sheet with Apify's Google Sheets integration, or import the CSV link of the dataset.
- **Make, Zapier and n8n**: start the actor and read its dataset with the Apify apps and nodes, for example "new internships in Lyon to Slack".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Shine.com Jobs Scraper](https://apify.com/themineworks/shine-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Internshala Scraper](https://apify.com/themineworks/internshala-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Indeed Jobs Scraper](https://apify.com/themineworks/indeed-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instahyre Jobs Scraper](https://apify.com/themineworks/instahyre-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Apna Jobs Scraper](https://apify.com/themineworks/apna-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CutShort Jobs Scraper](https://apify.com/themineworks/cutshort-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Jobs Scraper](https://apify.com/themineworks/linkedin-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Recruiting & Jobs MCP](https://apify.com/themineworks/recruiting-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a search that should return jobs and does not? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For another job site, a new source or a field you need, email dmineworks@gmail.com.

*Search Welcome to the Jungle by keyword, country, city and every filter the site offers, and get each job back as a clean row with its company's size, sectors and pay.*

# Actor input Schema

## `keywords` (type: `array`):

Job titles, skills or words to search for, one per line, for example "data engineer", "product manager" or "stage marketing". Each keyword is its own search in every location. Leave the list empty to get every job that matches the filters.

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

Only jobs with an office in one of these countries. Leave empty for every country. About two thirds of the jobs are in France and a fifth in the United States.

## `locations` (type: `array`):

Optional. City, region or French department names as the site writes them, one per line, for example Paris, Lyon, Ile-de-France, London, New York or Berlin. Not case sensitive. Each keyword is searched in each location. Leave empty for the whole of the countries above.

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

Only jobs with one of these remote policies, as the employer set it. Leave empty for all.

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

Only jobs with one of these contracts. Leave empty for all.

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

Only jobs published in the last N days, for example 7. Leave empty for any date.

## `onlyWithSalary` (type: `boolean`):

Only jobs whose ad gives a salary.

## `salaryMin` (type: `integer`):

Only jobs whose yearly salary starts at this amount or more, in the job's own currency (euros in France, dollars in the US). Jobs without a salary are left out when this is set.

## `companies` (type: `array`):

Optional. Only jobs from these companies, by name or by the slug in their Welcome to the Jungle address, for example Doctolib, Back Market or qonto. Not case sensitive.

## `jobLanguages` (type: `array`):

Only job ads written in these languages. Leave empty for all.

## `sortBy` (type: `string`):

Best match first, or newest first. Use newest first for schedules and only new jobs.

## `siteLanguage` (type: `string`):

Language of the category, sector and benefit labels, and of the job links. The job ad itself stays in the language the employer wrote it in.

## `maxJobs` (type: `integer`):

Most jobs delivered for each search (one keyword in one location). 20 to 100,000. Above 1,000 the search is read in publication date windows, newest first. Also the most you pay for per search.

## `includeDescription` (type: `boolean`):

Adds the full description, the candidate profile, the recruitment process, skills and tools, plus the company's website, LinkedIn page, headquarters, average age and share of women, read from the site's job API. One extra request per job, so runs take longer.

## `onlyNewJobs` (type: `boolean`):

For schedules: skip jobs an earlier run of this actor in your account already delivered, so each run returns and charges only jobs that are new since. Works best with Newest first. The list of delivered jobs is kept in a named key value store in your account.

## Actor input object example

```json
{
  "keywords": [
    "data engineer"
  ],
  "countries": [
    "FR"
  ],
  "locations": [],
  "remote": [],
  "contractTypes": [],
  "onlyWithSalary": false,
  "companies": [],
  "jobLanguages": [],
  "sortBy": "relevance",
  "siteLanguage": "en",
  "maxJobs": 50,
  "includeDescription": false,
  "onlyNewJobs": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

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

No description

# 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 = {
    "keywords": [
        "data engineer"
    ],
    "countries": [
        "FR"
    ],
    "locations": [],
    "sortBy": "relevance",
    "maxJobs": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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 = {
    "keywords": ["data engineer"],
    "countries": ["FR"],
    "locations": [],
    "sortBy": "relevance",
    "maxJobs": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/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 '{
  "keywords": [
    "data engineer"
  ],
  "countries": [
    "FR"
  ],
  "locations": [],
  "sortBy": "relevance",
  "maxJobs": 50
}' |
apify call themineworks/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,themineworks/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/WOI85dhHwgVpdQuEQ/builds/DVMmuFQYjJbGxROwj/openapi.json
