Indeed
Indeed Job Search API
Search Indeed job postings - title, employer with its rating and review count, location, salary range, job type, shifts, benefits, posting age, snippet and apply route - as JSON. 10 postings per page, and a location-only search with no query is valid. Costs 2 credits per request.
Authorizations
AuthorizationstringheaderrequiredBearer authentication header of the form Bearer <token>, where <token> is your Scavio API key (e.g. Bearer sk_live_your_key).
Body
application/jsonquerystringJob title, keywords or employer, 1-500 characters. Required unless location is given.
Example: software engineer
locationstringCity and state, postal code, state, country, or Remote. 1-200 characters. Valid on its own with no query - that returns every posting in the metro.
Example: Austin, TX
pageintegerResults page, 1-based. 10 postings per page, and each page is a separate 2-credit request.
radiusenum<integer>default:50Search radius in miles around location. CLOSED SET: 0, 5, 10, 15, 25, 35, 50 or 100. Indeed ignores any other value and returns the unfiltered set, so asking for 7 miles would bill you for a search covering fifty - the API rejects it instead.
max_age_daysenum<integer>Maximum posting age in days. CLOSED SET: 1, 3, 7 or 14. Indeed ignores any other value and returns postings of every age.
job_typeenum<string>Employment type: full_time, part_time, contract, temporary or internship.
min_salarynumberMinimum annual salary. This filters on INDEED'S OWN ESTIMATE for the role, not on a posted figure, so postings that publish no salary at all still match and come back with salary_text null.
remotebooleanRemote postings only.
Request
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
results = client.indeed.search(query="software engineer", location="Austin, TX")
print(results)Response