Indeed APIindeed.co.uk ↗
Search Indeed UK job listings, retrieve full job descriptions, application links, and company profiles via a clean REST API with 4 endpoints.
What is the Indeed API?
The Indeed UK API gives developers access to 4 endpoints covering job search, job details, application links, and company profiles from indeed.co.uk. search_jobs returns paginated listings with title, company, location, salary, and a job_key that feeds into get_job_details and get_job_application_link. Each response is structured JSON, making it straightforward to build job boards, salary trackers, or recruitment tools against live UK job data.
curl -X GET 'https://api.parse.bot/scraper/d3daa2ce-2329-43b9-8d7c-fa97d94fcd74/search_jobs?query=developer&location=London' \ -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 indeed-co-uk-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.
"""Walkthrough: Indeed UK SDK — search jobs, drill into details, check company profiles."""
from parse_apis.indeed_uk_job_scraper_api import IndeedUK, NotFound
client = IndeedUK()
# Search for developer jobs in London, capped at 5 results
for job in client.jobs.search(query="developer", location="London", limit=5):
print(job.title, job.company, job.salary)
# Drill into the first result for full details
job = client.jobs.search(query="data engineer", location="Manchester", limit=1).first()
if job:
detail = job.details()
print(detail.title, detail.salary, detail.apply_link)
# Get just the application link
app = job.application_link()
print(app.apply_link)
# Fetch a company profile by slug
try:
company = client.companies.get(company_slug="Amazon")
print(company.name, company.rating, company.review_count, company.happiness_score)
except NotFound as exc:
print(f"Company not found: {exc}")
print("exercised: jobs.search / job.details / job.application_link / companies.get")
Full-text search over Indeed UK job listings. Returns paginated results with 15 jobs per page. Pagination uses an offset-based start parameter in increments of 10. Each job includes a job_key usable with get_job_details and get_job_application_link.
| Param | Type | Description |
|---|---|---|
| query | string | Job title or keywords to search for (e.g. developer, apprenticeship, data engineer) |
| start | integer | Results offset for pagination (increments of 10) |
| radius | integer | Search radius in miles from the specified location |
| salary | string | Minimum salary filter value (e.g. 50000) |
| location | string | Location to search in (e.g. London, Manchester, United Kingdom) |
{
"type": "object",
"fields": {
"jobs": "array of job objects with keys: job_key, title, company, location, salary, url, date",
"query": "string, the search query used",
"location": "string, the location searched",
"total_results": "integer, total number of matching jobs"
},
"sample": {
"data": {
"jobs": [
{
"url": "https://uk.indeed.com/viewjob?jk=0cc990fc68c74f16",
"date": "9 days ago",
"title": "Senior Software Engineer (Technical Exploitation)",
"salary": "£50,686 - £55,157 a year",
"company": "HM Revenue and Customs",
"job_key": "0cc990fc68c74f16",
"location": "Stratford"
}
],
"query": "developer",
"location": "London",
"total_results": 2175
},
"status": "success"
}
}About the Indeed API
Job Search and Listing Data
The search_jobs endpoint accepts free-text query and location parameters alongside numeric filters for radius (miles) and salary (minimum value). It returns up to 15 jobs per page with a total_results count for driving pagination. Pagination is offset-based via the start parameter in increments of 10. Each result object includes job_key, title, company, location, salary, url, and date — enough to display a full job listing without a second call.
Job Details and Application Links
get_job_details takes a job_key from search results and returns the full job description as an HTML string, along with title, company, location, salary, and an apply_link. Fields like salary and apply_link may be null when the original posting omits them. If you only need the application URL, get_job_application_link returns just the apply_link field for a given job_key, avoiding the overhead of fetching the full description.
Company Profiles
get_company_profile retrieves employer-level data using a company_slug drawn from the Indeed company URL path (e.g. Amazon, Google). The response includes an about object with description, industry, founded year, headquarters, revenue range, and websiteUrl, plus aggregate signals: rating (out of 5), review_count, and happiness_score (percentage). These fields are independent of any specific job posting, making them useful for employer research features or enriching job listings with company context.
The Indeed API is a managed, monitored endpoint for indeed.co.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when indeed.co.uk 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 indeed.co.uk 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?+
- Build a UK-focused job board filtered by location, radius, and minimum salary using
search_jobs. - Aggregate salary data by job title and region using the
salaryfield across paginatedsearch_jobsresults. - Enrich a recruiting CRM by pulling full job descriptions via
get_job_detailsfor keyword extraction or classification. - Surface direct application URLs in a browser extension or app using
get_job_application_link. - Compare employer ratings and happiness scores across companies using
get_company_profile. - Track new job postings for specific keywords and locations by polling
search_jobswith a fixedqueryandlocation. - Populate an employer directory with industry, founding year, headquarters, and revenue range from
get_company_profile.
| 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 `search_jobs` return, and how does pagination work?+
job_key, title, company, location, salary, url, and date, plus a total_results count for the full query. Pagination is controlled by the start parameter, which should be incremented in steps of 10 to advance through result pages.Are job review text and individual reviewer comments included in `get_company_profile`?+
rating, review_count, and happiness_score — along with the about object. Individual review text and reviewer breakdowns are not part of the response. You can fork this API on Parse and revise it to add an endpoint targeting individual review content.Can I filter `search_jobs` by job type, such as full-time, part-time, or contract?+
query, location, radius, and salary. Job type filtering is not an exposed parameter. You can fork this API on Parse and revise it to add a job-type filter to the search endpoint.When might `apply_link` or `salary` be null in a job response?+
salary is null when the original posting does not list compensation. apply_link is null when the job links to an external site that Indeed does not surface as a direct URL, or when no external application link is associated with the posting. get_job_application_link will also return null in these cases.