# Indeed Jobs Scraper | Worldwide Job Data (`datascraperes/indeed-jobs-scraper`) Actor

Scrape public Indeed job listings worldwide with keyword, country, location, date, job type, remote status, and Indeed Apply filters.

- **URL**: https://apify.com/datascraperes/indeed-jobs-scraper.md
- **Developed by:** [DataScraperES](https://apify.com/datascraperes) (community)
- **Categories:** Jobs, Automation
- **Features:** Limited permissions
- **Stats:** 5 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 1,000 indeed offer returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Collect public Indeed job listings by keyword and country, with optional location, date, job-type, remote, and Indeed Apply filters. Each unique offer is returned as a structured Dataset item with available descriptions, compensation, employer details, and application URLs.

### What this Actor does

- Searches one Indeed country site per run with up to 50 non-empty keyword phrases.
- Applies optional location, publication-age, job-type, remote-only, and Indeed Apply filters.
- Returns up to 1,000 unique jobs per keyword and up to 50,000 items per run.
- Formats job descriptions as Markdown, HTML, or plain text.
- Optionally extracts public email addresses visible in job descriptions.
- Deduplicates offers across keywords while preserving the search phrase associated with each delivered item.
- Stores run-level counts, limits, failures, and billing reconciliation in the `SUMMARY` record.

### Use cases

- Source public vacancies for recruitment research.
- Compare hiring demand across keywords, locations, and countries.
- Monitor remote, contract, internship, and part-time opportunities.
- Analyze compensation and employer information when published.
- Export listings into spreadsheets, databases, CRMs, or internal dashboards.

### How to use

1. Open the Actor's **Input** tab.
2. Add one or more phrases under **Search keywords**.
3. Select a supported country and, optionally, enter a location.
4. Adjust the result limits and filters.
5. Click **Start**.
6. Open **Dataset** to inspect or export the job listings.

The Actor searches a single country site per run. Create separate runs when you need several countries.

### Input

| Field | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `keywords` | `string[]` | Yes | — | One to 50 non-empty job-search phrases. Duplicate phrases are removed. |
| `country` | string | Yes | `"usa"` | Indeed country site, such as `usa`, `uk`, `canada`, `australia`, `germany`, `france`, `india`, `brazil`, `mexico`, or `spain`. |
| `location` | string or `null` | No | `null` | City, region, postal code, or another location understood by Indeed. |
| `distanceMiles` | integer | No | `50` | Search radius in miles, between one and five hundred. |
| `maxItemsPerQuery` | integer | No | `10` | Maximum unique jobs per keyword, from 1 to 1,000. |
| `maxTotalItems` | integer | No | `10` | Global Dataset limit across all keywords, from 1 to 50,000. |
| `offset` | integer | No | `0` | Results to skip per keyword, from 0 to 900. |
| `datePostedHours` | integer | No | `0` | Only jobs published within this many hours, from 0 to 720. Use `0` for any age. |
| `jobType` | string | No | `"any"` | `any`, `fullTime`, `partTime`, `contract`, or `internship`. |
| `remoteOnly` | boolean | No | `false` | Keep only listings identified as remote. |
| `easyApplyOnly` | boolean | No | `false` | Keep only jobs marked for Indeed Apply. |
| `descriptionFormat` | string | No | `"markdown"` | Return descriptions as `markdown`, `html`, or `plain`. |
| `includeEmails` | boolean | No | `false` | Extract public email addresses found in descriptions. |

This complete input uses every public input field:

```json
{
  "keywords": [
    "software engineer"
  ],
  "country": "usa",
  "location": "",
  "distanceMiles": 50,
  "maxItemsPerQuery": 10,
  "maxTotalItems": 10,
  "offset": 0,
  "datePostedHours": 0,
  "jobType": "any",
  "remoteOnly": false,
  "easyApplyOnly": false,
  "descriptionFormat": "markdown",
  "includeEmails": false
}
```

### Output

The default Dataset contains one item per unique delivered job. Every successful item includes the search context, job identity, available employer and compensation data, the requested description format, and a retrieval timestamp.

| Field | Description |
| --- | --- |
| `success`, `status`, `source` | Result state and source identifier. |
| `searchKeyword`, `searchCountry`, `searchLocation` | Search context that produced the item. |
| `jobId`, `jobUrl`, `directJobUrl` | Job identity, Indeed listing URL, and direct application URL when available. |
| `title`, `companyName` | Public job title and employer name. |
| `companyUrl`, `companyDirectUrl` | Indeed company page and public company website when available. |
| `location`, `locationDisplay`, `isRemote` | Structured location, displayed location, and remote flag. |
| `jobTypes`, `postedDate` | Published job types and posting date when available. |
| `description`, `emails` | Job description in the selected format and optional public emails. |
| `compensation` | Published salary or compensation structure when available. |
| `companyIndustry`, `companyAddresses`, `companyEmployees`, `companyRevenue` | Available employer metadata. |
| `companyDescription`, `companyLogoUrl` | Available employer description and logo. |
| `scrapedAt` | Timestamp recorded when the item was collected. |

This is the complete Dataset item from a real successful run:

```json
{
  "success": true,
  "status": "success",
  "source": "indeed",
  "searchKeyword": "software engineer",
  "searchCountry": "Usa",
  "searchLocation": null,
  "jobId": "in-34482d96821b2a13",
  "jobUrl": "https://www.indeed.com/viewjob?jk=34482d96821b2a13",
  "directJobUrl": "https://dsp.prng.co/7HwGowb",
  "title": "Principal Software Engineer - Oracle Fusion and Oracle EPM",
  "companyName": "Intuit",
  "companyUrl": "https://www.indeed.com/cmp/Intuit",
  "companyDirectUrl": "http://www.intuit.com/careers/glassdoor",
  "location": {
    "country": "US",
    "city": "Mountain View",
    "state": "CA"
  },
  "locationDisplay": "Mountain View, CA, US",
  "isRemote": false,
  "jobTypes": [],
  "postedDate": "2026-09-22",
  "description": "**Overview**\n------------\n\nIntuit is looking for a Principal Software Engineer (Finance Systems) in technology for Intuit (Finance, Legal and Privacy Tech) organization. The successful professional will have technical depth, business and finance acumen, and a desire to create delight in every customer experience.\n\nS/he will have a passion for driving enterprise financial products direction, technology blueprint, leading and inspiring cross-functional teams, and influencing executives as well as engineers. A penchant for accuracy and integrity of financial data, and a flair for making judgement calls between approach and speed for a solution is essential.\n\nThe ideal candidate’s experience encompasses technical architecture and/or software development, business strategy and deep domain knowledge in finance systems. This executive will have an ability to leverage prior success within a complex business that has enormous amounts of transactional, repeatable data.\n\nThis highly visible position will be front and center as we work to continuously modernize our finance systems and change the way we think about and apply finance domain data in solutions across our enterprise business processes. A successful candidate for this position must possess both a deep and wide background in Oracle Fusion, Oracle EPM Cloud and Oracle Cloud technologies with extensive data technologies spanning both solutions built on traditional (RDBMS) and non-traditional (NoSQL) platforms, defining data domains as applicable to different business processes and deep knowledge of the financial processes.\n\nAs a critical member of the architecture team, the candidate should be comfortable working closely with the Enterprise Architecture team including data architects, business architects and essential stakeholders to drive technical ideas and communicate clearly with technical and non-technical audiences.\n\n**Responsibilities**\n\n* Experience putting together a strategy for complex finance transformations using Oracle Fusion, Oracle EPM and Oracle cloud technologies, driving execution to that strategy\n* Proficient in front-end and back-end architecture & design\n* Experience using data insights for product refinement\n* Ability to work well through ambiguity, confidence in making tough calls and leading through adversity with a sharp focus on the eventual right outcomes\n* Arbitrates technical disagreements across teams\n* Partner with senior engineering leaders to build strong engineering teams\n* Gaining an understanding of our Current State and then defining the Target State Architecture and Strategy. Drive towards adoption of the target state architecture by executing on the strategy. Must possess the leadership qualities necessary to drive change and adoption of the strategy.\n* Drive end to end architecture and data domain definition across all business processes with focus on Financial processes. Develop and deliver design documentation, architectural metrics and reports for the broader team\n* Partner with business and engineering leaders across Intuit to identify areas across people, process, and technology to dramatically improve velocity.\n* Influence engineering, product, business and other cross functional leaders that can drive success for the individual development teams.\n* Present your own designs to internal and external groups, review designs of others.\n* Participates in industry conferences and public speaking opportunities at technology and business conferences representing Intuit’s technology transformation and mission to be an AI-driven Expert Platform for our customers\n* Execute to success through diligent planning, attention to detail, effective delegation, efficient decision making, and individual/team accountability\n* Perform role of counselor and coach; provide input and guidance into the staffing process; actively participate in staff recruitment and retention activities\n* Communicate architectural decisions, plans, goals and strategies across multiple organizations to ensure alignment to the objectives and teams to do their jobs effectively. Perform annual architectural maturity assessments. Initiate and deliver technology evaluations and recommendations\n\n**Qualifications**\n\n* 15+ years of experience in the software product preferably in the financial industry in senior architecture and software development roles.\n* BS/MS in Computer Science or related area, or equivalent work experience - advanced degree preferred\n* Demonstrated ability to deliver complex finance transformations through the implementation of Oracle Fusion and Oracle EPM cloud solutions.\n* In-depth knowledge of industry best practices, technologies, architectures and emerging technologies specifically in the enterprise finance systems landscape.\n* Demonstrated experience in setting clear technological / architectural context for the business unit leadership and provide key contributions to the design context\n* Track record of establishing technology sourcing directions for the product division and provide context for these decisions to the company\n* Outstanding business outcomes with effective and fast decision making that takes into account the interests of all four key stakeholders – employees, customers, shareholders, and partners\n* Proficient in defining data domains for various Enterprise business processes with deep domain expertise on Financial processes.\n* Expertise in architecting, designing and developing large scale data solutions utilizing a mixture of Big Data, Relational database and Amazon Web Services..\n* Experience in making successful trade-offs that balance the short and long term product goals\n* Experience driving engineering design using Agile process to drive innovation, accelerate decisions and outcomes while minimizing risk\n* Partner with senior engineering leaders and business leaders to influence organizational and structural changes\n\nIntuit provides a competitive compensation package with a strong pay for performance rewards approach. This position may be eligible for a cash bonus, equity rewards and benefits, in accordance with our applicable plans and programs (see more about our compensation and benefits at Intuit®: Careers | Benefits). Pay offered is based on factors such as job-related knowledge, skills, experience, and work location. To drive ongoing fair pay for employees, Intuit conducts regular comparisons across categories of ethnicity and gender.\n\nThe expected base pay range for this position is:\n  \nMountain View $261,500 - $353,500",
  "emails": null,
  "compensation": {
    "interval": "yearly",
    "min_amount": 261500,
    "max_amount": 353500,
    "currency": "USD"
  },
  "companyIndustry": null,
  "companyAddresses": "Mountain View, CA",
  "companyEmployees": "10,000+",
  "companyRevenue": "more than $10B (USD)",
  "companyDescription": "Intuit is the global financial technology platform that powers prosperity for the people and communities we serve with TurboTax, Credit Karma, QuickBooks, and Mailchimp.",
  "companyLogoUrl": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/5388bed6b12abd3ccb0f931de42cb205",
  "scrapedAt": "2026-09-22T08:38:04.717164Z"
}
```

Run-level information is stored separately in the default Key-Value Store under `SUMMARY`, including query counts, failures, retries, duplicate totals, output-limit state, charge-limit state, and accepted charge events.

### Pricing

This Actor uses tiered pay-per-event pricing for each `indeed-offer` written to the Dataset. Apify selects the tier from your account plan automatically.

| Apify plan tier | Price per offer | Price per 1,000 offers |
| --- | ---: | ---: |
| Free | $0.001 | $1.00 |
| Bronze | $0.0009 | $0.90 |
| Silver | $0.0008 | $0.80 |
| Gold | $0.00075 | $0.75 |
| Platinum | $0.00075 | $0.75 |
| Diamond | $0.00075 | $0.75 |

Duplicate offers, failed searches, and results that are not written do not trigger this event. There is no Actor-start charge. If the maximum total charge is reached, the Actor stops before emitting additional billable items. The current Pricing tab on the Actor page is authoritative.

### Related Actors

| Actor | Best for |
| --- | --- |
| [Glassdoor Jobs Scraper | Global Job Listings](https://apify.com/datascraperes/glassdoor-jobs-scraper) | Finding global Glassdoor listings with descriptions, compensation, employer data, and application links. |
| [LinkedIn Jobs Scraper – No Login](https://apify.com/datascraperes/linkedin-jobs-scraper) | Adding public LinkedIn job listings with workplace, experience, applicant, and Easy Apply filters. |
| [LinkedIn Company Profile Scraper - No Login](https://apify.com/datascraperes/linkedin-company) | Enriching employers found in job results with public company profiles and organization details. |

### Limits and data quality

- A run accepts up to 50 unique keywords and searches one country site.
- `maxItemsPerQuery` is a ceiling, not a guarantee. Source availability and filters can reduce the number returned.
- The global output limit is 50,000 items, but the user's maximum total charge can stop output earlier.
- Jobs are deduplicated across keywords using stable public identifiers or URLs. Retained results are checked when the same run resumes.
- `SUMMARY.status` is `partial` when some searches return jobs and others fail. The run reports incomplete work and retains all saved jobs. A failed run does not mean its Dataset is empty.
- Counts are left unknown when saved results cannot be verified.
- Listings can change or disappear, and optional salary, description, employer, email, date, location, or application fields can be `null` or empty.
- Remote-only and Indeed Apply filters depend on the public labels available for each listing.
- The Actor does not access private accounts, applications, or information behind a login.

### Frequently asked questions

#### Can I search several countries in one run?

No. Use one country per run and create separate Tasks or runs for additional countries.

#### Why did I receive fewer jobs than requested?

The requested values are maximums. The source may expose fewer matching public listings, and filters, duplicates, output limits, or a maximum charge can reduce the total.

#### Are duplicate jobs charged more than once?

No. Only unique offers actually written to the Dataset trigger `indeed-offer`.

#### Can I receive plain text instead of Markdown?

Yes. Set `descriptionFormat` to `plain`; use `html` to preserve HTML instead.

#### Does the Actor always return salaries and direct application links?

No. Those fields are returned only when published and available for the individual listing.

### Responsible use

Use the Actor only for lawful processing of public job information. Follow applicable laws, privacy requirements, Indeed's terms, and the rights of employers and applicants. Do not use results for spam, harassment, discrimination, or unlawful automated decisions.

### Support

If a run fails or returns unexpected data, open an issue from the Actor page. Include the run URL, non-sensitive input, and expected behavior, but never publish API tokens or other secrets.

# Changelog

This Actor's version history is a separate document: https://apify.com/datascraperes/indeed-jobs-scraper/changelog.md

# Actor input Schema

## `keywords` (type: `array`):

One job search phrase per item. Duplicate phrases are removed before the run.

## `country` (type: `string`):

Indeed country site for this run. Examples: usa, uk, canada, australia, germany, france, india, japan, brazil, mexico, or any country documented in the README.

## `location` (type: `string`):

Optional city, region, postal code, or free-text location understood by Indeed. Leave empty to search the selected country site without a location constraint.

## `distanceMiles` (type: `integer`):

Radius applied when a location is provided. Indeed accepts a radius in miles.

## `maxItemsPerQuery` (type: `integer`):

Maximum unique jobs collected for each keyword. This is a limit, not a guaranteed result count.

## `maxTotalItems` (type: `integer`):

Global output safety limit across all keywords. The Actor stops scheduling more work once this limit is reached.

## `offset` (type: `integer`):

Skip this many Indeed results before writing jobs for every keyword. Use 0 for the first page of results.

## `datePostedHours` (type: `integer`):

Return jobs published within this many hours. Use 0 for any age. This filter cannot be combined with jobType, remoteOnly, or easyApplyOnly because of the Indeed search contract.

## `jobType` (type: `string`):

Optional Indeed job-type filter. Use Any to include all types.

## `remoteOnly` (type: `boolean`):

Return only jobs whose public Indeed attributes or description indicate remote work. Cannot be combined with datePostedHours, jobType, or easyApplyOnly.

## `easyApplyOnly` (type: `boolean`):

Return only jobs marked as eligible for Indeed Apply. Cannot be combined with datePostedHours, jobType, or remoteOnly.

## `descriptionFormat` (type: `string`):

Format for the public job description returned in each Dataset item.

## `includeEmails` (type: `boolean`):

Extract public email addresses from job descriptions. Disabled by default; no email is included unless explicitly enabled.

## Actor input object example

```json
{
  "keywords": [
    "software engineer"
  ],
  "country": "usa",
  "location": null,
  "distanceMiles": 50,
  "maxItemsPerQuery": 10,
  "maxTotalItems": 10,
  "offset": 0,
  "datePostedHours": 0,
  "jobType": "any",
  "remoteOnly": false,
  "easyApplyOnly": false,
  "descriptionFormat": "markdown",
  "includeEmails": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "software engineer"
    ],
    "country": "usa",
    "distanceMiles": 50,
    "maxItemsPerQuery": 10,
    "maxTotalItems": 10,
    "offset": 0,
    "datePostedHours": 0,
    "jobType": "any",
    "remoteOnly": false,
    "easyApplyOnly": false,
    "descriptionFormat": "markdown",
    "includeEmails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("datascraperes/indeed-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["software engineer"],
    "country": "usa",
    "distanceMiles": 50,
    "maxItemsPerQuery": 10,
    "maxTotalItems": 10,
    "offset": 0,
    "datePostedHours": 0,
    "jobType": "any",
    "remoteOnly": False,
    "easyApplyOnly": False,
    "descriptionFormat": "markdown",
    "includeEmails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("datascraperes/indeed-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "software engineer"
  ],
  "country": "usa",
  "distanceMiles": 50,
  "maxItemsPerQuery": 10,
  "maxTotalItems": 10,
  "offset": 0,
  "datePostedHours": 0,
  "jobType": "any",
  "remoteOnly": false,
  "easyApplyOnly": false,
  "descriptionFormat": "markdown",
  "includeEmails": false
}' |
apify call datascraperes/indeed-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datascraperes/indeed-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/kW5fRHMNPBfdMss73/builds/0S1Qve2q2HekGiQr2/openapi.json
