Collect public Indeed job listings as structured records for recruiting, labor-market research, lead generation, and job-board ingestion. Search by role and location, set a hard result limit, and export job titles, employers, locations, stable job keys, source URLs, and collection timestamps.
Input example
{
"query": "software engineer",
"location": "Austin, TX",
"maxItems": 5
}
Output example
{
"jobKey": "099517afcda05290",
"jobTitle": "Software Engineer",
"company": "Example Company",
"location": "Austin, TX",
"url": "https://www.indeed.com/viewjob?jk=099517afcda05290",
"sourceUrl": "https://www.indeed.com/jobs?q=software%20engineer&l=Austin%2C%20TX",
"scrapedAt": "2026-07-10T13:20:00.000Z"
}
What data it exports
Each dataset row represents one public job listing. It includes:
- Identity:
jobKey,jobTitle,company,location,url. - Pay:
salaryText,salaryMin,salaryMax,salaryCurrency,salaryPeriod. - Job details:
jobDescription,benefits,schedule,postedAt,ageText. - Workplace:
remoteandhybridflags. - Company:
companyRatingandcompanyReviewswhen displayed. - Application:
applyUrlandapplySourcewhen available. - Provenance:
query,rank,sourceUrl,scrapedAt, anddiagnostics.
Results can be downloaded as JSON, CSV, Excel, XML, or RSS from the Dataset tab.
Use cases
- Build a focused recruiting pipeline for a role and market.
- Track hiring demand across cities and job families.
- Feed fresh public vacancies into a job board or internal dashboard.
- Create repeatable labor-market datasets with stable provenance.
- Monitor employer hiring activity over time.
Who is it for?
- Recruiters sourcing candidates for defined roles and markets.
- Labor-market analysts comparing hiring demand, pay, and work arrangements.
- Job aggregators maintaining structured, refreshable vacancy feeds.
- Sales and research teams monitoring employer hiring activity.
Input settings
| Field | Type | Description |
|---|---|---|
query |
string | Role, skill, keyword, or company to find. |
location |
string | City, region, postal code, or Remote. |
country |
string | Indeed country site and matching proxy geography. |
startUrls |
string[] | Optional Indeed search or public job URLs. |
datePosted |
string | Any date or the past 1, 3, 7, or 14 days. |
remote |
boolean | Return remote jobs only. |
jobType |
string | Full-time, part-time, contract, temporary, or internship. |
salaryMin |
integer | Optional minimum annual salary. |
maxItems |
integer | Hard maximum of 1–1,000 unique jobs. |
Input recipes
These input recipes show how to export Indeed jobs data for common recruiting and labor-market monitoring workflows.
Remote engineering roles
{ "query": "backend engineer", "location": "Remote", "maxItems": 5 }
Local healthcare hiring
{ "query": "registered nurse", "location": "Chicago, IL", "maxItems": 10 }
API usage and Indeed jobs API
Use this Actor when you need an Indeed jobs API-style workflow for repeatable exports without maintaining your own parser.
Start a run with the Apify API:
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~indeed-jobs-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"data analyst","location":"New York, NY","maxItems":5}'
Use the returned run's defaultDatasetId to fetch items.
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/indeed-jobs-scraper').call({
query: 'data engineer', location: 'Boston, MA', maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/indeed-jobs-scraper').call(run_input={
'query': 'data engineer', 'location': 'Boston, MA', 'maxItems': 25,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
MCP and AI agents
Connect compatible AI clients through https://mcp.apify.com?tools=fetch_cat/indeed-jobs-scraper.
Add the hosted MCP server to Claude Code:
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/indeed-jobs-scraper"
Or run the Actors MCP server directly:
npx -y @apify/actors-mcp-server --actors fetch_cat/indeed-jobs-scraper
Example prompts: “Find five data analyst jobs in Austin posted this week and return each company, salary, and apply URL.” “Export 20 remote software engineer jobs from Indeed with posting dates and benefits.”
Example MCP client configuration:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/indeed-jobs-scraper"
}
}
}
Try prompts such as “Find 25 remote data-engineering jobs posted this week” or “Compare salary ranges for registered nurses in Chicago.”
Tips
- Use a specific role plus a real city for focused results.
- Keep the first run small, inspect the output, then increase the limit.
- Schedule repeated runs with the same input to monitor new vacancies.
- Deduplicate historical exports by
jobKey.
Limits and data availability
The Actor reads public job pages without a login. Listing availability and field completeness vary by country, query, and the details each employer publishes. Search-card records can have partial salary, benefits, description, or application fields; the diagnostics field identifies partial-detail results. Indeed can change page availability or pagination, and maxItems remains a hard ceiling rather than a guarantee that every query has that many public jobs.
Support
If a valid search fails or output fields look incorrect, open an issue on the Actor page. Include the run ID or run URL, the complete input JSON, expected and actual output, and one public Indeed URL that reproduces the problem.