Indeed Salary Analyzer avatar
Indeed Salary Analyzer

Pricing

Pay per event

Go to Apify Store
Indeed Salary Analyzer

Indeed Salary Analyzer

Developed by

BarriereFix

BarriereFix

Maintained by Community

Comprehensive salary intelligence from Indeed - Extract and analyze compensation data for benchmarking, market research, and HR analytics.

0.0 (0)

Pricing

Pay per event

0

1

1

Last modified

a day ago

Indeed Salary Analyzer - Compensation Benchmarking Data

Get aggregate salary data from Indeed.com for compensation benchmarking, market research, and HR analytics.

Apify Actor Made with TypeScript

Extract salary ranges, averages, and sample sizes from Indeed's compensation database. Perfect for HR professionals, recruiters, compensation analysts, and job seekers researching market rates.

⚠️ IMPORTANT: This actor requires residential proxies to work on Apify platform. Enable "Use Residential Proxies" in the input settings (adds ~$0.01-0.05 per run). See setup


🎯 What You Get

  • 💰 Salary Ranges: Min, max, and average salaries from Indeed's aggregate data
  • 📊 Sample Sizes: Number of salary reports backing each data point (e.g., 318 samples)
  • 🎯 Confidence Scores: Quality metrics (0-100) based on sample size and data completeness
  • ⚡ Hourly Equivalents: Normalized hourly rates for easy comparison across pay periods
  • 📈 Historical Tracking: Monitor salary changes over time with incremental scraping
  • 🔄 Change Detection: Track NEW, UPDATED, and UNCHANGED salary data across runs
  • 🎚️ Quality Filtering: Filter by minimum sample size and confidence score
  • 🛡️ Reliable: Uses residential proxies and stealth techniques to bypass Indeed's anti-bot protection

📋 Use Cases

For HR & Recruitment

  • Set competitive salary ranges for job offers
  • Benchmark compensation against market rates
  • Budget for hiring plans with accurate salary data
  • Identify salary trends by location and experience level

For Compensation Analysts

  • Conduct salary surveys across industries
  • Analyze pay equity across locations
  • Track salary inflation and market changes
  • Generate compensation reports for leadership

For Job Seekers

  • Research salary expectations for target roles
  • Compare salaries across different locations
  • Understand compensation by experience level
  • Negotiate offers with market data

For Market Researchers

  • Track compensation trends in specific industries
  • Analyze remote vs. on-site salary differences
  • Monitor company-specific salary competitiveness
  • Generate industry salary reports

⚠️ IMPORTANT: Residential Proxies Required

This actor requires residential proxies to bypass Indeed's anti-bot protection on Apify platform.

Why Residential Proxies?

Indeed.com blocks all requests from datacenter IPs (including Apify's infrastructure). Without residential proxies, you'll get ERR_EMPTY_RESPONSE errors and zero results.

How to Enable

In the Apify Console UI:

  1. Open the actor input form
  2. Find "Use Residential Proxies" checkbox
  3. Enable it (check the box)
  4. Run the actor

Via API/JSON:

{
"jobTitles": ["Software Engineer"],
"locations": ["San Francisco, CA"],
"useResidentialProxies": true // ← REQUIRED
}

Cost

  • Residential proxies: ~$2-5 per GB
  • Typical run: 1-10 MB (10-100 salary records)
  • Estimated cost: $0.01-0.05 per run + compute costs

The actor will NOT work without this setting enabled on Apify platform.


🚀 Quick Start

Example 1: Search by Job Title

{
"searchMode": "job_titles",
"jobTitles": ["Software Engineer", "Data Scientist"],
"locations": ["San Francisco, CA", "New York, NY"],
"maxResults": 100,
"minSampleSize": 10,
"useResidentialProxies": true
}

Example 2: Location Comparison

{
"searchMode": "locations",
"locations": ["San Francisco, CA", "Austin, TX", "Remote"],
"jobTitles": ["Frontend Developer"],
"maxResults": 150
}

📥 Input Configuration

Required Fields

FieldTypeDescription
searchModestringHow to search: job_titles, companies, locations, or keywords

Search Parameters

FieldTypeDescriptionDefault
jobTitlesarrayList of job titles to analyze[]
companiesarrayList of companies to analyze[]
locationsarrayGeographic locations (e.g., "San Francisco, CA")[]
keywordsarrayKeywords to search for[]
experienceLevelsarrayFilter by: entry, mid, senior, lead, all['all']
industryFilterarrayOptional industry filters[]

Output Configuration

FieldTypeDescriptionDefault
maxResultsintegerMaximum salary records to scrape (1-10,000)10
includeSalaryRangebooleanInclude min/max rangestrue
includeHistoricalDatabooleanTrack changes across runstrue
minSampleSizeintegerMinimum salaries required for a record0
onlyVerifiedSalariesbooleanOnly high-confidence datafalse

Performance & Anti-Blocking

FieldTypeDescriptionDefault
useResidentialProxiesbooleanEnable for high-volume scrapingfalse
requestDelayintegerDelay between requests (ms)2000
maxConcurrencyintegerConcurrent requests (1-10)3

📤 Output Data

Salary Record Schema

{
"schemaVersion": "1.0.0",
"jobTitle": "Software Engineer",
"location": "San Francisco, CA",
"salaryMin": 150000,
"salaryMax": 200000,
"averageSalary": 175000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"hourlyMin": 72.12,
"hourlyMax": 96.15,
"hourlyAverage": 84.13,
"sampleSize": 318,
"confidenceScore": 100,
"dataQuality": "high",
"sourceUrl": "https://www.indeed.com/career/software-engineer/salaries/san-francisco-ca",
"scrapedAt": "2025-10-09T12:00:00Z",
"changeType": "NEW",
"firstSeenAt": "2025-10-09T12:00:00Z",
"lastSeenAt": "2025-10-09T12:00:00Z",
"version": "1.0.0"
}

Field Descriptions

FieldDescription
jobTitleJob title or position name
locationGeographic location
salaryMin/MaxSalary range boundaries (annual)
averageSalaryAverage salary from Indeed's sample data
salaryCurrencyCurrency code (USD, EUR, GBP, etc.)
salaryPeriodPayment period (hour, year, month)
hourly*Normalized hourly rates for easy comparison
sampleSizeNumber of salary reports in Indeed's dataset
confidenceScoreData reliability score (0-100)
dataQualityQuality assessment: high, medium, low
changeTypeChange tracking: NEW, UPDATED, or UNCHANGED
firstSeenAtFirst time this data was scraped
lastSeenAtLast time this data was updated

📊 Dataset Views

The actor provides 2 specialized views in the Apify Console:

1. Overview

All salary records with key compensation data including ranges, averages, sample sizes, and quality scores - perfect for general benchmarking and analysis.

2. Salary Ranges

Focused view on salary ranges with min/max/average data and confidence scoring - ideal for compensation planning and quick comparisons.


💡 Best Practices

For Accurate Results

  1. Use specific job titles: "Senior Software Engineer" vs. "Engineer"
  2. Include locations: Salaries vary significantly by region
  3. Set appropriate sample size: minSampleSize: 20 for high reliability
  4. Enable historical tracking: Monitor trends over time
  5. Always enable residential proxies: Required on Apify platform

For Cost Optimization

  1. Start with lower maxResults: Test with 10-20 records first
  2. Increase request delay: Higher delays = more stable scraping
  3. Lower concurrency: Use maxConcurrency: 1-2 for best reliability

For HR/Recruitment

  1. Search mode: job_titles: Most relevant for compensation planning
  2. Enable salary ranges: includeSalaryRange: true (default)
  3. Set minSampleSize: Use minSampleSize: 20 for reliable data
  4. Track changes: Run weekly to monitor market shifts

🔄 Scheduling

Weekly monitoring (stay current with market):

Cron: 0 9 * * 1
Description: Every Monday at 9 AM

Monthly reports (trend analysis):

Cron: 0 10 1 * *
Description: 1st of each month at 10 AM

Daily tracking (high-priority positions):

Cron: 0 8 * * *
Description: Every day at 8 AM

💰 Pricing

Pay-Per-Event Model: You pay only for salary records scraped.

  • Event Name: salary-record-ingested
  • Typical Cost: $0.01-0.02 per salary record
  • No Free Tier: Premium B2B positioning
  • Transparent Billing: Track costs in real-time

Example Costs

RecordsEstimated Cost
100 records$1-2
500 records$5-10
1,000 records$10-20
5,000 records$50-100

Note: Configure pricing in Apify Console → Actor → Monetization after deployment.


Important Considerations

  • Indeed's Terms of Service prohibit automated scraping
  • This actor is for educational and research purposes only
  • Always respect Indeed's robots.txt and rate limits
  • Consider using Indeed's official APIs for commercial use
  • Publicly available data may be scraped under fair use, but verify local laws

Responsible Scraping

  • Use reasonable request delays (2000ms+)
  • Limit concurrent requests (max 3-5)
  • Don't scrape personal identifiable information
  • Respect website performance and availability

🔧 Technical Details

Architecture

  • Runtime: Node.js 20+ with TypeScript
  • Framework: Crawlee (CheerioCrawler for efficiency)
  • Proxy Support: Apify Proxy (Datacenter & Residential)
  • State Management: Apify Key-Value Store
  • Output: Apify Dataset with 5 views

Data Processing Pipeline

  1. Scrape: Extract raw salary data from Indeed pages
  2. Normalize: Convert to standard format with hourly rates
  3. Validate: Quality checks and confidence scoring
  4. Deduplicate: Remove duplicates (in-run and historical)
  5. Enrich: Add change detection and metadata
  6. Save: Store with pay-per-event billing

Anti-Bot Strategy

  • Residential proxies via Apify Proxy
  • User-Agent rotation
  • Request delays (configurable)
  • Session management
  • Exponential backoff on errors
  • Circuit breaker pattern

📈 Performance

Expected Metrics

  • Speed: ~10-20 records/minute (with 2s delay)
  • Success Rate: Target >93% (matching Indeed actor average)
  • Memory: ~500MB peak
  • CPU: Low (HTTP-based, not browser automation)

Optimization Tips

  1. HTTP over Playwright: 10x faster for Indeed's JSON-based data
  2. Batch requests: Search multiple titles/locations efficiently
  3. State management: Avoid re-scraping unchanged data
  4. Proxy selection: Use datacenter for speed, residential for reliability

🐛 Troubleshooting

Common Issues

Issue: Getting blocked by Indeed

  • Solution: Enable residential proxies, increase request delay

Issue: Low confidence scores

  • Solution: Increase minSampleSize, enable onlyVerifiedSalaries

Issue: No results found

  • Solution: Check job title spelling, try broader searches

Issue: Duplicate records

  • Solution: Enable includeHistoricalData for better deduplication

Issue: Too slow

  • Solution: Disable includeJobPostings, increase maxConcurrency (with proxies)

📞 Support

Questions or issues?


📝 Changelog

v1.0.0 (2025-10-09)

  • Initial release
  • Multi-mode search (job titles, companies, locations, keywords)
  • Salary benchmarking with confidence scores
  • Historical tracking and change detection
  • Pay-per-event monetization
  • 5 specialized dataset views

🏆 Why Choose This Actor?

Focused on Salary Intelligence: Unlike generic job scrapers, extracts only aggregate compensation data ✅ Quality Metrics: Confidence scores and sample sizes for reliable decision-making ✅ Clean Output: No null values - only fields with actual data ✅ Historical Tracking: Monitor market changes over time with change detection ✅ Normalized Data: Hourly rate equivalents for easy comparison across pay periods ✅ B2B-Optimized: Built for HR professionals, recruiters, and compensation analysts ✅ Pay-Per-Result: Cost-effective pricing - pay only for salary records extracted ✅ Well-Maintained: Built with TypeScript following Apify best practices


📞 Support & Feedback


🔑 Keywords

Indeed salary data, compensation benchmarking, salary scraper, market salary research, HR analytics, salary intelligence, compensation analysis, Indeed data extraction, salary ranges, pay scale data, compensation data API, Indeed API alternative, salary survey data, market rate analysis, compensation planning tool


Built by Barrierefix - Enabling data-driven compensation decisions