Indeed Search
Search Indeed jobs by keyword and location, with salary, experience and remote filters.
GET/api/v1/indeed/search
Costs 1 credit per request; failed requests are refunded. Authentication, the search_metadata envelope and error codes are the same as for every endpoint (see the API reference). Try it in the playground.
Parameters
Search parameters
| Parameter | Type | Description |
|---|---|---|
q | string | Job title, keywords, company or Indeed query syntax. Omit to browse using only location and filters.Up to 512 characters. |
page | integer | One-based results page. Use next_page from the response to continue.Default: 1.Minimum: 1. |
page_token | string | Continuation token from next_page_token. Use it with next_page and unchanged search parameters.Up to 32,768 characters. |
location | string | City, state, ZIP code, or Remote.Up to 512 characters. |
radius | integer | Search radius in radius_unit units; 0 means exact location.Default: 25.Range: 0 to 100. |
radius_unit | "miles" | "kilometers" | Distance unit for the location radius.Default: miles. |
country | string | Two-letter Indeed market, for example US, CA, GB, DE or AU.Default: US. |
locale | string | Indeed locale, such as fr-CA or de-DE. Defaults to en-{country}; set the language for non-English searches. |
limit | integer | Jobs requested per page. Results may contain fewer jobs; use next_page_token to continue.Default: 10.Range: 1 to 100. |
sort | "relevance" | "date" | Result ordering.Default: relevance. |
fromage | integer | Maximum age in days since the job appeared on Indeed.Minimum: 1. |
job_type | "fulltime" | "parttime" | "contract" | "temporary" | "internship" | "permanent" | "temp_to_hire" | "freelance" | Employment type filter. |
workplace | "remote" | "hybrid" | Filter for remote or hybrid jobs. |
easy_apply | boolean | Require Indeed Apply.Default: false. |
education | "high_school" | "associate" | "bachelor" | "master" | "doctoral" | Education level filter. |
no_experience | boolean | Require jobs marked No Experience Required.Default: false. |
experience_level | "entry" | "mid" | "senior" | Filter for entry, mid or senior level jobs. |
salary_min | integer | Minimum annualized base salary in the market's currency.Minimum: 0. |
salary_max | integer | Maximum annualized base salary in the market's currency.Minimum: 0. |
experience_months_min | integer | Minimum required experience in months.Minimum: 0. |
experience_months_max | integer | Maximum required experience in months.Minimum: 0. |
job_language | string | Language of the job posting, independent of the response locale. |
| Parameter | Type | Description |
|---|---|---|
employer_keys | string | |
attribute_keys | string | |
any_attribute_keys | string |
Response
A JSON object with search_metadata (request id, credits used and remaining) and the result data: jobs_results. Groups and fields depend on the content of each page, so treat every field as optional.
Examples
cURL
curl "https://serpfast.com/api/v1/indeed/search?q=software+engineer&location=New+York%2C+NY" \
-H "Authorization: Bearer $SERPFAST_KEY"Node.js 18+
const params = new URLSearchParams({
"q": "software engineer",
"location": "New York, NY"
});
const res = await fetch(`https://serpfast.com/api/v1/indeed/search?${params}`, {
headers: { Authorization: `Bearer ${process.env.SERPFAST_KEY}` },
});
const data = await res.json();
console.log(data);Python
import os, requests
params = {
"q": "software engineer",
"location": "New York, NY"
}
res = requests.get(
"https://serpfast.com/api/v1/indeed/search",
params=params,
headers={"Authorization": f"Bearer {os.environ['SERPFAST_KEY']}"},
timeout=120,
)
print(res.json())