# Indeed Jobs Scraper - Beyond 1,000 Jobs, Pay Data, No Login (`benthepythondev/indeed-jobs-scraper`) Actor

Returns Indeed job postings from 62 countries: title, employer, location, pay, full description, job type, remote flag, apply link and the employer's profile. Reads past Indeed's limit of 1,000 jobs per search and has an only-new mode for monitoring. No login, no browser.

- **URL**: https://apify.com/benthepythondev/indeed-jobs-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 jobs

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

Returns job postings from Indeed's 62 country sites without a login, a cookie or a browser. One row per job: title, employer, place with coordinates, pay, full description, job type, remote flag, the employer's own apply link and the employer's profile. A search does not stop at Indeed's 1,000 jobs, the date filter works together with the job type and remote filters, and an only-new mode turns a schedule into a feed of fresh postings.

**Price:** $1.00 per 1,000 jobs on the Apify Free plan, down to $0.70 from the Gold plan up. A search without results costs nothing. Export to JSON, CSV or Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 🔎 What is the Indeed Jobs Scraper?

Indeed's phone app gets its job lists from a data service that answers with 100 complete postings per request. This Actor asks that service the way the app does, so it never loads an Indeed web page and needs 512 MB of memory instead of a browser. The default run returns 50 jobs in about two seconds.

#### What data does it extract?

- **Job:** id, Indeed link, title, full description as text and as HTML, language, job types, remote and hybrid flags, Indeed's tags (skills, benefits, schedule, education)
- **Place:** city, state, postcode, street where given, country, latitude and longitude
- **Pay:** the amount as Indeed words it, lower and upper end as numbers, unit and currency
- **Dates:** when the employer published the job and when Indeed listed it; whether it has been taken down
- **Applying:** the employer's own job page, and whether Indeed takes the application itself
- **Employer:** name, Indeed page, rating and number of reviews, size, revenue, industry, website, logo, description, chief executive
- **Contacts:** email addresses written in the description

#### What users of Indeed scrapers ask for, and what this Actor does

The open and closed issues of the four most used Indeed Actors on Apify were read on October 4, 2026. These points come up again and again:

| Asked for there | Here |
|---|---|
| More results: runs end at 100, 472 or 1,000 jobs | Indeed ends every list after 1,000 jobs. The Actor then reads the search in stretches of time. 10,000 jobs of one search took 125 seconds |
| Jobs with unrelated titles | `titleOnly` puts every search word into the job title. In a test 100 of 100 results matched, against 54 of 100 without it |
| Date limit together with job type or remote | Indeed's service refuses that combination. The Actor applies both and returned the same 54 jobs as Indeed's own filter in a test |
| No repeated jobs | A job is saved once per run, also when two searches find it |
| Runs that fail or come back empty | A search without jobs ends as a successful run with a message. If Indeed's service does not answer Apify's address, the run moves to a proxy by itself |
| Pay outside the United States | Indeed gives pay only to a request in the country's own language setting. The Actor sends it for each of the 62 countries |

### ⬇️ Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `queries` | array | | Job titles, skills or company names. Each entry is searched in each location. Empty means every job of the location |
| `locations` | array | | Cities, regions or postcodes. Empty means the whole country |
| `countryCode` | string | `US` | One of the 62 Indeed country sites |
| `maxResults` | integer | 50 | Jobs to save per search, up to 10,000 |
| `postedWithinDays` | integer | | Only jobs Indeed listed within this many days. Any number |
| `jobTypes` | array | | `fulltime`, `parttime`, `contract`, `internship`, `temporary`, `permanent`, `perdiem`, `seasonal`, `prn`. Each type is a search of its own |
| `remote` | string | any | `remote` or `hybrid` |
| `titleOnly` | boolean | false | Every search word must be in the job title |
| `distance` | integer | 25 | Around the location: miles in the United States and the United Kingdom, kilometres elsewhere |
| `sort` | string | `date` | `date` (newest first) or `relevance` (Indeed's ranking) |
| `links` | array | | Indeed search links from any country site, and links of single jobs |
| `onlyNewJobs` | boolean | false | Skip every job an earlier run with the same monitor name delivered |
| `monitorId` | string | | Name of that memory |

An empty input runs a sample search (software engineer in Austin, TX). Indeed's own search operators work inside `queries`: `title:(data analyst)`, `company:Siemens`, and quotes for an exact phrase.

#### Example input

Two job titles in two cities:

```json
{
  "queries": ["data analyst", "business analyst"],
  "locations": ["New York, NY", "Chicago, IL"],
  "maxResults": 200
}
```

Every nurse job Indeed listed in the United States in the last two days, well beyond 1,000:

```json
{
  "queries": ["nurse"],
  "postedWithinDays": 2,
  "maxResults": 10000
}
```

Full-time and part-time jobs in Germany from the last two weeks, matched by title:

```json
{
  "queries": ["Pflegefachkraft", "Erzieher"],
  "locations": ["Berlin", "Hamburg"],
  "countryCode": "DE",
  "jobTypes": ["fulltime", "parttime"],
  "postedWithinDays": 14,
  "titleOnly": true,
  "maxResults": 100
}
```

Searches copied from the browser, and single jobs:

```json
{
  "links": [
    "https://uk.indeed.com/jobs?q=nurse&l=Manchester&fromage=3",
    "https://www.indeed.com/viewjob?jk=62d64fca32d4bbc0"
  ],
  "maxResults": 100
}
```

A watch that delivers only new jobs every hour:

```json
{
  "queries": ["driver"],
  "locations": ["Chicago, IL"],
  "jobTypes": ["parttime"],
  "maxResults": 200,
  "onlyNewJobs": true,
  "monitorId": "chicago-drivers"
}
```

#### Coming from another Indeed Actor?

The input names of the common Indeed Actors are read as well: `title`, `query`, `position`, `keyword`, `location`, `country` (upper or lower case), `limit`, `maxRows`, `maxItemsPerSearch`, `maxItems`, `datePosted`, `fromDays`, `jobType`, `radius`, `startUrls`, `urls` and `jobKeys`. An input like this one runs here unchanged:

```json
{
  "country": "us",
  "query": "data analyst",
  "location": "New York, NY",
  "maxRows": 20,
  "jobType": "fulltime",
  "fromDays": "7",
  "remote": "remote"
}
```

### ⬆️ Output

One row per job. A row of the sample search (the description and the tags are shortened here; this job had 3,239 characters of description and 36 tags):

```json
{
  "jobId": "62d64fca32d4bbc0",
  "url": "https://www.indeed.com/viewjob?jk=62d64fca32d4bbc0",
  "applyUrl": "https://www.amazon.jobs/jobs/10462261/software-development-engineer-ii-amazon-leo?cmpid=DA_INAD200785B",
  "indeedApply": false,
  "title": "Software Development Engineer II, Amazon Leo",
  "normalizedTitle": "software engineer",
  "company": "Amazon.com",
  "companyUrl": "https://www.indeed.com/cmp/Amazon.com",
  "location": "Austin, TX",
  "city": "Austin",
  "state": "TX",
  "postalCode": null,
  "streetAddress": null,
  "country": "US",
  "latitude": 30.26715,
  "longitude": -97.74306,
  "remote": false,
  "hybrid": false,
  "jobTypes": ["Full-time"],
  "salaryText": "$143,700 - $194,400 a year",
  "salaryMin": 143700,
  "salaryMax": 194400,
  "salaryUnit": "YEAR",
  "salaryCurrency": "USD",
  "description": "DESCRIPTION\n\nAmazon Leo is Amazon’s low Earth orbit satellite network. Our mission is to deliver fast, reliable internet connectivity to customers beyond the reach of existing networks. …",
  "descriptionHtml": "<div><h2 class=\"jobSectionHeader\"><b>DESCRIPTION</b></h2><div>\nAmazon Leo is Amazon&rsquo;…",
  "emails": [],
  "postedAt": "2026-06-19T05:00:00+00:00",
  "listedAt": "2026-10-03T07:51:34.881000+00:00",
  "expired": false,
  "language": "en",
  "attributes": ["Version control", "Computer science", "Software engineering", "Device driver development", "…"],
  "occupations": ["Software Development Occupations", "Embedded Software & Firmware Developers", "Technology Occupations", "Software Development & Architecture Occupations"],
  "urgentHire": false,
  "highVolumeHiring": true,
  "companyRating": 3.5,
  "companyReviews": 56088,
  "companyIndustry": "Internet and software",
  "companySize": "10,000+",
  "companyRevenue": "more than $10B (USD)",
  "companyWebsite": "https://www.amazon.jobs",
  "companyLogo": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/3e9d43f5c277de169808abdcaf49ba2c",
  "companyDescription": "Our mission is to be Earth's most customer-centric company.",
  "companyCeo": "Andrew Jassy",
  "searchQuery": "software engineer",
  "searchLocation": "Austin, TX",
  "position": 15,
  "scrapedAt": "2026-10-04T13:40:52.779554+00:00"
}
```

`postedAt` is the employer's date and `listedAt` the time Indeed listed the posting; an employer can publish in June and Indeed list the job again in October. Date filters and the only-new mode use `listedAt`. `jobTypes` carries the same English names in every country. The run also writes a `SUMMARY` record with the number of jobs per search, the searches without jobs and the reason a run stopped.

### 💰 What a run costs

| Apify plan | Per 1,000 jobs |
|---|---|
| Free | $1.00 |
| Bronze | $0.90 |
| Silver | $0.80 |
| Gold, Platinum, Diamond | $0.70 |

Apify's standard start event ($0.00005) is the only other charge; proxies are included. Not charged: a search without jobs, a job link Indeed no longer knows, a job already delivered in only-new mode, a job outside your date limit, and a job a second search of the same run finds again. Set the run's maximum charge and the Actor stops at it with the rows it has saved.

### ⏱️ Measured (October 4, 2026)

| Run | Jobs | Time |
|---|---|---|
| Empty input (sample search) | 50 | 2 s |
| One search to the limit (nurse, United States) | 10,000 | 125 s |
| Four searches side by side, 1,500 jobs each | 6,000 | 21 s |
| Full-time jobs of a search with more than 1,000 | 1,500 | 40 s |
| Nine searches in Germany with a date limit, two job types and title matching | 201 | 3 s |
| Four job links, one of them no longer known to Indeed | 3 | 1 s |
| Only-new watch, second run right after the first | 0 new | 2 s |

A run of 2,500 jobs that was killed after 14 seconds and started again ended with 2,500 rows, none of them twice.

### 📈 More than 1,000 jobs per search

Indeed's service ends every list after 1,000 jobs. When a search reaches that point, the Actor goes on in stretches of hours: the jobs listed up to 9 hours ago, then 9 to 18 hours ago, and so on. A stretch that is full again is halved.

A full list is also not the newest 1,000 jobs. In the search for nurse jobs in the United States, the first list ended at 999 jobs and reached 19 hours back; read exactly, those 19 hours held 1,014 jobs. The next list of 1,000 covered the following eleven hours, and the exact read of those hours found 427 jobs the list had left out. As a check, the first 28 hours of that search were counted again hour by hour: 1,673 jobs, and every one of them was in the run's dataset.

Above 1,000 jobs a search is read newest first. With a job type or remote filter the Actor checks each job's type itself inside a stretch, which matches Indeed's own filter job for job (574 full-time jobs in 20 hours, none missing).

### 🌍 Countries and pay

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

Indeed answers with pay only when the request carries the country's own language setting. In six test searches (United Kingdom, Germany, Canada, Australia, India, France; 100 jobs each) not one of the 600 jobs carried pay when asked with the American setting. Asked with each country's own setting, 80, 30, 80, 72, 44 and 68 of them did. `salaryText` therefore comes in the country's language ("£12.75 an hour", "16,40 € pro Stunde", "月給 26.2万円 以上"), and `salaryMin`, `salaryMax`, `salaryUnit` and `salaryCurrency` hold the same pay as numbers and codes.

### 🔔 Watching searches for new jobs

Turn on `onlyNewJobs`, give the watch a `monitorId` and put the run on a schedule. The first run delivers the newest jobs up to `maxResults`. Later runs read each search from its newest job and stop at the first page without anything new, so a quiet search costs nothing. Jobs listed before the oldest job of the first run stay outside the watch. The memory is a key-value store named `indeed-jobs-monitor` in your own account; delete a record there to start a watch over.

### 🤖 For AI agents

Smallest useful call:

```json
{"queries": ["data analyst"], "locations": ["New York, NY"], "maxResults": 25}
```

Each row is one job with `title`, `company`, `location`, `salaryText`, `salaryMin`, `salaryMax`, `jobTypes`, `remote`, `description`, `listedAt`, `applyUrl`, `companyWebsite` and `url`. `queries` and `locations` take several entries at once; `countryCode` picks the country. Add `"postedWithinDays": 1` for today's jobs. A search without jobs returns no rows; the status message and the `SUMMARY` record name it. No credentials are needed.

### 💡 Use cases

- 📊 **Labour market and pay research:** what employers offer for a role by city and country, with pay as numbers.
- 🎯 **Sales and recruiting leads:** who is hiring for which role, with company size, revenue and website on every row.
- 🧩 **Job boards and aggregators:** fresh postings with the employer's own apply link, delivered by an hourly watch.
- 🤖 **Job search agents:** complete descriptions and tags as input for matching and summaries.

### ⚠️ Limits, stated plainly

- **Fewer jobs than the count on Indeed's website.** The website counts sponsored postings, and its service lists few of them. For nurse jobs in Austin from the last three days the website announced 124 jobs and the service listed 81. The website's first page showed 35 postings, 20 of them sponsored: of the 15 unsponsored ones 13 were in the Actor's result, of the 20 sponsored ones 7. A second search gave 14 of 15 and 3 of 15.
- **10,000 jobs per search and run.** For more, split the search by location or run it again with a date limit.
- **More than 1,000 jobs within one hour cannot be divided.** Indeed's date filter works in whole hours. Such a search gets 1,000 jobs of that hour and a note in the status message; narrow it by place.
- **Relevance order covers the first 1,000 jobs.** Everything beyond is read newest first.
- **Pay as the posting states it.** Indeed's own pay estimates are not part of the service's answer, and a posting without pay has none here.
- **Employer profile where Indeed has one.** In the sample run 43 of 50 jobs came with company size and rating and 44 with a website.
- **Few email addresses.** Indeed does not publish recruiter contacts. `emails` holds addresses written in the description, which 5 of 50 jobs had in the sample run.
- **No number of applicants** and no sponsored flag: the service does not give them.
- **Tags in the country's language.** `attributes` and `occupations` come as Indeed words them on the country site; `jobTypes`, `remote` and `hybrid` are the same everywhere.
- **Several job types are several searches.** Indeed reads two types as "both at once", so each type is searched on its own and `maxResults` applies to each.

### ❓ FAQ

**Do I need an Indeed account, cookies or a proxy?** No. The Actor reads what Indeed's app shows without an account.

**How do I get more than 1,000 jobs?** Set `maxResults` to the number you want, up to 10,000 per search. The Actor reads past Indeed's limit by itself.

**Why do I get fewer jobs than Indeed's website says?** The website's count includes sponsored postings; see the limits above for measured numbers.

**Can I combine the date limit with job type and remote?** Yes. Indeed's service takes only one of them at a time; the Actor applies the other one itself.

**Why do some results not match my keywords?** Indeed also searches the description. Turn on `titleOnly`, or write `title:(your words)` yourself.

**How do I get every job of one company?** Put `company:Name` into `queries`, with or without a location.

**Can I check whether jobs are still online?** Paste their links into `links`. Each job comes back with its current data and the `expired` flag; a job Indeed no longer knows is counted in the status message and costs nothing.

**Where do I find a contact for a company?** `companyWebsite` is on most rows. The [Website Contact & Email Extractor](https://apify.com/benthepythondev/website-contact-extractor) reads emails and phone numbers from such websites.

**My code was written for another Indeed Actor. What differs?** The input names are read as they are. In the output, `positionName` is `title`, `companyName` is `company`, `id` or `key` is `jobId`, `externalApplyLink` or `jobUrl` is `applyUrl`, `descriptionText` is `description`, and pay is `salaryText`, `salaryMin`, `salaryMax`, `salaryUnit` and `salaryCurrency`.

**How do I call it from code?** With the Apify API or the Python and JavaScript clients; every run returns a dataset you can fetch as JSON or CSV. It also works as a tool through Apify's MCP server.

**Is it legal?** The Actor reads job postings that Indeed shows to everyone without a login. Postings can contain names and email addresses of contact persons: GDPR, CCPA and similar rules apply to how you store and use them, and Indeed's terms apply to you as well. Collect only what you need.

### 🔗 You might also like

- [LinkedIn Jobs Scraper](https://apify.com/benthepythondev/linkedin-jobs-scraper): public LinkedIn jobs with full descriptions
- [Remote Jobs Scraper](https://apify.com/benthepythondev/remote-jobs-aggregator): six remote job boards in one feed
- [Arbeitsagentur Jobs Scraper](https://apify.com/benthepythondev/arbeitsagentur-jobs-scraper): the job board of Germany's federal employment agency
- [Greenhouse Jobs Scraper](https://apify.com/benthepythondev/greenhouse-jobs-scraper): jobs from company career sites on Greenhouse
- [Website Contact & Email Extractor](https://apify.com/benthepythondev/website-contact-extractor): emails, phones and social links from company websites

**Keywords:** indeed scraper, indeed jobs scraper, indeed job search api, scrape indeed jobs, indeed salary data, indeed job postings export, indeed jobs csv, indeed api alternative, job postings data, hiring data, job market data, remote jobs indeed, indeed uk jobs, indeed germany jobs, indeed canada jobs, job monitoring, new jobs alert, company hiring signals, no login indeed scraper

# Actor input Schema

## `queries` (type: `array`):

What to search for: job titles, skills or company names. Each entry is searched in each location. Indeed's operators work: title:(data analyst) matches the job title only, company:Siemens one employer, quotes an exact phrase. Leave empty to get every job of a location.

## `locations` (type: `array`):

Cities, regions or postcodes in the chosen country, for example Austin, TX or Manchester or 10115 Berlin. Leave empty to search the whole country.

## `countryCode` (type: `string`):

The Indeed country site to search. Pay is read in each country's own currency. Links bring their own country.

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

Rows to save for each search (each combination of keyword, location and job type) and each search link. Indeed ends one list after 1,000 jobs; above that the Actor reads the search in stretches of time, newest first.

## `postedWithinDays` (type: `integer`):

Keeps jobs Indeed listed within this many days. Any number works, and it works together with the job type and remote filters.

## `jobTypes` (type: `array`):

Keeps jobs Indeed marks with this type. Several types are searched one after the other, and a job that carries two of them is saved once.

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

Keeps jobs Indeed marks as remote or as hybrid work.

## `titleOnly` (type: `boolean`):

Indeed also matches words in the description, which brings jobs with unrelated titles. With this on, every search word must be in the job title.

## `distance` (type: `integer`):

Miles in the United States and the United Kingdom, kilometres elsewhere. Without a value the distance is 25.

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

Newest first is the order for date limits and monitoring. Most relevant first is Indeed's own ranking for the first 1,000 jobs of a search.

## `links` (type: `array`):

Search links from any Indeed country site (the words, place, age, distance, job type and remote filter of the link are used) and links of single jobs, which are looked up directly.

## `onlyNewJobs` (type: `boolean`):

For scheduled runs: skips every job an earlier run with the same monitor name delivered, so you pay only for new ones. The memory is a key-value store in your own account.

## `monitorId` (type: `string`):

Name of the memory used by the option above. Give each watch its own name; without a name the list of searches is the name.

## Actor input object example

```json
{
  "queries": [
    "software engineer"
  ],
  "locations": [
    "Austin, TX"
  ],
  "countryCode": "US",
  "maxResults": 50,
  "remote": "",
  "titleOnly": false,
  "sort": "date",
  "onlyNewJobs": 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 = {
    "queries": [
        "software engineer"
    ],
    "locations": [
        "Austin, TX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/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 = {
    "queries": ["software engineer"],
    "locations": ["Austin, TX"],
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/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 '{
  "queries": [
    "software engineer"
  ],
  "locations": [
    "Austin, TX"
  ]
}' |
apify call benthepythondev/indeed-jobs-scraper --silent --output-dataset

```

## MCP server setup

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