Welcome to the Jungle (WTTJ) Jobs & Salary Scraper — No Login
Pricing
from $1.50 / 1,000 job results
Welcome to the Jungle (WTTJ) Jobs & Salary Scraper — No Login
Scrape live Welcome to the Jungle (WTTJ) jobs across 17 EU countries — no login, no cookies. Each record has structured salary, a company profile (size, sector, founding year) and the apply URL. Filter by keyword, contract type (CDI/CDD/freelance), remote and experience. $2 per 1,000 jobs.
Pricing
from $1.50 / 1,000 job results
Rating
0.0
(0)
Developer
Nomad.Dev
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Welcome to the Jungle Jobs Scraper (WTTJ)
Scrape current openings from Welcome to the Jungle (welcometothejungle.com), France's leading tech job platform.
Claude / Codex skill to describe and setup this actor: SKILL.md
What Welcome to the Jungle data does this scraper extract?
Each result is one flat JSON record per job posting:
| Field | Meaning |
|---|---|
title | Job title as posted |
company | Hiring company / organisation |
companySlug | WTTJ organization slug (string, or null) |
companyUrl | Public WTTJ company page URL (string, or null) |
companyLogoUrl | Company logo image URL (string, or null) |
companyEmployeeCount | Employee count WTTJ reports (number, or null) |
companyCreationYear | Company founding year (number, or null) |
companySectors | Sector/industry labels, e.g. ["Software","Health"] (array, or null) |
location | Location / duty station (may include remote hints) |
url | Direct link to the posting |
postedAt | Posting date where the source provides it |
contractType | Contract type: full_time (≈ CDI), part_time, temporary (≈ CDD), internship, apprenticeship, freelance, vie, other (string, or null) |
experienceMin | Minimum years of experience required (number, or null) |
educationLevel | Minimum education level in WTTJ coding, e.g. bac_5 (string, or null) |
salary | Salary display text where the source provides it (raw string, e.g. "45,000-60,000 EUR year") |
salaryMin | Structured minimum salary (number, or null) |
salaryMax | Structured maximum salary (number, or null) |
salaryCurrency | Salary currency, ISO 4217-style (string, or null) |
salaryPeriod | Salary period as provided by the source, e.g. "year"/"month" (string, or null) |
snippet | Short description excerpt |
id | Stable source-side identifier |
hasRemote | Whether the posting is flagged remote/hybrid (boolean) |
remoteType | Remote kind where the source provides it, e.g. "full"/"partial" (string, or null) |
profession | Profession/taxonomy label where the source provides it (string, or null) |
source | Always "wttj" |
With includeDetails enabled, each record additionally carries descriptionText (full posting text), keyMissions (array), candidateProfile, benefits (array) and companyDescription — all from the same search index, no extra requests.
How to scrape Welcome to the Jungle with this Actor
- Click Try for free / Run — no login to the target site, no cookies, no proxies to configure.
- Adjust the input (keyword, filters,
maxItems) or keep the defaults. - Run it and export the dataset as JSON, CSV or Excel, or read it over the API.
Run it from your own code:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/wttj-scraper").call(run_input={"maxItems": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], "—", item["company"], item["url"])
Or a single HTTP call that runs the Actor and returns items in one response:
curl -X POST \"https://api.apify.com/v2/acts/nomad-agent~wttj-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"maxItems": 50}'
Input
| Field | Type | Default | Notes |
|---|---|---|---|
query | string | "" | Free-text search over job titles and descriptions (e.g. "software engineer", "product manager"). Leave… |
countryCodesList | array | [] | ISO 3166-1 alpha-2 country codes to filter postings by office location (e.g. ["ES", "FR", "DE"]). Leave empty for the default EU set. Combined with the legacy countryCodes string field (Advanced) when both are set. |
includeRemote | boolean | true | When enabled, postings flagged as fully remote or hybrid are included regardless of country. Disable to… |
contractType | array | [] | Restrict to these contract types: full_time (≈ CDI), part_time, temporary (≈ CDD), internship, apprenticeship, freelance, vie, other. Empty = all. |
experienceMax | integer | – | Only postings requiring at most this many years of experience (e.g. 3 for junior roles). Empty = no filter. Postings with no experience data are excluded when set. |
indexLang | string | "en" | Language variant of the search index. Controls how taxonomy labels (sectors, professions) are rendered.… |
maxItems | integer | 50 | Maximum number of postings to return. Hard ceiling: ~1000 per run — Algolia (the search index behind Welcome to the Jungle) refuses to page past its 1000th hit for any query, no matter how high you set this. |
includeDetails | boolean | false | Add full posting text, key missions, candidate profile, benefits and company description to each record (same index, no extra requests). |
skipReposts | boolean | false | Drop repeat postings sharing the same stable job id within a run. |
onlyNewSinceLastRun | boolean | false | Delta mode: emit only postings not seen in previous runs (seen IDs are remembered in the key-value store). Ideal for scheduled incremental runs and job alerts. |
cacheTtlSeconds | integer | 1800 | Cache the upstream fetch in the key-value store for this many seconds; re-runs within the window skip the… (Advanced) |
countryCodes (Advanced, legacy) | string | "" | Legacy comma-separated form of countryCodesList (e.g. "ES,FR,DE"). Prefer countryCodesList — still functional and merged with it when both are set. |
stateName (Advanced) | string | "" | Optional namespace for the onlyNewSinceLastRun seen-ID memory. Empty = derived from the search parameters. |
Output example
{"id": "585e3eda-99a1-4b28-ab48-f3a7820ac9b0","title": "Product Designer","company": "Alan","companySlug": "alan","companyUrl": "https://www.welcometothejungle.com/en/companies/alan","companyLogoUrl": "https://cdn-images.welcometothejungle.com/.../logo.jpg","companyEmployeeCount": 500,"companyCreationYear": 2016,"companySectors": ["Health", "Software"],"location": "Paris, France (Hybrid)","url": "https://www.welcometothejungle.com/en/companies/alan/jobs/product-designer","postedAt": "2026-06-29","contractType": "full_time","experienceMin": 3,"educationLevel": "bac_5","snippet": "Alan is looking for a Product Designer...","salary": "45,000-60,000 EUR year","salaryMin": 45000,"salaryMax": 60000,"salaryCurrency": "EUR","salaryPeriod": "year","hasRemote": true,"remoteType": "partial","profession": "Product Management","source": "wttj"}
A second example — an on-site internship in Barcelona (shows contractType/company fields for a non-Paris, non-remote posting):
{"id": "a71c0f2d-4b9e-4c11-9a3f-2e6d8b0c1f77","title": "Data Analyst Intern","company": "Glovo","companyUrl": "https://www.welcometothejungle.com/en/companies/glovo","companyEmployeeCount": 3000,"companySectors": ["Mobile Apps", "FoodTech"],"location": "Barcelona, Spain","url": "https://www.welcometothejungle.com/en/companies/glovo/jobs/data-analyst-intern","postedAt": "2026-07-02","contractType": "internship","experienceMin": 0,"salary": "","hasRemote": false,"remoteType": null,"profession": "Tech & Engineering","source": "wttj"}
Integrations
Send results straight to Google Sheets, Slack, Make, Zapier or any webhook via Apify integrations — no code required, or pull the dataset over the API.
Pricing
Pay per event: $0.005 per Actor start + $2.00 per 1,000 jobs returned ($0.002/job), with volume discounts at higher subscription tiers. 100 jobs ≈ $0.21. No subscription, no rental, no monthly rent — you pay only for the jobs you actually fetch.
How that compares
| Actor | Price per 1,000 jobs |
|---|---|
logiover/welcome-to-the-jungle-jobs-scraper | $3.50–$5.00 |
easyapi/jungle-job-scraper | $4.99 |
clearpath/welcome-to-the-jungle-jobs-api | $3.00 |
| This Actor | $2.00 |
Cheaper listings exist, but most cover a single market and return a bare job row. This Actor defaults to 17 EU countries, returns structured salary (salaryMin/salaryMax/salaryCurrency/salaryPeriod) and a company profile (size, sector, founding year, logo) on every record, and pulls the full posting text with includeDetails — all from one index, with no secondary requests and no login.
Use cases
- French/EU job boards and alert bots — schedule with
onlyNewSinceLastRunfor incremental "new postings only" runs - Recruiting for the French tech market
- Employer-brand and hiring-trend research (company size, sector, founding year)
- Contract-type analysis (CDI/CDD/freelance) and experience-level filtering
FAQ
Is it legal to scrape Welcome to the Jungle? This Actor reads only publicly available job postings — data any visitor can see without logging in. No personal data behind authentication is touched. Review the target site's terms and your local regulations for your specific use case.
Do I need an account on the target site? No. Postings are fetched from public pages/APIs — no login, cookies or session tokens.
How fresh is the data?
Every run fetches live listings. Results are cached for cacheTtlSeconds (default 30 min, set 0 to always hit the source live).
How many jobs can I get?
maxItems caps the run (set 0 where supported for no cap). Most sources paginate from newest to oldest.
Something broken or missing? Open an issue on the Actor's Issues tab — it is monitored and reliability fixes ship fast.
Related Actors
⭐ Found this useful? Leave a review on the Actor's page — it takes ten seconds and it is what helps other people find it.
From the maker of Oink — an open-source, AI-powered job-search bot for Telegram that runs on these Actors. Try the free bot, get a managed instance at oinkjobsearch.com, or browse the full catalog of 50+ Actors.