# Indeed Jobs Scraper: Salaries, Companies & 62 Countries (`epicscrapers/indeed-scraper`) Actor

Scrape Indeed jobs in 62 countries from $0.05 per 1,000. Indeed's own salary data, full descriptions, company size, revenue and ratings, apply links. Date, job type, remote and level filters. No 1,000-result limit, no login. Export to CSV, Excel or JSON.

- **URL**: https://apify.com/epicscrapers/indeed-scraper.md
- **Developed by:** [Epic Scrapers](https://apify.com/epicscrapers) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 11 total users, 2 monthly users, 96.3% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.05 / 1,000 job saveds

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

### Indeed Jobs Scraper: jobs, salaries and company data from 62 Indeed sites

Indeed Jobs Scraper turns any Indeed job search into a spreadsheet. You get every job Indeed shows for your search, with the full description, Indeed's own salary data, the employer's profile (size, revenue, CEO, website, rating) and the direct apply link. Search any of Indeed's 62 country sites, filter by date, job type, remote work and experience level, and collect thousands of jobs per search.

- **Salaries as numbers, straight from Indeed.** `salaryMin`, `salaryMax`, currency and pay period come from Indeed's structured pay data, not from guessing at text. When a job has no pay data, the actor looks for a salary in the description.
- **62 countries.** United States, United Kingdom, Canada, Australia, Germany, France, India, Japan, Brazil and 53 more Indeed sites, each with local salaries and currencies.
- **No 1,000-result limit.** Indeed stops every search at about 1,000 jobs. This actor continues the search in posting-date windows, so a broad search returns several thousand unique jobs.
- **Filters that Indeed applies itself.** Date posted, job type, remote or hybrid and experience level are applied by Indeed, so every saved job matches and you never pay for jobs that get thrown away.
- **Company data on every job.** Employer name, Indeed profile, logo, website, industry, employee count, revenue, CEO, headquarters and rating, without extra requests.
- **From $0.05 per 1,000 jobs.** No subscription, no Indeed account, no proxy setup. Export to JSON, CSV, Excel or Google Sheets, or use the API.

### What can you do with Indeed Jobs Scraper?

| Goal                            | How                                                                                                             |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| Salary benchmarking             | Search a role in several cities or countries and compare `salaryMin` and `salaryMax` by `salaryType`.           |
| Recruiting and sales leads      | Find companies hiring for a role, with `companyWebsite`, `companyEmployees`, `companyRevenue` and `companyCeo`. |
| Job market and labor research   | Count jobs by `occupations`, `normalizedTitle`, location or skill (`attributes`) over time.                     |
| Daily job alerts and monitoring | Schedule a search with `fromDays: 1` and get only new jobs every day.                                           |
| Job boards and aggregators      | Feed full descriptions, locations with coordinates, and apply links into your own site.                         |
| Competitor hiring intelligence  | Search `company:Name` to see which roles a competitor is hiring for and where.                                  |
| AI job matching                 | Give an AI model the descriptions, skills and salaries to match candidates to jobs.                             |

### How it compares

| What you need              | Indeed Jobs Scraper                                     | Typical Indeed scrapers                    |
| -------------------------- | ------------------------------------------------------- | ------------------------------------------ |
| Jobs per search            | Several thousand (continues past Indeed's ~1,000 limit) | Up to ~1,000                               |
| Countries                  | 62 Indeed sites                                         | Often the US only, or a few markets        |
| Salary                     | Indeed's own numbers: min, max, currency, period        | Often only the text, such as "$20 an hour" |
| Filters                    | Date, job type, remote, hybrid, level, all together     | Some, often applied after scraping         |
| Company size, revenue, CEO | On every job, no extra cost                             | Varies                                     |
| Indeed search syntax       | `title:`, `company:`, `"exact"`, `-exclude`             | Varies                                     |
| Price                      | From $0.05 per 1,000 jobs                               | $0.05 to $5 per 1,000 jobs                 |

Indeed doesn't offer a public job search API: its Publisher API is closed to new users. This actor uses the same data Indeed's own mobile app shows and gives it to you as clean, structured rows.

### Quick start

1. Click **Try for free** and sign in to Apify. The free plan's monthly credit covers tens of thousands of jobs.
2. Enter a **Search query**, such as `software engineer`, and a **Location**, such as `San Francisco, CA`.
3. For a first run, keep **Max results** at `50`.
4. Click **Start**. When the run finishes, open the **Output** tab and export the data.

```json
{
    "query": "software engineer",
    "location": "San Francisco, CA",
    "maxResults": 50
}
```

The country is detected from the location. To choose it yourself, set **Country**, for example `GB` for uk.indeed.com.

### What data can you extract?

Every row is one job:

| Group    | Fields                                                                                                                                                                                                            |
| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Job      | `jobKey`, `title`, `normalizedTitle`, `jobUrl`, `applyUrl`, `isIndeedApply`, `descriptionText`, `descriptionHtml` (optional), `jobType`, `experienceLevel`, `isRemote`, `isHybrid`, `attributes`, `occupations`   |
| Salary   | `salary.salaryText`, `salary.salaryMin`, `salary.salaryMax`, `salary.salaryCurrency`, `salary.salaryType` (hourly, daily, weekly, monthly, yearly), `salary.salarySource`                                         |
| Company  | `companyName`, `companyUrl`, `companyLogoUrl`, `companyHeaderUrl`, `companyWebsite`, `companyIndustry`, `companyEmployees`, `companyRevenue`, `companyCeo`, `companyHeadquarters`, `companyDescription`, `rating` |
| Location | `location.city`, `location.state`, `location.postalCode`, `location.streetAddress`, `location.country`, `location.countryCode`, `location.latitude`, `location.longitude`, formatted addresses                    |
| Timing   | `postedAt`, `datePublished`, `age`, `postedToday`, `expired`                                                                                                                                                      |
| Hiring   | `isUrgentHire`, `isHighVolumeHiring`, `source`, `referenceNumber`                                                                                                                                                 |
| Run      | `market`, `locale`, `language`, `searchQuery`, `searchLocation`, `scrapedAt`                                                                                                                                      |

In a test search for registered nurses in Houston (100 jobs), 58 had a salary, 97 had an Indeed company profile, 84 had the employee count, 81 the CEO and 82 the company website.

### Search tips

#### Use Indeed's search syntax

The **Search query** accepts the same syntax as Indeed's search box:

| Query                                         | Finds                                |
| --------------------------------------------- | ------------------------------------ |
| `data engineer`                               | Jobs mentioning both words           |
| `"data engineer"`                             | The exact phrase                     |
| `title:(data engineer)`                       | Both words in the job title          |
| `title:("data engineer" or "data scientist")` | Either phrase in the title           |
| `nurse -travel`                               | Nurse jobs without the word "travel" |
| `company:Google`                              | Jobs at a company                    |

#### Collect more than 1,000 jobs

Indeed stops each search at about 1,000 jobs. Set **Max results** above 1,000, or to `0` for everything, and the actor continues the search in posting-date windows, newest first, until it has your number or every matching job. A nationwide search for `nurse` returned 2,500 unique jobs in about 70 seconds. Above 1,000 results the jobs come newest first, whatever the sort setting.

#### Search outside the US

Pick a **Country**, or enter a location and let the actor detect it. Write the query in the site's language for the best results (`Softwareentwickler` on de.indeed.com, `エンジニア` on jp.indeed.com). Salaries come in the local currency. The radius is in miles on the US and UK sites and in kilometres elsewhere, as on Indeed.

Supported Indeed sites: United States, United Kingdom, Canada, Australia, India, Ireland, New Zealand, Singapore, Malaysia, Philippines, South Africa, Nigeria, Pakistan, Hong Kong, United Arab Emirates, Saudi Arabia, Qatar, Kuwait, Bahrain, Oman, Egypt, Germany, Austria, Switzerland, France, Belgium, Luxembourg, Morocco, Italy, Spain, Mexico, Argentina, Chile, Colombia, Peru, Ecuador, Uruguay, Venezuela, Costa Rica, Panama, Netherlands, Brazil, Portugal, Poland, Czech Republic, Hungary, Romania, Greece, Turkey, Sweden, Norway, Denmark, Finland, Japan, South Korea, Taiwan, China, Thailand, Vietnam, Indonesia, Israel and Ukraine.

#### Scrape specific jobs

Paste Indeed job links (from any Indeed site) or 16-character job keys into **Job URLs or job keys**. Each job is fetched from its own country's site, so its salary comes back in the right currency. You can use this with or without a search.

### Monitor new jobs with scheduled runs

Run the same search every day and get only the jobs posted since the last run.

#### 1. Save your input as a task

Set up a search with **Sort by** `Date` and **Posted within (days)** `1`, then click **Save as a new task**.

#### 2. Schedule the task

In Apify Console, go to **Schedules**, click **Create new**, choose how often to run, and add your task. See [Schedules](https://docs.apify.com/platform/schedules) and [How to create a schedule](https://help.apify.com/en/articles/7120817-how-to-create-a-schedule).

Watch how to schedule an Actor:

https://www.youtube.com/watch?v=1jI7WcVQmwM

| Use case             | Frequency   | Cron expression | Posted within |
| -------------------- | ----------- | --------------- | ------------- |
| Daily job alerts     | Daily       | `0 7 * * *`     | `1`           |
| Weekly hiring report | Weekly      | `0 7 * * 1`     | `7`           |
| Fast-moving roles    | Twice a day | `0 7,19 * * *`  | `1`           |

#### 3. Send the results where you need them

Connect Google Sheets, Slack, email, Make, Zapier or n8n in the task's **Integrations** tab:

https://www.youtube.com/watch?v=IFTeKdj6ZGM

Every row has `jobKey`, so you can drop jobs you have already seen when combining runs.

### Input reference

| Field                    | Type             | Default       | Effect                                                                                                                 |
| ------------------------ | ---------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `query`                  | String           | Empty         | Job title, skill or company, with Indeed's search syntax. Either `query` or `urls` is required.                        |
| `location`               | String           | Empty         | City, state, region or postal code. Empty searches the whole country.                                                  |
| `country`                | String           | Detect        | Two-letter code of the Indeed site, such as `US`, `GB`, `DE`. Empty: detected from `location`, or the US.              |
| `maxResults`             | Integer          | `50`          | Maximum jobs from the search. Above 1,000 the search continues in date windows. `0` means every job.                   |
| `sort`                   | String           | `"RELEVANCE"` | `"RELEVANCE"` or `"DATE"` (newest first).                                                                              |
| `fromDays`               | Integer          | `0`           | Only jobs posted in the last N days. `0` means any date.                                                               |
| `radius`                 | Integer          | `25`          | Distance around `location`, in miles (US, UK) or kilometres (other sites).                                             |
| `jobType`                | String           | Any           | `"fulltime"`, `"parttime"`, `"contract"`, `"temporary"`, `"internship"` or `"perdiem"`.                                |
| `remote`                 | String           | Any           | `"remote"` or `"hybrid"`.                                                                                              |
| `level`                  | String           | Any           | `"no_experience"`, `"entry_level"`, `"mid_level"` or `"senior_level"`. Jobs without a level tag are left out.          |
| `urls`                   | Array of strings | Empty         | Indeed job links or job keys, fetched in addition to the search.                                                       |
| `searchCompanyInfo`      | Boolean          | `false`       | Look up employers by name for the few jobs Indeed doesn't link to a company profile. One request per new company name. |
| `includeDescriptionHtml` | Boolean          | `false`       | Add `descriptionHtml` with the original formatting.                                                                    |

### Ready-to-run examples

#### New remote jobs from the last 24 hours

```json
{
    "query": "product designer",
    "remote": "remote",
    "sort": "DATE",
    "fromDays": 1,
    "maxResults": 500
}
```

#### Salary benchmark for one role across the UK

```json
{
    "query": "title:(data analyst)",
    "country": "GB",
    "jobType": "fulltime",
    "maxResults": 1000
}
```

Open the **Salaries** view and compare `salaryMin` and `salaryMax` for rows where `salaryType` is `yearly`.

#### Entry-level jobs in Toronto

```json
{
    "query": "marketing",
    "location": "Toronto, ON",
    "level": "entry_level",
    "radius": 50,
    "maxResults": 200
}
```

#### Every nurse job posted this week in Texas

```json
{
    "query": "registered nurse",
    "location": "Texas",
    "fromDays": 7,
    "maxResults": 0
}
```

#### What a competitor is hiring for

```json
{
    "query": "company:Stripe",
    "maxResults": 300
}
```

### Analyze the results with ChatGPT or Claude

Export the dataset as CSV (the **Salaries** or **Companies** view keeps it small) and attach it to a chat with an AI assistant. Some prompts to start with:

**Salary report.** "These are Indeed jobs for one role. Using only rows with `salaryType` yearly, give the median `salaryMin` and `salaryMax` by `location.city`, and list the five best-paying employers."

**Skills in demand.** "Count how often each value in `attributes` appears. List the 20 most requested skills and the job titles that ask for them most."

**Sales leads.** "Group these jobs by `companyName`. For each company with three or more openings, give `companyWebsite`, `companyEmployees`, `companyIndustry` and the roles it is hiring for."

The dataset is also available through the [Apify API](https://docs.apify.com/api/v2) and integrations such as Make, Zapier and n8n, so you can feed it into an automated workflow. AI agents can run this actor through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### Output

Results go to the run's default dataset. Use the views **Overview**, **Salaries**, **Companies**, or **Apply links & hiring signals**, or export everything as JSON, CSV, Excel, XML or HTML.

This is a real row from a `registered nurse` search in Houston, TX on October 2, 2026, with the description and attributes shortened:

```json
{
    "jobKey": "804720bae170b72f",
    "title": "Full - Time Home Infusion RN - Admissions RN",
    "normalizedTitle": "registered nurse - admissions",
    "jobUrl": "https://www.indeed.com/viewjob?jk=804720bae170b72f",
    "applyUrl": "https://optioncare.wd1.myworkdayjobs.com/NavenHealth/job/Houston-TX/Full---Time-Home-Infusion-RN---Admissions-RN_R37166",
    "isIndeedApply": true,
    "companyName": "Option Care Enterprises, Inc.",
    "companyUrl": "https://www.indeed.com/cmp/Naven-Health,-Inc",
    "companyLogoUrl": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/5cc75714ec4231478b1f60a3cc0612b9",
    "companyWebsite": "https://navenhealth.com/",
    "companyEmployees": "1,001 to 5,000",
    "companyRevenue": "Decline to state",
    "companyCeo": "Tim Kingas, Vice President of Operations",
    "companyHeadquarters": "Sarasota, FL",
    "companyDescription": "Naven Health is one of the largest home infusion nursing networks in the country with more than 1,600 infusion nurses providing exceptional care throughout all 50 states.",
    "rating": { "rating": 4.2, "count": 71 },
    "location": {
        "countryCode": "US",
        "country": "United States",
        "state": "TX",
        "city": "Houston",
        "postalCode": "77338",
        "streetAddress": "123 West Main Street",
        "formattedAddressShort": "Houston, TX",
        "formattedAddressLong": "Houston, TX 77338",
        "latitude": 29.99817,
        "longitude": -95.269394
    },
    "isRemote": false,
    "isHybrid": false,
    "jobType": ["Full-time"],
    "experienceLevel": ["Entry level"],
    "attributes": ["CPR Certification", "Nursing", "Care plan evaluation", "Staff supervision"],
    "occupations": [
        "Healthcare Occupations",
        "Patient Care Nursing Occupations",
        "Nursing Occupations",
        "Registered Nurses"
    ],
    "salary": {
        "salaryText": "$40.78 - $67.97 an hour",
        "salaryType": "hourly",
        "salaryMin": 40.78,
        "salaryMax": 67.97,
        "salaryCurrency": "USD",
        "salarySource": "COMPENSATION_FIELD"
    },
    "descriptionText": "Delivering an exceptional infusion experience, everywhere. Delivering on our unyielding commitment, always.\n\nNaven Health is a nationwide home infusion nursing…",
    "datePublished": "2026-10-01",
    "postedAt": "2026-10-01T18:44:42.057Z",
    "age": "19 hours ago",
    "postedToday": true,
    "expired": false,
    "isUrgentHire": false,
    "isHighVolumeHiring": false,
    "source": "Naven Health",
    "referenceNumber": "JOB_POSTING-3-97465",
    "language": "en",
    "market": "US",
    "locale": "en-US",
    "searchQuery": "registered nurse",
    "searchLocation": "Houston, TX",
    "scrapedAt": "2026-10-02T14:03:08.720Z"
}
```

#### Notes on fields

- `jobUrl` is the job's page on Indeed. `applyUrl` is where Indeed sends applicants: the employer's career site, or the Indeed page for jobs with Indeed Apply (`isIndeedApply`).
- `salary` is `null` when neither Indeed's pay data nor the description has a salary. `salarySource` says where it came from: `COMPENSATION_FIELD` (Indeed's pay data), `ESTIMATED` (Indeed's estimate) or `DESCRIPTION` (found in the text).
- `jobType` and `experienceLevel` use the same English labels on every Indeed site. `attributes` has all of Indeed's tags for the job (skills, benefits, schedules, education) in the site's language.
- `companyName` is the name on the job ad. The other company fields come from the employer's Indeed profile, which can belong to a parent company or brand.
- `postedAt` is when the job appeared on Indeed, in UTC. `postedToday` means posted in the last 24 hours.
- `rating` is the employer's overall Indeed rating and its number of reviews.
- Missing values are `null`. Every row has `scrapedAt` in UTC.

### FAQ

#### Why did I get fewer jobs than Max results?

Your search has fewer matching jobs. Filters, a small radius or a narrow query all reduce results, and experience level leaves out jobs Indeed hasn't tagged. The log shows how many jobs Indeed returned. Try a broader query or a larger radius.

#### How many jobs can I get?

As many as Indeed has for your search. Below 1,000, a run reads them page by page; above that, it continues in posting-date windows. Set **Max results** to `0` for everything, and set a maximum cost per run if you want a ceiling.

#### How fast is it?

Each page of 100 jobs takes 1–4 seconds, so 1,000 jobs take about 20–40 seconds. A 2,500-job nationwide search took about 70 seconds.

#### Do I need an Indeed account, an API key or proxies?

No. The actor doesn't log in and handles connections and retries itself.

#### Is there an official Indeed API for job listings?

Indeed's Job Search (Publisher) API is closed to new users. This actor uses the data Indeed's mobile app shows and returns it as structured rows.

#### Why are some salaries missing?

Many employers don't publish pay. When Indeed has no pay data for a job, the actor looks for a salary in the description. In our US tests, 55–60% of jobs had a salary; it varies by role and country.

#### Can I scrape Indeed company reviews or resumes?

No. This actor collects job listings and the employer profile shown with them.

#### Is it legal to scrape Indeed?

The actor collects publicly visible job listings and company information, and no personal data about job seekers. You are responsible for how you use the data, including Indeed's terms and laws such as GDPR.

### Cost

This actor uses pay-per-event pricing: you pay per job saved, and the price falls on higher Apify plans. There's no subscription and no monthly fee for the actor.

| Apify plan      | Per 1,000 jobs |
| --------------- | -------------- |
| Free            | $0.10          |
| Starter         | $0.08          |
| Scale           | $0.06          |
| Business and up | $0.05          |

Each run also has a start fee of $0.001. Filters are applied by Indeed, so filtered jobs are never charged. Set a maximum cost per run; the actor stops cleanly when it's reached and keeps everything collected so far. The **Pricing** tab always shows the current prices.

### Support

Report problems or request features in the **Issues** tab. Include the run ID, the input and what you expected. We read every issue.

This actor is not affiliated with or endorsed by Indeed, Inc. or Recruit Holdings. "Indeed" is a trademark of Indeed, Inc.

# Actor input Schema

## `query` (type: `string`):

What you would type in Indeed's "What" box: a job title, skill or company (e.g. <code>software engineer</code>). Indeed's search syntax works too: <code>title:(data engineer)</code>, <code>company:Google</code>, <code>"exact phrase"</code>, <code>nurse -travel</code>. Leave empty to only fetch the job URLs below.

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

City, state, region or postal code (e.g. <code>San Francisco, CA</code>, <code>London</code>, <code>10115</code>). Leave empty to search the whole country.

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

Which Indeed site to search. Leave on <b>Detect from location</b> to pick the country of the location above (the US when no location is set).

## `maxResults` (type: `integer`):

Maximum number of jobs to save from the search. Indeed stops a search at about 1,000 results; above that, the actor continues the search in posting-date windows, so you can collect several thousand jobs. Set to <b>0</b> for every job Indeed has for the search.

## `sort` (type: `string`):

Indeed's order: most relevant first, or newest first.

## `fromDays` (type: `integer`):

Only jobs posted in the last N days (e.g. <code>1</code> for daily monitoring, <code>7</code> for the last week). <code>0</code> means any date.

## `radius` (type: `integer`):

Distance around the location, in miles on the US and UK sites and kilometres everywhere else (as on Indeed). <code>0</code> searches only the location itself.

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

Only jobs of this employment type.

## `remote` (type: `string`):

Only jobs Indeed marks as remote or as hybrid.

## `level` (type: `string`):

Only jobs Indeed tags with this experience level. Jobs without a level tag are left out.

## `urls` (type: `array`):

Indeed job links from any Indeed site (e.g. <code>https://www.indeed.com/viewjob?jk=…</code> or <code>https://uk.indeed.com/viewjob?jk=…</code>) or bare 16-character job keys. Fetched in addition to the search, without its filters.

## `searchCompanyInfo` (type: `boolean`):

Company profile, logo, size, revenue and rating are included whenever Indeed links the job to an employer. Turn this on to also look up employers by name for jobs that Indeed does not link. One extra request per new company name.

## `includeDescriptionHtml` (type: `boolean`):

Adds <code>descriptionHtml</code> with the description's original formatting (lists, bold, links). The plain-text <code>descriptionText</code> is always included.

## Actor input object example

```json
{
  "query": "software engineer",
  "location": "San Francisco, CA",
  "country": "",
  "maxResults": 50,
  "sort": "RELEVANCE",
  "fromDays": 0,
  "radius": 25,
  "jobType": "",
  "remote": "",
  "level": "",
  "urls": [],
  "searchCompanyInfo": false,
  "includeDescriptionHtml": false
}
```

# Actor output Schema

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

Link to the dataset of scraped records

# 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 = {
    "query": "software engineer",
    "location": "San Francisco, CA",
    "maxResults": 50,
    "urls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("epicscrapers/indeed-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 = {
    "query": "software engineer",
    "location": "San Francisco, CA",
    "maxResults": 50,
    "urls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("epicscrapers/indeed-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 '{
  "query": "software engineer",
  "location": "San Francisco, CA",
  "maxResults": 50,
  "urls": []
}' |
apify call epicscrapers/indeed-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,epicscrapers/indeed-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/X7ELaXZscVDqODxYi/builds/6a4ZP9i2olPNuIYcF/openapi.json
