Indeed Jobs Scraper
Pricing
from $0.70 / 1,000 results
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
Maintained by CommunityActor 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
vjkparameter) 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?
| Data | Fields |
|---|---|
| Search | input, search_query, search_location, page_number, position |
| Job | job_id, job_title, normalized_title, job_types, shifts, benefits |
| Company | company_name, company_rating, company_reviews_count, company_url |
| Location | location, country, is_remote, remote_type |
| Salary | salary_text, salary_min, salary_max, salary_type, salary_currency, salary_is_estimated |
| Content | snippet, description, description_html, has_full_description |
| Dates | posted_relative, posted_at, fetched_at |
| Links | job_url, apply_url |
| Flags | is_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.
Is it legal to scrape Indeed?
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?
- Search for jobs on indeed.com and copy the URL from the address bar
- Open Indeed Jobs Scraper in Apify Console and paste it into
url - Keep the default proxy (Apify residential, US) or pick your own
- Click Start
- 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
| Field | Required | Description |
|---|---|---|
url | Yes | HTTPS Indeed search URL (www.indeed.com/jobs?q=…&l=…) |
proxyConfiguration | Recommended | Apify 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.