# Indeed Job Scraper (`data_minds/indeed-job-scraper`) Actor

Scrape Indeed jobs from 65 countries with no login or cookies. Get title, company, salary, benefits, skills, apply link and description from search links or keywords. Bulk input, date filters, auto proxy switching. Export JSON, CSV or Excel for recruiting and market research.

- **URL**: https://apify.com/data_minds/indeed-job-scraper.md
- **Developed by:** [Data Minds](https://apify.com/data_minds) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Job Scraper** is an Apify Actor and Indeed job scraper that extracts job listings from 62 Indeed country sites: title, company, salary, workplace type, benefits, skills, apply link and full description. Paste Indeed search links or type job titles, add filters, and export JSON, CSV or Excel. **From $0.0028 per job ($2.80 per 1,000) on the Gold plan**; $0.004 on the Free plan. [🚀 Try it free](https://apify.com/data_minds/indeed-job-scraper)

### What can Indeed Job Scraper do?

- 🔎 **Scrape Indeed jobs in bulk** - add many search links, job titles and locations in one run, with duplicates removed.
- 🌍 **Cover 62 countries** - pick the Indeed country site for phrases; links keep their own country.
- 💰 **Extract Indeed salary data** - listed pay plus yearly and hourly equivalents, and a pay range read from the posting text when none is listed.
- 🏠 **Filter by workplace type** - keep remote, hybrid or on-site jobs, plus job type, seniority and apply method.
- 🏢 **Add company data** - size, revenue, industry, website and logo when Indeed shows them.
- 📝 **Get the full job description** - as plain text, HTML or both.
- 🕐 **Find fresh postings** - limit results to the last N days or hours and sort newest first.
- 🔌 **Export and automate** - JSON, CSV, Excel, API, schedules and webhooks.

#### What data can I extract from Indeed?

| Field | Description |
|---|---|
| 🏷 `title`, `normalizedTitle`, `id` | Job title, normalized title and job ID. |
| 🏢 `companyName`, `companyDetails` | Employer name and profile: industry, employee range, revenue, CEO, website, logo, social links, claimed flag. |
| 📍 `formattedLocation`, `location`, `jobLocationCity`, `jobLocationState` | Place text and an object with city, state, country, postal code, coordinates and address. |
| 💵 `salary`, `salaryText`, `salaryAnnualMin`, `salaryAnnualMax`, `salaryHourlyMin`, `salaryHourlyMax` | Pay range, readable pay text, and yearly and hourly equivalents. |
| 🧾 `salarySource`, `salaryFlag`, `descriptionSalary`, `payTypes` | Where the pay came from, a wide-range flag, pay found in the text, and pay types such as bonus or tips. |
| 🏠 `workplaceType`, `workplaceSource` | Remote, hybrid or on-site, and where that was read from. |
| 🕒 `jobTypes`, `workSchedule`, `shifts`, `seniority` | Full-time, part-time and similar types, schedule, shifts and level. |
| 🎓 `experience`, `education`, `skills`, `certifications`, `requirements` | Requirements and skills tagged on the job. |
| 🎁 `benefits`, `socialInsurance`, `attributes`, `occupations` | Benefits offered, insurance benefits, all job tags and occupations. |
| 🔗 `jobUrl`, `originalApplyUrl`, `viewJobLink`, `companyOverviewLink`, `applyType`, `jobSourceName` | Job link, apply link, relative link, company page, apply method and source name. |
| 📄 `jobDescription`, `jobDescriptionHTML` | Full description as text and as HTML. |
| 📅 `postedAt`, `publishedAt`, `pubDate`, `ageHours`, `expirationDate`, `expired` | Posting dates, age in hours and expiry. |
| 🔥 `urgentlyHiring`, `highVolumeHiring`, `isRepost` | Hiring flags and repost flag. |
| 🧭 `searchQuery`, `searchLocation`, `country`, `matchedSearches`, `scrapedAt`, `language`, `trackingKey` | Which search found the job, country, language and collection time. |

Fields Indeed does not show for a job are empty. Some fields depend on the options you choose, for example company details and description formats.

### What can you do with the data from Indeed?

**🎯 Salary benchmarking**

1. Add your job titles to `urls` and your cities to `locations`.
2. Turn on `requireSalary` and set `minSalary` to compare yearly pay.
3. Export the salary columns to Excel and compare ranges.

**💼 Recruiting and competitor hiring tracking**

1. Put competitor names in `includeCompanies`.
2. Set `postedWithinDays` to 7 and `sortBy` to `date`.
3. Schedule the run weekly and review new postings and hiring trends.

**📊 Job market research and skills demand**

1. Search a role in several `country` values.
2. Keep `outputFields` to `title`, `skills`, `seniority` and `salaryAnnualMin`.
3. Count skills and levels to study labor market analysis questions.

**🤖 Job data for AI**

1. Leave `includeDescriptionText` on.
2. Use `workplaceTypes` to focus on remote jobs.
3. Feed the job posting data into your own dataset or model.

### How do I use Indeed Job Scraper?

1. Open **Indeed Job Scraper** on Apify and click **Try for free**.
2. Add Indeed search links or job titles to **Indeed links or job searches** (`urls`).
3. Add `locations` and choose a `country` if you typed job titles.
4. Set **Max jobs** (`count`) and any filters such as `postedWithinDays` or `workplaceTypes`.
5. Click **Start** and wait for the run to finish.
6. Open the **Output** or **Dataset** tab and export JSON, CSV or Excel.

### How much does it cost to scrape Indeed?

Indeed Job Scraper uses pay-per-event pricing: you pay for each job saved to the dataset, and platform usage is billed in addition.

| Plan | Price per job | Per 1,000 jobs |
|---|---|---|
| 🆓 Free | $0.004 | $4.00 |
| 🥉 Bronze | $0.0036 | $3.60 |
| 🥈 Silver | $0.0032 | $3.20 |
| 🥇 Gold, Platinum and Diamond | $0.0028 | $2.80 |

Each run also pays one start event of $0.00005 per GB of memory, minimum one. The default memory is 1,024 MB (1 GB), so a run pays 1 start event = $0.00005.

**Example:** 500 jobs on the Free plan cost 500 x $0.004 = $2.00, plus the $0.00005 start event.

#### Is scraping Indeed free?

Indeed Job Scraper is not free: you pay per saved job at the rates above, and the table shows each plan's price. You can set a maximum spend per run on Apify, and the run stops cleanly when the limit is reached. Set **Max jobs** to control the size of a test run.

#### How much does Indeed Job Scraper cost per 1,000 results?

1,000 jobs cost $4.00 on the Free plan, $3.60 on Bronze, $3.20 on Silver, and $2.80 on Gold, Platinum and Diamond. Platform usage is billed in addition, and each run adds a $0.00005 start event. Only jobs saved to the dataset are counted for the per-job price.

### Input

Only `urls` is required. It takes Indeed search links, company page links or plain job phrases, and you can mix them. Links keep their keywords, place, radius, sort, posted-date and job-type settings. Single job pages are not supported; use a search link instead.

| Field | Type | Required | Description | Default / example |
|---|---|---|---|---|
| `urls` | array | Yes | Indeed search links (any country site), company page links, or job titles. | `["data analyst"]` |
| `queries` | array | No | Extra job titles; each is combined with every location. | `[]` |
| `locations` | array | No | City, state, region or postal code. Empty searches the whole country. | `[]` |
| `country` | string | No | Indeed country site used for phrases (62 countries). | `us` |
| `radiusKm` | integer | No | Distance around each location, 0 to 2000 km. | `25` |
| `postedWithinDays` | integer | No | Only jobs posted in the last N days. | none |
| `postedWithinHours` | integer | No | Only jobs from the last N hours; wins over days. | none |
| `sortBy` | string | No | `relevance` or `date`. | `relevance` |
| `count` | integer | No | Maximum jobs to save in total; empty collects everything. | prefill `10` |
| `deepSearch` | boolean | No | Reach more jobs on big searches. | `true` |
| `minSalary`, `maxSalary` | number | No | Yearly pay bounds in local currency; jobs without pay are skipped. | none |
| `requireSalary` | boolean | No | Keep only jobs that show pay. | `false` |
| `jobTypes` | array | No | For example Full-time, Contract, Internship. | `[]` |
| `workplaceTypes` | array | No | `remote`, `hybrid`, `onsite`. | `[]` |
| `seniority` | array | No | Entry level, Mid-level, Senior level. | `[]` |
| `applyType` | string | No | `any`, `indeed_apply` or `external`. | `any` |
| `titleIncludes`, `titleExcludes` | array | No | Keep or drop jobs by words in the title. | `[]` |
| `descriptionIncludes`, `descriptionExcludes` | array | No | Keep or drop jobs by words in the description. | `[]` |
| `includeCompanies`, `excludeCompanies` | array | No | Keep or drop jobs by company name. | `[]` |
| `includeDescriptionText`, `includeDescriptionHtml` | boolean | No | Include the description as text or HTML. | `true` |
| `includeCompanyDetails` | boolean | No | Include company profile data. | `true` |
| `fetchFullDetails` | boolean | No | Fill fields that are empty in the first result, such as the repost flag. | `true` |
| `salaryFromDescription` | boolean | No | Read a clearly stated pay range from the text when no structured pay exists. | `true` |
| `outputFields` | array | No | Top-level field names to keep. Empty keeps all. | `[]` |
| `concurrency` | integer | No | Parallel connections, 1 to 8. | `4` |
| `maxRetries` | integer | No | Retries per failed request, 0 to 10. | `3` |
| `timeoutSec` | integer | No | Seconds to wait for each response, 5 to 300. | `45` |
| `maxScanned` | integer | No | Safety stop on jobs examined, including filtered-out ones. | `200000` |
| `apiKey` | string | No | Optional secret value; leave empty unless support gave you one. | none |
| `proxyConfiguration` | object | No | Optional connection settings. | default |

```json
{
  "urls": [
    "https://www.indeed.com/jobs?q=registered+nurse&l=Austin%2C+TX&fromage=7",
    "data analyst"
  ],
  "locations": ["Austin, TX"],
  "country": "us",
  "radiusKm": 25,
  "postedWithinDays": 7,
  "sortBy": "date",
  "count": 10,
  "workplaceTypes": ["remote", "hybrid"],
  "requireSalary": true,
  "includeDescriptionText": true
}
```

### Output

Each job is one row in the Apify Dataset, saved as soon as it is ready. The Output tab has separate tables: overview, salary, company, location, job details, benefits (one row per benefit), description, apply links and search info. Export JSON, CSV, Excel, XML or HTML from the Dataset tab or through the API. Values below are fake examples.

```json
{
  "id": "abc123example",
  "title": "Data Analyst",
  "normalizedTitle": "data analyst",
  "companyName": "Example Company",
  "formattedLocation": "Austin, TX",
  "location": {
    "city": "Austin",
    "state": "Texas",
    "countryName": "United States",
    "postalCode": "00000",
    "latitude": 30.0,
    "longitude": -97.0
  },
  "salary": { "min": 70000, "max": 90000, "type": "YEAR", "currencyCode": "USD" },
  "salaryText": "70,000-90,000 USD per year",
  "salaryAnnualMin": 70000,
  "salaryAnnualMax": 90000,
  "salarySource": "listed",
  "workplaceType": "hybrid",
  "jobTypes": ["Full-time"],
  "seniority": "Mid-level",
  "skills": ["SQL", "Excel"],
  "benefits": [{ "key": "example1", "label": "Health insurance" }],
  "applyType": "external",
  "jobUrl": "https://www.indeed.com/viewjob?jk=abc123example",
  "originalApplyUrl": "https://example.com/apply",
  "companyOverviewLink": "https://www.indeed.com/cmp/example-company",
  "companyDetails": {
    "name": "Example Company",
    "industry": "Information Technology",
    "employeeRange": "1,001 to 5,000",
    "websiteUrl": "https://example.com"
  },
  "postedAt": "2026-10-10T08:00:00Z",
  "ageHours": 48.0,
  "isRepost": false,
  "searchQuery": "data analyst",
  "searchLocation": "Austin, TX",
  "country": "US",
  "matchedSearches": ["'data analyst' @ Austin, TX"],
  "scrapedAt": "2026-10-12T08:00:00Z"
}
```

A summary record named `SUMMARY` is saved in the key-value store with counts such as jobs saved, jobs billed, searches, rows examined, filtered-out jobs, pages, failed pages, notes and duration.

#### Notes and limitations

- Fields Indeed does not publish for a job come back empty or as empty lists.
- Pay is read from the posting text only when `salaryFromDescription` is on; those rows say `salarySource` is `description`.
- `minSalary` and `maxSalary` skip jobs without pay.
- `count` limits the total jobs saved across all searches.
- Single job pages are not accepted as input.
- Results can differ from what you see in a browser, because location, date and country choices change what Indeed returns.
- Very large searches may not return every job; narrow the location or phrase to reach more.

### FAQ

#### Is it legal to scrape Indeed?

Indeed Job Scraper collects publicly available job listings that any visitor can see. Legality depends on your country, your use of the data and the site's terms; GDPR and CCPA may apply. This is not legal advice; read [Apify's guide to scraping legality](https://blog.apify.com/is-web-scraping-legal/) and ask a lawyer if unsure.

#### Do I need an Indeed account, cookies or an API key to scrape Indeed?

No. Indeed Job Scraper needs no Indeed login and no cookies, so you can scrape Indeed without login. The optional access key field is for a value provided by support and can stay empty. You only need an Apify account to run the Actor, start it from the Console and download your results.

#### How many Indeed jobs can I scrape per run?

Set **Max jobs** (`count`) to the number you need, or leave it empty to collect everything the searches return. A safety stop, `maxScanned`, ends the run after 200,000 jobs examined by default. You can also set a maximum spend per run on Apify to control cost.

#### Can I export Indeed jobs to CSV or Excel?

Yes. Every run saves a dataset that you can export from the Dataset tab as JSON, CSV, Excel, XML or HTML, so you can export Indeed jobs to CSV or Excel, or open them in Google Sheets. The same data is available through the API, and `outputFields` lets you keep only the columns you want.

#### Can I schedule runs, use webhooks or integrations?

Yes. Apify lets you schedule Indeed Job Scraper to run daily or weekly for job monitoring, trigger webhooks when a run finishes, and connect results to tools such as Make, n8n or Zapier. Combine `postedWithinDays` with a schedule to collect only recent postings and track hiring trends.

#### Can I use Indeed Job Scraper with the Apify API or an MCP server?

Yes. You can start runs, read the dataset and manage schedules with the Apify API, and connect the Actor to AI tools through an MCP server. The Indeed jobs API alternative works the same way as any Apify Actor; see the [Apify API documentation](https://docs.apify.com/api/v2) for details.

#### Why am I getting fewer jobs than expected?

Filters remove jobs before they are saved, and the run log lists how many were filtered out. Check `requireSalary`, `minSalary`, `workplaceTypes` and the title or description filters, widen the `postedWithinDays` window, and keep `deepSearch` on. Very large searches may need a narrower location or phrase.

#### Indeed Job Scraper not working?

First check your input: `urls` needs at least one Indeed search link or job phrase, and single job pages are not supported. Then read the run log for the message. If the problem continues, open the **Issues** tab of this Actor with your run link and input, and the maintainers will look into it.

### Related Actors

| Actor | Use it to |
|---|---|
| 🔗 [Workday Jobs Scraper](https://apify.com/data_minds/workday-jobs-scraper) | Turn Workday careers portals into a clean job dataset with titles, companies, locations, salaries, skills and descriptions. |
| 🔗 [Website Lead Intelligence](https://apify.com/data_minds/website-lead-intelligence-find-the-right-person-verified) | Turn company website addresses into scored leads with emails and named decision-makers, for example for employers found in your Indeed data. |

### Support and disclaimer

Found a bug or need a feature? Open an issue in the **Issues** tab. For custom solutions, integrations or questions, contact hello.dataminds@gmail.com. Indeed Job Scraper is independent and not affiliated with [Indeed](https://www.indeed.com); trademarks belong to their owners. It collects publicly available data, and you are responsible for complying with applicable laws and the site's terms.

*Last updated: 2026-10-17*

# Actor input Schema

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

Add one or more Indeed search links (any country site) or company page links, or just type a job title / keyword. Several entries run in one go and duplicates are removed. Search links keep their keywords, place, radius, sort, posted-date and job-type settings.

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

Optional extra job titles or keywords. Each one is combined with every location below.

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

City, state, region or postal code, combined with every phrase. Leave empty to search the whole country.

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

Indeed country site used for phrases (links bring their own country).

## `radiusKm` (type: `integer`):

Distance around each location. Default 25 km.

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

Only jobs posted in the last N days. Any whole number works. Leave empty for no date filter.

## `postedWithinHours` (type: `integer`):

Hour-level freshness, e.g. 6 for the last six hours. Wins over days when both are set.

## `sortBy` (type: `string`):

How Indeed orders the results.

## `count` (type: `integer`):

Maximum number of jobs to save in total. Leave empty to collect everything.

## `deepSearch` (type: `boolean`):

Reach more jobs on big searches. Turn it on when a single search returns fewer jobs than you expect.

## `minSalary` (type: `number`):

Keep jobs paying at least this much per year in the local currency (hourly, weekly and monthly pay is converted). Jobs without pay are skipped.

## `maxSalary` (type: `number`):

Keep jobs whose pay starts at or below this yearly amount.

## `requireSalary` (type: `boolean`):

Keep only jobs that show a pay figure, listed or stated in the text.

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

For example Full-time, Part-time, Contract, Internship, Temporary. A job matches if it has any of them.

## `workplaceTypes` (type: `array`):

Keep remote, hybrid or on-site jobs.

## `seniority` (type: `array`):

Keep jobs tagged with these levels.

## `applyType` (type: `string`):

Filter by where candidates apply.

## `titleIncludes` (type: `array`):

Keep jobs whose title has any of these words.

## `titleExcludes` (type: `array`):

Drop jobs whose title has any of these words.

## `descriptionIncludes` (type: `array`):

Keep jobs whose description has any of these words.

## `descriptionExcludes` (type: `array`):

Drop jobs whose description has any of these words.

## `includeCompanies` (type: `array`):

Keep jobs from companies whose name contains any of these.

## `excludeCompanies` (type: `array`):

Drop jobs from companies whose name contains any of these.

## `includeDescriptionText` (type: `boolean`):

Include the plain-text job description.

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

Include the formatted HTML job description.

## `includeCompanyDetails` (type: `boolean`):

Include company profile data such as size, revenue, industry and logo when available.

## `fetchFullDetails` (type: `boolean`):

Fills in fields that are empty in the first result, such as the repost flag.

## `salaryFromDescription` (type: `boolean`):

When Indeed has no structured pay, read a clearly stated pay range from the posting. Such rows say salarySource is description.

## `outputFields` (type: `array`):

Top-level field names to keep, for example title, companyName, salary. Leave empty for all fields.

## `concurrency` (type: `integer`):

How many requests run at once (1-8).

## `maxRetries` (type: `integer`):

How many times a failed request is retried.

## `timeoutSec` (type: `integer`):

Seconds to wait for each response.

## `maxScanned` (type: `integer`):

Safety stop: jobs examined before giving up, including those removed by filters.

## `apiKey` (type: `string`):

Optional. Leave empty unless support has given you a value.

## `proxyConfiguration` (type: `object`):

Optional connection settings. Leave the default unless you need specific settings.

## Actor input object example

```json
{
  "urls": [
    "https://www.indeed.com/jobs?q=registered+nurse&l=Austin%2C+TX&fromage=7",
    "data analyst"
  ],
  "queries": [],
  "locations": [],
  "country": "us",
  "radiusKm": 25,
  "sortBy": "relevance",
  "count": 10,
  "deepSearch": true,
  "requireSalary": false,
  "jobTypes": [],
  "workplaceTypes": [],
  "seniority": [],
  "applyType": "any",
  "titleIncludes": [],
  "titleExcludes": [],
  "descriptionIncludes": [],
  "descriptionExcludes": [],
  "includeCompanies": [],
  "excludeCompanies": [],
  "includeDescriptionText": true,
  "includeDescriptionHtml": true,
  "includeCompanyDetails": true,
  "fetchFullDetails": true,
  "salaryFromDescription": true,
  "outputFields": [],
  "concurrency": 4,
  "maxRetries": 3,
  "timeoutSec": 45,
  "maxScanned": 200000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

One line per job.

## `salary` (type: `string`):

Pay range, yearly and hourly equivalents.

## `company` (type: `string`):

Employer profile data.

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

City, state, country and coordinates.

## `details` (type: `string`):

Types, schedule, experience, education and skills.

## `benefits` (type: `string`):

One row per benefit offered.

## `description` (type: `string`):

Full job description text.

## `apply` (type: `string`):

Apply and job links.

## `search` (type: `string`):

Which search found each job.

## `summaryFile` (type: `string`):

SUMMARY file with the counts of this run.

# 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 = {
    "urls": [
        "https://www.indeed.com/jobs?q=registered+nurse&l=Austin%2C+TX&fromage=7",
        "data analyst"
    ],
    "count": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_minds/indeed-job-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 = {
    "urls": [
        "https://www.indeed.com/jobs?q=registered+nurse&l=Austin%2C+TX&fromage=7",
        "data analyst",
    ],
    "count": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_minds/indeed-job-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 '{
  "urls": [
    "https://www.indeed.com/jobs?q=registered+nurse&l=Austin%2C+TX&fromage=7",
    "data analyst"
  ],
  "count": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_minds/indeed-job-scraper --silent --output-dataset

```

## MCP server setup

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