Indeed Company API
An Indeed company API that returns the employer itself, not only its reviews. Look companies up by name, pass Indeed company URLs or bare slugs, browse one of Indeed's 140 industries across US states and metro areas, or crawl a browse-companies directory page. A full profile row carries the overall rating and five sub-ratings, ratings by year, CEO name and approval, founding year, employee and revenue bands, headquarters, the work happiness score, the open-job count with job locations and top titles, and Indeed's own review, salary and question totals. Turn on employee reviews, salaries by job title or Q&A and each comes back as its own billed row, joined to its company by companyId. Keyword and URL modes read 60 Indeed country sites; industry and directory browse are US only.
Input parameters
| PARAMETER | TYPE | REQ | DEFAULT | DESCRIPTION |
|---|---|---|---|---|
| mode | enum | yes | keyword | How to find companies: keyword (look them up by name), url (exact company pages you already hold), industry (every company in one industry across the states you list) or directory (crawl an Indeed browse-companies page). |
| keywords | string[] | no | — | Company names to look up, for example Tesla or Allstate. Each name is its own search, and a name can match more than one employer. Keyword mode, up to 10 per run. |
| companyUrls | string[] | no | — | One company each: a profile URL such as https://www.indeed.com/cmp/Allstate-Insurance, a sub-page URL such as its /reviews page, or a bare slug. URL mode, up to 100 per run, one profile charge per company. — drives your bill |
| industry | enum | no | All | One of Indeed's own 140 industries, matched exactly. An unrecognised value stops the run with the closest matches. All browses every industry. Industry mode. |
| states | string[] | no | — | Where to browse, one search per entry: a US state name, United States, or a metro area such as Sacramento, CA. Industry mode, up to 10 per run. |
| directoryUrls | string[] | no | — | Indeed browse-companies pages, for example https://www.indeed.com/companies/browse-companies. Directory mode, up to 10 per run. |
| maxResultsPerInput | integer | no | 25 | Companies to return per name, state or directory page, 1 to 1,000. Nothing beyond it is fetched or billed. Ignored in URL mode. — drives your bill |
| country | enum | no | US | Which of 60 Indeed country sites to read in keyword and URL modes. Industry and directory browse are US only. A pasted company URL always wins over this setting. |
| profileDetail | enum | no | full | full fetches each company page for the complete profile; listing returns the lighter results card at the listing price. URL mode is always full. |
| resolveExact | boolean | no | false | Keyword mode: return only the single best match per name. When nothing matches closely, an uncharged error row names the closest companies found. |
| uniqueCompaniesOnly | boolean | no | true | Drop duplicate companies within a run, so one employer is never returned or charged twice. |
| includeReviews | boolean | no | false | Also return employee reviews as their own rows (result_type review). Full profiles only. |
| maxReviewsPerCompany | integer | no | 20 | Reviews per company, 1 to 1,000, read 20 per page with the newest available first. |
| reviewsSince | string | no | — | Only reviews submitted on or after this date, written YYYY-MM-DD. |
| reviewsAllCountries | boolean | no | false | Include reviews written on every Indeed country site, not only the site being read. Widens the pool for multinational employers. |
| includeSalaries | boolean | no | false | Also return reported salaries by job title as their own rows (result_type salary). Full profiles only. |
| includeQuestions | boolean | no | false | Also return questions from the company's Q&A section as their own rows (result_type question). Full profiles only. |
| maxQuestionsPerCompany | integer | no | 10 | Questions per company, 1 to 500, read 10 per page. |
| enrichBusinessEmail | boolean | no | false | Optional add-on: look for a contact email published on each company's own website and verify it. Company rows only; billed per verified email or per lookup that found none. |
| maxBusinessEmailsPerRun | integer | no | 50 | Caps the charged email attempts in a run, found or not, 1 to 500. Only used with enrichBusinessEmail. |
Output schema
| FIELD | TYPE | DESCRIPTION | NULLABLE |
|---|---|---|---|
| result_type | string | What this row is: company (a full profile or a listing row), review, salary, question or error. Every kind lands in one dataset, so filter on this first. | no |
| companyName | string | Company name as shown on Indeed. | yes |
| companyId | string | Indeed's company slug, for example Walmart. URL mode accepts it back as input, and review, salary and question rows carry it as the join key. | yes |
| employerId | string | Indeed's employer key, stable across country sites. | yes |
| companyUrl | string | The Indeed company profile URL. | yes |
| website | string | The company's own website, when the profile lists one. | yes |
| description | string | The About text from the profile, or the highlight blurb on a listing row. | yes |
| industry | string | Industry in Indeed's own taxonomy. | yes |
| companySize | string | Employee band as shown, for example 10,000+ or 51 to 200. | yes |
| employeesMin | integer | Low end of the employee band. | yes |
| employeesMax | integer | High end of the employee band. Absent when the band is open-ended. | yes |
| revenue | string | Revenue band as the source reports it, for example more than $10B. | yes |
| headquarters | string | Headquarters location. | yes |
| countryCode | string | Two-letter country code. | yes |
| foundedYear | integer | Year founded, when listed. | yes |
| ceoName | string | The chief executive named on the profile. | yes |
| ceoApproval | integer | CEO approval as a percentage. | yes |
| overallRating | number | Overall employer rating out of 5. On a review row, that reviewer's own rating. | yes |
| ratingWorkLifeBalance | number | Work-life balance sub-rating out of 5. ratingCompensationBenefits, ratingJobSecurityAdvancement, ratingManagement and ratingCulture follow the same pattern, on company and review rows. | yes |
| ratingsByYear | array | The overall rating for each recent year, each {year, rating}. | yes |
| happinessScore | integer | Work happiness composite out of 100, with happinessGrade and happinessResponses alongside. | yes |
| reviewsCount | integer | Indeed's published review total as of scrapedAt, not the number of review rows this run returned. | yes |
| salariesCount | integer | Indeed's published count of reported salaries. | yes |
| questionsCount | integer | Questions in the company's Q&A section. | yes |
| jobsCount | integer | Open jobs the company currently lists on Indeed. | yes |
| jobLocations | array | Locations with open jobs, each {name, jobsCount, url}. | yes |
| topJobTitles | array | The most common job titles, each {title, jobsCount, rating, url}. | yes |
| similarCompanies | array | Companies Indeed shows as similar, with their ratings and review counts. | yes |
| profileDetail | string | full for a fetched profile, listing for the lighter results row. | yes |
| matchConfidence | number | How closely a keyword matched this company, from 0 to 1. | yes |
| summary | string | One plain-language line about the company, for agents reading rows as prose. | yes |
| reviewTitle | string | Review title. Review rows also carry reviewId, reviewUrl, reviewText, pros, cons and the five sub-ratings. | yes |
| jobTitle | string | The reviewer's job title on a review row, or the title a salary row describes. | yes |
| location | string | The reviewer's coarse location, for example a city and state. | yes |
| isCurrentEmployee | boolean | Whether the reviewer still works at the company. | yes |
| submittedAt | string | Review submission date, YYYY-MM-DD. | yes |
| employerResponses | array | Employer replies to the review, each {text, respondedAt, isOfficial}. | yes |
| salaryMedian | number | Median reported pay for the job title as a number. salaryMedianText keeps the formatted value. | yes |
| salaryPeriod | string | Pay period, for example HOURLY or YEARLY. | yes |
| salaryCurrency | string | Currency code for the country site. | yes |
| salaryReportsCount | integer | How many salary reports back the median. | yes |
| questionText | string | The Q&A question, with questionId, questionUrl and askedAt alongside. | yes |
| answersCount | integer | Number of answers on the question. | yes |
| business_email | string | With enrichBusinessEmail on: the contact email published on the company's website, after verification. | yes |
| business_email_status | string | Outcome of the email lookup, for example valid, not_found or no_website. | yes |
| sourceInput | string | The input from your run that produced this row. | yes |
| scrapedAt | string | UTC timestamp when the page was read. Present on every company, review, salary and question row. | yes |
| error_message | string | Why an input returned nothing. Error rows are never charged. | yes |
Worked examples
{"mode": "keyword", "keywords": ["Tesla", "Allstate"], "resolveExact": true}
{"mode": "industry", "industry": "Healthcare", "states": ["California", "Texas"], "profileDetail": "listing", "maxResultsPerInput": 100}
{"mode": "url", "companyUrls": ["Allstate-Insurance"], "includeReviews": true, "maxReviewsPerCompany": 100, "reviewsSince": "2026-01-01"}
{"mode": "url", "companyUrls": ["https://www.indeed.com/cmp/Walmart"], "includeSalaries": true, "includeQuestions": true, "maxQuestionsPerCompany": 20}
{"mode": "directory", "directoryUrls": ["https://www.indeed.com/companies/browse-companies"], "profileDetail": "listing", "maxResultsPerInput": 200}
Coverage
Code
Look up a company in one call
curl -X POST "https://api.apify.com/v2/acts/johnvc~indeed-company-api/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "keyword", "keywords": ["Allstate"], "resolveExact": true}'
Python
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("johnvc/indeed-company-api").call(
run_input={"mode": "url", "companyUrls": ["Allstate-Insurance"], "includeReviews": True, "maxReviewsPerCompany": 40}
)
for row in client.dataset(run.default_dataset_id).iterate_items():
kind = row.get("result_type")
if kind == "company":
print(row.get("companyName"), "|", row.get("overallRating"), "|", row.get("reviewsCount"), "reviews |", row.get("jobsCount"), "open jobs")
elif kind == "review":
print(" ", row.get("overallRating"), "|", row.get("jobTitle"), "|", row.get("reviewTitle"))
elif kind == "error":
print("error:", row.get("error_message"))
MCP
claude mcp add --transport http indeed-company-api \ "https://mcp.apify.com/?tools=actors,docs,johnvc/indeed-company-api"
Sample company row (synthetic)
{
"result_type": "company",
"companyName": "Example Logistics",
"companyId": "Example-Logistics",
"companyUrl": "https://www.indeed.com/cmp/Example-Logistics",
"employerId": "0f1e2d3c4b5a",
"website": "https://www.example.com",
"industry": "Transportation & Logistics",
"companySize": "1,001 to 5,000",
"employeesMin": 1001,
"employeesMax": 5000,
"revenue": "$100M to $500M",
"headquarters": "Columbus, OH",
"countryCode": "US",
"foundedYear": 1998,
"overallRating": 3.7,
"ratingWorkLifeBalance": 3.5,
"ratingCompensationBenefits": 3.6,
"ratingsByYear": [{"year": 2026, "rating": 3.7}, {"year": 2025, "rating": 3.6}],
"happinessScore": 66,
"reviewsCount": 1240,
"salariesCount": 3180,
"questionsCount": 85,
"jobsCount": 142,
"profileDetail": "full",
"summary": "Example Logistics, a Transportation & Logistics company based in Columbus, OH. Founded 1998. Rated 3.7 from 1,240 reviews. 142 open jobs.",
"sourceInput": "Example-Logistics",
"scrapedAt": "2026-10-03T09:15:00Z"
}
What people use it for
- Building employer lists by industry and state
- Sales prospecting on open-job counts per employer
- Salary benchmarking by job title across employers
- Employer-brand monitoring from employee reviews
- Comparing employer ratings across a competitor set
- Feeding an AI agent employer reviews and salaries over MCP
More sources for Lead sourcing and CRM enrichment, Hiring signals and talent intelligence, Reviews and reputation monitoring, Competitor and market monitoring, Grounding AI agents and MCP tools →