# Indeed Company API | Ratings, Reviews, Salaries Data (`johnvc/indeed-company-api`) Actor

Indeed company profiles as clean, structured JSON. Look up employers by name, browse by industry and state, crawl a company directory, or fetch exact company URLs. Get overall rating, review and salary counts, work happiness, size, revenue, headquarters, benefits, and open-job counts. MCP-ready.

- **URL**: https://apify.com/johnvc/indeed-company-api.md
- **Developed by:** [John](https://apify.com/johnvc) (community)
- **Categories:** Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.57 / 1,000 company returneds

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Indeed Company API | Ratings, Reviews, Salaries Data

Find employers by industry and location, look a company up by name, then pull its full
profile, its employee reviews, its salaries by job title, and its Q\&A back as typed JSON.
One Actor covers both discovery and depth: build a list of companies in a sector, or point
it at the names or URLs you already hold, and get structured company data with stable field
names.

This reads Indeed's public company pages live at request time, so every row reflects what the
profile says right now, not what an index remembered last week. You pay per record, with no
start fee and no minimum, and an empty run is free.

Most Indeed company tools only scrape reviews. This one returns the company itself (who they
are, how they are rated, how big they are, who runs them, and how hard they are hiring now)
and then, when you switch them on, the reviews, salaries, and questions underneath.

### What this API returns

Four ways in, four kinds of row out. Every row is typed, every count comes with its link, and
every row carries a `scrapedAt` timestamp and a `result_type` you can filter on.

#### Four ways to find companies

- **Keyword** (default). Give it company names and get their profiles back. A name can match
  more than one employer, which is often what you want, and each match carries a
  `matchConfidence` score. Set `resolveExact` to collapse a name to its single best match.
- **URL**. Pass exact Indeed company page URLs, bare company slugs, or company sub-page URLs,
  and get one company each. This is the fastest, cheapest path when you already know who you
  want.
- **Industry**. Pick an industry from the list and one or more US states or metro areas, and
  get the employers in it. This is the mode competing tools do not offer, and it is how you
  build a list rather than look one company up.
- **Directory**. Point it at an Indeed browse-companies page and collect every company it
  lists.

Keyword and URL modes can also target other Indeed country sites through the `country` input.
Industry and directory browsing are United States only.

#### The company profile (`result_type: "company"`)

A single profile request returns everything below. The CEO, the sub-scores, the ratings by
year, the happiness breakdown, similar companies, top job titles, and locations are all read
from that one request, so a full profile row is one request and one charge.

| Field group | Fields |
|---|---|
| Identity | `companyName`, `companyId`, `companyUrl`, `employerId`, `website`, `logoUrl` |
| Firmographics | `industry`, `sectors`, `companySize`, `companySizeCode`, `employeesMin`, `employeesMax`, `revenue`, `revenueCode`, `headquarters`, `countryCode`, `foundedYear` |
| Leadership | `ceoName`, `ceoApproval` (percent), `ceoPhotoUrl` |
| Ratings | `overallRating` and the five sub-scores `ratingWorkLifeBalance`, `ratingCompensationBenefits`, `ratingJobSecurityAdvancement`, `ratingManagement`, `ratingCulture`, plus `ratingsByYear` (the overall rating for each recent year) |
| Work happiness | `workHappiness`, `happinessScore`, `happinessGrade`, `happinessResponses` (how many people answered) |
| Depth counts | `reviewsCount`, `salariesCount`, `questionsCount`, `jobsCount`, each with its link (`reviewsUrl`, `salariesUrl`, `questionsUrl`, `jobsUrl`) |
| Hiring | `jobsCount`, `jobLocations`, `topJobTitles`, `topSalaries` |
| Related and detail | `similarCompanies` (with ratings and counts), `relatedCompanies`, `locations` (rated offices), `details`, `profileFaq` |
| Brand assets | `headerImageUrl`, `brandColor`, `headerVideoUrl`, `isClaimed` |
| Review and salary rollups (when those pages were fetched) | `ratingDistribution` (1 to 5 stars), `reviewTopics`, `reviewInsightsPros`, `reviewInsightsCons`, `reviewsFoundCount`, `salariesTotalCount`, `salarySatisfactionRatio`, `salarySatisfactionResponses`, `salariesUpdatedAt` |
| Provenance | `result_type`, `profileDetail` (`full` or `listing`), `matchConfidence`, `contentLanguage`, `searchInput`, `sourceInput`, `summary` (a one-line digest for agents), `scrapedAt` |

Discovery rows from industry and directory mode can be returned as lightweight listing rows
instead of full profiles. A listing row is still `result_type: "company"` but with
`profileDetail: "listing"`: it carries the name, id, profile URL, rating, review count,
sector, size band, and deep links, at a fraction of a full profile's cost. You never get both
a listing row and a full profile row for the same company in one run.

**Interviews, photos, and benefits are no longer served by the source.** Indeed removed those
company sub-pages, so `interviewsCount`, `interviewsUrl`, `photosCount`, `photosUrl`,
`benefits`, and `jobCategories` stay in the schema for backward compatibility but are always
empty. Do not build on them.

#### Reviews, salaries, and Q\&A (their own rows, their own toggles)

Switch any of these on and the Actor fetches that entity's pages for each company and returns
them as separate rows, joined back to the company by `companyId`, `companyUrl`, `companyName`,
`employerId`, `sourceInput`, and `scrapedAt`.

| Entity | Turn on with | `result_type` | Dataset view | What each row carries |
|---|---|---|---|---|
| Reviews | `includeReviews` | `review` | Reviews | `reviewId`, `reviewUrl`, `reviewTitle`, `reviewText`, `pros`, `cons`, `overallRating` and the five sub-ratings, `jobTitle`, `normalizedJobTitle`, `location`, `countryCode`, `isCurrentEmployee`, `submittedAt`, `helpfulCount`, `unhelpfulCount`, `employerResponses`, `employerResponseCount` |
| Salaries | `includeSalaries` | `salary` | Salaries | `jobTitle`, `normalizedJobTitle`, `salaryCategory`, `salaryMedian`, `salaryMedianText`, `salaryPeriod`, `salaryCurrency`, `salaryReportsCount`, `salaryUrl` |
| Q\&A | `includeQuestions` | `question` | Questions | `questionId`, `questionText`, `questionUrl`, `askedAt`, `answersCount` |

A dataset view groups columns; it does not filter rows. Every row kind lands in one dataset,
so filter on `result_type` (`company`, `review`, `salary`, `question`, or `error`) to separate
them in code.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `mode` | select | `keyword` | `keyword`, `url`, `industry`, or `directory` |
| `keywords` | array | `["Tesla"]` | Company names to look up, one search each. Keyword mode. Up to 10 |
| `companyUrls` | array | `[]` | Indeed company URLs, bare slugs, or sub-page URLs. URL mode. Up to 100 |
| `industry` | select | `All` | Which industry to browse, matched against the source's own list. Industry mode |
| `states` | array | `[]` | US state names, `United States`, or metro areas. Industry mode. Up to 10 |
| `directoryUrls` | array | `[]` | Indeed browse-companies pages. Directory mode. Up to 10 |
| `maxResultsPerInput` | integer | `25` | Companies to return per name, state, or directory page (up to 1000). Your main cost control. Ignored in URL mode |
| `country` | select | `US` | Which Indeed country site to read for keyword and URL modes |
| `profileDetail` | select | `full` | `full` for a complete profile, `listing` for a lightweight discovery row |
| `resolveExact` | boolean | `false` | Collapse each keyword to its single best-matching employer |
| `uniqueCompaniesOnly` | boolean | `true` | Drop duplicate companies within a run |
| `includeReviews` | boolean | `false` | Also return employee review rows |
| `maxReviewsPerCompany` | integer | `20` | Cap reviews per company (1 to 1000) |
| `reviewsSince` | string | none | Only reviews on or after this `YYYY-MM-DD` date |
| `reviewsAllCountries` | boolean | `false` | Include reviews from every country, not just the site's own |
| `includeSalaries` | boolean | `false` | Also return salary-by-title rows |
| `includeQuestions` | boolean | `false` | Also return Q\&A rows |
| `maxQuestionsPerCompany` | integer | `10` | Cap questions per company (1 to 500) |

### Choosing an industry

Industry mode matches the industry name exactly against Indeed's own list of 141 values and
rejects anything else. The Industry dropdown carries that exact list, so pick from it rather
than typing your own. If you pass an unrecognised value, the run tells you the closest matches
instead of failing silently. Leave it as **All** to browse every industry at once.

States are matched against Indeed's own location list, so a US state name, the whole country,
or a metro area such as `Sacramento, CA` all work, and each entry runs as its own search.

### Example output

A full company row (trimmed), then one row each for a review, a salary, and a question:

```json
{
  "result_type": "company",
  "companyName": "Walmart",
  "companyId": "Walmart",
  "companyUrl": "https://www.indeed.com/cmp/Walmart",
  "employerId": "a1b2c3d4e5",
  "industry": "Retail & Wholesale",
  "sectors": ["Retail & Wholesale"],
  "companySize": "10,000+",
  "companySizeCode": "ERv1_10000_PLUS",
  "employeesMin": 10000,
  "revenue": "more than $10B",
  "revenueCode": "RRv1_OVER_10B",
  "headquarters": "Bentonville, AR",
  "foundedYear": 1962,
  "ceoName": "John Furner",
  "ceoApproval": 36,
  "overallRating": 3.4,
  "ratingWorkLifeBalance": 3.3,
  "ratingCompensationBenefits": 3.2,
  "ratingsByYear": [{ "year": 2025, "rating": 3.4 }, { "year": 2024, "rating": 3.4 }],
  "happinessScore": 64,
  "happinessGrade": "B-",
  "reviewsCount": 283032,
  "salariesCount": 90500,
  "questionsCount": 6158,
  "jobsCount": 44612,
  "similarCompanies": [{ "name": "Sam's Club", "rating": 3.5, "reviewsCount": 22800 }],
  "isClaimed": true,
  "profileDetail": "full",
  "scrapedAt": "2026-09-08T16:00:00Z"
}
```

```json
{
  "result_type": "review",
  "companyId": "Walmart",
  "companyName": "Walmart",
  "reviewId": "9f2c1a77b0e34a10",
  "reviewTitle": "Fast paced but fair",
  "overallRating": 4,
  "ratingWorkLifeBalance": 3,
  "jobTitle": "Cashier",
  "location": "Dallas, TX",
  "countryCode": "US",
  "isCurrentEmployee": true,
  "submittedAt": "2026-09-07",
  "helpfulCount": 2,
  "employerResponses": [{ "text": "Thanks for sharing your experience.", "isOfficial": true }],
  "scrapedAt": "2026-09-08T16:00:00Z"
}
```

```json
{
  "result_type": "salary",
  "companyId": "Walmart",
  "jobTitle": "Cashier",
  "salaryMedian": 18.69,
  "salaryMedianText": "$18.69",
  "salaryPeriod": "HOURLY",
  "salaryCurrency": "USD",
  "salaryReportsCount": 12043,
  "salaryCategory": "Retail",
  "scrapedAt": "2026-09-08T16:00:00Z"
}
```

```json
{
  "result_type": "question",
  "companyId": "Walmart",
  "questionId": "1f0a9d3e",
  "questionText": "What is the interview process like at Walmart?",
  "questionUrl": "https://www.indeed.com/cmp/Walmart/faq/1f0a9d3e",
  "askedAt": "2026-09-07T23:22:00Z",
  "answersCount": 37,
  "scrapedAt": "2026-09-08T16:00:00Z"
}
```

### Output views

The dataset ships with seven ready-made views. The four company views read the profile rows;
the three entity views read their own row kind.

- **Company overview** - industry, size, headquarters, rating, reviews, website.
- **Ratings and reviews** - rating next to review, salary, and question counts.
- **Hiring activity** - open jobs and where an employer is hiring.
- **Firmographics** - industry, revenue band, employee count, and related companies.
- **Reviews** - one row per employee review, with rating, job title, location, and date.
- **Salaries** - one row per job title, with median pay, period, and report count.
- **Questions** - one row per question, with its text, date, and answer count.

### Freshness

Every row carries `scrapedAt`, an ISO 8601 timestamp in UTC that marks when the Actor read the
page. Nothing is cached between runs; each run fetches live.

The counts on a profile (`reviewsCount`, `salariesCount`, `questionsCount`, `jobsCount`) are
Indeed's own published totals as of `scrapedAt`, not counts of the rows this run returned. Ask
for 50 reviews of an employer that has 283,032 and `reviewsCount` still reads `283032` while
the run returns 50 review rows. When reviews were fetched, `reviewsFoundCount` reports how many
the source made available under your filters.

### Pricing

You pay per record, and only for records delivered.

- Each full company profile is one charge.
- Each lightweight listing row from industry or directory mode is a smaller charge.
- Each review row, each salary row, and each question row is its own charge.

There is no per-run start fee and no minimum. A run that returns no records is free. Rows that
report a failed input (`result_type: "error"`) are never charged. Set `maxTotalChargeUsd` to
cap a run's spend and the Actor stops cleanly when the cap is reached. Free Apify accounts get
a monthly free-record allowance on this Actor before any charge applies. The current per-record
price for each tier is on the pricing card on the Actor's Store page.

### Reviews data and privacy

Review rows are pseudonymous, publisher-published user content. Each review is written by an
employee or former employee and published by Indeed under a job title and a coarse location
(for example "Cashier, Dallas, TX"), which is already indexed and public. The Actor returns
each review verbatim, keyed by Indeed's own `reviewId`. A review row contains no names, no
email addresses, no phone numbers, and no contact channel of any kind, and the Actor adds none.

- **Legal basis.** Legitimate interest under GDPR Article 6(1)(f), for market research and
  employer-brand analysis over content the publisher has already made public.
- **No identification, no enrichment.** The Actor never tries to identify a reviewer, link a
  review to a natural person, or add data that Indeed did not publish.
- **Takedown.** Rows mirror the live page. After Indeed removes a review, re-running drops it
  from your results.
- The Actor never returns emails or phone numbers, for reviews or for any other row.

### Use cases

- **Sales and lead generation** building lists of employers that are actively hiring in a
  sector and geography.
- **Recruiters** benchmarking an employer's rating, pay, and hiring volume against its
  competitors.
- **Job seekers** researching a company, its reviews, and its salaries before an interview.
- **Market researchers** measuring hiring activity, sentiment, and pay by industry and region.
- **AI agents** that need employer context, reviews, and salary data as structured, readable
  JSON.

### How to get started

1. Open the Actor on [Apify](https://apify.com/johnvc/indeed-company-api?fpr=9n7kx3).
2. Pick a mode, fill in the names, URLs, or industry and states, and switch on reviews,
   salaries, or Q\&A if you want them.
3. Click Start and grab the results as JSON, CSV, or Excel, or read the dataset over the API.

### 🔌 Use this API from Claude (MCP)

This Actor is MCP-ready, so [Claude](https://claude.ai/referral/uIlpa7nPLg) and other AI agents
can call it directly. Claude Code and Claude Cowork both offer a free trial via that link. Add
the hosted Apify MCP server:

```
https://mcp.apify.com/?tools=actors,docs,johnvc/indeed-company-api
```

What each mode does, what to pass, what comes back, and what it bills:

| Mode | What to pass | Rows returned (`result_type`) | Event billed |
|---|---|---|---|
| Keyword | `keywords`, plus optional `includeReviews` / `includeSalaries` / `includeQuestions` | `company` (plus `review` / `salary` / `question`) | `company-scraped` (plus `review-scraped` / `salary-scraped` / `question-scraped`) |
| URL | `companyUrls` (URLs or bare slugs), same optional toggles | `company` (plus the same child rows) | `company-scraped` (plus the same child events) |
| Industry, full | `industry` and `states`, `profileDetail: "full"` | `company` | `company-scraped` |
| Industry or directory, listing | `profileDetail: "listing"`, or `directoryUrls` | `company` with `profileDetail: "listing"` | `company-listed` |

Then just ask:

- *"Which healthcare employers in California have a rating above 4 and more than 500 reviews?"*
- *"Pull the last 100 reviews for Walmart."*
- *"Give me salary-by-title for Tesla with report counts."*

Any input that returns nothing comes back as an error row carrying `error_message`, and error
rows are never charged, so a failed lookup costs an agent nothing.

### 💸 Pay per run with crypto (x402)

Prefer to pay per call in USDC instead of holding an account balance? This Actor is reachable
over the x402 payment standard, which lets an agent settle each run on-chain with no
subscription.

See the [Apify x402 documentation](https://docs.apify.com/platform/integrations/x402) for setup.

### 🌐 About Alpha OSINT

This Actor is part of [Alpha OSINT](https://alphaosint.com), a catalogue of open source
intelligence and web data tools. Browse the full set of data APIs there. For support or a
feature request, open a ticket on the
[Actor's issues page](https://apify.com/johnvc/indeed-company-api/issues/open?fpr=9n7kx3).

Last Updated: 2026.09.13

# Actor input Schema

## `mode` (type: `string`):

Keyword looks companies up by name and needs no URL. URL collects exact company pages you already hold. Industry browses every company in one industry across the states you list. Directory crawls an Indeed browse-companies page.

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

Which Indeed country site to read. URL and keyword modes work across countries; industry and directory browse are United States only, so pick United States for those. A company URL you paste always wins over this setting.

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

Company names to look up, for example "Tesla" or "Allstate". Each name is searched separately and the searches run in parallel, so several names cost little more time than one. A name can match more than one employer. Used in keyword mode. Up to 10 per run. Need larger batches? Contact us and we can raise this limit for your account.

## `companyUrls` (type: `array`):

Indeed company references, one company each. Accepts a full profile URL (https://www.indeed.com/cmp/Allstate-Insurance), a sub-page URL (https://www.indeed.com/cmp/Allstate-Insurance/reviews), or a bare slug (Allstate-Insurance). Used in URL mode. Up to 100 per run. Need larger batches? Contact us and we can raise this limit for your account.

## `industry` (type: `string`):

Which industry to browse, using the source's own industry list. The source matches these exactly and rejects anything else, so pick from the list rather than typing your own. Leave as All to browse every industry. Used in industry mode.

## `states` (type: `array`):

Where to browse, one search per entry. Accepts a US state name ("California"), the whole country ("United States"), or a metro area ("Sacramento, CA"). Each entry is combined with the industry above, so three states means three searches, and they run in parallel. Used in industry mode. Up to 10 per run. Need larger batches? Contact us and we can raise this limit for your account.

## `directoryUrls` (type: `array`):

Indeed browse-companies pages, for example https://www.indeed.com/companies/browse-companies. Every company found on each page is returned, up to the result limit below. Used in directory mode. Up to 10 per run. Need larger batches? Contact us and we can raise this limit for your account.

## `maxResultsPerInput` (type: `integer`):

How many companies to return for each name, state, or directory page. You are charged per company returned, so this is also your cost control. The limit is applied as results are collected, so nothing beyond it is collected or billed. Ignored in URL mode, where each URL returns one company. A run that returns no companies is never charged.

## `profileDetail` (type: `string`):

How much to return for companies found by keyword, industry, or directory. Full fetches each company page for the complete profile. Listing returns the lighter card straight from the results, which is cheaper and faster. URL mode is always a full profile.

## `resolveExact` (type: `boolean`):

In keyword mode, return only the single best-matching company for each name instead of every candidate. If nothing matches closely, an uncharged error row names the closest companies found.

## `uniqueCompaniesOnly` (type: `boolean`):

Drop duplicate companies within a run, so the same employer is never returned or charged twice across your inputs.

## `includeReviews` (type: `boolean`):

Also return employee reviews for each company as separate rows (result\_type 'review'), each charged per review returned. Full profile only.

## `maxReviewsPerCompany` (type: `integer`):

How many reviews to return for each company when reviews are included. Reviews are read 20 per page, newest available first.

## `reviewsSince` (type: `string`):

Optional. Only return reviews submitted on or after this date, for example 2026-01-01. Leave blank for no date limit.

## `reviewsAllCountries` (type: `boolean`):

Include reviews written on every Indeed country site, not only the site being read. Widens the review pool for large multinational employers.

## `includeSalaries` (type: `boolean`):

Also return reported salaries by job title for each company as separate rows (result\_type 'salary'), each charged per salary row returned. Full profile only.

## `includeQuestions` (type: `boolean`):

Also return questions from each company's Q\&A section as separate rows (result\_type 'question'), each charged per question returned. Full profile only.

## `maxQuestionsPerCompany` (type: `integer`):

How many questions to return for each company when questions are included. Questions are read 10 per page.

## Actor input object example

```json
{
  "mode": "keyword",
  "country": "US",
  "keywords": [
    "Tesla"
  ],
  "industry": "All",
  "maxResultsPerInput": 25,
  "profileDetail": "full",
  "resolveExact": false,
  "uniqueCompaniesOnly": true,
  "includeReviews": false,
  "maxReviewsPerCompany": 20,
  "reviewsAllCountries": false,
  "includeSalaries": false,
  "includeQuestions": false,
  "maxQuestionsPerCompany": 10
}
```

# Actor output Schema

## `allResults` (type: `string`):

Every dataset item from this run.

## `companies` (type: `string`):

One row per company with industry, size, headquarters, rating, and website.

## `ratings` (type: `string`):

Employer rating alongside review, salary, interview, and question counts.

## `hiring` (type: `string`):

Open-job counts and the categories each employer is hiring for.

## `firmographics` (type: `string`):

Industry, revenue band, employee count, headquarters, and related companies.

## `reviews` (type: `string`):

Employee review rows with rating, title, job title, location, and date.

## `salaries` (type: `string`):

Reported pay by job title, with median, period, and report count.

## `questions` (type: `string`):

Company Q\&A rows with the question text, date asked, and answer count.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "keywords": [
        "Tesla"
    ]
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = { "keywords": ["Tesla"] }

# Run the Actor and wait for it to finish
run = client.actor("johnvc/indeed-company-api").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "Tesla"
  ]
}' |
apify call johnvc/indeed-company-api --silent --output-dataset

```

## MCP server setup

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

```

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/tuFyCykkPww3wA42u/builds/axyg9m9aUEHpYNVdZ/openapi.json
