curl --request POST \
--url https://api.automindz.co/v1/scrape-indeed-jobs/async \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"titles_query": "Software Engineer",
"locations": [
"Remote"
],
"country": "United States",
"rows": 25,
"job_types": [
"full-time"
],
"max_age_days": 7
}
'import requests
url = "https://api.automindz.co/v1/scrape-indeed-jobs/async"
payload = {
"titles_query": "Software Engineer",
"locations": ["Remote"],
"country": "United States",
"rows": 25,
"job_types": ["full-time"],
"max_age_days": 7
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
titles_query: 'Software Engineer',
locations: ['Remote'],
country: 'United States',
rows: 25,
job_types: ['full-time'],
max_age_days: 7
})
};
fetch('https://api.automindz.co/v1/scrape-indeed-jobs/async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.automindz.co/v1/scrape-indeed-jobs/async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'titles_query' => 'Software Engineer',
'locations' => [
'Remote'
],
'country' => 'United States',
'rows' => 25,
'job_types' => [
'full-time'
],
'max_age_days' => 7
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.automindz.co/v1/scrape-indeed-jobs/async"
payload := strings.NewReader("{\n \"titles_query\": \"Software Engineer\",\n \"locations\": [\n \"Remote\"\n ],\n \"country\": \"United States\",\n \"rows\": 25,\n \"job_types\": [\n \"full-time\"\n ],\n \"max_age_days\": 7\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.automindz.co/v1/scrape-indeed-jobs/async")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"titles_query\": \"Software Engineer\",\n \"locations\": [\n \"Remote\"\n ],\n \"country\": \"United States\",\n \"rows\": 25,\n \"job_types\": [\n \"full-time\"\n ],\n \"max_age_days\": 7\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.automindz.co/v1/scrape-indeed-jobs/async")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"titles_query\": \"Software Engineer\",\n \"locations\": [\n \"Remote\"\n ],\n \"country\": \"United States\",\n \"rows\": 25,\n \"job_types\": [\n \"full-time\"\n ],\n \"max_age_days\": 7\n}"
response = http.request(request)
puts response.read_body{
"request_id": "run_indeed_abc123",
"status": "QUEUED"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Scrape Indeed jobs
Search Indeed and extract structured job listings with full descriptions and salaries
curl --request POST \
--url https://api.automindz.co/v1/scrape-indeed-jobs/async \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"titles_query": "Software Engineer",
"locations": [
"Remote"
],
"country": "United States",
"rows": 25,
"job_types": [
"full-time"
],
"max_age_days": 7
}
'import requests
url = "https://api.automindz.co/v1/scrape-indeed-jobs/async"
payload = {
"titles_query": "Software Engineer",
"locations": ["Remote"],
"country": "United States",
"rows": 25,
"job_types": ["full-time"],
"max_age_days": 7
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
titles_query: 'Software Engineer',
locations: ['Remote'],
country: 'United States',
rows: 25,
job_types: ['full-time'],
max_age_days: 7
})
};
fetch('https://api.automindz.co/v1/scrape-indeed-jobs/async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.automindz.co/v1/scrape-indeed-jobs/async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'titles_query' => 'Software Engineer',
'locations' => [
'Remote'
],
'country' => 'United States',
'rows' => 25,
'job_types' => [
'full-time'
],
'max_age_days' => 7
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.automindz.co/v1/scrape-indeed-jobs/async"
payload := strings.NewReader("{\n \"titles_query\": \"Software Engineer\",\n \"locations\": [\n \"Remote\"\n ],\n \"country\": \"United States\",\n \"rows\": 25,\n \"job_types\": [\n \"full-time\"\n ],\n \"max_age_days\": 7\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.automindz.co/v1/scrape-indeed-jobs/async")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"titles_query\": \"Software Engineer\",\n \"locations\": [\n \"Remote\"\n ],\n \"country\": \"United States\",\n \"rows\": 25,\n \"job_types\": [\n \"full-time\"\n ],\n \"max_age_days\": 7\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.automindz.co/v1/scrape-indeed-jobs/async")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"titles_query\": \"Software Engineer\",\n \"locations\": [\n \"Remote\"\n ],\n \"country\": \"United States\",\n \"rows\": 25,\n \"job_types\": [\n \"full-time\"\n ],\n \"max_age_days\": 7\n}"
response = http.request(request)
puts response.read_body{
"request_id": "run_indeed_abc123",
"status": "QUEUED"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}titles_query values and one or more locations (one search is run per location). Select the market with country, which picks the matching regional Indeed site. Automindz searches Indeed in 62 of the selectable countries (for example Hungary → hu.indeed.com); for any other country the run completes with no jobs, no search, and a warnings entry saying Indeed has no site there. Nothing is charged.
Countries Indeed is searched in
Countries Indeed is searched in
request_id to poll for results.
include_job_details, on by default) adds time per job. Poll every 15–30 seconds.How it works
- Builds the Indeed search from
titles_query,locations, andcountry, plus optionaljob_types,max_age_days(recency), andradius - Pages through the search results from
startup torows, de-duplicating by job - When
include_job_detailsis true (default), fetches each job’s page for the full description and precise salary - When
include_company_detailsis true (off by default), also reads the company’s Indeed profile forcompany_size,company_website,industry, andheadquarterswhen the employer has a profile; a note is added toresult.warningsfor employers that don’t - Returns structured job listings (company, search URLs, totals, and the jobs array)
titles_query and locations are both required (at least one entry each). radius only applies when a location is set.rows results. rows is capped at 100 per run. To harvest a larger search, keep rows fixed and step the start offset across runs: start: 0 → 100 → 200 … (increment by your rows). Stop when a run returns fewer than rows jobs — that’s the last page. A run with no jobs and a warnings entry saying Indeed has no site for the country is not a last page: that country can never return results.Response
The request is accepted immediately and returns arequest_id — no jobs are returned here. Poll Get Indeed job scrape status with that id to retrieve the results.
{
"request_id": "run_indeed_abc123",
"status": "QUEUED"
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Job title(s) to search. A single string, or an array joined into one (A) OR (B) keyword search.
Cities, regions, or countries to search (required — at least one). One search is run per location.
1Selects Indeed's regional site (e.g. United Kingdom -> uk.indeed.com, Hungary -> hu.indeed.com). Automindz searches Indeed in 62 of these countries (listed in the docs); any other returns no jobs, no search and a warnings entry saying so (nothing is charged, and it is not an empty last page).
Afghanistan, Albania, Algeria, American Samoa, Andorra, Angola, Anguilla, Antarctica, Antigua and Barbuda, Argentina, Armenia, Aruba, Australia, Austria, Azerbaijan, Bahamas, Bahrain, Bangladesh, Barbados, Belarus, Belgium, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Sint Eustatius and Saba, Bosnia and Herzegovina, Botswana, Bouvet Island, Brazil, British Indian Ocean Territory, Brunei Darussalam, Bulgaria, Burkina Faso, Burundi, Cabo Verde, Cambodia, Cameroon, Canada, Cayman Islands, Central African Republic, Chad, Chile, China, Christmas Island, Cocos (Keeling) Islands, Colombia, Comoros, Congo, Congo, The Democratic Republic of the, Cook Islands, Costa Rica, Croatia, Cuba, Curaçao, Cyprus, Czechia, Côte d'Ivoire, Denmark, Djibouti, Dominica, Dominican Republic, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Eswatini, Ethiopia, Falkland Islands (Malvinas), Faroe Islands, Fiji, Finland, France, French Guiana, French Polynesia, French Southern Territories, Gabon, Gambia, Georgia, Germany, Ghana, Gibraltar, Greece, Greenland, Grenada, Guadeloupe, Guam, Guatemala, Guernsey, Guinea, Guinea-Bissau, Guyana, Haiti, Heard Island and McDonald Islands, Holy See (Vatican City State), Honduras, Hong Kong, Hungary, Iceland, India, Indonesia, Iran, Iraq, Ireland, Isle of Man, Israel, Italy, Jamaica, Japan, Jersey, Jordan, Kazakhstan, Kenya, Kiribati, Kuwait, Kyrgyzstan, Laos, Latvia, Lebanon, Lesotho, Liberia, Libya, Liechtenstein, Lithuania, Luxembourg, Macao, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Martinique, Mauritania, Mauritius, Mayotte, Mexico, Micronesia, Federated States of, Moldova, Monaco, Mongolia, Montenegro, Montserrat, Morocco, Mozambique, Myanmar, Namibia, Nauru, Nepal, Netherlands, New Caledonia, New Zealand, Nicaragua, Niger, Nigeria, Niue, Norfolk Island, North Korea, North Macedonia, Northern Mariana Islands, Norway, Oman, Pakistan, Palau, Palestine, State of, Panama, Papua New Guinea, Paraguay, Peru, Philippines, Pitcairn, Poland, Portugal, Puerto Rico, Qatar, Romania, Russian Federation, Rwanda, Réunion, Saint Barthélemy, Saint Helena, Ascension and Tristan da Cunha, Saint Kitts and Nevis, Saint Lucia, Saint Martin (French part), Saint Pierre and Miquelon, Saint Vincent and the Grenadines, Samoa, San Marino, Sao Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Sint Maarten (Dutch part), Slovakia, Slovenia, Solomon Islands, Somalia, South Africa, South Georgia and the South Sandwich Islands, South Korea, South Sudan, Spain, Sri Lanka, Sudan, Suriname, Svalbard and Jan Mayen, Sweden, Switzerland, Syria, Taiwan, Tajikistan, Tanzania, Thailand, Timor-Leste, Togo, Tokelau, Tonga, Trinidad and Tobago, Tunisia, Turkmenistan, Turks and Caicos Islands, Tuvalu, Türkiye, Uganda, Ukraine, United Arab Emirates, United Kingdom, United States, United States Minor Outlying Islands, Uruguay, Uzbekistan, Vanuatu, Venezuela, Vietnam, Virgin Islands, British, Virgin Islands, U.S., Wallis and Futuna, Western Sahara, Yemen, Zambia, Zimbabwe, Åland Islands Maximum number of jobs to scrape in this run (1-100, default 25).
1 <= x <= 100Result offset — how many of Indeed's matching jobs to SKIP before scraping this run (maps to Indeed's own start param). Use it to page through a search that has more matches than the rows cap: keep rows fixed and step start by rows across runs — e.g. rows: 100 with start: 0 returns jobs 1-100, start: 100 returns 101-200, start: 200 returns 201-300, and so on. Stop when a run returns fewer than rows jobs (that's the last page) — unless warnings says Indeed has no site for the country. Default 0 = start from the first result.
x >= 0Search radius (miles) around each location.
x >= 0Filter by employment type (the first is applied as Indeed's jt).
full-time, part-time, contract, temporary, internship Only return jobs posted within the last N days (Indeed fromage).
x >= 1Fetch each job's detail page for the full description/salary (slower; one fetch per job).
Also fetch a company's Indeed profile page for size/website/industry when the employer has a claimed profile; when unavailable a note is added to result.warnings. Company rating/review count are returned either way. Off by default (slower).