Indeed Companies Scraper
Pricing
from $0.40 / 1,000 results
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
Actor stats
0
Bookmarked
4
Total users
3
Monthly active users
5 days ago
Last modified
Categories
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.
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
| Field | Description |
|---|---|
name | Company name as registered on Indeed |
key | Indeed's internal employer key |
tier | Account tier (FREE, STANDARD, ADVANCED, etc.) |
claimed | Whether the employer has claimed their Indeed profile |
relativeCompanyPageUrl | Relative path to the company page on Indeed (e.g. /cmp/Domino's) |
Employer details
| Field | Description |
|---|---|
dossier.employerDetails.briefDescription | Short company description (typically 1–2 sentences) |
dossier.employerDetails.companyDescription | Full company description as submitted by the employer |
dossier.employerDetails.ceoName | CEO name |
dossier.employerDetails.ceoPhotoUrl | CEO photo URL |
dossier.employerDetails.employees | Encoded headcount range (e.g. ERv1_10000_PLUS, ERv1_201_500) |
dossier.employerDetails.revenue | Encoded revenue range (e.g. RRv1_5M_25M, RRv1_1B_PLUS) |
dossier.employerDetails.industry | Industry code when provided |
dossier.employerDetails.country | Country code of the employer's registered headquarters |
dossier.employerDetails.stockSymbol | Stock ticker symbol when publicly traded |
dossier.employerDetails.addresses | Array of physical office addresses |
dossier.employerDetails.sectors | Array of { localizedLabel } industry sector labels |
dossier.brandColor | Hex brand color code for claimed profiles (e.g. #0d6e9e) |
dossier.premiumHeaderEnabled | Whether the premium profile header is enabled |
Links
| Field | Description |
|---|---|
dossier.links.corporateWebsite | Corporate website URL |
dossier.links.facebook | Facebook page URL |
dossier.links.instagram | Instagram profile URL |
dossier.links.twitter | Twitter/X profile URL |
dossier.links.customLinks | Array of { name, url } custom career or social links |
Media content
| Field | Description |
|---|---|
dossier.customContents | Array of employer-uploaded media items |
dossier.customContents[].title | Media item title |
dossier.customContents[].description | Media item description |
dossier.customContents[].mediaUrl | Embed URL (YouTube, etc.) |
dossier.customContents[].detectedLanguage | Detected language of the content |
Employee reviews
Each item in the reviews array represents one employee review.
| Field | Description |
|---|---|
reviews[].key | Unique review identifier |
reviews[].id | Numeric review ID |
reviews[].title | Review headline |
reviews[].text | Full review body |
reviews[].pros | Pros section |
reviews[].cons | Cons section |
reviews[].overallRating | Overall star rating (1–5) |
reviews[].compensationAndBenefitsRating | Compensation & benefits rating |
reviews[].cultureAndValuesRating | Culture & values rating |
reviews[].jobSecurityAndAdvancementRating | Job security & advancement rating |
reviews[].managementRating | Management rating |
reviews[].workAndLifeBalanceRating | Work-life balance rating |
reviews[].normalizedJobTitle | Indeed-normalized job title of the reviewer |
reviews[].normalizedLocation | Indeed-normalized location of the reviewer |
reviews[].rawJobTitle | Job title as submitted by the reviewer |
reviews[].rawLocation | Location as submitted by the reviewer |
reviews[].jobCategoryId | Job category identifier |
reviews[].dateCreated | Review creation timestamp (ISO 8601) |
reviews[].countryCode | Country of the review |
reviews[].languageCode | Language code of the review |
reviews[].employmentStartYear | Year employment started |
reviews[].employmentEndYear | Year employment ended |
reviews[].helpfulVotesCount | Number of "helpful" votes |
reviews[].unhelpfulVotesCount | Number of "not helpful" votes |
reviews[].comments | Array of comment threads on the review |
Ratings & UGC statistics
| Field | Description |
|---|---|
ugcStats.globalReviewCount | Total review count across all countries and languages |
ugcStats.reviewCountForCountry | Review count for the queried country |
ugcStats.reviewCountForLanguage | Review count for the queried language |
ugcStats.reviewCountForLocale | Review count for the queried locale |
ugcStats.ratings.overallRating.value | Overall rating (0–5 scale) |
ugcStats.ratings.overallRating.count | Number of ratings contributing to the overall score |
ugcStats.ratings.compensationAndBenefitsRating.value | Compensation & benefits rating |
ugcStats.ratings.cultureAndValuesRating.value | Culture & values rating |
ugcStats.ratings.jobSecurityAndAdvancementRating.value | Job security & advancement rating |
ugcStats.ratings.managementRating.value | Management rating |
ugcStats.ratings.workLifeBalanceRating.value | Work-life balance rating |
ugcStats.ratingHistogram | Array of 5 integers — count of [1★, 2★, 3★, 4★, 5★] reviews |
ugcStats.recommendFriend.yesCount | Number of reviewers who would recommend to a friend |
ugcStats.recommendFriend.noCount | Number who would not |
ugcStats.ceoApproval.yesCount | CEO approval yes votes |
ugcStats.ceoApproval.noCount | CEO approval no votes |
ugcStats.salarySatisfaction.yesCount | Salary satisfaction yes votes |
ugcStats.salaryCostOfLiving.yesCount | Salary 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).
| Dimension | Field |
|---|---|
| Overall | ugcStats.happiness.overall |
| Achievement | ugcStats.happiness.achievement |
| Appreciation | ugcStats.happiness.appreciation |
| Belonging | ugcStats.happiness.belonging |
| Compensation | ugcStats.happiness.compensation |
| Energy | ugcStats.happiness.energy |
| Flexibility | ugcStats.happiness.flexibility |
| Inclusion | ugcStats.happiness.inclusion |
| Learning | ugcStats.happiness.learning |
| Management | ugcStats.happiness.management |
| Purpose | ugcStats.happiness.purpose |
| Support | ugcStats.happiness.support |
| Trust | ugcStats.happiness.trust |
Interview data
| Field | Description |
|---|---|
ugcStats.interview.difficulty.average | Average difficulty (EASY, AVERAGE, DIFFICULT) |
ugcStats.interview.difficulty.totalCount | Number of difficulty ratings |
ugcStats.interview.experience.average | Overall interview experience (POSITIVE, AVERAGE, NEGATIVE) |
ugcStats.interview.experience.totalCount | Number of experience ratings |
ugcStats.interview.processLength.average | Typical process length (A_WEEK, TWO_TO_FOUR_WEEKS, etc.) |
ugcStats.interview.processLength.totalCount | Number 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
- Run Indeed Jobs Scraper to collect job listings for the companies you care about
- Copy the
defaultDatasetIdfrom the jobs run - Open this Actor and paste the dataset ID into the
datasetIdfield - Set
countryto match the country you scraped jobs from - Click Start
- 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"}
Option C — company name search
{"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
| Parameter | Required | Description |
|---|---|---|
country | Yes | Indeed country market (see full list below). Used to scope the profile fetch |
datasetId | No* | Default dataset ID from an Indeed Jobs Scraper run |
companyKeys | No* | JSON array of employer key strings |
companyName | No* | 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.
| Country | Code | Country | Code | Country | Code |
|---|---|---|---|---|---|
| Argentina | ar | Hungary | hu | Saudi Arabia | sa |
| Australia | au | India | in | Singapore | sg |
| Austria | at | Indonesia | id | South Africa | za |
| Bahrain | bh | Ireland | ie | South Korea | kr |
| Belgium | be | Israel | il | Spain | es |
| Brazil | br | Italy | it | Sweden | se |
| Canada | ca | Japan | jp | Switzerland | ch |
| Chile | cl | Kuwait | kw | Taiwan | tw |
| China | cn | Luxembourg | lu | Thailand | th |
| Colombia | co | Malaysia | malaysia | Turkey | tr |
| Costa Rica | cr | Mexico | mx | Ukraine | ua |
| Czech Republic | cz | Morocco | ma | United Arab Emirates | ae |
| Denmark | dk | Netherlands | nl | United Kingdom | uk |
| Ecuador | ec | New Zealand | nz | United States | us |
| Egypt | eg | Nigeria | ng | Uruguay | uy |
| Finland | fi | Norway | no | Venezuela | ve |
| France | fr | Oman | om | Vietnam | vn |
| Germany | de | Pakistan | pk | — | — |
| Greece | gr | Panama | pa | — | — |
| Hong Kong | hk | Peru | pe | — | — |
| — | — | Philippines | ph | — | — |
| — | — | Poland | pl | — | — |
| — | — | Portugal | pt | — | — |
| — | — | Qatar | qa | — | — |
| — | — | Romania | ro | — | — |
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.
| Event | Cost |
|---|---|
| Per result (dataset item) | $0.0019 |
| Per run start | $0.00005 |
Volume discounts apply automatically based on your Apify subscription tier:
| Tier | Per 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 ApifyClientclient = ApifyClient("YOUR_API_TOKEN")# Step 1: run the jobs scraperjobs_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 scrapercompanies_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 scraperconst jobsRun = await client.actor('JOBS_ACTOR_ID').call({query: 'product manager',country: 'fr',});// Step 2: pipe the dataset into the companies scraperconst 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.