Indeed Company API | Ratings, Reviews, Salaries Data avatar

Indeed Company API | Ratings, Reviews, Salaries Data

Pricing

from $2.57 / 1,000 company returneds

Go to Apify Store
Indeed Company API | Ratings, Reviews, Salaries Data

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

John

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

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 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 groupFields
IdentitycompanyName, companyId, companyUrl, employerId, website, logoUrl
Firmographicsindustry, sectors, companySize, companySizeCode, employeesMin, employeesMax, revenue, revenueCode, headquarters, countryCode, foundedYear
LeadershipceoName, ceoApproval (percent), ceoPhotoUrl
RatingsoverallRating and the five sub-scores ratingWorkLifeBalance, ratingCompensationBenefits, ratingJobSecurityAdvancement, ratingManagement, ratingCulture, plus ratingsByYear (the overall rating for each recent year)
Work happinessworkHappiness, happinessScore, happinessGrade, happinessResponses (how many people answered)
Depth countsreviewsCount, salariesCount, questionsCount, jobsCount, each with its link (reviewsUrl, salariesUrl, questionsUrl, jobsUrl)
HiringjobsCount, jobLocations, topJobTitles, topSalaries
Related and detailsimilarCompanies (with ratings and counts), relatedCompanies, locations (rated offices), details, profileFaq
Brand assetsheaderImageUrl, 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
Provenanceresult_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.

EntityTurn on withresult_typeDataset viewWhat each row carries
ReviewsincludeReviewsreviewReviewsreviewId, reviewUrl, reviewTitle, reviewText, pros, cons, overallRating and the five sub-ratings, jobTitle, normalizedJobTitle, location, countryCode, isCurrentEmployee, submittedAt, helpfulCount, unhelpfulCount, employerResponses, employerResponseCount
SalariesincludeSalariessalarySalariesjobTitle, normalizedJobTitle, salaryCategory, salaryMedian, salaryMedianText, salaryPeriod, salaryCurrency, salaryReportsCount, salaryUrl
Q&AincludeQuestionsquestionQuestionsquestionId, 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

ParameterTypeDefaultWhat it does
modeselectkeywordkeyword, url, industry, or directory
keywordsarray["Tesla"]Company names to look up, one search each. Keyword mode. Up to 10
companyUrlsarray[]Indeed company URLs, bare slugs, or sub-page URLs. URL mode. Up to 100
industryselectAllWhich industry to browse, matched against the source's own list. Industry mode
statesarray[]US state names, United States, or metro areas. Industry mode. Up to 10
directoryUrlsarray[]Indeed browse-companies pages. Directory mode. Up to 10
maxResultsPerInputinteger25Companies to return per name, state, or directory page (up to 1000). Your main cost control. Ignored in URL mode
countryselectUSWhich Indeed country site to read for keyword and URL modes
profileDetailselectfullfull for a complete profile, listing for a lightweight discovery row
resolveExactbooleanfalseCollapse each keyword to its single best-matching employer
uniqueCompaniesOnlybooleantrueDrop duplicate companies within a run
includeReviewsbooleanfalseAlso return employee review rows
maxReviewsPerCompanyinteger20Cap reviews per company (1 to 1000)
reviewsSincestringnoneOnly reviews on or after this YYYY-MM-DD date
reviewsAllCountriesbooleanfalseInclude reviews from every country, not just the site's own
includeSalariesbooleanfalseAlso return salary-by-title rows
includeQuestionsbooleanfalseAlso return Q&A rows
maxQuestionsPerCompanyinteger10Cap 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

  1. Open the Actor on Apify.
  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 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:

ModeWhat to passRows returned (result_type)Event billed
Keywordkeywords, plus optional includeReviews / includeSalaries / includeQuestionscompany (plus review / salary / question)company-scraped (plus review-scraped / salary-scraped / question-scraped)
URLcompanyUrls (URLs or bare slugs), same optional togglescompany (plus the same child rows)company-scraped (plus the same child events)
Industry, fullindustry and states, profileDetail: "full"companycompany-scraped
Industry or directory, listingprofileDetail: "listing", or directoryUrlscompany 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