Welcome to the Jungle Jobs | $2.49 / 1k | avatar

Welcome to the Jungle Jobs | $2.49 / 1k |

Pricing

from $2.49 / 1,000 results

Go to Apify Store
Welcome to the Jungle Jobs | $2.49 / 1k |

Welcome to the Jungle Jobs | $2.49 / 1k |

Scrape Welcome to the Jungle job offers by keyword, city or contract type. Get company, office and coordinates, contract type, experience, education, salary range and publication date. Export to CSV, JSON or Excel.

Pricing

from $2.49 / 1,000 results

Rating

0.0

(0)

Developer

Raffy

Raffy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Get every opening on Welcome to the Jungle as a clean spreadsheet row: job title, company, office city with geo coordinates, contract type, remote policy, salary range, required experience and publication date. Built for recruiters sourcing in France, talent teams benchmarking pay, job aggregators syndicating listings and analysts tracking the European tech hiring market.

Scrape Welcome to the Jungle jobs by keyword, city, country, contract type or remote status — or paste one company page and pull every vacancy that company currently advertises. This is an HTTP-only scraper: no browser, no login, no proxy setup. One request returns up to 100 European job listings with salary and location data, so a 500-offer pull finishes in seconds and exports to CSV, JSON, Excel or XML.

Fast by design: a measured local run collected 500 offers in 7 seconds using 5 requests. The default 20-offer preview run takes about 7 seconds.

What does this Welcome to the Jungle jobs scraper do?

It searches the public Welcome to the Jungle job index and saves one row per job offer.

You can point it at:

  • a search URLhttps://www.welcometothejungle.com/en/jobs?query=data%20analyst (any language prefix works: /en/, /fr/, /es/)
  • a company pagehttps://www.welcometothejungle.com/en/companies/alan returns every offer that company currently advertises
  • or no URL at all — just type a keyword, a location, a contract type and a remote toggle

Filters written into a search URL (keyword, city, country, contract type, remote) are read and applied. The filter fields fill in anything a URL does not already specify.

Every row carries a status field so you always know what happened:

statusMeaningBilled
okA job offer was extracted.Yes
not_foundThe search ran fine but matched no offers.No
errorThe source could not be read; error explains why.No

You are never charged for a not_found or error row.

Use cases for Welcome to the Jungle job data

  • Recruiters sourcing in France. Pull every open data, product or engineering role in Paris, Lyon or Nantes with its contract type and remote policy, then work the list company by company instead of clicking through a job board all afternoon.
  • Salary benchmarking. Collect a few thousand offers for one profession and read salaryMin, salaryMax, salaryCurrency and salaryPeriod to see what employers actually advertise for a role, by city and seniority, before you write an offer or ask for a raise.
  • Startup job tracking. Watch a shortlist of company pages on a schedule; a jump in openings is a hiring-intent signal a sales or investment team can act on weeks before a funding announcement makes the news.
  • Job boards and aggregators. Syndicate French and European job listings into your own site with a stable schema — jobId, title, companyName, city, countryCode, contractType, publishedAt and a canonical jobUrl to link back to.
  • Labour-market research. Analysts and journalists track remote-work adoption, contract-type mix and hiring seasonality across the French tech market using remote, contractType and publishedAt over repeated runs.
  • Candidate-side job search automation. Run a daily search for your criteria and push new offers to Slack or a Google Sheet, so you see roles the morning they are published rather than the week after.

What data you get from every job listing

One row per offer. Fields the employer did not publish are simply absent — never guessed.

FieldTypeDescription
jobIdstringStable identifier of the offer in the source index.
referencestringEmployer's own reference for the offer.
slugstringURL slug of the offer.
titlestringJob title as published.
jobUrlstringPublic job page URL. Same value as url.
urlstringPublic job page URL (the base column every factory Actor carries).

Company

FieldTypeDescription
companyNamestringHiring company name.
companySlugstringCompany slug used in the company page URL.
companyUrlstringPublic company profile URL.
companyLogostringCompany logo image URL.
companySizenumberHeadcount reported on the company profile.
sectorsarrayBusiness sectors of the company, e.g. ["Software","Cyber Security"].

Location

FieldTypeDescription
citystringOffice city.
districtstringOffice district or department.
statestringOffice region or state.
countrystringOffice country name.
countryCodestringISO-3166 alpha-2 country code, e.g. FR.
latitudenumberOffice latitude (WGS84).
longitudenumberOffice longitude (WGS84).
officesarrayAll locations as "City, Country" strings, present only when the offer lists more than one.

Contract, experience and salary

FieldTypeDescription
contractTypestringFULL_TIME, PART_TIME, TEMPORARY, INTERNSHIP, APPRENTICESHIP, FREELANCE, VIE or OTHER.
contractTypeNamestringHuman-readable label in English, e.g. Full-Time.
contractDurationMinnumberMinimum contract duration in months, for time-boxed offers.
contractDurationMaxnumberMaximum contract duration in months.
remotestringRemote policy: fulltime, partial, punctual, no or unknown.
experienceLevelMinnumberMinimum years of experience requested.
educationLevelstringEducation level code, e.g. BAC_5.
salaryMinnumberLower bound of the advertised salary range.
salaryMaxnumberUpper bound of the advertised salary range.
salaryCurrencystringISO currency code, e.g. EUR.
salaryPeriodstringPeriod the salary refers to, e.g. yearly or monthly.
salaryYearlyMinnumberYearly-normalised lower bound computed by the source.

Context and bookkeeping

FieldTypeDescription
publishedAtstringPublication timestamp of the offer (ISO 8601).
languagestringLanguage the offer is written in (ISO 639-1).
departmentstringInternal department named by the employer.
professionstringProfession label, e.g. Data Analysis.
professionCategorystringProfession category, e.g. Tech.
profilestringCandidate-requirements text, converted from the source HTML to plain text.
promotedbooleanTrue when the employer paid to promote the offer.
searchQuerystringThe keyword this row was found with.
statusstringok, not_found or error.
errorstringReason, on not_found and error rows only.
scrapedAtstringISO 8601 timestamp of extraction.

The dataset ships two views: 💼 Job offers (the columns most runs need) and 📋 All fields.

How to scrape Welcome to the Jungle jobs

1. Choose what to search 🔍 — paste one or more Welcome to the Jungle search or company URLs into Search URLs or company slugs, or leave that list empty and type a Keyword instead.

2. Narrow it down 🎯 — optionally set Location (city, country name or two-letter code), Contract type and Remote-friendly only.

3. Set the run size ⚙️ — Maximum results caps how many offers you pay for. Start at 20 for a preview.

4. Run it ▶️ — rows appear in the dataset in real time. Export to CSV, Excel, JSON or XML, or read them from the API.

Input

FieldTypeDefaultWhen to change it
startUrlsarray of stringsone example search URL: https://www.welcometothejungle.com/en/jobs?query=data%20analystReplace it with your own search URLs, or with company page URLs to pull one employer's whole job list. Leave it empty if you would rather describe the search with the fields below.
querystringemptySet a free-text keyword such as data analyst or python when you are not pasting URLs. Leave empty to get everything matching the other filters.
locationstringemptySet a city, country name or two-letter code (Paris, France, FR) to restrict results to one market. Leave empty to search everywhere the index covers.
contractTypeselectanyPick one of FULL_TIME, PART_TIME, TEMPORARY, INTERNSHIP, APPRENTICESHIP, FREELANCE, VIE, OTHER when you only want one kind of contract, e.g. internships for a campus-hiring list.
remoteOnlybooleanfalseTurn it on to keep only offers advertising full or partial remote work.
maxItemsinteger20Raise it for production runs; each ok row is one billable result, so this is also your spending cap.
maxResultsinteger (hidden)unsetAPI and agent alias of maxItems. Only useful if your client already sends this name; ignored when maxItems is set.
proxyConfigurationobjectoffLeave off. Enable Apify Proxy only if you ever see repeated request failures; residential proxies are not needed.

Example input

{
"startUrls": ["https://www.welcometothejungle.com/en/jobs?query=data%20analyst"],
"maxItems": 20,
"remoteOnly": false,
"proxyConfiguration": { "useApifyProxy": false }
}

Keyword-only, with filters:

{
"query": "product manager",
"location": "Paris",
"contractType": "FULL_TIME",
"remoteOnly": true,
"maxItems": 100
}

Output

One JSON object per offer. This is a real row from a run of the default input, unedited:

{
"url": "https://www.welcometothejungle.com/en/companies/natixis/jobs/stage-6-mois-data-analyst-f-h_charenton-le-pont_NATIX_5l5qazL",
"status": "ok",
"scrapedAt": "2026-09-08T11:43:02.072Z",
"jobId": "4265372",
"reference": "NATIX_5l5qazL",
"slug": "stage-6-mois-data-analyst-f-h_charenton-le-pont_NATIX_5l5qazL",
"title": "Stage - 6 mois - Data Analyst - F/H",
"jobUrl": "https://www.welcometothejungle.com/en/companies/natixis/jobs/stage-6-mois-data-analyst-f-h_charenton-le-pont_NATIX_5l5qazL",
"companyName": "Natixis",
"companySlug": "natixis",
"companyUrl": "https://www.welcometothejungle.com/en/companies/natixis",
"companyLogo": "https://cdn-images.welcometothejungle.com/9RcfPrSxYl22FytP8WgrtlX9Ae34A4q5sHd5f4v9wjU/w:200/q:85/czM6Ly93dHRqLXBy/b2R1Y3Rpb24vdXBs/b2Fkcy9vcmdhbml6/YXRpb24vbG9nby8y/NDE3LzE1MjI5My9i/ODk5ZmE2ZC1mNTRi/LTQyYjktYWI2Mi1k/ZDA4ZTFlZDRmMGEu/anBn",
"companySize": 13600,
"city": "Charenton-Le-Pont",
"district": "Val-de-Marne",
"state": "Ile-de-France",
"country": "France",
"countryCode": "FR",
"latitude": 48.82283,
"longitude": 2.40332,
"contractType": "INTERNSHIP",
"contractTypeName": "Internship",
"contractDurationMin": 6,
"contractDurationMax": 6,
"remote": "no",
"experienceLevelMin": 0,
"educationLevel": "BAC_3",
"salaryCurrency": "EUR",
"salaryPeriod": "yearly",
"publishedAt": "2026-09-08T10:00:00.000+02:00",
"language": "fr",
"sectors": ["Banking", "Change Management", "Insurance"],
"profile": "Étudiant de niveau BAC+3/4/5, vous préparez un diplôme (universitaire, d'école de commerce ou d'école d'ingénieur), avec une spécialisation en Finance. …",
"promoted": false,
"searchQuery": "data analyst"
}

A row that found nothing looks like this and costs nothing:

{
"url": "https://www.welcometothejungle.com/en/jobs?query=zzzqxwv-no-such-job-title-anywhere-42",
"status": "not_found",
"error": "No job offers match \"zzzqxwv-no-such-job-title-anywhere-42\"",
"scrapedAt": "2026-09-08T11:47:12.153Z"
}

How much does it cost?

Pay per event. No subscription.

EventPriceCharged when
Actor start$0.005Once per run (Apify charges one event per GB of memory, minimum one; the default 1 GB means one event).
Job offer$0.00249One offer with status: ok saved to the dataset.

Rows with status: not_found or error are never charged. That works out at $2.49 per 1,000 offers plus half a cent per run.

RunCost
Default preview (20 offers)$0.055
100 offers$0.254
1,000 offers$2.50

The Actor stops gracefully when your run's maximum charge is reached, so a spending limit is never exceeded.

How it compares

This Actor is built for depth on one job board rather than breadth across many. Because it reads the site's public search index instead of rendering pages, it is fast and cheap and it returns structured attributes a page scraper would have to infer: salary bounds with currency and period, contract duration in months, education level, office geo coordinates and a machine-readable remote policy. It is a good fit if your market is France, the French-speaking countries or European tech hiring in general.

It is not the right tool if you need a multi-board aggregate feed, if your hiring market is North America or Asia (coverage there is thin), if you need the full job description rather than the candidate-requirements text, or if you are looking for recruiter contact details — it returns none, by design.

Integrations, API and AI agents

Results export to CSV, JSON, Excel and XML from the Apify console, or flow straight into Google Sheets, Airtable, Slack or your CRM through Apify integrations and webhooks — including Make, Zapier and n8n. Schedule the Actor to run every morning and only new rows are pushed downstream.

It can be called from the Apify API, from any Apify client library, from the Apify MCP server, or by any AI agent that can call an HTTP endpoint. Every row carries a status column, so an agent can tell "nothing matched" apart from "the request failed" without parsing prose.

$curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?clean=true&format=csv"
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const { defaultDatasetId } = await client.actor('welcome-to-the-jungle-jobs').call({
query: 'data analyst',
location: 'Paris',
maxItems: 100,
});
const { items } = await client.dataset(defaultDatasetId).listItems();

Limitations

Honest notes so nothing surprises you:

  • Coverage is strongest in France. The index held about 85,000 live offers when this was written, of which roughly 79,000 were in France. Spain, the United Kingdom, the United States, Germany, Canada, Belgium and Italy each contribute a few hundred to a thousand. Outside Europe the coverage is thin.
  • This uses an unofficial, undocumented endpoint. The Actor reads the same public search index the website's own front end queries. That interface can change shape or be withdrawn without notice.
  • The public search keys rotate. The site publishes its search-only credentials at a public endpoint; the Actor reads them at the start of every run and only falls back to the pair captured at build time if that endpoint is unreachable or has changed shape. The run log always states which of the two was used. If the site rotates its keys and changes that endpoint at the same time, the Actor needs a rebuild — the run will fail loudly rather than return empty.
  • profile, not the full description. The search index carries the candidate-requirements text, not the complete job description. About a third of offers include it. The full description lives only on the job page, which is rendered in the browser and is not fetched by this Actor.
  • Many fields are optional. Salary appears on a minority of offers, and experience, education, department and profession are frequently absent. An absent field means the employer did not publish it.
  • remote: unknown is common. It means the employer did not state a remote policy, not that the job is on-site.
  • Search depth. The Actor follows up to 100 pages per search; with 100 offers per page that is 10,000 offers for a single search. Split very large jobs by location or contract type.
  • One contract type per search. To collect two contract types, run two searches or pass two start URLs.

FAQ

Do I need an account or a login? No. Only publicly visible job offers are read; nothing behind a login is touched.

Do I need proxies? No. The Actor is HTTP-only and works from Apify's datacenter IPs, which is why proxy support is off by default. You can turn on Apify Proxy if you ever see repeated request failures.

How fast is it, and how many jobs can I pull? One request returns up to 100 offers. A measured local run collected 500 offers in 7 seconds with 5 requests and no failures. A single search can be followed to 10,000 offers; split bigger jobs by city or contract type.

Can I get every job for one company? Yes — pass the company page URL, for example https://www.welcometothejungle.com/en/companies/alan, and raise maxItems.

Which countries does it cover? France by a wide margin, then Spain, the United Kingdom, Germany, Belgium, Italy, Canada and the United States. Use location with a city name, a country name or a two-letter code.

Why is salaryMin missing on most rows? Most employers on this site do not publish a salary. The Actor reports what is published and leaves the rest out rather than estimating.

What does remote: punctual mean? Occasional remote work — a day here and there. The Remote-friendly only filter keeps just fulltime and partial.

Why did my run fail with "No job offers with status ok"? The search matched nothing, or the source could not be read. That is deliberate: an empty run fails loudly instead of quietly returning zero rows. Check the not_found or error row in the dataset for the reason.

Is the job description included? The candidate-requirements text (profile) is included when published. The full description is not part of the search index.

Can I schedule it? Yes. Use Apify Schedules and store results in a named dataset, or push them to Sheets, Airtable or a CRM through an integration.

This Actor collects only publicly available job-advertisement and company data. It is an independent tool and is not affiliated with, endorsed by, or connected to Welcome to the Jungle or its operators. All trademarks belong to their respective owners.

  • No personal data. The Actor never extracts recruiter or contact names, e-mail addresses or phone numbers. Company identities are business information, not personal data.
  • No login, no private pages. Only anonymous, publicly reachable content is read.
  • No protection is circumvented. The Actor reads a public search interface with the credentials the site itself publishes, and stays within polite request rates.
  • Business data only. Output describes companies and vacancies.
  • Lawful purposes only. Use the data in line with GDPR and any other law that applies to you.
  • You are the controller. You decide what you collect, how long you keep it and what you do with it. Review the target site's terms before large-scale or commercial use.

If you believe a record should not be published here, contact Apify support and it will be reviewed.


Found a bug or want another field? Open an issue on the Actor's page — and if it saved you time, a ⭐ review helps a lot.