Indeed Companies Scraper avatar

Indeed Companies Scraper

Pricing

from $0.40 / 1,000 results

Go to Apify Store
Indeed Companies Scraper

Indeed Companies Scraper

Extract Indeed company profiles across all 63 countries. No proxies needed. Returns the full employer payload including ratings, happiness scores, CEO details, revenue and headcount ranges, employee reviews, and fields not exposed in the standard Indeed UI.

Pricing

from $0.40 / 1,000 results

Rating

0.0

(0)

Developer

Metaretica

Metaretica

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

5 days ago

Last modified

Share

Indeed Companies Scraper — Full profiles · Reviews · Ratings · 63 countries

Foreword: This Actor is designed to work as the second step in a two-actor pipeline — run Indeed Jobs Scraper first, then pipe its output dataset directly into this Actor to enrich each employer with a full company profile. It can also be used standalone via a direct key list or company name, but chaining it after a jobs run is the recommended and most natural usage pattern.

Extract full company profiles from Indeed — including employer descriptions, CEO details, revenue and headcount ranges, social links, employee reviews, and detailed happiness and ratings breakdowns — across all 63 countries Indeed operates in. No proxies required.

Try it free →


What does this Indeed scraper do?

This Actor fetches the complete company profile payload for any set of employers on Indeed, identified by their internal employer key. Input can come from a previous Indeed Jobs Scraper run (dataset pipe), a manually supplied list of keys, or a free-text company name.

Output includes:

  • Identity & tier — name, employer key, claimed status, account tier
  • Employer details — full and brief descriptions, CEO name and photo, headcount range, revenue range, industry, registered country, stock symbol, physical addresses
  • Social & web links — corporate website, custom career links, Facebook, Instagram, Twitter
  • Media content — employer-uploaded video or image embeds with titles and descriptions
  • Employee reviews — full review text, pros/cons, per-category ratings, normalized job title and location
  • UGC statistics — global review count, overall and per-category rating distributions, CEO approval, interview difficulty and experience, happiness scores across 13 dimensions, salary satisfaction

Because the payload is deeply nested (reviews array, ugcStats sub-objects, happiness breakdowns), JSON is the recommended output format. CSV and Excel exports are available on the Apify platform but will flatten or drop nested fields.


What data does this scraper extract?

The Actor returns the complete company profile payload per result. Below is a full field reference.

Company essentials

FieldDescription
nameCompany name as registered on Indeed
keyIndeed's internal employer key
tierAccount tier (FREE, STANDARD, ADVANCED, etc.)
claimedWhether the employer has claimed their Indeed profile
relativeCompanyPageUrlRelative path to the company page on Indeed (e.g. /cmp/Domino's)

Employer details

FieldDescription
dossier.employerDetails.briefDescriptionShort company description (typically 1–2 sentences)
dossier.employerDetails.companyDescriptionFull company description as submitted by the employer
dossier.employerDetails.ceoNameCEO name
dossier.employerDetails.ceoPhotoUrlCEO photo URL
dossier.employerDetails.employeesEncoded headcount range (e.g. ERv1_10000_PLUS, ERv1_201_500)
dossier.employerDetails.revenueEncoded revenue range (e.g. RRv1_5M_25M, RRv1_1B_PLUS)
dossier.employerDetails.industryIndustry code when provided
dossier.employerDetails.countryCountry code of the employer's registered headquarters
dossier.employerDetails.stockSymbolStock ticker symbol when publicly traded
dossier.employerDetails.addressesArray of physical office addresses
dossier.employerDetails.sectorsArray of { localizedLabel } industry sector labels
dossier.brandColorHex brand color code for claimed profiles (e.g. #0d6e9e)
dossier.premiumHeaderEnabledWhether the premium profile header is enabled
FieldDescription
dossier.links.corporateWebsiteCorporate website URL
dossier.links.facebookFacebook page URL
dossier.links.instagramInstagram profile URL
dossier.links.twitterTwitter/X profile URL
dossier.links.customLinksArray of { name, url } custom career or social links

Media content

FieldDescription
dossier.customContentsArray of employer-uploaded media items
dossier.customContents[].titleMedia item title
dossier.customContents[].descriptionMedia item description
dossier.customContents[].mediaUrlEmbed URL (YouTube, etc.)
dossier.customContents[].detectedLanguageDetected language of the content

Employee reviews

Each item in the reviews array represents one employee review.

FieldDescription
reviews[].keyUnique review identifier
reviews[].idNumeric review ID
reviews[].titleReview headline
reviews[].textFull review body
reviews[].prosPros section
reviews[].consCons section
reviews[].overallRatingOverall star rating (1–5)
reviews[].compensationAndBenefitsRatingCompensation & benefits rating
reviews[].cultureAndValuesRatingCulture & values rating
reviews[].jobSecurityAndAdvancementRatingJob security & advancement rating
reviews[].managementRatingManagement rating
reviews[].workAndLifeBalanceRatingWork-life balance rating
reviews[].normalizedJobTitleIndeed-normalized job title of the reviewer
reviews[].normalizedLocationIndeed-normalized location of the reviewer
reviews[].rawJobTitleJob title as submitted by the reviewer
reviews[].rawLocationLocation as submitted by the reviewer
reviews[].jobCategoryIdJob category identifier
reviews[].dateCreatedReview creation timestamp (ISO 8601)
reviews[].countryCodeCountry of the review
reviews[].languageCodeLanguage code of the review
reviews[].employmentStartYearYear employment started
reviews[].employmentEndYearYear employment ended
reviews[].helpfulVotesCountNumber of "helpful" votes
reviews[].unhelpfulVotesCountNumber of "not helpful" votes
reviews[].commentsArray of comment threads on the review

Ratings & UGC statistics

FieldDescription
ugcStats.globalReviewCountTotal review count across all countries and languages
ugcStats.reviewCountForCountryReview count for the queried country
ugcStats.reviewCountForLanguageReview count for the queried language
ugcStats.reviewCountForLocaleReview count for the queried locale
ugcStats.ratings.overallRating.valueOverall rating (0–5 scale)
ugcStats.ratings.overallRating.countNumber of ratings contributing to the overall score
ugcStats.ratings.compensationAndBenefitsRating.valueCompensation & benefits rating
ugcStats.ratings.cultureAndValuesRating.valueCulture & values rating
ugcStats.ratings.jobSecurityAndAdvancementRating.valueJob security & advancement rating
ugcStats.ratings.managementRating.valueManagement rating
ugcStats.ratings.workLifeBalanceRating.valueWork-life balance rating
ugcStats.ratingHistogramArray of 5 integers — count of [1★, 2★, 3★, 4★, 5★] reviews
ugcStats.recommendFriend.yesCountNumber of reviewers who would recommend to a friend
ugcStats.recommendFriend.noCountNumber who would not
ugcStats.ceoApproval.yesCountCEO approval yes votes
ugcStats.ceoApproval.noCountCEO approval no votes
ugcStats.salarySatisfaction.yesCountSalary satisfaction yes votes
ugcStats.salaryCostOfLiving.yesCountSalary covers cost of living yes votes

Happiness scores

The ugcStats.happiness block reports workplace happiness across 13 dimensions. Each dimension contains count (number of responses), score (0–100), and grade (POOR, FAIR, GOOD, GREAT, EXCELLENT).

DimensionField
OverallugcStats.happiness.overall
AchievementugcStats.happiness.achievement
AppreciationugcStats.happiness.appreciation
BelongingugcStats.happiness.belonging
CompensationugcStats.happiness.compensation
EnergyugcStats.happiness.energy
FlexibilityugcStats.happiness.flexibility
InclusionugcStats.happiness.inclusion
LearningugcStats.happiness.learning
ManagementugcStats.happiness.management
PurposeugcStats.happiness.purpose
SupportugcStats.happiness.support
TrustugcStats.happiness.trust

Interview data

FieldDescription
ugcStats.interview.difficulty.averageAverage difficulty (EASY, AVERAGE, DIFFICULT)
ugcStats.interview.difficulty.totalCountNumber of difficulty ratings
ugcStats.interview.experience.averageOverall interview experience (POSITIVE, AVERAGE, NEGATIVE)
ugcStats.interview.experience.totalCountNumber of experience ratings
ugcStats.interview.processLength.averageTypical process length (A_WEEK, TWO_TO_FOUR_WEEKS, etc.)
ugcStats.interview.processLength.totalCountNumber of process length responses

Sample output

{
"name": "Domino's",
"key": "a448e317656774b8",
"tier": "FREE",
"claimed": true,
"relativeCompanyPageUrl": "/cmp/Domino's",
"dossier": {
"brandColor": "#0d6e9e",
"employerDetails": {
"briefDescription": "Founded as a single store in 1960, Domino's Pizza today stands as the recognized world leader in pizza delivery.",
"ceoName": "Russell Weiner",
"employees": "ERv1_10000_PLUS",
"revenue": "RRv1_5M_25M"
},
"links": {
"corporateWebsite": "https://jobs.dominos.com/us/",
"facebook": "https://www.facebook.com/Dominos/app/404596412628/",
"twitter": "https://twitter.com/dominoscareers"
}
},
"ugcStats": {
"globalReviewCount": 39742,
"ratings": {
"overallRating": { "count": 39741, "value": 3.4 },
"compensationAndBenefitsRating": { "count": 31978, "value": 2.7 },
"workLifeBalanceRating": { "count": 32090, "value": 3.2 }
},
"ratingHistogram": [5338, 4171, 9528, 10495, 10210],
"ceoApproval": { "noCount": 4393, "yesCount": 9990 },
"happiness": {
"overall": { "count": 407, "grade": "GOOD", "score": 59 }
},
"interview": {
"difficulty": { "average": "EASY", "totalCount": 1076 },
"experience": { "average": "AVERAGE", "totalCount": 1441 }
}
}
}

How to scrape Indeed company profiles — step by step

  1. Run Indeed Jobs Scraper to collect job listings for the companies you care about
  2. Copy the defaultDatasetId from the jobs run
  3. Open this Actor and paste the dataset ID into the datasetId field
  4. Set country to match the country you scraped jobs from
  5. Click Start
  6. When the run finishes, download your company profiles as JSON

No proxy setup. No browser configuration. No technical knowledge required.


Input options

Piping from Indeed Jobs Scraper

This is the primary and recommended usage pattern. Take the defaultDatasetId from any Indeed Jobs Scraper run and pass it directly:

{
"datasetId": "aAbBcCdDeEfFgGhH",
"country": "us"
}

The Actor reads every job record from the dataset, extracts the job.employer.key field, deduplicates the keys, and fetches one full company profile per unique employer. A jobs dataset of 10,000 listings from 200 employers will produce exactly 200 company profiles.

If you already have the employer keys from a previous run and want to skip the dataset read:

{
"companyKeys": ["e465e7d7603c9368", "a448e317656774b8", "7b09cc8e5551827f"],
"country": "fr"
}

Option A — pipe from Indeed Jobs Scraper (dataset ID)

{
"datasetId": "aAbBcCdDeEfFgGhH",
"country": "us"
}

Option B — direct key list

{
"companyKeys": ["e465e7d7603c9368", "a448e317656774b8"],
"country": "fr"
}
{
"companyName": "Domino's Pizza",
"country": "us"
}

The Actor resolves the name to an employer key via a job search and fetches the profile. Best used for one-off lookups. For bulk enrichment, use datasetId or companyKeys.

Supported input parameters

ParameterRequiredDescription
countryYesIndeed country market (see full list below). Used to scope the profile fetch
datasetIdNo*Default dataset ID from an Indeed Jobs Scraper run
companyKeysNo*JSON array of employer key strings
companyNameNo*Free-text company name to resolve and fetch

*At least one of datasetId, companyKeys, or companyName must be provided.


All 63 supported countries

Sourced directly from indeed.com/worldwide.

CountryCodeCountryCodeCountryCode
ArgentinaarHungaryhuSaudi Arabiasa
AustraliaauIndiainSingaporesg
AustriaatIndonesiaidSouth Africaza
BahrainbhIrelandieSouth Koreakr
BelgiumbeIsraelilSpaines
BrazilbrItalyitSwedense
CanadacaJapanjpSwitzerlandch
ChileclKuwaitkwTaiwantw
ChinacnLuxembourgluThailandth
ColombiacoMalaysiamalaysiaTurkeytr
Costa RicacrMexicomxUkraineua
Czech RepublicczMoroccomaUnited Arab Emiratesae
DenmarkdkNetherlandsnlUnited Kingdomuk
EcuadorecNew ZealandnzUnited Statesus
EgyptegNigeriangUruguayuy
FinlandfiNorwaynoVenezuelave
FrancefrOmanomVietnamvn
GermanydePakistanpk
GreecegrPanamapa
Hong KonghkPerupe
Philippinesph
Polandpl
Portugalpt
Qatarqa
Romaniaro

How much does it cost to scrape Indeed company profiles?

This Actor uses pay-per-event (PPE) pricing. Compute is free. You are charged only for results written to the dataset, plus a negligible one-time start fee per run.

EventCost
Per result (dataset item)$0.0019
Per run start$0.00005

Volume discounts apply automatically based on your Apify subscription tier:

TierPer result
No discount$0.0019
Bronze$0.0014
Silver$0.0009
Gold$0.0004

Example: 10,000 company profiles at the standard rate = $19, plus $0.00005 for the run start.

No proxy fees. No compute charges. No surprises.

An Apify account is required to run this Actor. See apify.com/pricing for platform subscription tiers.

Enterprise & bulk pricing

For high-volume or enterprise use cases, fixed pricing with unlimited results is available. Reach out at etr@metaretica.com.


Use cases

Employer intelligence — build a structured database of company profiles enriched with verified ratings, review counts, CEO information, and happiness scores. Combine with job data from Indeed Jobs Scraper for a complete employer picture.

Recruitment research — assess companies before outreach by reviewing overall ratings, culture scores, management ratings, and interview difficulty. The ugcStats.happiness block provides granular workplace sentiment across 13 dimensions.

HR tech and ATS enrichment — pipe company profile data into your product to show candidates employer context alongside job listings: ratings, review counts, website links, and company descriptions.

Competitive analysis — track ratings, review counts, and happiness scores for a set of target employers over time. The ratingHistogram and per-category ratings give a complete picture of employee sentiment trends.

Job board and aggregator enrichment — append full company profiles to job listings using the employer.key field already present in jobs scraper output. No additional lookup step required when piping datasets.

Lead generation and sales intelligence — surface employer details including website, social links, headcount range, revenue band, and CEO name for companies actively posting on Indeed.


Integrations

The Actor integrates with the full Apify platform stack:

  • Apify API — trigger runs and fetch results programmatically in any language
  • Make / Zapier — pipe company data into Google Sheets, Airtable, Slack, or any SaaS tool
  • Webhooks — get notified when a run completes
  • Scheduling — run on any cron-based cadence for continuous profile freshness

API example (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
# Step 1: run the jobs scraper
jobs_run = client.actor("JOBS_ACTOR_ID").call(run_input={
"query": "software engineer",
"country": "us",
"location": "New York",
})
# Step 2: pipe the dataset into the companies scraper
companies_run = client.actor("COMPANIES_ACTOR_ID").call(run_input={
"datasetId": jobs_run["defaultDatasetId"],
"country": "us",
})
for item in client.dataset(companies_run["defaultDatasetId"]).iterate_items():
print(item["name"], item["ugcStats"]["ratings"]["overallRating"]["value"])

API example (JavaScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
// Step 1: run the jobs scraper
const jobsRun = await client.actor('JOBS_ACTOR_ID').call({
query: 'product manager',
country: 'fr',
});
// Step 2: pipe the dataset into the companies scraper
const companiesRun = await client.actor('COMPANIES_ACTOR_ID').call({
datasetId: jobsRun.defaultDatasetId,
country: 'fr',
});
const { items } = await client.dataset(companiesRun.defaultDatasetId).listItems();
console.log(items);

FAQ

Is it legal to scrape Indeed company profiles? This Actor only extracts publicly available company profile data accessible via Indeed's API. It does not extract private user data, bypass authentication, or access anything that is not already public. We recommend using extracted data responsibly and in compliance with applicable laws in your jurisdiction, including GDPR in the EU. See Apify's blog post on the legality of web scraping for further context.

Why is JSON the recommended output format? The company profile schema is deeply nested — reviews are an array of objects each with their own per-category ratings, ugcStats contains multiple levels of sub-objects, and happiness scores span 13 dimensions. Flattening this to CSV without losing information requires post-processing decisions that vary by use case. Export as JSON and transform downstream. CSV is available on the Apify platform if you only need top-level scalar fields.

Why doesn't this Actor need proxies? This Actor operates at the API level rather than rendering web pages, which means it does not trigger the IP-based rate limiting that browser-based scrapers encounter.

How does the dataset pipe mode work? When you provide a datasetId, the Actor opens the dataset from your Indeed Jobs Scraper run, reads every item, extracts the job.employer.key field from each, deduplicates the keys, and fetches one full company profile per unique employer. A dataset of any size — even millions of job listings — will produce at most one profile per unique employer key.

What is the employees field format? The employees field is an encoded range string in the format ERv1_{lower}_{upper}, for example ERv1_201_500 (201–500 employees) or ERv1_10000_PLUS (10,000+ employees). These are Indeed's internal headcount bucket codes.

What is the revenue field format? Similar to employees, revenue is encoded as RRv1_{lower}_{upper} in millions, for example RRv1_5M_25M ($5M–$25M) or RRv1_1B_PLUS ($1B+).

Are reviews filtered by country? The reviews array in each response is filtered by the country and language input parameters you provide. The ugcStats.globalReviewCount field always reflects the worldwide total regardless of country filter. Use ugcStats.reviewCountForCountry and ugcStats.reviewCountForLocale for country-scoped counts.

What happens if Indeed changes its API? We monitor the Actor continuously. If an API change causes failures, we push a fix and announce it in the changelog.


Issues and feedback

Found a bug or want to request a feature? Open a ticket in the Issues tab. We respond within 24 hours for active subscribers.