Welcometothejungle APIwelcometothejungle.com ↗
Access Welcome to the Jungle job postings and company profiles via API. Search jobs, get full descriptions, salary ranges, and company employee stats.
What is the Welcometothejungle API?
This API exposes 6 endpoints covering job postings and company data from Welcome to the Jungle. Use search_jobs to query by keyword across the full job index, get_job_details to retrieve salary ranges, HTML-formatted descriptions, contract types, and direct application URLs, or get_company_details to pull employee counts, average age, and social links for any company on the platform.
curl -X GET 'https://api.parse.bot/scraper/58cce210-b259-442a-83f9-4c01387b486e/search_jobs?page=0&query=python&hits_per_page=10' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace welcometothejungle-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
Welcome to the Jungle — Job & Company Search
Search job postings, get detailed job info, browse companies and their open positions.
Get your API key from: https://parse.bot/settings
"""
from parse_apis.Welcome_to_the_Jungle_API import WelcomeToTheJungle, ResourceNotFound
wttj = WelcomeToTheJungle()
# Search for Python developer jobs
for job in wttj.job_summaries.search(query="python", limit=5):
print(job.title, job.company_name, job.location, job.contract_type)
# Get full details for the first matching job
job_summary = wttj.job_summaries.search(query="data engineer", limit=1).first()
if job_summary:
detail = job_summary.details()
print(detail.title, detail.salary.currency, detail.experience_level, detail.published_at)
# Search for fintech companies and explore their profiles
company = wttj.company_summaries.search(query="fintech", limit=1).first()
if company:
profile = company.details()
print(profile.name, profile.nb_employees, profile.creation_year, profile.average_age)
# List jobs at this company
for company_job in company.jobs.list(limit=3):
print(company_job.title, company_job.location, company_job.contract_type)
# Handle a missing company gracefully
try:
missing = wttj.companies.get(slug="nonexistent-company-xyz-99999")
print(missing.name)
except ResourceNotFound as exc:
print(f"Company not found: {exc}")
print("exercised: job_summaries.search / details / company_summaries.search / company.details / company.jobs.list / companies.get")
Search for job postings by keyword with pagination. Returns jobs sorted by recency. Pages are 0-indexed; requesting a page beyond nbPages returns an empty jobs array.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number, 0-indexed |
| query | string | Search keyword (e.g. 'python', 'developer') |
| hits_per_page | integer | Number of results per page |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects with title, company_name, company_slug, location, contract_type, published_at, slug, url",
"page": "integer current page number",
"total": "integer total number of matching jobs",
"nbPages": "integer total number of pages available"
},
"sample": {
"data": {
"jobs": [
{
"url": "https://www.welcometothejungle.com/en/companies/ferchau-france/jobs/developpeur-euse-python-m-f-d_toulouse",
"slug": "developpeur-euse-python-m-f-d_toulouse",
"title": "Développeur Python",
"location": "Toulouse",
"company_name": "FERCHAU France",
"company_slug": "ferchau-france",
"published_at": "2026-06-09T22:01:17Z",
"contract_type": "full_time"
}
],
"page": 0,
"total": 7003,
"nbPages": 200
},
"status": "success"
}
}About the Welcometothejungle API
Job Search and Details
search_jobs accepts a query string (e.g. 'python', 'product manager'), optional page (0-indexed), and hits_per_page to control result size. Each result in the jobs array carries title, company_name, company_slug, location, contract_type, published_at, slug, and url. The total and nbPages fields allow you to paginate accurately — requesting a page at or beyond nbPages returns an empty array rather than an error. To retrieve the most recent postings without a keyword filter, list_all_jobs accepts a limit parameter and returns jobs in reverse-chronological order.
Job Details
get_job_details requires both company_slug and job_slug, both available from search_jobs results. The response includes a salary object with min, max, and currency fields (any of which may be null when the company has not disclosed compensation), an HTML-formatted description, key_missions array, apply_url, contract_type, and published_at in ISO 8601 format. Contract type values include strings like full_time, internship, and apprenticeship.
Company Search and Profiles
search_companies lets you find companies by name or sector keyword. Results include name, slug, logo, sectors, and url. Pass a slug to get_company_details to retrieve nb_employees, average_age, presentation text, and a social_links object mapping network names to URLs (Twitter, LinkedIn, Facebook, website). These fields vary in completeness by company — some will be null.
Company Job Listings
get_company_jobs takes a company_slug and returns all active postings for that company with title, slug, location, contract_type, and url. The same 0-indexed pagination model applies: pages at or beyond nbPages return an empty jobs array. This endpoint is useful for monitoring a specific employer's open roles without running repeated keyword searches.
The Welcometothejungle API is a managed, monitored endpoint for welcometothejungle.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when welcometothejungle.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official welcometothejungle.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate French-market job postings by contract type (internship, apprenticeship, full_time) for a jobs aggregator.
- Monitor a target company's open roles over time using
get_company_jobswith a knowncompany_slug. - Extract salary range data (
min,max,currency) fromget_job_detailsto benchmark compensation by role or sector. - Build a company research tool that surfaces
nb_employees,average_age, and social links fromget_company_details. - Feed
list_all_jobsinto a real-time alert system to notify users of new postings as they appear. - Cross-reference
search_companiessector tags with job volume fromget_company_jobsto identify hiring trends by industry. - Enrich a CRM with company presentation text and LinkedIn URLs pulled from
get_company_details.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Welcome to the Jungle have an official public developer API?+
What does `get_job_details` return for salary, and is it always populated?+
salary object has min, max, and currency fields. Any of these can be null — many companies on the platform do not disclose compensation ranges in their postings. Your code should treat all three fields as nullable.How does pagination work across the job and company endpoints?+
search_jobs, search_companies, get_company_jobs) use 0-indexed pages. Each response includes nbPages indicating the total number of available pages. Requesting a page number equal to or greater than nbPages returns an empty results array rather than an error, so always check nbPages before iterating.Does the API support filtering jobs by location, contract type, or remote status?+
search_jobs endpoint filters by keyword (query) and supports pagination via page and hits_per_page. Filtering by location, contract type, or remote status is not directly supported as query parameters. You can fork this API on Parse and revise it to add those filter parameters as an endpoint extension.Can I retrieve individual employee profiles or reviews for a company?+
nb_employees, average_age, presentation, and social links from get_company_details. Individual employee profiles, reviews, or ratings data are not included. You can fork this API on Parse and revise it to add an endpoint targeting that data.