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

Extract public Indeed job listings with company, pay, location, and the full description. Search by keyword or paste Indeed URLs.
Pull public Indeed job listings into a clean dataset: title, company, location, pay, full description, apply link, and employer details. Search by keyword on any of 62 country sites, or paste Indeed search, job, or company URLs. No login, no cookies, and you pay only for jobs that are saved.
us, uk, de, fr, in, au, ca, jp and many more.https://www.indeed.com/cmp/Google/jobs.| Field | Type | What it does |
|---|---|---|
country | select | Indeed site to search, such as us or fr. Ignored when URLs are set. |
query | string | Job title or keywords. |
location | string | City, state, postal code, or remote. |
urls | array | Indeed search, job, or company jobs URLs. Query and filters are ignored when set. |
maxRows | integer | Max jobs for a keyword search. Default 10. |
maxRowsPerUrl | integer | Max jobs per start URL. |
radius | select | 0, 5, 10, 15, 25, 35, 50, 100. Miles in the US and UK, km elsewhere. |
remote | select | remote or hybrid. |
level | select | entry_level, mid_level, senior_level. Applied on the US site. |
jobType | select | fulltime, parttime, contract, internship, temporary, permanent, seasonal, freelance. |
sort | select | relevance or date. |
fromDays | select | Jobs indexed within 1, 3, 7, or 14 days. |
enableUniqueJobs | boolean | Skip a job key already saved in this run. |
proxyConfiguration | object | Datacenter proxy by default. |
{
"country": "us",
"query": "Analyst",
"location": "New York",
"maxRows": 10
}
Or with URLs:
{
"urls": [
"https://www.indeed.com/jobs?q=engineer&l=San+Francisco",
"https://www.indeed.com/viewjob?jk=52fbc9af227aa85a"
],
"maxRowsPerUrl": 10
}
One dataset row per job.
| Field | Description |
|---|---|
title, jobKey, jobUrl | Job title, Indeed job key, and link to the posting. |
companyName, companyUrl | Employer and its Indeed company page. |
location | City, country code, and short formatted address. |
salary | salaryText, salaryMin, salaryMax, salaryCurrency, salaryType. |
descriptionText | Full posting as plain text. |
applyUrl, isEasyApply | Employer's off-site application link when published, else Indeed's apply link for jobs that take applications on Indeed. |
jobType, attributes, occupation | Contract type (from Indeed's tags, else a job type stated in the title or posting), benefits and attributes, occupation categories. |
datePublished, age, isRemote | Date, relative age, remote flag. |
companyNumEmployees, companyRevenue, companyLogoUrl, companyLinks | Employer profile data. |
{
"title": "Entry-Level Analyst",
"companyName": "AFRY",
"jobUrl": "https://www.indeed.com/viewjob?jk=52fbc9af227aa85a",
"location": {
"city": "New York",
"countryCode": "US",
"formattedAddressShort": "New York, NY"
},
"salary": {
"salaryText": "$65,000 - $70,000 a year",
"salaryMin": 65000,
"salaryMax": 70000,
"salaryCurrency": "USD",
"salaryType": "yearly"
},
"datePublished": "2026-09-28",
"jobKey": "52fbc9af227aa85a"
}
The example is trimmed. Real rows also carry the full description, attributes, occupation, and employer profile.
$0.003 per job saved, which is $3.00 per 1,000 jobs, plus platform usage for compute and proxy traffic. A search that finds nothing saves no rows and is not billed.
Worked example: 1,000 jobs cost $3.00 in result fees, plus the platform usage of the run.
Is it legal to scrape Indeed? The actor reads public job pages without logging in. You are responsible for how you use the data and for complying with local law and Indeed's terms.
Do I need a login or my own proxy? No. A datacenter proxy is configured by default.
How many jobs can I get? As many as Indeed's public index has, and duplicates are removed. One broad search usually ends at about 300 to 500 unique jobs because that is where Indeed's public index stops.
Can I scrape a single job?
Yes. Paste https://www.indeed.com/viewjob?jk=<job key>.
Why is the apply link empty?
Indeed Apply postings do not publish an off-site application URL. isEasyApply is true for those jobs.
Can I schedule it or call it from code? Yes, with schedules in the console or through the API.
Moving from another Indeed actor?
Saved inputs that use query, country, location, maxRows, and urls work the same way as the pay-per-result Indeed jobs actor.
includeSimilarJobs does not drop rows, because the public index does not separate similar jobs.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.
countryenumOptionaldefault "us"Country
Indeed site to search. Use fr for jobs on fr.indeed.com. Ignored when start URLs are set.
querystringOptionalQuery
Job title or keywords, the same way you would type them into Indeed.
locationstringOptionalLocation
City, state, postal code, or remote. Pair it with the country of that place.
urlsarrayOptionalStart URLs
Indeed search URLs, job URLs, or company jobs URLs. When this list is set, query, country, and filters are ignored.
maxRowsintegerOptionaldefault 10Maximum jobs
Maximum number of jobs to save from a keyword search.
maxRowsPerUrlintegerOptionalMaximum jobs per URL
Maximum number of jobs to save from each start URL. Defaults to the same number as maximum jobs.
Optional filters for a keyword search. They are ignored when start URLs are set.
radiusenumOptionalRadius
Distance around the location. Miles in the US and UK, kilometers elsewhere. A location without a radius uses 25.
remoteenumOptionalWorkplace
Keep remote jobs, or hybrid jobs.
levelenumOptionalJob level
Experience level. This filter is applied on the US site.
sortenumOptionalSort
Sort the keyword search by relevance or by date.
jobTypeenumOptionalJob type
Contract type. Seasonal and freelance are not separate filters on the public job index.
fromDaysenumOptionalPosted within
Keep jobs Indeed indexed within this window.
enableUniqueJobsbooleanOptionaldefault falseSave only unique jobs
Skip a job key that was already saved in this run.
includeSimilarJobsbooleanOptionaldefault trueInclude similar jobs
The public job index does not separate similar jobs from the main results, so this switch does not drop rows.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Proxy used to reach Indeed. Datacenter is enough for the public job index.
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 | null | Job title |
| companyName | string | null | Company |
| companyUrl | string | null | Company URL |
| location | object | null | Location |
| age | string | null | Age |
| datePublished | string | null | Date published |
| salary | object | null | Salary |
| jobType | array | null | Job type |
| jobUrl | string | null | Job URL |
| applyUrl | string | null | Apply URL |
| jobKey | string | null | Job key |
| descriptionText | string | null | Description |
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 |
|---|---|---|
| Job | One public job listing saved to the dataset. | $0.003 |
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-ppr').call({
"country": "us",
"query": "Analyst",
"location": "New York",
"urls": [],
"maxRows": 10,
"maxRowsPerUrl": 10,
"enableUniqueJobs": false,
"includeSimilarJobs": true,
"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-pprPaste 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-ppr"
}
}
}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.
Indeed jobs by title and city, including similar jobs.
Remote full-time jobs in the US.
Jobs from a pasted Indeed search 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.