Indeed APIfr.indeed.com ↗
Search fr.indeed.com job listings, retrieve full job details, find alternance offers, and fetch company profiles via a structured JSON API.
What is the Indeed API?
This API gives structured access to fr.indeed.com across 4 endpoints: search job listings by keyword and location, retrieve full job details including HTML description and benefits, query today's alternance offers, and pull company profiles with ratings and review counts. The search_jobs endpoint alone returns up to 16 fields per listing including job_key, salary_snippet, pub_date, and snippet, making it practical for job aggregators and recruiting tools targeting the French market.
curl -X GET 'https://api.parse.bot/scraper/4154d0ab-67c2-49be-b699-ebadff95afcb/search_jobs?query=developpeur&start=0&fromage=7&location=Paris' \ -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 fr-indeed-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.
from parse_apis.indeed_france_job_scraper_api import IndeedFrance, JobSummary, Job, Company
client = IndeedFrance()
# Search for developer jobs in Paris
for job_summary in client.jobsummaries.search(query="développeur", location="Paris"):
print(job_summary.title, job_summary.company_name, job_summary.location)
# Get full job details
details = job_summary.details()
print(details.title, details.description_text, details.salary_snippet)
# If company slug is available, fetch company profile
if details.company_slug:
company = client.companies.get(company_slug=details.company_slug)
print(company.company_name, company.rating, company.sector)
# Search alternance jobs posted today
for alt_job in client.jobsummaries.search_alternance_today(location="Lyon"):
print(alt_job.title, alt_job.pub_date)
# Fetch a company directly by slug
matera = client.companies.get(company_slug="Matera")
print(matera.company_name, matera.rating, matera.reviews_count, matera.jobs_count)
Search for job listings on Indeed France by keyword and location. Returns paginated results (approximately 15 per page) with job keys, titles, companies, locations, salary snippets, and publication dates. Pagination uses an offset-based system via the start parameter. An empty query returns all recent listings in the specified location.
| Param | Type | Description |
|---|---|---|
| query | string | Job title or keywords (e.g. 'comptable', 'developpeur') |
| start | integer | Result offset for pagination (increments of 10-15). |
| fromage | integer | Limit results to jobs posted within the last N days (e.g. 1 for today, 7 for last week) |
| location | string | Location to search in (e.g. 'Paris', 'Lyon') |
{
"type": "object",
"fields": {
"count": "integer total number of results returned on this page",
"query": "string the search query used",
"results": "array of job listing objects with job_key, title, company_name, location, salary_snippet, relative_date, pub_date, snippet",
"location": "string the location searched",
"page_start": "integer the offset used"
},
"sample": {
"data": {
"count": 15,
"query": "developpeur",
"results": [
{
"title": "Developer Fullstack (H/F)",
"job_key": "b57ca67fa132a6a1",
"snippet": "Vous intervenez sur du developpement fullstack...",
"location": "92110 Clichy",
"pub_date": 1780894800000,
"company_name": "Weezevent World",
"relative_date": "il y a 1 jour",
"salary_snippet": null
}
],
"location": "Paris",
"page_start": 0
},
"status": "success"
}
}About the Indeed API
Job Search and Listing Data
The search_jobs endpoint accepts a query string (e.g. 'développeur', 'comptable'), a location (e.g. 'Paris', 'Lyon'), a fromage parameter to filter by recency in days, and a start offset for pagination. Results include job_key, title, company_name, location, salary_snippet, relative_date, pub_date, and a short snippet. The first page returns approximately 15–16 results; paginate by incrementing start in steps of 10–15.
Job Detail Retrieval
Pass a job_key from search_jobs results to get_job_details to fetch the full record. The response includes description_html (the complete job description as HTML), benefits (array or null), job_type (array or null), salary_snippet, pub_date, company_name, and company_slug. The company_slug field feeds directly into get_company_profile.
Alternance and Company Endpoints
search_alternance_today is a scoped variant of search_jobs that fixes query='alternance' and fromage=1, returning apprenticeship listings posted in the last 24 hours. It accepts location and start for filtering and pagination, and returns the same listing object shape as search_jobs. get_company_profile takes a company_slug and returns company_name, rating, sector, jobs_count, and reviews_count — useful for enriching job results with employer context.
The Indeed API is a managed, monitored endpoint for fr.indeed.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when fr.indeed.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 fr.indeed.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 job listings by role and city using
search_jobswithqueryandlocationparams - Build a daily alternance digest by polling
search_alternance_todaywithfromage=1 - Enrich a job board with full descriptions and benefits via
get_job_detailsusingdescription_htmlandbenefits - Score employers for a recruiting tool by pulling
ratingandreviews_countfromget_company_profile - Track new job postings in a specific sector by filtering
search_jobsresults bypub_date - Cross-reference company sector and open headcount using
sectorandjobs_countfromget_company_profile - Monitor salary ranges for French tech roles by collecting
salary_snippetacross paginatedsearch_jobscalls
| 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 Indeed have an official developer API?+
What does `get_job_details` return that `search_jobs` does not?+
get_job_details returns the full description_html field containing the complete job description as HTML, a benefits array, a job_type array, and the company_slug used to call get_company_profile. The search_jobs results only include a short snippet, not the full description.How does pagination work in `search_jobs`?+
start parameter to offset results. Indeed France returns roughly 15–16 results per page, so increment start by 10–15 on each subsequent call. There is no explicit total-pages field; use the count field in the response to estimate how many pages exist.Does the API cover job applications or saved jobs from a user account?+
Are salary data and benefits always present in job detail responses?+
salary_snippet and benefits can be null in get_job_details responses, since many French job postings on Indeed do not include that information. job_type can also be null. Always handle null values in these fields when processing results.