# Indeed Job Listing (`truefetch/indeed-job-listing`) Actor

Indeed Job Listing is an Indeed job listings API for 62 countries that returns 41 normalized job, salary, company, application, and public contact fields without login.

- **URL**: https://apify.com/truefetch/indeed-job-listing.md
- **Developed by:** [TrueFetch](https://apify.com/truefetch) (community)
- **Categories:** Jobs, Automation, Integrations
- **Features:** Limited permissions
- **Stats:** 380 total users, 4 monthly users, 100.0% runs succeeded, 14 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.81 / 1,000 results

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 Job Listing

**Indeed Job Listing is an Indeed job listings API that searches Indeed across 62 countries and returns 41 normalized job, salary, company, application, and public contact fields without login, built for developers and data teams.**

- **62 supported Indeed country markets.**
- **9 public inputs with 3 required.**
- **41 normalized Dataset fields.**
- **No Indeed credential input.**

[**Run a one-result test**](https://apify.com/truefetch/indeed-job-listing) · [**View API**](https://apify.com/truefetch/indeed-job-listing/api)

Set `max_results` to `1`; the smallest published-result test bills a minimum $0.01000 Actor Start plus one $0.00375 Result, or $0.01375 on FREE.

### What does Indeed Job Listing do?

Indeed Job Listing is a TrueFetch Actor and Indeed jobs API for collecting public vacancy data from one selected country at a time. Give it a keyword, country, and result limit; optionally add a location, distance, work-mode or job-type filter, posting-time filter, or salary currency. Each accepted listing is delivered through one stable Dataset structure.

Indeed's [official search guidance](https://www.indeed.com/help/job-seekers/articles/204488950-improving-your-job-searches-tips-and-help) confirms that keywords, locations, job types, remote settings, and date filters influence its search results.

The Actor is useful when a team needs source-attributed job data without maintaining a separate integration for every Indeed market. A result can include the listing URL, employer application URL, role description, location, work mode, dates, salary, company profile details, and public contact signals when Indeed or the employer publishes them.

Indeed Job Listing is independent of Indeed and is not an official Indeed API. It does not submit applications, collect resumes, rank candidates, access private accounts, or guarantee that every optional field is available. Search relevance and listing availability remain source-dependent.

### How do I run Indeed Job Listing?

1. Open [Indeed Job Listing on Apify](https://apify.com/truefetch/indeed-job-listing).
2. Enter the required `keyword`, `country`, and `max_results` values.
3. Add only the optional filters that match the search you actually want.
4. Start with one result, inspect the Dataset item, and then increase volume.

This README uses one scenario throughout: search for one remote, full-time Data Engineer role in Germany, centered on Berlin, and convert usable salary values to EUR.

```json
{
  "keyword": "Data Engineer",
  "country": "Germany",
  "max_results": 1,
  "remote_only": true,
  "job_type": "fulltime",
  "location": "Berlin",
  "distance": 50,
  "currency": "EUR"
}
```

`max_results` is the maximum number of Indeed jobs published by this single-platform run. It is not a promise that the source will have that many relevant, accessible listings.

### What data does Indeed Job Listing return?

The default Dataset exposes **41 fields**. Values that Indeed or an employer does not publish remain empty rather than being inferred.

| Field group | Fields |
| --- | --- |
| Processing | `processor`, `processed_at` |
| Source and application | `platform`, `platform_url`, `official_url`, `easy_apply` |
| Role details | `title`, `description`, `job_type`, `job_level`, `job_function`, `listing_type`, `skills`, `experience_range` |
| Location and work mode | `location`, `is_remote`, `work_mode` |
| Dates and volume | `posted_date`, `valid_through`, `applicant_count`, `vacancy_count` |
| Compensation | `salary_minimum`, `salary_maximum`, `salary_currency`, `salary_period` |
| Company | `company_name`, `company_type`, `company_founded`, `company_industry`, `company_url`, `company_website`, `company_logo`, `company_addresses`, `company_revenue`, `company_description`, `company_rating`, `employee_count`, `review_count` |
| Public contacts | `emails`, `phones`, `social_links` |

This abbreviated, illustrative item uses the same Berlin Data Engineer scenario:

```json
{
  "platform": "Indeed",
  "platform_url": "https://de.indeed.com/viewjob?jk=example123",
  "official_url": "https://careers.example.com/jobs/data-engineer",
  "title": "Data Engineer",
  "company_name": "Example Data GmbH",
  "location": {
    "raw": "Berlin, Germany",
    "locality": "Berlin",
    "region": "Berlin",
    "country": "Germany",
    "countryCode": "DE"
  },
  "is_remote": true,
  "job_type": "fulltime",
  "salary_minimum": 70000,
  "salary_maximum": 90000,
  "salary_currency": "EUR",
  "emails": [],
  "phones": [],
  "processor": "https://apify.com/truefetch/indeed-job-listing",
  "processed_at": "2026-07-21T12:00:00.000Z"
}
```

See the live [Output schema](https://apify.com/truefetch/indeed-job-listing/output-schema) for field types and examples.

### What inputs can I configure?

Indeed Job Listing exposes 9 public inputs in schema order, with 3 required and the rest optional.

| Parameter | Type | Required | Description | Example |
| --- | --- | :---: | --- | --- |
| `max_results` | integer | Yes | Maximum number of normalized Indeed listings to return. | `5` |
| `keyword` | string | Yes | Job title, skill, or company query for Indeed. | `Nurse` |
| `country` | select | Yes | Country for the Indeed regional search. | `Australia` |
| `location` | string | No | City, area, or postal code for Indeed. | — |
| `posted_since` | date | No | Earliest posting date where Indeed accepts the filter. | — |
| `remote_only` | boolean | No | Return remote roles where Indeed accepts the filter. | — |
| `distance` | integer | No | Radius in miles around the location sent to Indeed. | — |
| `job_type` | select | No | Employment type filter accepted by Indeed. | — |
| `currency` | select | No | Target currency for converting salary amounts returned by Indeed. | — |

`country` has 62 accepted values; `job_type` has 5 accepted values; `currency` has 166 accepted values. Optional fields have no request effect when omitted; use the [live Input schema](https://apify.com/truefetch/indeed-job-listing/input-schema) for types and accepted values.

### What platforms and markets does Indeed Job Listing cover?

Indeed Job Listing covers one selected country per run, with optional location and source-supported filters.

The country selector contains 62 values: Argentina, Australia, Austria, Bahrain, Belgium, Brazil, Canada, Chile, China, Colombia, Costa Rica, Czechia, 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, Vietnam.

Coverage states where the Actor can form a request; live inventory, relevance, language, and optional field availability still come from the selected public source.

### Why use Indeed Job Listing?

| Capability | Practical benefit |
| --- | --- |
| One Indeed-focused request | Keep the workflow narrow when a multi-board search is unnecessary. |
| One normalized 41-field schema | Load repeat runs into analytics, databases, alerts, or AI tools without remapping columns. |
| Source and official URLs | Review the Indeed listing and employer destination separately when both exist. |
| Optional country-wide or local search | Compare a national market or focus on a city and radius without inventing a location. |
| Salary conversion | Normalize populated numeric salaries into a chosen currency when exchange-rate data is available. |
| Low-volume first test | Verify relevance and field coverage before increasing result volume. |

The main trade-off is source depth versus breadth: this Actor focuses on Indeed and preserves its source behavior. Choose a multi-platform Actor if coverage across several job boards matters more than a single-source workflow.

### Who is Indeed Job Listing for?

| Team | Typical use |
| --- | --- |
| Developers | Add Indeed vacancy search to a product, internal tool, or alerting workflow. |
| Data engineers | Collect repeatable, source-attributed records for a warehouse or pipeline. |
| Labor-market researchers | Compare role demand, work mode, and populated salary ranges across countries. |
| Recruiting operations | Monitor current openings by title, employer, and location. |
| Sales intelligence teams | Treat public hiring activity as one optional company signal. |

The Actor is a poor fit for candidate sourcing, resume extraction, automated applications, guaranteed salary coverage, or historical vacancy archives. Those goals require different data and user permissions.

### How can I use Indeed Job Listing through the API or MCP?

The public Actor ID is **`dJWj757pVx5untEuq`**; the name form **`truefetch/indeed-job-listing`** is also accepted. This synchronous HTTP request runs the one-result Berlin scenario and returns Dataset items directly:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/dJWj757pVx5untEuq/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "keyword": "Data Engineer",
    "country": "Germany",
    "max_results": 1,
    "remote_only": true,
    "job_type": "fulltime",
    "location": "Berlin",
    "distance": 50,
    "currency": "EUR"
  }'
```

For MCP clients, this Streamable HTTP configuration follows the current [Apify MCP documentation](https://docs.apify.com/integrations/mcp):

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=truefetch/indeed-job-listing",
      "headers": {
        "Authorization": "Bearer <APIFY_TOKEN>"
      }
    }
  }
}
```

After connecting, ask for the same Berlin Data Engineer search. Use the [API page](https://apify.com/truefetch/indeed-job-listing/api) for asynchronous runs, SDK snippets, and OpenAPI details.

### How much does Indeed Job Listing cost?

Indeed Job Listing costs $0.00375 per Result on FREE plus $0.01000 per minimum Actor Start event, so the smallest one-result test totals $0.01375.

| Apify tier | Actor Start | Per Result |
| --- | ---: | ---: |
| FREE | $0.01000 | $0.00375 |
| BRONZE | $0.01000 | $0.00338 |
| SILVER | $0.01000 | $0.00300 |
| GOLD | $0.01000 | $0.00281 |
| PLATINUM | $0.01000 | $0.00281 |
| DIAMOND | $0.01000 | $0.00281 |

Result is billed once for each item written to the default Dataset. Actor Start event count depends on selected memory, with a minimum of one event.

Smallest useful test: $0.01000 + 1 × $0.00375 = **$0.01375** on FREE when one item is published. A zero-result run can still incur Actor Start. [Prices can change; check live pricing](https://apify.com/truefetch/indeed-job-listing/pricing) before scheduling volume.

### How does Indeed Job Listing compare with alternatives?

| Decision factor | Indeed Job Listing | Multi-board Job Search | Manual or custom integration |
| --- | --- | --- | --- |
| Source scope | Indeed only | Several compatible job boards | Team-defined |
| Output | Normalized 41-field job record | Same normalized family across sources | Whatever the team designs |
| Best first test | One keyword, country, and result | One platform among many | Requires the integration to be ready |
| Source-specific focus | Strong | Balanced against cross-board consistency | Potentially deepest with ongoing ownership |
| Maintenance | Managed Actor | Managed Actor | Team owns failures, changes, and normalization |

Choose Indeed Job Listing when Indeed is the required source and a narrow contract is valuable. Choose [Job Search](https://apify.com/truefetch/job-search) when several boards or market-specific alternatives should be searched through one request.

### What are the limits and troubleshooting steps?

| Symptom or limit | Explanation | Next step |
| --- | --- | --- |
| Fewer jobs than requested | `max_results` is a cap, while availability and relevance come from Indeed. | Broaden the keyword, location, or distance and test again. |
| Remote or job type seems ignored | A supplied `posted_since` filter takes precedence in the Indeed request. | Use recency alone, or omit it and use remote/job type. |
| Location is rejected | The location must normalize within the selected country. | Use a clear city, region, or postcode that matches the country. |
| Salary remains empty | Many employers do not publish numeric compensation. | Keep salary nullable and do not infer missing values. |
| Salary is not converted | Conversion needs numeric salary, a source currency, and available exchange-rate data. | Compare only populated converted records. |
| Official URL is empty | Some listings do not expose a separate employer application destination. | Retain `platform_url` as the source record. |
| No results are published | The source may have no accessible relevant listing for the request. | Retry the smallest reproducible input with one broad keyword and `max_results: 1`. |

When opening an [Apify Issue](https://apify.com/truefetch/indeed-job-listing/issues), include the run URL, country, keyword, and expected behavior. Never include an API token or private data.

### Frequently asked questions

#### Can I use indeed job listings api without indeed publisher access?

Yes. Indeed Job Listing runs on Apify without asking for a source-site publisher credential; an Apify account and token are still required for authenticated API or MCP calls.

#### How do I get indeed jobs by keyword and country?

Set `keyword`, `country`, and `max_results`, then add only the optional fields present in this Actor's input table. Results are capped by source availability and relevance.

#### Does Indeed Job Listing require a source-site login?

No source-site username, password, cookie, or API key appears in the public input. The Actor collects accessible public listings independently of the source.

#### Why are salary, company, applicant, or contact values empty?

Those values are nullable because public listings do not expose the same detail. Empty means unavailable from the collected source, not zero or false.

#### Is there a free jobs API?

Apify accounts include platform usage under the current Apify plan, while this Actor bills Actor Start and Result events. Use the one-result calculation in Pricing to evaluate the smallest test.

#### Can I schedule runs to monitor Indeed job listings over time?

Yes. Test a small input first, then use Apify schedules and webhooks. Preserve `processed_at` and source URLs because listings can change, close, or reappear.

#### How is billing counted for Indeed Job Listing?

Billing uses Actor Start events and one Result event per default Dataset item. A requested result limit is a cap, not a prepaid bundle or a guarantee of source inventory.

### Related TrueFetch Actors

Indeed Job Listing has three nearby TrueFetch alternatives, each for a different source decision.

- [Job Search](https://apify.com/truefetch/job-search) — Use it when several compatible job boards should share one request.
- [LinkedIn Job Listing](https://apify.com/truefetch/linkedin-job-listing) — Use it when LinkedIn is the required source.
- [Glassdoor Job Listing](https://apify.com/truefetch/glassdoor-job-listing) — Use it for Glassdoor salary and rating context.

### Support

Use the [Store page](https://apify.com/truefetch/indeed-job-listing) for the run interface, the [API page](https://apify.com/truefetch/indeed-job-listing/api) for generated clients, [Issues](https://apify.com/truefetch/indeed-job-listing/issues) for reproducible bugs, and the [TrueFetch community](https://t.me/TrueFetch) for usage questions.

[**Run a one-result test**](https://apify.com/truefetch/indeed-job-listing) · [**View API**](https://apify.com/truefetch/indeed-job-listing/api)

**Last Updated:** August 10, 2026

# Actor input Schema

## `max_results` (type: `integer`):

Maximum Indeed job rows to return

## `keyword` (type: `string`):

Job title, skill, or company query to search on Indeed

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

Country-specific Indeed market used for the search

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

Optional city, area, or postal code for the Indeed search

## `posted_since` (type: `string`):

Optional earliest posting date for the Indeed search

## `remote_only` (type: `boolean`):

Optional remote-only filter for the Indeed search

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

Optional search radius in miles around the Indeed location

## `job_type` (type: `string`):

Optional employment type for the Indeed search; `all` disables this filter

## `currency` (type: `string`):

Optional target currency for normalized Indeed salary amounts

## Actor input object example

```json
{
  "max_results": 5,
  "keyword": "Nurse",
  "country": "Australia"
}
```

# Actor output Schema

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

Default dataset overview of normalized job listings and company fields collected by All Jobs Scraper.

# 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 = {
    "max_results": 5,
    "keyword": "Nurse",
    "country": "Australia"
};

// Run the Actor and wait for it to finish
const run = await client.actor("truefetch/indeed-job-listing").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 = {
    "max_results": 5,
    "keyword": "Nurse",
    "country": "Australia",
}

# Run the Actor and wait for it to finish
run = client.actor("truefetch/indeed-job-listing").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 '{
  "max_results": 5,
  "keyword": "Nurse",
  "country": "Australia"
}' |
apify call truefetch/indeed-job-listing --silent --output-dataset

```

## MCP server setup

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

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/dJWj757pVx5untEuq/builds/WuCK1yVVSAJRFBc28/openapi.json
