Indeed Jobs Scraper avatar

Indeed Jobs Scraper

Pricing

from $0.70 / 1,000 results

Go to Apify Store
Indeed Jobs Scraper

Indeed Jobs Scraper

Scrape Indeed.com job search results by URL. Get title, company, rating, location, remote type, salary range, job types, benefits, snippet, post date, and job & apply links, one item per job. Full description for the vjk job. Proxy support and security-check retries.

Pricing

from $0.70 / 1,000 results

Rating

0.0

(0)

Developer

Itamar Toledano

Itamar Toledano

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

What is Indeed Jobs Scraper and how does it work?

Indeed Jobs Scraper is an Apify Actor that extracts structured job listings from an Indeed.com job search page.

Paste an Indeed search URL, configure a proxy, and run the Actor. It fetches the page with a browser-like HTTP client, reads the job data Indeed embeds in the page, and stores one dataset item per job. You can download the results from the dataset or pull them through the Apify API.

Indeed search URLs look like this:

https://www.indeed.com/jobs?q=google&l=&from=searchOnDesktopSerp&vjk=13fa6ca701bacefe

The host must be www.indeed.com, the path must be /jobs, and the URL needs a keyword (q), a location (l), or both. Other Indeed filters in the query string (job type, date posted, remote, radius, sort…) are passed through as-is, so the easiest way to build a URL is to search on Indeed and copy it from the address bar.

The job opened in Indeed's right-hand pane (the vjk parameter) also gets its full description and complete benefits list. Other jobs get the short card snippet.

Why scrape Indeed?

  • Job market research: which companies are hiring for a role or in a city, and how many openings they post
  • Salary benchmarking: salary text plus numeric min/max and pay period (yearly, hourly…)
  • Lead generation: find companies that are actively hiring
  • Remote work tracking: remote / hybrid flags per job
  • Job aggregation: feed fresh listings into your own job board or alerts

What data can Indeed Jobs Scraper extract?

DataFields
Searchinput, search_query, search_location, page_number, position
Jobjob_id, job_title, normalized_title, job_types, shifts, benefits
Companycompany_name, company_rating, company_reviews_count, company_url
Locationlocation, country, is_remote, remote_type
Salarysalary_text, salary_min, salary_max, salary_type, salary_currency, salary_is_estimated
Contentsnippet, description, description_html, has_full_description
Datesposted_relative, posted_at, fetched_at
Linksjob_url, apply_url
Flagsis_indeed_apply, is_sponsored, is_urgently_hiring, is_new, is_expired

Salary note: when the employer doesn't publish pay, Indeed sometimes shows its own estimate. Those jobs have salary_is_estimated: true.

How many results can you scrape?

Each run scrapes one search results page, which is usually 15–20 jobs. Duplicate job cards on the page are removed.

Indeed requires signing in to see later pages (&start=10 and beyond), so only the first page is supported. To cover more jobs, narrow your searches: run one per keyword, location, job type, or date-posted filter.

How much will it cost?

Cost depends on compute, proxy traffic, and retries. Each run makes a single page request, so it is cheap. Run a few searches first, note the cost per run, and multiply by the number of searches you plan to run.

Scraping publicly available job listings is generally considered legal, but job posts can contain personal data such as recruiter names. Review Indeed's terms and your own compliance requirements (e.g. GDPR). See Apify's post on the legality of web scraping.

How do I scrape jobs on Indeed?

  1. Search for jobs on indeed.com and copy the URL from the address bar
  2. Open Indeed Jobs Scraper in Apify Console and paste it into url
  3. Keep the default proxy (Apify residential, US) or pick your own
  4. Click Start
  5. Open the Dataset tab when the run finishes

Tips

  • Indeed shows "Security Check" pages to datacenter traffic. Residential US proxies work best.
  • Security-check pages are detected and retried automatically (default up to 4 attempts).
  • Click a job on Indeed before copying the URL to include its vjk. That job then comes back with its full description.

Input

FieldRequiredDescription
urlYesHTTPS Indeed search URL (www.indeed.com/jobs?q=…&l=…)
proxyConfigurationRecommendedApify Proxy or custom proxy URLs
{
"url": "https://www.indeed.com/jobs?q=google&l=&from=searchOnDesktopSerp&vjk=13fa6ca701bacefe",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Sample output

One item per job:

{
"source": "indeed",
"input": "https://www.indeed.com/jobs?q=google&l=&from=searchOnDesktopSerp&vjk=13fa6ca701bacefe",
"search_query": "google",
"search_location": null,
"page_number": 1,
"position": 16,
"job_id": "13fa6ca701bacefe",
"job_title": "Software Engineer III, Google Distributed Cloud, Connected",
"normalized_title": "Senior Software Engineer",
"company_name": "Google",
"company_rating": 4.3,
"company_reviews_count": 6269,
"company_url": "https://www.indeed.com/cmp/Google",
"location": "Seattle, WA",
"country": "US",
"is_remote": false,
"remote_type": null,
"salary_text": "$147,000 - $210,000 a year",
"salary_min": 147000,
"salary_max": 210000,
"salary_type": "yearly",
"salary_currency": "USD",
"salary_is_estimated": false,
"job_types": ["Full-time"],
"shifts": [],
"benefits": ["Parental leave", "Health insurance", "401(k) matching", "Paid time off", "Vision insurance", "Dental insurance", "Disability insurance", "Paid holidays"],
"snippet": "Health, dental, vision, life, disability insurance. Retirement Benefits: 401(k) with company match…",
"description": "In accordance with Washington state law, we are highlighting our comprehensive benefits package…",
"description_html": "<div>In accordance with Washington state law, …</div>",
"has_full_description": true,
"posted_relative": "Just posted",
"posted_at": "2026-09-29T05:00:00Z",
"job_url": "https://www.indeed.com/viewjob?jk=13fa6ca701bacefe",
"apply_url": "https://www.indeed.com/applystart?jk=13fa6ca701bacefe&…",
"is_indeed_apply": false,
"is_sponsored": false,
"is_urgently_hiring": false,
"is_new": true,
"is_expired": false,
"fetched_at": "2026-09-29T16:47:53.511237Z"
}

Jobs other than the vjk one have description: null, description_html: null, and has_full_description: false. Their benefits come from the job card.

Integrations

Connect Indeed Jobs Scraper to Make, Zapier, Slack, Google Sheets, Airbyte, GitHub, and more through Apify integrations, or trigger actions with webhooks when a run finishes.

Using the Apify API

Run the Actor and fetch results programmatically with the Apify API, using apify-client for Node.js or apify-client for Python. See the API tab for code examples.

FAQ

Does it scrape other Indeed countries (uk.indeed.com, ca.indeed.com…)?

Not yet. Only www.indeed.com search URLs are accepted.

Why do most jobs have no full description?

Indeed's search page only includes the full description for the job opened in the side pane (vjk). The others come with the short card snippet.

Why does a URL with &start=10 fail?

Indeed redirects logged-out visitors to its sign-in page for every results page after the first, so the Actor rejects those URLs up front.

What happens when Indeed shows a "Security Check"?

The page is missing the job-card data, so the Actor treats it as a bot check, retries, and fails the run if every attempt is blocked. Switching to residential proxies usually fixes it. A search that genuinely has no results finishes successfully with an empty dataset.

Your feedback

Found a bug or have a feature request? Open an issue on the Actor's Issues tab in Apify Console.