Indeed Jobs Scraper avatar

Indeed Jobs Scraper

Pricing

from $2.80 / 1,000 job returneds

Go to Apify Store
Indeed Jobs Scraper

Indeed Jobs Scraper

🏷️ From $2.80 / 1K | Export Indeed job listings with salary, location, job type and posting date. Fans the search across filters to return several times a single page of results, without an Indeed account.

Pricing

from $2.80 / 1,000 job returneds

Rating

0.0

(0)

Developer

丂卩ㄖㄖҜㄚ

丂卩ㄖㄖҜㄚ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days 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 does Indeed Jobs Scraper do?

It runs a job search on Indeed and returns every listing it finds as a clean row of data, ready for a spreadsheet, a database or your own product.

An Indeed search page shows 15 jobs and page two asks you to sign in. This scraper works around that without ever needing your credentials, so a typical city and job title returns around 57 unique jobs rather than 15. See how it gets past 15 jobs below.

🧭 Is there an official Indeed API?

Not one you can sign up for. Indeed retired its public Job Search API, the old Publisher programme, and the APIs it still runs, such as Indeed Apply and Sponsored Jobs, are for posting and managing jobs and are limited to approved partner companies. There is no official self-serve route to read Indeed search results programmatically.

This Actor fills that gap by reading the same public search pages any visitor sees, and returning them as structured rows: one call in, JSON, CSV or Excel out, with salary text parsed into comparable figures and duplicates removed. No partner application, no key management, no browser automation of your own to maintain.

📊 What data can I extract from Indeed?

One row per job, deduplicated:

FieldWhat it holds
🆔jobIdIndeed's own job key, stable across runs
🏷️titleThe job title as advertised
🏢companyThe company shown on the listing
📍locationThe location as Indeed displays it
🏠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"
💰salaryMinLower bound parsed from the advertised salary
💰salaryMaxUpper bound parsed from the advertised salary
💰salaryCurrencyCurrency of the parsed figures
💰salaryPeriodPeriod the figures refer to, year, month, day or hour
📅postedRelativePosting age as Indeed shows it, such as "3 days ago"
📅postedAtThe posting date resolved to an ISO timestamp when available
📝snippetThe short description Indeed shows on the card
🔗urlDirect link to the listing

💡 Why scrape Indeed?

Salary benchmarking. An HR manager pricing a data analyst opening in Manchester pulls every advertised range for that title in the region and writes the ad against real figures rather than survey data.

Hiring signals. A recruiter watching which companies are hiring for the same role in the same city runs the search weekly and diffs the company column.

Job board and alerting products. A newsletter that rounds up new remote junior developer roles every Monday feeds deduplicated listings straight into its send.

Market research. An analyst tracking whether warehouse hiring in the Midlands is rising or falling runs the same query monthly and charts the row counts.

Career moves. A job seeker who wants every listing for a niche title, not just the first 15, exports the lot to a spreadsheet and works through it with filters.

Screening a specific employer. Someone interviewing at a company pulls everything it currently advertises to see which teams are growing and what they pay.

🚀 How do I use Indeed Jobs Scraper?

  1. Click Try for free.
  2. Enter what you are searching for and where, for example data analyst in London.
  3. Pick the country site to search with country, and cap the run with maxResults.
  4. Click Start and wait for the run to finish.
  5. Download the results as JSON, CSV or Excel, or pull them from the API.

⬇️ 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

Table view

Results arrive as a table you can sort and filter in the Console. There is a second view, Salary detail, that lines up the parsed pay figures for comparing listings against each other.

JSON

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.

How does it get 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 scraper 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 57 unique jobs, measured on "data analyst" in London across the eight searches. 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.

⏱️ How long does a run take?

Measured on real runs, so you know what normal looks like and can tell it apart from a run that has stalled.

Jobs returnedTypical run time
15, one search pageabout 25 seconds
65, all eight searches4 to 5 minutes

Measured on 31 August 2026, after the browser was removed: warehouse in Manchester returned 65 unique jobs in 301 seconds and nurse in London returned 67 in 258. The equivalent runs took 1 to 2 minutes and 7 to 9 minutes before that, so the second row is now roughly twice as fast and returns more.

A narrow search finishes sooner and returns less, because it runs out of matching jobs rather than out of time: data analyst in London returns about 46.

Indeed sits behind Cloudflare, so every page is fetched through Apify's unblocker, which solves the challenge rather than simply carrying the request. That is most of the clock: the unblocker answers in 47 to 78 seconds a page and no amount of local speed changes it. Getting past the fifteen job ceiling means running the same search several ways rather than paging, so a run in the second row is eight full page loads rather than one.

That makes the run time close to a straight multiple of the pages fetched, so maxResults is the dial that controls it: 15 is one page, and each further 15 or so costs roughly another page. The first second or two of any run is the container starting rather than the work, and it is a plain Node container rather than a browser one, which is why that part is now negligible.

A run is never silently stuck. Every search variant is logged with the jobs it added, so you can watch the total climb, and jobs are written to the dataset as each variant completes rather than held back to the end, so a run that hits its time limit still leaves everything it had already collected.

Set the run timeout to suit the size of the ask. This Actor's default is 3600 seconds, which is comfortably more than the largest run in the table above (65 jobs across eight searches takes about 5 minutes). You are charged per delivered result rather than per minute, so a generous timeout costs you nothing and a tight one risks losing the run's work. Lower it only if you want a hard ceiling on how long a scheduled run may sit.

💰 How much does it cost?

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.

$4.00 per thousand jobs on the free plan, falling with your Apify plan to $2.00 per thousand on Diamond. Runs that return nothing cost nothing.

Indeed is dearer per row than the rest of this catalogue and the reason is the unblocker rather than the scraping. Every page has to be solved past Cloudflare before it can be read, and that is a metered service. A search that only reaches public listing pages elsewhere reaches them here too, at a price that reflects what it takes to get them.

🔌 Integrations

Send results straight to Google Sheets, Slack, Airtable, Zapier, Make or your own webhook using Apify integrations. You can also trigger a run whenever something happens in another tool.

AI agents can run this Actor too, through the Apify MCP server. An agent connected to mcp.apify.com can discover it, read its input schema and start a run under the identifier spookyweb/indeed-jobs, then read the finished dataset. That means an assistant asked "what are data analyst roles paying in London right now" can call this Actor directly and answer from live listings.

🔗 Using Indeed Jobs Scraper with the Apify 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();

Full detail is in the Apify API reference, and every run is also callable from the Python and JavaScript clients.

❓ FAQ

Can I use the official Indeed API instead?

No. Indeed retired its public Job Search API, and the APIs it still operates are employer-side tools limited to approved partner companies. Reading the public search results is the practical route for most people.

Do I need an Indeed account or login?

No. Nothing here needs your credentials, and no account details are ever asked for or stored.

Around 57 unique jobs for a typical city and job title, measured rather than estimated. The run stops when the filters stop finding anything new. To cover more of a market, run several narrower searches, splitting by city or by job title.

Do I need proxies?

No, proxy handling is built in and you do not need to supply or configure anything. Indeed sits behind Cloudflare, so requests are routed through Apify's unblocker, which is what accounts for most of a run's duration.

Why did my run return no jobs?

Usually the search genuinely has no matches, most often from a very narrow query or a misspelled location. Try broader keywords or a nearby city. An empty result is reported as a successful run with no rows, not as an error.

Can I scrape a specific company's jobs?

Yes, put the company name in query alongside the role, for example data analyst Acme. Indeed matches company names in its search.

Scraping publicly available data is legal in the UK, the EU and the US, and this scraper only ever reads pages that any visitor can see without logging in. It collects job adverts published by employers, which is business information rather than personal data.

It does not collect personal data about individuals, it does not log in, and it does not touch anything behind an account. If you go on to combine this data with personal data, that is on you to handle under GDPR. Apify's ethical scraping guide covers the wider picture.

👍 Your feedback

Found a bug, or want a field that is not here yet? Open an issue on the Actor's Issues tab. Requests that make the data more useful get built, and problems get fixed quickly.

🔎 You might also like

ActorWhat it does
LinkedIn Jobs ScraperLinkedIn jobs with company enrichment and CV keyword matching, no login needed
Reed Jobs ScraperUK jobs from Reed with applicant counts and annualised salaries
Totaljobs ScraperUK jobs from Totaljobs with duplicate agency repostings removed