# Welcome to the Jungle Jobs Scraper ($0.28/1K) (`carabain-digital/welcometothejungle-jobs`) Actor

Scrape job postings from Welcome to the Jungle (welcometothejungle.com) in France: title, company, city, contract (CDI, alternance, stage), salary, remote policy and description. Filter by keyword, city, radius, contract and date. Fast, no proxy needed.

- **URL**: https://apify.com/carabain-digital/welcometothejungle-jobs.md
- **Developed by:** [Carabain Digital](https://apify.com/carabain-digital) (community)
- **Categories:** Jobs, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.17 / 1,000 job postings

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

#### What is Welcome to the Jungle Jobs Scraper?

**Welcome to the Jungle Jobs Scraper** scrapes **job postings (offres d'emploi) from Welcome to the Jungle ([welcometothejungle.com](https://welcometothejungle.com))**, the French employer-brand job board with tens of thousands of current jobs in France (jobs abroad are skipped). Contract types include CDI, CDD, alternance, stage, freelance and VIE. Search by **keyword, city, radius and publication date** and get clean, flat job data as JSON, CSV, Excel, XML or HTML: title, employer, city, contract type (CDI, CDD, alternance, stage), salary when published and a link to the job. Prefilled example: 20 `développeur` jobs in Paris, ready in seconds. Costs **$0.28 per 1,000 jobs**. Add-on: the full job text, apply link, company website, postcode and skills for $1.00 per 1,000.

- 🔎 **Search like on the site**: keyword, city (or region) + radius, contract type, posted in the last N days
- ⚡ **Fast and cheap**: no browser, no proxy needed, thousands of jobs in seconds
- 📚 **Full texts on demand**: switch on **Full details** for the complete job description, apply link and skills
- 🧩 **One job schema for several countries**: same field names as our other job scrapers (FR, NL, BE, DE)
- 🔌 **Connect anywhere**: API, schedules, webhooks, Google Sheets, Make, Zapier, MCP / AI agents

#### What data can I extract from Welcome to the Jungle?

<table>
<tr><td>🆔 Stable job ID and URL</td><td>📝 Title and employer</td></tr>
<tr><td>📍 City, region</td><td>🌍 Latitude and longitude</td></tr>
<tr><td>📅 Publication date</td><td>🕒 Contract type (CDI, CDD, alternance, stage...)</td></tr>
<tr><td>💶 Salary range and period (when published)</td><td>🏠 Remote / on-site / hybrid</td></tr>
<tr><td>🏢 Company, sectors and benefits</td><td>🎓 Education and experience asked</td></tr>
<tr><td>🧾 Description: summary, missions, profile</td><td>🔗 Apply link, company site, skills (add-on)</td></tr>
</table>

Fields the site does not publish stay `null` (see the FAQ). Every item has the same keys, so exports line up.

#### How do I scrape Welcome to the Jungle jobs?

1. [Create a free Apify account](https://console.apify.com/sign-up) and open this Actor.
2. Enter a **Keyword** (for example `développeur`) and optionally a **Location** and **Radius**.
3. Set **Max jobs**, and **Posted in the last N days** if you only want fresh jobs.
4. Optionally switch on **Full details** to include the full job text, apply link, company website, postcode and skills.
5. Click **Start**, then download the jobs from the **Output** tab as JSON, CSV, Excel, XML or HTML.

#### How much does it cost to scrape Welcome to the Jungle jobs?

You pay per job that ends up in your dataset: **$0.28 per 1,000 jobs**, no subscription. The monthly credit of Apify's Free plan ($5) covers around 17,000 jobs without add-ons. Paid plans get volume discounts.

- **Add-on: Full details, $1.00 per 1,000 jobs** (off by default). Adds the complete job description and profile (plain text), the apply link of the employer's own application system, the company website, postcode and exact coordinates, skills, tools and start date. One extra request per job. Charged only for jobs that were actually enriched.
- Failed runs and empty searches cost nothing; you can cap spending with **Maximum cost per run** in the run options.

See the **Pricing** tab for the current prices.

#### ⬇️ Input

| Field | Description |
|---|---|
| **Keyword** (`keyword`) | Job title or search term, French or English. Empty = all jobs |
| **Location** (`location`) | French city (`Lyon`), department or region (`Rhône`, `Île-de-France`), or postcode (`69003`). Empty = all of France |
| **Radius (km)** (`radius_km`) | Search radius around the location |
| **Posted in the last N days** (`posted_since_days`) | Only fresh jobs |
| **Contract types** (`wttj_contract_types`) | CDI, CDD / temporary, alternance, stage, freelance, part-time, VIE |
| **Max jobs** (`limit`) | Stop after this many jobs |
| **Full details** (`includeDetails`) | Paid add-on: the full job text, apply link, company website, postcode and skills |
| **Proxy** (`proxyConfiguration`) | Not needed for Welcome to the Jungle |

```json
{
    "keyword": "développeur",
    "location": "Paris",
    "radius_km": 15,
    "posted_since_days": 7,
    "limit": 20,
    "includeDetails": false
}
```

Without a radius, the location matches jobs whose office is in that city, department or region. With a radius (or a postcode) we search around the city centre. A job with several offices appears once and carries all its cities in `locations`. Jobs outside France are skipped.

Welcome to the Jungle lets a search return at most 1,000 hits at once; the Actor pages by publication date, so you can ask for thousands of jobs (newest first).

#### ⬆️ Output

Jobs are stored in the default dataset, newest first. View them as a table in the **Output** tab or export JSON, CSV, Excel, XML or HTML.

##### Job from the search results

```json
{
    "id": "welcometothejungle:GALAD_oRlgWZL",
    "source": "welcometothejungle",
    "url": "https://www.welcometothejungle.com/fr/companies/galadrim/jobs/developpeur-net-c-freelance",
    "title": "Développeur .NET / C# - Freelance",
    "company": "Galadrim",
    "company_url": null,
    "location": "Lyon",
    "city": "Lyon",
    "locations": [
        "Barcelona",
        "Lille",
        "Lyon",
        "Madrid",
        "Milano"
    ],
    "postcode": null,
    "region": "Auvergne-Rhône-Alpes",
    "country": "FR",
    "lat": null,
    "lon": null,
    "remote": "remote",
    "posted_at": "2026-11-01T09:00:19Z",
    "valid_through": null,
    "employment_type": [
        "Freelance"
    ],
    "contract_type": "freelance",
    "contract_duration_months_min": null,
    "contract_duration_months_max": null,
    "hours_per_week_min": null,
    "hours_per_week_max": null,
    "salary_min": null,
    "salary_max": null,
    "salary_currency": null,
    "salary_period": null,
    "education_level": null,
    "experience_years_min": 5.0,
    "category": "Développeur de logiciels",
    "sectors": [
        "Application mobile",
        "IT / Digital",
        "Digital"
    ],
    "benefits": [
        "Horaires de travail flexibles",
        "Entre 1-2 jours de télétravail",
        "Restaurant d’entreprise / Cuisine pour les employés"
    ],
    "language": "fr",
    "description": "Rejoins Galadrim, une entreprise en forte croissance spécialisée dans le développement de produits digitaux sur mesure. En tant que développeur .NET, tu travailleras sur des projets variés pour des clients internationaux. La mission se déroulera du 30 novem...",
    "apply_url": null,
    "scraped_at": "2026-11-01T10:52:57Z"
}
```

##### The same kind of job with the Full details add-on

```json
{
    "id": "welcometothejungle:FRAMA_b8q1xoO",
    "source": "welcometothejungle",
    "url": "https://www.welcometothejungle.com/fr/companies/framatome-1/jobs/responsable-commercial-le-services-d-ingenierie-france-et-export-f-h_lyon",
    "title": "Responsable Commercial(le) Services d'Ingénierie France et Export F/H",
    "company": "Framatome",
    "company_url": "http://www.framatome.com",
    "location": "Lyon",
    "city": "Lyon",
    "locations": [
        "Lyon"
    ],
    "postcode": "69007",
    "region": "Auvergne-Rhône-Alpes",
    "country": "FR",
    "lat": 45.72259,
    "lon": 4.84375,
    "remote": "onsite",
    "posted_at": "2026-10-30T23:05:58Z",
    "valid_through": null,
    "employment_type": [
        "CDI"
    ],
    "contract_type": "permanent",
    "contract_duration_months_min": null,
    "contract_duration_months_max": null,
    "hours_per_week_min": null,
    "hours_per_week_max": null,
    "salary_min": 45000.0,
    "salary_max": 55000.0,
    "salary_currency": "EUR",
    "salary_period": "year",
    "education_level": "Bac +5",
    "experience_years_min": 5.0,
    "category": "Ingénieur commercial",
    "sectors": [
        "Métallurgie",
        "Bureau d'études et d'ingénierie",
        "Energie"
    ],
    "benefits": [
        "Entre 1-2 jours de télétravail",
        "Restaurant d’entreprise / Cuisine pour les employés",
        "Formation sur les biais inconscients"
    ],
    "language": "fr",
    "description": "Au sein du groupe Framatome, la Base Installée assure la maintenance et les services d'ingénierie pour les réacteurs nucléaires existants, en cours de démantèlement ainsi que ceux en construction de ses clients. Ces travaux permettent d'améliorer la compéti...",
    "apply_url": "https://framatome-career.talent-soft.com/Pages/Offre/detailoffre.aspx?idOffre=27446&idOrigine=14521&LCID=1036&offerReference=2026-27446",
    "scraped_at": "2026-11-01T10:52:57Z",
    "start_date": null,
    "skills": [
        "Stratégie commerciale",
        "Travail d'équipe",
        "Développement commercial"
    ],
    "tools": []
}
```

#### What can I do with Welcome to the Jungle job data?

- 📈 **Labour market research**: track hiring demand per profession, contract type (CDI, alternance, stage) or region over time with scheduled runs
- 🎯 **Recruitment and lead generation**: find employers that are hiring in your field and who hires most
- 🔔 **Job alerts and aggregators**: feed fresh offres d'emploi into your own site, newsletter or Slack
- 🧠 **AI and analytics**: use job texts for skills extraction, salary models or LLM pipelines

#### Tips for best results

- Keywords work in French and English (`développeur`, `product manager`, `alternance marketing`).
- Use **Contract types** (alternance, stage, CDI...) instead of putting those words in the keyword.
- Leave **Full details** off for monitoring and counting; switch it on when you need the text, the apply link or the skills.
- For a daily feed, schedule a run with **Posted in the last N days** = 1 and a high **Max jobs**.
- Results from the same search are deduplicated by job ID.

#### Frequently asked questions

##### Can I use Welcome to the Jungle Jobs Scraper with the Apify API?

Yes. Every run has a dataset you can read through the [Apify API](https://docs.apify.com/api/v2). Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("carabain-digital/welcometothejungle-jobs").call(run_input={
    "keyword": "développeur",
    "location": "Paris",
    "posted_since_days": 7,
    "limit": 100,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["posted_at"], job["title"], "-", job["company"])
```

JavaScript:

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('carabain-digital/welcometothejungle-jobs').call({
    keyword: 'développeur',
    location: 'Paris',
    posted_since_days: 7,
    limit: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'jobs');
```

##### Can I use Welcome to the Jungle Jobs Scraper through an MCP server or with AI agents?

Yes. Add it to an AI agent through the [Apify MCP server](https://mcp.apify.com) (`https://mcp.apify.com?tools=carabain-digital/welcometothejungle-jobs`), or let the agent find it with `search-actors` and run it with `call-actor`. A small search (`limit` 20) finishes in seconds, and the dataset items are flat and small, so agents can read them with `get-dataset-items`. Example prompt: *"Use Welcome to the Jungle Jobs Scraper to find the 20 newest développeur jobs in Paris and summarise the employers and contract types."*

##### Can I integrate Welcome to the Jungle data with other apps?

Yes: Google Sheets, Slack, Make, Zapier, n8n, Airtable or your own webhook, through Apify [integrations](https://apify.com/integrations) and [webhooks](https://docs.apify.com/platform/integrations/webhooks). Schedule runs to keep the data fresh.

##### Why is a field empty?

Welcome to the Jungle does not publish working hours per week or a closing date, so `hours_per_week_*` and `valid_through` are always null. Salary is only filled when the employer entered one (roughly 25% of jobs), `remote` only when the employer set a policy, and `company_url`, `postcode`, `apply_url`, `skills` and `tools` come with the **Full details** add-on. Coordinates are null for jobs with several offices unless the add-on is on.

##### Does it also return jobs outside France?

No. The index behind welcometothejungle.com/fr also holds jobs in the US, UK and other countries; the Actor keeps only jobs with an office in France.

##### Why do I get fewer jobs than I asked for?

The Limit is a maximum. A search such as `alternance` in a small city, in the last 7 days, may simply have fewer jobs.

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

The Actor only collects publicly visible job postings, the same data anyone can see on welcometothejungle.com. Job postings can contain personal data (for example a contact person), and rules such as GDPR may apply to how you store and use it. Check your use case with a lawyer. More background: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

##### Welcome to the Jungle Jobs Scraper not working? Feedback

Open an issue on the **Issues** tab of this Actor with the run link and we will look at it. Feature ideas are welcome there too.

#### Other scrapers by us

| Actor | Covers |
|---|---|
| [France Jobs Scraper](https://apify.com/carabain-digital/france-jobs) | Welcome to the Jungle and France Travail in one run, merged and deduplicated |
| [France Travail Jobs Scraper](https://apify.com/carabain-digital/francetravail-jobs) | France: candidat.francetravail.fr (ex Pôle emploi) |
| [Arbeitsagentur Jobs Scraper](https://apify.com/carabain-digital/arbeitsagentur-jobs) | Germany: Bundesagentur für Arbeit Jobbörse |
| [StepStone Jobs Scraper](https://apify.com/carabain-digital/stepstone-jobs) | Germany: stepstone.de |
| [VDAB Jobs Scraper](https://apify.com/carabain-digital/vdab-jobs) | Belgium (Flanders): VDAB |
| [Jobbird Jobs Scraper](https://apify.com/carabain-digital/jobbird-jobs) | Netherlands, Belgium, Germany: Jobbird job aggregator |

⭐ **Does it work well for you?** A review on the Store page helps others find this Actor and helps us keep it maintained.

# Actor input Schema

## `keyword` (type: `string`):

Job title or search term, French or English. Example: `développeur`, `product manager`, `alternance marketing`. Leave empty to browse all jobs.

## `location` (type: `string`):

French city, department, region or postcode. Example: `Lyon`, `Rhône`, `Île-de-France` or `69003`. Leave empty for all of France. Jobs abroad are never returned.

## `radius_km` (type: `integer`):

Search radius around the location in kilometres. Example: `25`. Needs a location (a French city or postcode); we search around the city centre. A postcode without a radius uses 10 km.

## `posted_since_days` (type: `integer`):

Only jobs published in the last N days. Example: `7`. Leave empty for all.

## `wttj_contract_types` (type: `array`):

Only these contract types. Example: `alternance` and `stage` for students. Leave empty for all types.

## `limit` (type: `integer`):

Stop after this many jobs (newest first). Example: `100`. Up to 10,000.

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

Also fetch each job's detail: the full job description and profile (plain text), the apply link of the employer's own application system, company website, postcode and coordinates, skills, tools and start date. Adds $1.00 per 1,000 jobs on top of the base price. One extra request per job.

## `proxyConfiguration` (type: `object`):

Welcome to the Jungle works without a proxy. Enable one only if runs get blocked.

## Actor input object example

```json
{
  "keyword": "développeur",
  "location": "Paris",
  "limit": 20,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped jobs, one item per job posting.

# 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 = {
    "keyword": "développeur",
    "location": "Paris",
    "limit": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("carabain-digital/welcometothejungle-jobs").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 = {
    "keyword": "développeur",
    "location": "Paris",
    "limit": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("carabain-digital/welcometothejungle-jobs").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 '{
  "keyword": "développeur",
  "location": "Paris",
  "limit": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call carabain-digital/welcometothejungle-jobs --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,carabain-digital/welcometothejungle-jobs"
        }
    }
}
```

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/4vLIBqQ5azFoJCugf/builds/gdLSKkeYmb4uCQJPU/openapi.json
