Indeed APIid.indeed.com ↗
Search and retrieve job listings from Indeed Indonesia. Access job titles, companies, locations, salaries, ratings, and full descriptions via 2 REST endpoints.
What is the Indeed API?
The Indeed Indonesia API provides access to job listings from id.indeed.com through 2 endpoints, returning up to 15 results per page with fields like title, company, location, salary, and employer rating. The search_jobs endpoint accepts keyword and location filters, while get_job_details returns the full job description, job types, and posting date for any individual listing identified by its job key.
curl -X GET 'https://api.parse.bot/scraper/0f682605-cb8e-4478-991b-3abcf9c36ddf/search_jobs?page=1&query=software+engineer&location=Jakarta' \ -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 id-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_indonesia_jobs_api import IndeedIndonesia, Job
client = IndeedIndonesia()
# Search for data analyst jobs in Jakarta
for job in client.jobs.search(query="data analyst", location="Jakarta"):
print(job.title, job.company, job.location, job.salary)
# Get full details for a specific job
details = client.jobs.get(job_key="42e2b7971665e323")
print(details.title, details.company, details.description, details.job_types)
Search for job listings on Indeed Indonesia. Returns up to 15 results per page with job title, company, location, rating, salary, and posting age. Paginate by incrementing the page parameter. An empty query returns all listings; an empty location returns all regions.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-indexed). Each page returns up to 15 results. |
| query | string | Job title, keywords, or company name to search for. |
| location | string | City, state, or region to filter jobs by location. Empty string returns all locations. |
{
"type": "object",
"fields": {
"jobs": "array of job listing objects with job_key, title, company, location, rating, posted, job_types, salary, indeed_apply, link",
"page": "integer current page number",
"query": "string echoed search query",
"location": "string echoed location filter",
"total_jobs": "integer number of jobs returned on this page"
},
"sample": {
"data": {
"jobs": [
{
"link": "https://id.indeed.com/viewjob?jk=42e2b7971665e323",
"title": "Software Engineer",
"posted": "30+ days ago",
"rating": 4.4,
"salary": "",
"company": "Adira Finance",
"job_key": "42e2b7971665e323",
"location": "Jakarta",
"job_types": [],
"indeed_apply": true
}
],
"page": 1,
"query": "software engineer",
"location": "Jakarta",
"total_jobs": 15
},
"status": "success"
}
}About the Indeed API
Searching Jobs
The search_jobs endpoint accepts three optional parameters: query (keywords, job title, or company name), location (city, region, or empty string for all of Indonesia), and page (1-indexed integer for pagination). Each response returns an array of job objects alongside total_jobs, letting you estimate how many pages exist. Each job object in the array includes job_key, title, company, location, salary, rating, and posting age — enough to build a listing view without a secondary request.
Retrieving Job Details
The get_job_details endpoint takes a single required parameter, job_key — a hex string obtained from any search_jobs result. The response adds fields not present in search results: a full description string containing the complete job posting text, an array of job_types (e.g. full-time, contract), and the canonical url for the listing. The posted field returns a human-readable posting date string. rating may be null when the employer has no rating on Indeed.
Coverage and Pagination
Data covers job listings published on id.indeed.com, which aggregates Indonesian employers across industries and cities. Search results default to relevance ordering. Each page returns up to 15 results; use the total_jobs count in the search_jobs response to calculate the number of available pages for a given query. Location filtering accepts free-text strings such as city or region names consistent with Indonesian geography.
The Indeed API is a managed, monitored endpoint for id.indeed.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when id.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 id.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 Indonesian job listings by city using the
locationparameter to power a regional job board - Monitor salary ranges for specific roles by querying
search_jobswith a job title and reading thesalaryfield - Build a job alert system that polls
search_jobsfor new postings matching a keyword and checks thepostedfield for freshness - Enrich a company profile page with open positions by filtering
search_jobsresults by company name - Classify job types (full-time, contract, part-time) across industries using the
job_typesarray fromget_job_details - Extract full job descriptions via
get_job_detailsto train or fine-tune NLP models on Indonesian-language job postings - Compare employer ratings across job listings using the
ratingfield returned by both endpoints
| 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 adds the full description text of the posting, an array of job_types strings, the canonical listing url, and a posted date string. The search_jobs endpoint returns only a summary — title, company, location, salary, rating, and posting age — without the complete job description or job type classification.Does the API support filtering by salary range or job type?+
search_jobs endpoint filters only by query keyword and location. Salary and job type data appear in the response fields but cannot be used as input filters. You can fork this API on Parse and revise it to add salary or job-type filter parameters.Is data limited to Indonesia, and can it cover other Indeed regional sites?+
Are company profile pages or employer-level data accessible?+
company name and rating, but there are no endpoints for employer profiles, full review histories, or company-level aggregate data. You can fork this API on Parse and revise it to add a company detail endpoint.