Welcome to the Jungle Scraper: Jobs from welcometothejungle.com
Pricing
from $0.35 / 1,000 jobs
Welcome to the Jungle Scraper: Jobs from welcometothejungle.com
Scrape Welcome to the Jungle company job pages, SEO job pages and job ads: title, company, locations, contract, remote, salary, date, missions, benefits; optional full description, profile, skills, tools and apply link. Searches over 1,000 jobs are split. Pay per result.
Pricing
from $0.35 / 1,000 jobs
Rating
0.0
(0)
Developer
Hexagone Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Welcome to the Jungle Jobs Scraper
Get job offers from welcometothejungle.com as clean, typed records: title, company, locations, contract, remote policy, salary with its period and currency, publication date, missions, benefits, and optionally the full job page (description, profile, skills, tools, address, apply link, status).
It replays the request the website's own company and SEO pages send to their public job index (same index, same filters, same page size), so the records follow the jobs and the order of the page you pasted. Searches with more than the 1,000 results the site serves per query are split automatically, and the run summary tells you, per URL, how many jobs the site announced and how many you got.
Try it with 20 jobs
- Keep the prefilled start URL (
https://www.welcometothejungle.com/fr/companies/sii/jobs) and Maximum number of jobs = 20. - Click Start. The run takes a few seconds and costs $0.015 (or $0.035 with job details), start fee included.
- Open the Jobs tab, then Run summary to see what was announced and what was collected.
What to paste
| You paste | Example | What you get |
|---|---|---|
| A company jobs page, with the filters you clicked on the site | https://www.welcometothejungle.com/fr/companies/thales/jobs?refinementList%5Bcontract_type%5D%5B%5D=internship | Every job of that page, all pages (30 per page), filters kept exactly |
| An SEO jobs page | https://www.welcometothejungle.com/fr/pages/emploi-paris-75000 | The jobs that page lists (20 per page), all pages |
| A single job page | https://www.welcometothejungle.com/fr/companies/sii/jobs/developpeur-java-confirme-f-h_toulouse_GS_mrpQZbV | That job, with its details; a job that is no longer open comes with status: "archived" |
/en/ pages | https://www.welcometothejungle.com/en/companies/mistral-ai/jobs | Same jobs, English labels and URLs |
- Group pages. Some company pages list the jobs of a whole group:
/fr/companies/edf/jobsshows the jobs of EDF and 9 subsidiaries (Framatome, EDF Renouvelables…), 58 apprenticeships where "edf" alone has 51. The Actor reads which companies the page lists from the site's own page configuration (one small request per company page, cached for the run) and filters exactly like the page, so you get the same jobs, the same total and the same page/position. If that configuration cannot be read, it filters on the company of the URL alone, warns you (COMPANY_FILTER_FALLBACK) and marks the URLpartial_collection("company filter could not be read: subsidiaries of a group may be missing"), neverdone: the total it compares to is then the company's own, not the page's. A temporary error is retried once when the run resumes after a migration. - Company page that does not exist. Some companies have jobs on the site but no jobs page (e.g.
/en/companies/l-oreal/jobsanswers "Error 404"). Their jobs are still in the site's index and their job pages are public: the Actor delivers them, filtered on the company of the URL, with the warningCOMPANY_JOBS_PAGE_NOT_FOUND. page=in a pasted URL is ignored: collection always starts at page 1.- Keyword search is not public on the site any more. Since October 2026 the site shows keyword search results
only to logged-in users (
/fr/jobs?query=...displays a sign-up page). Old keyword URLs are still accepted and translated to the job index, with a clear warning; the keyword field does the same. Because there is no public page to compare with, we do not promise "same as the website search" for those. - Keyword mode filters:
countryCode(FR by default, empty = all),contractTypes,remote,city,language(fr/enlabels and URLs),postedSince(YYYY-MM-DD).
Output
One record per job and run (duplicates across start URLs are delivered once). Unknown values are null: never an
empty string, an invented 0, false or "no". A real record (texts shortened with "…"):
{"jobId": "4a986e90-1737-4247-a41e-f6820e8d6e81","jobReference": "GS_A649137","url": "https://www.welcometothejungle.com/fr/companies/sii/jobs/ingenieur-ivv-logiciel-embarque-aeronautique-f-h_toulouse_GS_A649137","title": "Ingénieur(e) IVV Logiciel Embarqué Aéronautique (F/H)","company": "Groupe SII", "companyId": "5p9XmWL", "companySlug": "sii","companyUrl": "https://www.welcometothejungle.com/fr/companies/sii","companyLogo": "https://cdn-images.welcometothejungle.com/-OCGJ1AoQbY-MO_H0BCX9Dq_3njRpPrSEcpoBgJmud8/rs:a…","companySize": 16000,"location": "Toulouse", "locations": ["Toulouse"],"offices": [{"city": "Toulouse", "localCity": "Toulouse", "district": "Haute-Garonne", "state": "Occitanie", "country": "France", "countryCode": "FR"}],"contractType": "full_time", "contractTypeLabel": "CDI","contractDurationMin": null, "contractDurationMax": null,"remote": "no", "remoteLabel": "Télétravail non autorisé","salaryMin": 35000, "salaryMax": 60000, "salaryPeriod": "year", "salaryCurrency": "EUR","experienceLevelMin": null, "educationLevel": null,"postedAt": "2026-10-28T23:03:24Z","summary": "Rejoignez SII, un leader mondial de l'industrie aéronautique. En tant qu'Ingénieur Vérific…","keyMissions": ["Développement de scripts de test et mise en œuvre des cas de test auto…", "…"],"benefits": ["Horaires de travail flexibles", "Entre 1-2 jours de télétravail", "…"],"sectors": ["Logiciels", "Intelligence artificielle / Machine Learning", "IT / Digital"],"language": "fr", "isBoosted": false,"sourceUrl": "https://www.welcometothejungle.com/fr/companies/sii/jobs","page": 2, "position": 6, "searchPart": null,"scrapedAt": "2026-10-29T12:06:50+00:00","detailsSource": "jobPage","descriptionHtml": "<p>Dans le cadre d'une mission stratégique pour un leader mondial de l'industrie a…","descriptionText": "Dans le cadre d'une mission stratégique pour un leader mondial de l'industrie aéronautique…","profileHtml": "<p>Compétences requises :</p><p>C, Doors, Jira, Python</p><p>Qualités désirées :</p><p>For…","profileText": "Compétences requises :\n\nC, Doors, Jira, Python\n\nQualités désirées :\n\nForce de proposition,…","recruitmentProcess": null,"applyUrl": "https://sii-group.com/fr-FR/offers/ingenieure-ivv-logiciel-embarque-aeronautique-fh?source…","skills": ["Communication", "Gestion de la conformité"], "tools": ["Linux", "Python", "JIRA"],"startDate": null, "address": "Toulouse, Occitanie, France", "zipCode": "31000","latitude": 43.60579, "longitude": 1.44863,"profession": "Ingénierie matérielle", "professionCategory": "Technologie et ingénierie","updatedAt": "2026-10-28T23:03:24.635880Z", "status": "published","jobPageSalaryMin": 35000, "jobPageSalaryMax": 60000, "jobPageSalaryPeriod": "year", "jobPageSalaryCurrency": "EUR"}
Good to know:
remotekeeps the site's code:no,partial,punctual,fulltime, orunknown(about 45% of the index: the card shows no remote label).unknownis never turned into "no"; itsremoteLabelisnull.- Salary:
salaryMinalone means "from" (the card shows "≥ 55K €"),salaryMaxalone means "under" ("< 300 € par jour");salaryPeriodisyear,monthorday. When the site stores a period without any amount, all four salary fields arenull(nothing is displayed). Amounts are numbers (45000, not45000.0or "45K"). An amount of 0 in the index is delivered asnull(the card shows no salary and the job page says "Non spécifié"). - Two salary sources, kept apart.
salaryMin/salaryMax/salaryPeriod/salaryCurrencycome from the search index, exactly what the job card shows. With includeDetails,jobPageSalaryMin/jobPageSalaryMax/jobPageSalaryPeriod/jobPageSalaryCurrencyhold the salary shown on the job page itself. They usually agree, but the site does not always: one job had no salary on its card and "35K à 40K €" on its page. Use the job page values when you want the most complete salary, the index values when you want what the listing shows. locationsuses the local city name the card shows ("Genève", not "Geneva") in the card's order;locationis the full list joined by ", " even when the card truncates it ("… +18").languageis the language of the job ad (fr,en,es…), not the language of the page you pasted.jobIdis the site's UUID;jobReference(the short code at the end of most job URLs) isnullfor about 16% of jobs.contractTypeLabel/remoteLabelare the labels displayed in the language of your URL; a code whose label was not measured getsnull(the code is still delivered).searchPartisnullfor jobs read from the site's own pages; for jobs found by splitting a search over 1,000 results, it holds the extra filter of that part (e.g.contract_type:internship).- Detail fields (
descriptionHtml…status) are filled only with includeDetails (or for a pasted job page); otherwise they arenullanddetailsSourceislisting.
Run summary
Each run writes a readable Run summary (key-value store record SUMMARY) and the same data as JSON (OUTPUT):
per start URL, its status, the jobs delivered, the jobs the site announced (jobsAnnouncedBySite), the distinct jobs
seen (jobsSeen), what is missing and why.
| Status | Meaning |
|---|---|
done | Every announced job was seen and delivered |
no_new_jobs | Every job of this URL was already delivered by an earlier start URL |
stopped_at_limit | Your maxItems or maximum charge was reached |
partial_collection | Fewer distinct jobs than announced, with the reason (page that failed, empty page, page that only repeated jobs, page count that dropped, split part that failed). Never reported as done |
no_results | The site announced 0 jobs: the search is empty, the URL is wrong or the site is down (warning NO_RESULTS). A run where every URL is empty fails |
job_not_available | A pasted job URL served the site's "page not found" (sent with HTTP 200) or another job; nothing delivered or charged |
blocked_by_site, http_error, network_error, unrecognized_page | The site refused or failed; this is never reported as an empty search |
Warnings you may see: ANO_COUVERTURE (partial collection, with the numbers), SEARCH_URL_NOT_PUBLIC,
COMPANY_JOBS_PAGE_NOT_FOUND, COMPANY_FILTER_FALLBACK,
JOB_ARCHIVED, ANO_DETAILS / DETAILS_STOPPED (job pages not read), UNEXPECTED_DATA / UNKNOWN_VALUE (one odd
value: the job is delivered without that field, the run continues), KEY_FALLBACK, PROXY_SETTING.
The final status message never says everything went fine when one of these counters is not zero.
When a job page answers something other than a normal page (for example an HTTP 202 anti-bot challenge), the first
3 such answers are saved in the key-value store record DEBUG_PAGES (status, response headers, first 3,000
characters, final URL, proxy session number; no password or key) so the cause can be checked.
Pricing
Pay per result, no subscription:
- $0.0005 per job delivered (
apify-default-dataset-item); - + $0.001 per job whose page was read for details (
job-details, only with includeDetails or a pasted job page); - + $0.005 per run to start (
apify-actor-start, once per GB of memory; the default is 1 GB).
Apify subscribers pay less automatically on jobs and on the run start: 10% off on the Bronze plan, 20% on Silver, 30% on Gold and above. The job-details charge has no discount: $0.001 per job page on every plan.
| 20 jobs | 1,000 jobs | |
|---|---|---|
| Without details | $0.015 | $0.505 |
| With details | $0.035 | $1.505 |
These totals include the $0.005 start fee.
The job-details price includes the residential proxy traffic that job pages need (about 85-92 KB transferred per page, measured). A job whose page could not be read is never charged the details event. Your maximum charge per run is respected: the run stops cleanly before reading a job page it could not pay for (a pasted job page is only read when the job and its details both fit in your maximum charge).
Known limits
- Keyword search is no longer public on the site (see "What to paste"); keyword results come from the same index but cannot be compared with a public page.
- The site serves at most 1,000 results per query. Larger searches are split by contract type, remote policy, then
publication date; jobs published or removed while the run splits a large search can make the count differ, and the
summary says so (
partial_collection, neverdone). - Filters other than
refinementList[...]andqueryin a pasted URL (for example a sort) are not applied; the summary lists them (IGNORED_URL_PARAMETERS). - The site's company page counter includes a "Candidature spontanée" card (e.g. 479 for 478 jobs); it is not a job and is neither counted nor delivered.
- A job that is no longer open is not in the index: it is only reachable as a pasted job page, delivered with
status: "archived"and the fields its page gives (sectors, size, logo and boost staynull). For such a job the salary fields come from its job page, the only source left (they then equaljobPageSalary*); for every other jobsalary*is the index value the card shows. - Bot challenge on some job pages. On Apify, about 5% of job pages answer with an anti-bot challenge (HTTP 202
from CloudFront,
x-amzn-waf-action: challenge, AWS WAF) instead of the page, even after new IPs. A browser solves it, an HTTP client cannot. Those jobs are delivered without details and without thejob-detailscharge; the run summary counts them, and the first answers are kept inDEBUG_PAGES. - The job page needs residential proxy. The search index works from datacenter IPs, but the site refuses job
pages from datacenter IPs (HTTP 403, measured 2026-10-29). Job pages and SEO pages therefore use their own setting,
Proxy for job pages (
detailsProxyConfiguration, Apify RESIDENTIAL, country FR, by default); a refused page is retried with a new IP, up to 5 times. Proxy for the search index (proxyConfiguration) only applies to the index. If you set the job pages proxy without the RESIDENTIAL group, or turn it off, the run does as you ask and warns you (PROXY_SETTING): details will likely fail. - Run time (measured on Apify). Without details, the index is fast: 7,139 jobs ("developpeur", France) in about 1 minute. With details, count about 1 second per job (one job page each, about 288 KB uncompressed and 85-92 KB transferred): 16-20 minutes per 1,000 jobs. The default run timeout is 4 hours (about 14,000 jobs with details); for a larger collection with details, raise the timeout in the run options, otherwise the run stops before writing its summary.
Support
Found a job the site shows that the run missed, or a field that differs from the page? Open an issue on the Actor's Issues tab with the start URL and the run ID; the run summary usually points to the cause.
This Actor is not affiliated with, endorsed or sponsored by Welcome to the Jungle. "Welcome to the Jungle" is a trademark of its owner. It reads publicly available job offers only; use the data in line with the site's terms and the law that applies to you (GDPR for personal data).
En français
Collez une page entreprise de welcometothejungle.com avec les filtres choisis sur le site (stage, alternance,
télétravail…), une page SEO (/fr/pages/emploi-paris-75000) ou une fiche d'offre : vous obtenez une ligne par offre
(titre, entreprise, lieux, contrat, télétravail, salaire avec sa période, date, missions, avantages ; avec les
détails : description, profil, compétences, outils, adresse, lien de candidature, statut). La recherche par mot-clé
n'est plus visible sans compte sur le site : elle reste possible ici, avec un avertissement. Au-delà de 1 000
résultats, la recherche est découpée automatiquement ; le résumé du run dit, URL par URL, combien d'offres le site
annonçait et combien ont été livrées. Prix : 0,50 $ les 1 000 offres, 1,50 $ avec les détails, plus 0,005 $ de démarrage par run ; remise automatique pour les abonnés Apify sur les offres et le démarrage (−10 % Bronze, −20 % Silver, −30 % Gold et plus) ; pas de remise sur les détails (0,001 $ par fiche quel que soit l'abonnement).