Welcome to the Jungle Jobs Scraper | WTTJ API & New Job Feed
Pricing
from $0.56 / 1,000 jobs
Welcome to the Jungle Jobs Scraper | WTTJ API & New Job Feed
$0.80 per 1,000 jobs, full descriptions included | France-focused public Welcome to the Jungle board, including postings abroad. Filter by country, contract or remote mode. Persistent only-new feed and skip IDs. JSON, CSV, Excel, REST and MCP.
Pricing
from $0.56 / 1,000 jobs
Rating
0.0
(0)
Developer
Daemon Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
What does the Welcome to the Jungle Jobs Scraper do?
Export public Welcome to the Jungle (WTTJ) jobs as JSON, CSV or Excel, with full descriptions, company profiles, office locations, remote arrangements and salary information when disclosed. Use keywords, countries, contract types or company slugs, or keep a persistent only-new jobs feed for a recruiting database, research workflow or job board.
Source: Welcome to the Jungle. Apify provides REST access, exports, optional scheduling, integrations and run monitoring.
$0.80 per 1,000 delivered jobs, full descriptions included, plus $0.001 per run on Free/Starter plans. Jobs skipped by only-new memory, explicit IDs, duplicate keywords or filters are not charged. No source account, cookies or proxy configuration needed.
Coverage
This Actor reads the France-focused public WTTJ job board, including its postings in other countries. It does not cover the separate Otta/US/UK personalized matching inventory. A public python search returned 1,673 matches on 23 October 2026; inventory changes continuously.
The source exposes at most 1,000 accessible hits per search. A broad query cannot be exported beyond that window by increasing limits. Split searches using country, company, contract, language or remote filters. City and posting-date filters are checked locally within that window. Results follow source relevance order, not a guaranteed newest-first order.
Quick start
Click Try for free, then Start. Empty input {} searches python and saves up to 20 jobs with descriptions. At the base rate, 20 jobs cost $0.017 including the run start.
{"queries": ["python", "data engineer"],"countryCodes": ["FR"],"contractTypes": ["FULL_TIME"],"maxJobsPerQuery": 50,"maxJobs": 100}
Use the Output tab to export JSON, CSV or Excel. The run's key-value store contains RUN-SUMMARY with match counts, pages read, delivered and skipped counts, and any stopping limit.
Useful searches
Ready-to-run examples: full-time Python jobs in France, fully remote Python jobs, and Webnet company vacancies.
Fully remote Python jobs on the public board:
{ "queries": ["python"], "remoteModes": ["fulltime"], "maxJobs": 20 }
Python vacancies from a particular employer:
{ "queries": ["python"], "companySlugs": ["webnet"], "maxJobs": 20 }
An internship search in Paris:
{"queries": ["data"],"countryCodes": ["FR"],"locations": ["Paris"],"contractTypes": ["INTERNSHIP"],"maxJobs": 20}
Only-new job feeds
{"queries": ["python"],"countryCodes": ["FR"],"onlyNewSinceLastRun": true,"stateName": "fr-python-feed","maxJobsPerQuery": 100,"maxJobs": 100}
Run this input again to receive jobs not previously delivered to that feed. Apify schedules and webhooks can connect it to your own database or workflow. Scheduling is optional and must be configured by you.
The first run delivers a capped baseline. Subsequent runs can deliver older unseen jobs left behind by that cap; “new” means not delivered to this feed, not necessarily newly published. Add postedWithinDays if you need a recent posting window. Republishing an existing job ID does not make it new. Updated descriptions are not re-emitted.
Memory is kept in your account's named wttj-jobs-state key-value store, separated by a hash of stateName. Without a name, the search filters determine the memory key. Changing delivery limits does not reset memory. Only delivered IDs are remembered, for 120 days and up to 50,000 IDs per feed. Names are shared across your tasks; use separate names for independent feeds and avoid overlapping runs using the same name.
To exclude records already in an external database, send skipJobIds with output id, sourceId or dedupKey values. These exclusions happen before detail requests and charging.
Input
| Field | Meaning |
|---|---|
queries | Keyword/title searches; default ["python"], maximum 50. [] runs no searches. |
countryCodes | Office country codes such as FR, ES, DE. |
locations | Local substring matches on office city, region or country; accents ignored. |
contractTypes | FULL_TIME, TEMPORARY, INTERNSHIP, APPRENTICESHIP, FREELANCE, VIE, PART_TIME, OTHER. |
remoteModes | fulltime, partial, punctual, no, unknown. These are source labels. |
languages | Posting languages, for example fr or en. |
companySlugs | Company URL slugs, for example webnet. |
salaryCurrency | Optional disclosed currency such as EUR; no currency conversion. |
postedWithinDays | Last 1–365 days; 0/unset means all dates. Unknown dates are excluded when enabled. |
includeDescription | Default true; false skips detail requests and returns listing metadata. Same price. |
maxJobsPerQuery | Delivered jobs per keyword, default 20; 0 means up to the 1,000-hit source window. |
maxJobs | Global cap, default 20; 0 removes this cap. Per-query/source limits remain. |
skipJobIds | IDs to exclude without charge. |
onlyNewSinceLastRun, stateName | Enable persistent delivered-ID memory and optionally name the feed. |
Values within one filter group are combined with OR; groups are combined with AND. For example, France or Germany and full-time and fully remote. A remote designation does not guarantee permission to work from every country.
The API also accepts aliases: query/searchQuery/keywords/searchTerms, countries/countryCode, location/city, includeDetails, maxItems/maxResults, onlyNewJobs/onlyNew, stateKey/monitorKey, and excludeJobIds. Canonical fields take precedence. Unknown fields fail early so misspelled filters do not silently produce a broad export.
Output
One dataset row per delivered job. Missing source information is null or an empty list; no salary or company details are inferred.
Simplified example from a public posting checked on 23 October 2026:
{"id": "WEBNE_2q66Zp5","dedupKey": "wttj:WEBNE_2q66Zp5","title": "Développeur Python - LLM/RAG H/F - Paris","company": {"name": "Webnet", "slug": "webnet", "employeeCount": 200},"url": "https://www.welcometothejungle.com/en/companies/webnet/jobs/developpeur-python-llm-rag-h-f-paris_paris","salary": {"minimum": 45, "maximum": 45, "currency": "EUR", "period": "yearly", "units": "as-provided-by-source"},"query": "python"}
The real row includes the full job text and the fields below. Export JSON, CSV or Excel from the dataset.
| Field | Meaning |
|---|---|
id | Public job reference, or source search ID if a reference is absent. |
sourceId | Search index object ID, as a string. |
dedupKey | Stable wttj: prefix plus job ID, useful in multi-source databases. |
title, slug | Job title and public URL slug. |
url, applyUrl | Canonical public page and external application link when provided. |
company | Public name, slug, reference, website, headcount, size, founding year, logo, industry and headquarters when available. |
locations, offices, countryCodes | Office labels, structured city/region/country/coordinates, and country codes. |
remoteMode, contractType, language | Source remote, contract and posting-language labels. |
salary | Minimum, maximum, currency, period and source yearly minimum; all amounts are preserved as provided. |
experienceLevel, educationLevel | Source experience and education labels when stated. |
profession, sectors | Public profession label and company sector labels when supplied. |
skills, tools | Job skill labels (English when available) and named tools such as Python, when the employer lists them. |
postedAt, updatedAt, startDate | Source dates in ISO format when available. |
descriptionHtml, description | Full description as HTML and plain text; null in listing-only mode. |
candidateProfile, recruitmentProcess | Plain-text candidate requirements and interview process when published. |
query | First search keyword that delivered this job. |
source, scrapedAt | Source label and collection timestamp. |
Salary units need checking. Some employers enter 45–55 where others enter 45000–55000. The Actor preserves those numbers and sets salary.units to as-provided-by-source. It does not guess a multiplier or produce a normalized salary benchmark. Check the posting before comparing amounts. yearlyMinimumAsProvided is also a source value, not a normalization by this Actor.
Pricing
| Event | Free / Starter | Scale | Business and higher |
|---|---|---|---|
| Delivered job, description included | $0.0008 | $0.00068 | $0.00056 |
| Actor start, once per run | $0.001 | $0.00085 | $0.0007 |
At the base rate, 100 jobs cost $0.081 and 1,000 jobs cost $0.801 in one run. A feed delivering 10 unseen jobs per day for 30 runs costs $0.27. This is a volume illustration, not a forecast of new vacancies. Set Apify's maximum charge per run to control spending; the Actor accounts for the start fee before fetching chargeable details. Platform compute is included in these pay-per-event prices.
Default memory is 512 MB, which incurs one start event. Choosing more than 1 GB of memory multiplies the platform's start-event count.
API and MCP
Call the Actor from Python, JavaScript, n8n or any HTTP client. Put your Apify token in the Authorization header:
curl -X POST 'https://api.apify.com/v2/acts/data_daemon~welcome-to-the-jungle-jobs-scraper/run-sync-get-dataset-items' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"queries":["python"],"countryCodes":["FR"],"maxJobs":20}'
Use the Actor from an MCP client through Apify's MCP server. Keep your token in your client's secret settings.
FAQ
Does it return full descriptions? Yes, by default. HTML, plain text, candidate profile and recruitment process come from the public job detail endpoint. Optional fields depend on the employer.
Does it scrape all WTTJ countries? It covers jobs on the France-focused public board, including postings abroad. It does not promise the separate US/UK matching product's inventory.
Why did a broad search stop before every match? The source limits accessible results to 1,000 per search. Narrow your search filters. A delivery cap, charge cap or run time limit can stop it sooner; inspect RUN-SUMMARY.
Can an empty result mean an outage? A valid search with no matches succeeds with zero rows. Source HTTP errors and invalid responses fail the run, so an outage is not reported as a valid empty feed. Previously saved rows remain available after a partial failure.
Are recruiter emails included? No. The Actor returns public job and company information and does not collect applicant data or private recruiter contact details.
Related Actors by Daemon Data
- Instahyre Jobs Scraper — Indian tech jobs with descriptions and only-new feeds.
- Foundit Jobs Scraper — foundit.in / Monster India jobs.
- IIMJobs Jobs Scraper — MBA, finance and management jobs.
- Hirist Jobs Scraper — Indian IT vacancies.
- Oracle HCM Jobs Scraper — employer career sites using Oracle Recruiting Cloud.
- Luma Events Scraper — public events by city or organizer.
- UK Gazette Insolvency Notices — corporate insolvency filings.
- Dubai Property Transactions — official DLD transaction records.
- India IPO Tracker — Indian IPO information.
- Tickertape Stocks Scraper — NSE/BSE stock profiles.
Support
Open an issue with the input and a public job URL if a field or filter behaves unexpectedly. This Actor is independently maintained by Daemon Data and is not affiliated with Welcome to the Jungle.