
ReKrute Job Scraper
scrape.ly/store/openrole/rekrute-scraperJobsLead generation
2 monthly users

Scrape public Indeed job listings, salaries, locations, and company details from a job title and a location.
Turn an Indeed search into a clean spreadsheet of job listings. Give it a job title and a place, or paste Indeed links, and get one row per job with pay, location, the full description, and the company profile Indeed already publishes. No account, no browser, and it costs a fraction of a cent per job.
software engineer) and a Location (a city, region, postal code, or remote).| Field | Type | What it does |
|---|---|---|
title | string | Words you would type into Indeed, such as a job title or a skill. |
location | string | City, region, postal code, or remote. |
country | string | Indeed site to search, for example us, uk, de, ca. Default us. |
startUrls | array | Indeed search or job URLs. When set, title and location are ignored. |
limit | integer | How many jobs to save in total, 1 to 10,000. Default 10. |
datePosted | string | Keep jobs posted in the last 1, 3, 7, or 14 days. Empty means any date. |
proxyConfiguration | object | Datacenter proxy by default. Change the group only if Indeed blocks it. |
{
"title": "software engineer",
"location": "Austin, TX",
"country": "us",
"limit": 10,
"datePosted": "7",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
A job link works too. A date filter still applies to a search URL that does not already set one.
{ "startUrls": [{ "url": "https://www.indeed.com/viewjob?jk=a42605a4cbd7ea31" }], "limit": 1 }
Each dataset row is one job.
| Field | Description |
|---|---|
key, url, jobUrl, refNum | Indeed job id, Indeed link, external apply link, reference number. |
title, language | Job title and listing language. |
datePublished, dateOnIndeed, expirationDate, expired | Posting and expiry dates. |
isUrgentHire, isHighVolumeHiring, isRepost, isLatestPost | Listing flags. |
location | Country, region, city, postal code, latitude, and longitude. |
employer | Company name, profile URL, description, industry, size, revenue, CEO, website, logo, rating. |
parentEmployer | Parent company name and profile URL. |
baseSalary | min, max, unitOfWork, and currencyCode when published. |
jobTypes, benefits, occupations, attributes | Labels Indeed attaches to the listing (keyed by Indeed's internal codes). |
description | Full description as text and html. |
Real item from a test run (trimmed):
{
"key": "a42605a4cbd7ea31",
"url": "https://www.indeed.com/viewjob?jk=a42605a4cbd7ea31",
"title": "Software Development Engineer II, Silicon Scan & Fleet Diagnostics, Machine Learning Accelerator Technology Team",
"jobUrl": "https://www.amazon.jobs/jobs/10577153/software-development-engineer-ii-silicon-scan--fleet-diagnostics-machine-learning-",
"refNum": "10577153",
"datePublished": "2026-10-08T05:00:00.000Z",
"dateOnIndeed": "2026-10-13T16:52:40.649Z",
"expired": false,
"isUrgentHire": false,
"isHighVolumeHiring": true,
"language": "en",
"location": {
"countryCode": "US",
"admin1Code": "TX",
"city": "Austin",
"latitude": 30.26715,
"longitude": -97.74306
},
"employer": {
"name": "Amazon Web Services",
"companyPageUrl": "https://www.indeed.com/cmp/Amazon-Web-Services-05cb4ad1",
"revenue": "more than $10B (USD)",
"corporateWebsite": "https://aws.amazon.com/careers/why-aws/",
"ratingsCount": 643,
"ratingsValue": 3.4
},
"parentEmployer": { "name": "Amazon.com", "companyPageUrl": "https://www.indeed.com/cmp/Amazon.com" },
"jobTypes": { "CF3CP": "Full-time" },
"benefits": { "EY33Q": "Health insurance", "SENX8": "401(k) matching" },
"occupations": { "5NN53": "Software Development Occupations" },
"baseSalary": { "min": 143700, "max": 194400, "unitOfWork": "YEAR", "currencyCode": "USD" },
"description": { "text": "...", "html": "..." }
}
$0.01 per 1,000 jobs, which is $0.00001 per saved job. Platform usage is billed on top at standard rates: compute is $0.30 per GB-hour and datacenter proxy is $1 per GB.
Worked example: a 10-job search cost about $0.0023 in total in our billing test. Nearly all of that is the run's start-up compute, so larger limits cost very little more per job. Jobs Indeed does not return are not charged. The run stops at your limit or at the run's maximum charge.
Is it legal to scrape Indeed? The actor reads only public listings. You are responsible for using the data in line with Indeed's terms and local privacy law.
Do I need an Indeed account or my own proxy? No. It does not log in, and datacenter proxy is built in.
How many jobs can I get? Up to 10,000 per run in total. Indeed itself stops showing results after about 600 to 1,000 jobs per search (a nationwide "nurse" search ends near 600), so for bigger pulls add several searches or URLs (for example one per city). Duplicate jobs across searches are saved once.
Why is a field empty?
Indeed leaves pay, CEO, or ratings off many listings. Empty strings, null, and zeros mean Indeed did not publish that value.
Can I scrape a single job URL?
Yes. Use a viewjob?jk= link or an Indeed /job/ link in startUrls. Links to other hosts are skipped and the run continues.
Can I schedule it or use the API? Yes, both. Start runs and read the dataset through the API, or use schedules in the console.
limit accepts 1 to 10,000 jobs in total. The default is 10.attributes, benefits, jobTypes, and occupations are keyed by Indeed's internal codes, so read the values, not the keys.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
titlestringOptionalJob title
Words you would type into Indeed, such as a job title or a skill.
locationstringOptionalLocation
City, region, postal code, or remote.
countryenumOptionaldefault "us"Country
Indeed site to search.
startUrlsarrayOptionaldefault []Indeed URLs
Indeed search or job URLs. When this list is set, job title and location are ignored.
limitintegerOptionaldefault 10Maximum jobs
How many jobs to save.
Narrow the search. A date already set on an Indeed URL is kept.
datePostedenumOptionaldefault ""Date posted
Keep jobs posted within this window. Leave empty for any date.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxy by default. Switch the group only if Indeed blocks that pool.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| title | string | Title Indeed shows on the listing. |
| url | string | Public Indeed job page. |
| jobUrl | string | Employer apply link, or Indeed's own job link. |
| key | string | Indeed job id. |
| datePublished | string | When the employer published the job. |
| dateOnIndeed | string | When the job appeared on Indeed. |
| location | object | City, region, country, and coordinates. |
| employer | object | Company profile Indeed publishes. |
| baseSalary | object | Posted pay range, period, and currency. |
| language | string | Listing language. |
| isUrgentHire | boolean | Indeed marked the job as an urgent hire. |
| isHighVolumeHiring | boolean | Indeed marked the job as high-volume hiring. |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Result | $0.00001 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/indeed-jobs-scraper').call({
"title": "software engineer",
"location": "Austin, TX",
"country": "us",
"startUrls": [],
"limit": 10,
"datePosted": "",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/indeed-jobs-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/indeed-jobs-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Jobs posted in the last 3 days.
Jobs from a pasted Indeed France link.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.