Indeed Jobs Scraper avatar

Indeed Jobs Scraper

Pricing

from $1.20 / 1,000 job returneds

Go to Apify Store
Indeed Jobs Scraper

Indeed Jobs Scraper

Export Indeed job listings with salary, location, job type and posting date. Returns roughly 4x a single Indeed search by fanning the query across filters. No Indeed account needed.

Pricing

from $1.20 / 1,000 job returneds

Rating

0.0

(0)

Developer

丂卩ㄖㄖҜㄚ

丂卩ㄖㄖҜㄚ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Share

Export Indeed job listings as structured data: title, company, location, salary, job type, posting date and a description snippet. No Indeed account needed.

What you get

One row per job, deduplicated:

FieldNotes
jobIdIndeed's own job key, stable across runs
title, company, location
remoteTrue when the listing is remote, from the flag or the location text
jobTypesFull-time, Part-time, Contract and so on, as Indeed lists them
salaryTextThe salary exactly as shown, for example "£45,000 - £55,000 a year"
salaryMin, salaryMax, salaryCurrencyParsed figures where Indeed gives them
postedRelative, postedAt"2 days ago", plus an ISO timestamp when available
snippetThe short description Indeed shows on the card
urlDirect link to the listing

How it gets more than 15 jobs

An Indeed search shows 15 jobs, and page two requires a signed in account. Rather than ask you for Indeed credentials, this actor runs your search across several filters that split the results a different way, then merges and deduplicates them.

A typical city and job title returns around 60 unique jobs. The run stops early once the filters stop producing anything new, so you are not charged for queries that add nothing.

If you need more than that for one job title, run it per city rather than trying to go deeper in one place.

Pricing

You pay per unique job returned. Duplicates across filters are removed before charging, so one job is charged once no matter how many filters it appeared in. Set maxResults to cap what a run can cost.

Runs that return nothing cost nothing.

Input

{
"query": "data analyst",
"location": "London",
"country": "uk",
"maxResults": 100
}

Either query or location is required.

FieldTypeDefaultWhat it does
querystringWhat to search for, exactly as you would type it into the Indeed search box
locationstringA city, region or postcode to search near
countrystringukWhich national Indeed site to search, as a two letter code. Match it to the location
maxResultsinteger100The most jobs to return, which is also the most a run can charge

Output

One row per job in the dataset. A typical row:

{
"jobId": "d21e90a08011fc27",
"title": "Data Analyst",
"company": "Example Analytics Ltd",
"location": "London",
"remote": false,
"jobTypes": ["Full-time"],
"salaryText": "£45,000 - £55,000 a year",
"salaryMin": 45000,
"salaryMax": 55000,
"salaryCurrency": "GBP",
"salaryPeriod": "year",
"postedRelative": "3 days ago",
"postedAt": "2026-08-07T00:00:00.000Z",
"snippet": "We are looking for a data analyst to join...",
"url": "https://uk.indeed.com/viewjob?jk=d21e90a08011fc27"
}

Download it from the run as JSON, CSV or Excel, or read it straight from the API.

Run it from the API

curl -X POST "https://api.apify.com/v2/acts/spookyweb~indeed-jobs/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "data analyst", "location": "London", "country": "uk", "maxResults": 100}'

Or with the Apify client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('spookyweb/indeed-jobs').call({
query: 'data analyst',
location: 'London',
country: 'uk',
maxResults: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Notes

Occasionally a run is blocked before it starts, which shows up as an error saying every request was blocked. That is a bad proxy address rather than a problem with your input, and running it again normally works.