Indeed Company API | Ratings, Reviews, Salaries Data
Pricing
from $2.57 / 1,000 company returneds
Indeed Company API | Ratings, Reviews, Salaries Data
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.
Pricing
from $2.57 / 1,000 company returneds
Rating
0.0
(0)
Developer
John
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
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
matchConfidencescore. SetresolveExactto 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:
{"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"}
{"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"}
{"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"}
{"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
- Open the Actor on Apify.
- Pick a mode, fill in the names, URLs, or industry and states, and switch on reviews, salaries, or Q&A if you want them.
- 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 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 for setup.
๐ About Alpha OSINT
This Actor is part of Alpha OSINT, 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.
Last Updated: 2026.09.13