Welcome to the Jungle Universal Scraper avatar

Welcome to the Jungle Universal Scraper

Pricing

from $1.36 / 1,000 results

Go to Apify Store
Welcome to the Jungle Universal Scraper

Welcome to the Jungle Universal Scraper

⚡ Scrape unlimited jobs from Welcome to the Jungle! Search by keywords, filter by city, contract, remote policy, experience, salary, sector or company, and instantly get rich, structured job data with the hiring company profile — for job boards, sourcing, market research or lead generation.

Pricing

from $1.36 / 1,000 results

Rating

5.0

(2)

Developer

Scrapifier

Scrapifier

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

1

Monthly active users

18 hours ago

Last modified

Share

Welcome to the Jungle Jobs Scraper

Scrape job listings from Welcome to the Jungle (WTTJ) by keyword and filters or by pasting a search or company URL, and export them as JSON, CSV or Excel, or pull them straight from the API.

⚡ For every job you get the title, description and URL, the contract type (CDI, CDD, internship, apprenticeship, freelance, VIE), the remote policy, the advertised salary with a normalized yearly minimum, minimum experience, education level, sectors, office location, publication date, plus the hiring company profile (name, size, sectors, logo, open jobs). Optional full details add the application URL, required skills, summary, start date and recruitment process. Server-side filters, no login, no cookies and no proxy. You pay per job.

Apify Actor

🎯 Why scrape Welcome to the Jungle jobs?

  • Job boards and aggregators: feed a niche job board with fresh French and European roles, company profile attached.
  • Recruiting and sourcing: list every company hiring a data scientist within 30 km of Paris, hybrid, at a startup under 50 people.
  • Lead generation: a company opening five sales roles is buying tools. Filter by sector and company size to build account lists from hiring signals.
  • Salary and market research: compare advertised yearly salaries by contract type, experience, city and sector across thousands of listings.
  • Job search: collect all junior roles matching your profile, sorted by date, into one spreadsheet.

📊 What data does Welcome to the Jungle Jobs Scraper extract?

FieldDescription
id, referenceUnique WTTJ job id and job reference code
urlDirect link to the job on Welcome to the Jungle
titleJob title
descriptionJob description (HTML)
languageLanguage the listing is written in (ISO code)
published_atPublication date (ISO 8601)
contract_type, contract_type_labelFULL_TIME, INTERNSHIP, APPRENTICESHIP, TEMPORARY, FREELANCE, VIE or OTHER, plus the localized label (for example CDI)
contract_duration_min, contract_duration_maxContract duration in months, when set
experience_min_yearsMinimum years of experience required
education_levelNO_DIPLOMA, BAC, BAC_1 to BAC_5
remoteRemote policy: no, punctual, partial, fulltime or unknown
salary.*currency, min, max, period and yearly_min (normalized yearly minimum), when the salary is advertised
sectors[], sector_categories[]Job sectors and their top-level categories (Tech, Distribution...)
office.*, offices[], geolocPrimary office (city, district, state, country, country_code), all offices, coordinates
company.*Hiring company: name, slug, description, logo_url, size, nb_employees, sectors[], nb_jobs (with include_company_info)
apply_url, skills[], summary, start_date, recruitment_processFull job details (with include_full_details)
scraped_at, search_urlExtraction timestamp and the search the job came from

With flatten enabled, company_name, company_slug and company_size columns are added so the CSV stays flat. Labels (contract, size, sectors) follow website_country; titles and descriptions stay in their original language.

🚀 How to scrape Welcome to the Jungle jobs

  1. Open the Actor and type your Keywords in query (for example developer), or paste WTTJ URLs in urls: a jobs search URL (its filters are kept) or a company page URL (all of its jobs).
  2. Narrow the search with the filters: location and radius, cities or countries, contract types, remote policy, experience, education, minimum salary, company size, sectors, language, company names or publication date.
  3. Set Max results. A single search returns at most 1000 jobs; turn on Deep scrape to collect more by running one search per contract type.
  4. Optionally enable Include full job details to fetch the application URL, skills, summary, start date and recruitment process (one extra request per job, so slower).
  5. Click Start. Jobs are read from WTTJ's public search index 100 at a time and pushed to the dataset in batches of 200.
  6. Open the Storage tab to preview the jobs and export them as JSON, CSV, Excel or XML, or read them from the dataset API.

The same run can be started from the Apify API, the Python or JavaScript client, or put on a schedule.

📥 Input parameters

FieldKeyTypeDefaultDescription
Welcome to the Jungle URLsurlsarray of URLsnoneJobs search URLs (filters kept) or company page URLs (all jobs). Empty = use the filters below.
KeywordsquerystringdeveloperFree-text search over job title and description. Empty = all jobs.
Search in job title onlysearch_in_title_onlybooleanfalseMatch the keywords against the job title only.
Location (city / region / country)locationstringnoneSearch around a place (Paris, Lyon, Île-de-France). Requires a radius.
Radius (km)radius_kmintegernoneRadius around the location, in km (20). Only used with a location.
Exact citiescitiesarray of stringsnoneExact office cities (Paris, Barcelona).
Countriescountry_codesselect (multi)noneOffice countries, select of 15 ISO codes (FR, ES, GB, BE, DE...). Empty = all.
Contract typecontract_typesselect (multi)noneFULL_TIME (CDI), INTERNSHIP, APPRENTICESHIP, TEMPORARY (CDD), FREELANCE, VIE, OTHER. Empty = all.
Remote policyremoteselect (multi)noneno (on-site), punctual, partial (hybrid), fulltime, unknown. Empty = all.
Min experience (years)experience_minintegernoneKeep jobs requiring at least this many years.
Max experience (years)experience_maxintegernoneKeep jobs requiring at most this many years (junior roles).
Education leveleducation_levelsselect (multi)noneNO_DIPLOMA, BAC, BAC_1 to BAC_5. Empty = all.
Min yearly salary (€)salary_minintegernoneOnly jobs advertising at least this gross yearly salary.
Min company size (employees)company_min_employeesintegernoneCompanies with at least this many employees (250).
Max company size (employees)company_max_employeesintegernoneCompanies with at most this many employees (50 for startups).
Sectorssectorsarray of stringsnoneA category (Tech, Distribution, Conseil / Audit) or a specific sector (IT / Digital, FinTech / InsurTech, E-commerce).
Job languagelanguagesselect (multi)noneListing language: fr, en, es, it, de, nl, pt. Empty = all.
Companies (by name)organizationsarray of stringsnoneOnly jobs from these companies, exact names (Decathlon, Papernest).
Published afterpublished_afterstringnoneOnly jobs published on or after this date (YYYY-MM-DD).
Date posted (preset)date_postedselectanyany, 1 (24 hours), 3, 7, 14 or 30 days. Combines with published_after, the tighter wins.
Sort bysortselectrelevancerelevance or date (most recent first).
Label languagewebsite_countryselectfrLanguage of sector, contract and size labels: fr, en, es, cs, sk.
Max resultsmax_resultsinteger100Jobs to collect. 0 = as many as possible (1000 per search).
Deep scrape (beyond 1000)split_by_contractbooleanfalseRun one search per contract type to go beyond the 1000-job limit of a single search.
Include company profileinclude_company_infobooleantrueAttach the hiring company profile to every job.
Include full job details (slower)include_full_detailsbooleanfalseAlso fetch each job page: apply URL, skills, summary, start date, recruitment process.
Flat company columns (CSV-friendly)flattenbooleanfalseAdd company_name, company_slug and company_size columns.
Report empty searchesemit_input_statusbooleantrueAdd an input_status report to the run's OUTPUT record.
Proxy (optional)proxyConfigurationobjectoffNot required.

Example input:

{
"query": "data scientist",
"location": "Paris",
"radius_km": 30,
"contract_types": ["FULL_TIME"],
"remote": ["partial", "fulltime"],
"experience_max": 3,
"max_results": 200,
"include_company_info": true
}

location is only applied together with radius_km: a location without a radius is ignored, so set both, or use cities for an exact match. Company page URLs follow the pattern https://www.welcometothejungle.com/fr/companies/<company-slug>; the filters also apply on top of pasted URLs.

📤 Output example

Each job is one dataset item, exportable as JSON, CSV, Excel or via the API.

{
"id": "abc123",
"url": "https://www.welcometothejungle.com/fr/companies/acme/jobs/data-scientist_paris",
"title": "Data Scientist",
"contract_type": "FULL_TIME",
"contract_type_label": "CDI",
"experience_min_years": 2,
"remote": "partial",
"salary": { "currency": "EUR", "min": 45000, "max": 60000, "period": "yearly" },
"sectors": ["IT / Digital"],
"office": { "city": "Paris", "country": "France", "country_code": "FR" },
"company": { "name": "Acme", "size": "50-250", "sectors": ["Tech"], "logo_url": "https://..." },
"published_at": "2026-07-01T09:00:00Z"
}

The run's OUTPUT record also holds the run statistics and, per search, an input_status entry (ok or empty with the job count) so you can see which URL or filter set produced nothing.

💡 Ready-to-run examples

Hybrid or remote data scientist jobs around Paris, junior profiles

{ "query": "data scientist", "location": "Paris", "radius_km": 30, "contract_types": ["FULL_TIME"], "remote": ["partial", "fulltime"], "experience_max": 3, "max_results": 200 }

All developer jobs at startups, most recent first, published in the last week

{ "query": "developer", "company_max_employees": 50, "date_posted": "7", "sort": "date", "max_results": 500 }

Internships and apprenticeships in Tech, in Paris and Lyon, with full job details

{ "cities": ["Paris", "Lyon"], "contract_types": ["INTERNSHIP", "APPRENTICESHIP"], "sectors": ["Tech"], "include_full_details": true, "max_results": 300 }

Every open role of specific companies, flat CSV columns

{ "organizations": ["Decathlon", "Papernest"], "query": "", "flatten": true, "max_results": 0 }

💰 Pricing: how much does it cost to scrape Welcome to the Jungle?

From $2.00 per 1,000 jobs on the free plan, with automatic volume discounts down to $1.36 per 1,000 on higher Apify plans. You pay only for the results you receive, there is no subscription and no start fee. New Apify accounts get free monthly platform credits to try it.

Cost is driven purely by the number of jobs returned: max_results caps the run, and every filter is applied by WTTJ's search index before you pay for a result. Duplicates across searches are removed and never counted twice.

⚙️ Performance, proxies and limits

  • No proxy needed. The Actor reads WTTJ's public search index (Algolia) with plain HTTPS requests, no browser. proxyConfiguration is supported but off by default.
  • Speed: jobs are fetched 100 per request and pushed in batches of 200. Full details add one request per job, so keep include_full_details off for large runs.
  • 1000 jobs per search: the index caps a single search at 1000 results (10 pages of 100). split_by_contract runs one search per contract type (the 7 types, or the ones you selected). It applies to filter-based searches only; each pasted URL is one search.
  • Location and radius: the place is geocoded through OpenStreetMap Nominatim. If geocoding fails, the run logs an error and continues without the location constraint.
  • Date filters: published_after and date_posted are checked on each job's publication date; sort by date to fetch the newest jobs first.
  • Deduplication: jobs are deduplicated by id within a run, across all searches.
  • Retries and empty results: each request is retried up to 4 times; a search returning nothing is reported as empty in the OUTPUT input_status list.

🔌 Integrations and API

Run Welcome to the Jungle Jobs Scraper from the Apify API, the Python or JavaScript client, or on a schedule. Connect it to Make, Zapier, n8n, Google Sheets, Slack or any webhook through Apify integrations. Every run's dataset is available as JSON, CSV, Excel or XML from the dataset API.

curl -X POST "https://api.apify.com/v2/acts/scrapifier~welcome-to-the-jungle-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "query": "data scientist", "location": "Paris", "radius_km": 30, "contract_types": ["FULL_TIME"], "remote": ["partial", "fulltime"], "experience_max": 3, "max_results": 200 }'

❓ FAQ

Is it legal to scrape Welcome to the Jungle jobs?

The Actor only reads listings and company profiles that Welcome to the Jungle publishes to anyone without logging in. Listings may contain personal data, so process them in line with GDPR, respect Welcome to the Jungle's terms of use, and stay responsible for how you use the data. This is not legal advice.

Do I need a Welcome to the Jungle account, login or cookies?

No. Nothing to log in to, no cookies to paste, no proxy to configure.

Can I export Welcome to the Jungle jobs to Excel or Google Sheets?

Yes. Every run's dataset downloads as CSV, XLSX, JSON or XML from the Storage tab. Turn on flatten for flat company columns, and the Google Sheets integration can push new jobs to a sheet automatically.

How many jobs can I scrape?

A single search returns up to 1000 jobs. With split_by_contract the Actor runs one search per contract type, so a broad query can return several thousand. max_results caps the total; 0 means everything.

Can I scrape all jobs of one company?

Yes. Paste the company's WTTJ page URL in urls, or type its exact name in organizations. Each job carries the company profile, including nb_jobs, the number of roles it has open.

Does it work outside France?

Yes. country_codes covers 15 countries (France, Spain, the United Kingdom, Belgium, Germany, Italy, the Netherlands, Switzerland, the United States, Canada and more), or use cities. Output labels switch to English, Spanish, Czech or Slovak with website_country.

Does the salary filter work when jobs do not advertise a salary?

salary_min compares against the normalized yearly minimum WTTJ stores for each job, so jobs without an advertised salary are excluded when you set it. Leave it empty to keep them.

How fresh is the data?

Every run queries Welcome to the Jungle live. Schedule it daily with sort set to date and date_posted set to 1 to collect only the last 24 hours.

🇫🇷 En français

Ce scraper Welcome to the Jungle extrait les offres d'emploi de welcometothejungle.com par mots-clés et filtres, ou à partir d'une URL de recherche ou de page entreprise. Vous pouvez filtrer par lieu et rayon en km, villes exactes, pays, type de contrat (CDI, CDD, stage, alternance, freelance, VIE), télétravail, années d'expérience, niveau d'études, salaire annuel minimum, taille d'entreprise, secteur, langue de l'annonce, entreprise et date de publication. Chaque offre contient le titre, la description, le contrat, le salaire affiché, la localisation du bureau et le profil de l'entreprise qui recrute (nom, taille, secteurs, logo, nombre de postes ouverts). Une option ajoute l'URL de candidature, les compétences demandées et le processus de recrutement. L'export se fait en CSV, Excel, JSON ou XML, ou via l'API Apify, sans compte WTTJ ni proxy. Le paiement se fait au résultat, à partir de 2,00 $ pour 1 000 offres, sans abonnement.

💬 Support

Questions, bugs or a feature request? Open an issue in the Issues tab of this Actor, I answer quickly. If Welcome to the Jungle Jobs Scraper saves you time, a rating on the Store helps others find it.