Indeed Scraper
Pricing
Pay per event
Indeed Scraper
Scrape Indeed job listings with salary ranges, company details, and full descriptions. Search by keyword, location, and job type across 18 countries. Pure HTTP โ 3x cheaper than browser-based alternatives. Export to JSON, CSV, Excel.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Actor stats
0
Bookmarked
10
Total users
4
Monthly active users
a day ago
Last modified
Categories
Share
Extract structured job listing data from Indeed.com at scale โ titles, salaries, companies, descriptions, employer metadata, and 15+ fields per listing. Pure HTTP requests (no browser), covering 18 country domains, with results in seconds. Used by recruiters, job seekers, market researchers, and sales teams to turn Indeed's 300M+ monthly visitors into actionable datasets.
What does Indeed Scraper do?
Indeed Scraper extracts job posting data from Indeed, the world's largest job search engine. Enter a job title and location, and get back structured, analysis-ready data you can export as JSON, CSV, Excel, or push directly to Google Sheets, Slack, or your own API.
Every listing includes the job title, company details, salary (actual or estimated), location, full description, and employer metadata (industry, size, revenue) โ all extracted from a single run.
The scraper supports keyword search with filters (job type, date posted, experience level) as well as direct URL scraping for Indeed search pages or individual job detail pages.
Who is Indeed Scraper for?
- Recruiters and staffing agencies โ Monitor open positions across competitors, track which companies are hiring for specific roles, and identify talent demand patterns before your clients ask
- Job seekers and career coaches โ Track new postings daily, compare salary ranges across cities, and spot which skills appear most in target job descriptions
- Market researchers and analysts โ Study hiring trends, wage growth, and labor demand across industries, regions, and time periods with structured data ready for analysis
- Sales and business development teams โ Identify companies that are actively hiring (growing companies = warm leads), then enrich with contact data using companion scrapers
- HR and compensation analysts โ Benchmark salaries, benefits, and job requirements against market data to build competitive offers and retention strategies
- Academic researchers โ Collect large-scale employment data for labor economics, NLP analysis of job descriptions, or diversity and inclusion studies
Why use Indeed Scraper?
- Pure HTTP speed โ No browser overhead. Extracts 100 jobs in under 10 seconds, 1,000 jobs in about a minute
- 18 country domains โ Search US, UK, Canada, Australia, India, Germany, France, Netherlands, Belgium, Switzerland, Austria, Italy, Spain, Brazil, Mexico, Japan, Singapore, and Hong Kong
- 3x cheaper than alternatives โ Pay-per-event pricing at $0.003/listing vs. competitors charging $0.008-0.01+ per result
- No login or API key needed โ No Indeed account required, no rate-limited official API to deal with
- Rich employer metadata โ Get employer industry, company size, revenue, and description alongside every job listing
- Flexible input โ Search by keywords + location, or paste Indeed URLs directly for targeted scraping
What data can you extract from Indeed?
| Field | Type | Description |
|---|---|---|
title | string | Full position title |
company | string | Hiring company name |
companyUrl | string | Indeed company profile URL |
companyLogo | string | Company logo image URL |
location | string | Job location (city, state, zip, or "Remote") |
salary | string | Salary range โ actual or Indeed estimate |
jobType | array | Full-time, part-time, contract, temporary, internship |
datePosted | string | ISO 8601 posting date |
description | string | Full job description (plain text) |
descriptionHtml | string | Full job description (HTML) |
jobUrl | string | Direct link to the Indeed listing |
jobId | string | Indeed's unique job identifier |
isRemote | boolean | Whether the job is remote |
employerIndustry | string | Company's industry sector |
employerSize | string | Number of employees (e.g., "10,000+") |
employerRevenue | string | Company revenue range |
employerDescription | string | Brief company description from Indeed |
scrapedAt | string | ISO 8601 timestamp of when data was extracted |
How much does it cost to scrape Indeed?
This actor uses pay-per-event pricing. You only pay for what you scrape โ no monthly subscriptions, no minimum commits.
| Event | Price |
|---|---|
| Run started | $0.005 |
| Job listing scraped | $0.003 |
Tiered pricing
| Tier | Monthly cost | Included results | Per-result cost |
|---|---|---|---|
| Free | $0 | ~1,600 listings | $0.003 (from free credits) |
| Starter ($49/mo) | $49 | ~16,000 listings | $0.003 |
| Scale ($499/mo) | $499 | ~166,000 listings | $0.003 |
| Business | Custom | Unlimited | Volume discounts available |
Real-world cost examples
| Use case | Volume | Cost |
|---|---|---|
| Daily job alert (1 search, 20 results) | 600/month | ~$1.95 |
| Weekly salary benchmark (5 roles, 100 each) | 2,000/month | ~$6.02 |
| Recruiter pipeline (50 searches/day) | 30,000/month | ~$90.15 |
| Market research project (one-time) | 10,000 listings | ~$30.05 |
Compare to competitors charging $50-100+ for equivalent volumes.
How to scrape Indeed job listings step by step
- Go to the Indeed Scraper page on Apify Store
- Click Try for free to open the actor in Apify Console
- Enter a job title or keyword (e.g., "software engineer", "data analyst", "registered nurse")
- Enter a location (e.g., "New York, NY", "Remote", "London")
- Select a country if searching outside the US (18 domains supported)
- Optionally filter by job type, date posted, or set a max results limit
- Click Start and wait for your data โ most runs finish in seconds
- Download results as JSON, CSV, or Excel, or connect via API, Google Sheets, Slack, or webhooks
Search example
{"query": "software engineer","location": "New York, NY","country": "US","maxItems": 100,"jobType": "fulltime","includeDescription": true}
Direct URL scraping
You can also provide Indeed search URLs or individual job detail URLs directly:
{"urls": ["https://www.indeed.com/jobs?q=python+developer&l=Austin%2C+TX","https://www.indeed.com/viewjob?jk=abc123"],"maxItems": 50}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | โ | Job title, keywords, or company name to search for |
location | string | โ | City, state, zip code, or "remote" |
country | enum | US | Indeed country domain: US, UK, CA, AU, IN, DE, FR, NL, BE, CH, AT, IT, ES, BR, MX, JP, SG, HK |
maxItems | integer | 50 | Maximum number of listings to extract. Set 0 for unlimited |
jobType | enum | any | Filter: fulltime, parttime, contract, temporary, internship |
datePosted | enum | any | Filter: last 24 hours, 3 days, 7 days, or 14 days |
includeDescription | boolean | true | Scrape full job description for each listing. Set false for faster summary-only runs |
urls | array | โ | Indeed search or job detail URLs to scrape directly (use instead of search parameters) |
maxRequestRetries | integer | 3 | Number of retry attempts for failed requests (1-10) |
Output example
{"title": "Senior Software Engineer","company": "Cisco","companyUrl": "https://www.indeed.com/cmp/Cisco","companyLogo": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/logo.png","location": "San Francisco, CA 94105","salary": "$163.6K - $303.1K/year","jobType": ["Full-time"],"datePosted": "2026-03-12T10:00:00.000Z","description": "We are looking for a Senior Software Engineer to join our team...","descriptionHtml": "<b>We are looking for...</b>","jobUrl": "https://www.indeed.com/viewjob?jk=abc123","jobId": "abc123","isRemote": false,"employerIndustry": "Technology","employerSize": "10,000+","employerRevenue": "more than $10B (USD)","employerDescription": "Leading technology company...","scrapedAt": "2026-03-14T01:30:00.000Z"}
Tips for best results
- Use specific keywords โ "react developer" returns more relevant results than "developer"
- Set
includeDescription: falsefor faster runs when you only need listing summaries (titles, companies, salaries) - Use filters to reduce cost โ Narrow by job type, date posted, or salary range so you only pay for relevant listings
- Pick the right country โ Set the
countryparameter to match the Indeed domain you want. Searching US for London jobs won't work - Combine with scheduling โ Set up a daily or weekly schedule to monitor new postings automatically and pipe results to Google Sheets or Slack
- Use direct URLs for precision โ If you have specific Indeed search URLs or job detail pages, pass them via
urlsinstead of search parameters - Filter by job type โ Use the
jobTypeparameter to only get full-time, part-time, contract, or internship listings
Integrations
Connect Indeed Scraper with your tools and workflows:
- Google Sheets โ Export job listings directly to a spreadsheet for tracking, analysis, or sharing with your team
- Slack โ Get notified in a channel when new jobs matching your criteria are found
- Zapier โ Trigger workflows when new job data arrives (e.g., alert hiring managers, update your CRM, send email digests)
- Make โ Build automated pipelines: scrape jobs, enrich with Job Posting Enrichment, then push to your ATS
- Webhooks โ Send results to your own API endpoint in real time
- Schedule โ Run daily or weekly to monitor new job postings automatically without manual intervention
Programmatic access via API
Use the Apify API to run Indeed Scraper from your code. Get your API token from Apify Console Settings.
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("automation-lab/indeed-scraper").call(run_input={"query": "data analyst","location": "Chicago, IL","maxItems": 50,"includeDescription": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['title']} @ {item['company']} โ {item.get('salary', 'N/A')}")
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/indeed-scraper').call({query: 'data analyst',location: 'Chicago, IL',maxItems: 50,includeDescription: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => console.log(`${item.title} @ ${item.company} โ ${item.salary}`));
cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~indeed-scraper/runs?token=YOUR_API_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"query": "data analyst", "location": "Chicago, IL", "maxItems": 50}'
Use with AI agents via MCP
Indeed Scraper is available as a tool for AI assistants that support the Model Context Protocol (MCP).
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com"}}}
Example prompts
Once connected, try asking your AI assistant:
- "Search Indeed for 'software engineer' jobs in San Francisco and export to CSV"
- "Get all remote Python developer jobs posted in the last 7 days"
- "Compare data analyst salaries across New York, Chicago, and Austin using Indeed data"
Learn more in the Apify MCP documentation.
Is it legal to scrape Indeed?
Web scraping of publicly available data is generally legal in the United States, as confirmed by the landmark hiQ Labs v. LinkedIn ruling where the court held that scraping public data does not violate the Computer Fraud and Abuse Act.
Indeed Scraper only accesses publicly available job listings โ the same data any visitor can see without logging in. It does not bypass authentication, access private data, or violate CAPTCHAs.
That said, users are responsible for ensuring their specific use case complies with Indeed's Terms of Service and applicable local laws. Common best practices include:
- Using scraped data for analysis, research, and internal business purposes
- Not republishing raw job listings on competing platforms
- Respecting rate limits and avoiding excessive load on Indeed's servers
- Complying with data protection regulations (GDPR, CCPA) when handling personal information
This actor is provided as a data extraction tool. How you use the data is your responsibility.
Legality
Scraping publicly available data is generally legal according to the US Court of Appeals ruling (HiQ Labs v. LinkedIn). This actor only accesses publicly available information and does not require authentication. Always review and comply with the target website's Terms of Service before scraping. For personal data, ensure compliance with GDPR, CCPA, and other applicable privacy regulations.
FAQ
How much does it cost to scrape 1,000 Indeed jobs? At $0.003 per listing plus $0.005 per run, scraping 1,000 jobs costs about $3.01. Apify's free plan includes $5/month of platform credits, so you can scrape approximately 1,600 listings per month at no cost.
How fast is Indeed Scraper? Very fast. It uses pure HTTP requests (no browser), so it can extract 100 jobs in under 10 seconds. A typical run of 50 listings completes in 3-5 seconds.
Does it extract full job descriptions?
Yes. Set includeDescription: true (the default) to get the complete job description in both plain text and HTML. Set it to false for faster runs when you only need summary fields like title, company, salary, and location.
Can I scrape Indeed in other countries?
Yes. Set the country parameter to search across 18 different Indeed domains including UK, Canada, Australia, Germany, France, India, Japan, Singapore, and more.
What data formats can I export? JSON, CSV, Excel, XML, or HTML table. You can also access data via the Apify API or connect it to Google Sheets, Zapier, Make, Slack, and other integrations.
Why are salary fields missing for some jobs?
Not all Indeed listings include salary information. When employers don't provide a salary range, Indeed may show an estimate (marked accordingly in the data) or no salary at all. You can filter results to only include listings where salary is not null.
Can I scrape Indeed on a schedule for job monitoring? Yes. Use Apify Schedules to run the scraper daily or weekly. Combine with Google Sheets for a live job tracking dashboard, or Slack to get alerts when new jobs match your criteria.
The scraper returned fewer results than expected. Why?
Indeed's search results vary by location, keyword specificity, and date filters. Very niche searches may have few listings. Also, maxItems caps the output โ set it to 0 for unlimited. Some Indeed country domains have fewer listings than the US site.
The scraper is running slowly or timing out. What should I do?
Set includeDescription: false if you don't need full descriptions โ this skips individual page fetches and significantly speeds up runs. If retries are high, increase maxRequestRetries to 5-7. For very large runs (10,000+ listings), split into multiple smaller runs by location or keyword.
Some fields are null. Is the scraper broken?
No. Fields like employerIndustry, employerSize, employerRevenue, and salary depend on whether Indeed and the employer provide that data. Smaller companies often lack industry and revenue data. This is normal โ the scraper extracts everything available.
Other job scrapers and lead generation tools
- LinkedIn Jobs Scraper โ Scrape job listings from LinkedIn with structured salary, location, and company data
- Job Posting Enrichment โ Enrich any job listing URL with company details, contacts, and structured data
- Google Maps Lead Finder โ Find businesses and leads on Google Maps with emails, phones, and ratings
- Email Finder โ Find email addresses for any person at any company
- Website Contact Finder โ Extract contact details (emails, phones, socials) from company websites