Skip to main content
POST
Scrape Indeed Jobs
Searches Indeed by job title(s) and location(s) and returns structured job listings — title, company, location, salary, job type, and the full job description. Pass one or more 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. The pipeline runs asynchronously. Use the returned request_id to poll for results.
Timing guidance: Most searches finish within a minute. Fetching each job’s full description (include_job_details, on by default) adds time per job. Poll every 15–30 seconds.

How it works

  1. Builds the Indeed search from titles_query, locations, and country, plus optional job_types, max_age_days (recency), and radius
  2. Pages through the search results from start up to rows, de-duplicating by job
  3. When include_job_details is true (default), fetches each job’s page for the full description and precise salary
  4. When include_company_details is true (off by default), also reads the company’s Indeed profile for company_size, company_website, industry, and headquarters when the employer has a profile; a note is added to result.warnings for employers that don’t
  5. 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.
Scraping more than 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: 0100200 … (increment by your rows). Stop when a run returns fewer than rows jobs — that’s the last page.

Response

The request is accepted immediately and returns a request_id — no jobs are returned here. Poll Get Indeed job scrape status with that id to retrieve the results.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
titles_query
required

Job title(s) to search. A single string, or an array joined into one (A) OR (B) keyword search.

locations
string[]
required

Cities, regions, or countries to search (required — at least one). One search is run per location.

Minimum array length: 1
country
enum<string>
default:United States

Selects Indeed's regional host (e.g. United Kingdom -> uk.indeed.com). Countries without a dedicated host use www.indeed.com.

Available options:
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
rows
integer
default:25

Maximum number of jobs to scrape in this run (1-100, default 25).

Required range: 1 <= x <= 100
start
integer
default:0

Result 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). Default 0 = start from the first result.

Required range: x >= 0
radius
integer | null

Search radius (miles) around each location.

Required range: x >= 0
job_types
enum<string>[] | null

Filter by employment type (the first is applied as Indeed's jt).

Available options:
full-time,
part-time,
contract,
temporary,
internship
max_age_days
integer | null

Only return jobs posted within the last N days (Indeed fromage).

Required range: x >= 1
include_job_details
boolean
default:true

Fetch each job's detail page for the full description/salary (slower; one fetch per job).

include_company_details
boolean
default:false

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).

Response

Successful Response

request_id
string
required
status
string
default:QUEUED