Multi-Platform Job Scraper avatar

Multi-Platform Job Scraper

Pricing

from $12.00 / 1,000 results

Go to Apify Store
Multi-Platform Job Scraper

Multi-Platform Job Scraper

Scrape job listings from LinkedIn, Indeed, Glassdoor, ZipRecruiter, Naukri, Bayt, Greenhouse, Lever, and Ashby in a single run. Extracts title, company, location, salary, description, and more with advanced filters.

Pricing

from $12.00 / 1,000 results

Rating

5.0

(1)

Developer

Mediocre_Interest

Mediocre_Interest

Maintained by Community

Actor stats

2

Bookmarked

6

Total users

1

Monthly active users

5 days ago

Last modified

Share

Scrape job listings from 10 job platforms in a single run — LinkedIn, Indeed, Glassdoor, ZipRecruiter, Naukri, Bayt, Greenhouse, Lever and Ashby. Export clean, normalized data to JSON, CSV, Excel, or any downstream tool via the Apify API.


Overview

Multi-Platform Job Scraper aggregates structured job data from the world's leading general and regional job boards, plus direct company ATS portals, in a single Apify Actor run. Give it a list of keywords, a location, and the platforms you care about — it returns clean, normalized job records across all of them.

Ideal for job market research, competitor hiring intelligence, lead generation, salary benchmarking, and building automated job alert pipelines.


Features

  • 9 platforms in one run — LinkedIn, Indeed, Glassdoor, ZipRecruiter, Naukri, Bayt, Greenhouse, Lever, Ashby
  • Multi-keyword search — each keyword runs as an independent search on every selected platform
  • Global + regional coverage — general boards, US-focused (ZipRecruiter), India (Naukri), Middle East (Bayt), and direct ATS portals (Greenhouse, Lever, Ashby)
  • Normalized output — every platform produces the same schema: source, title, company, location, salary, postedDate, description, jobUrl, and more
  • Advanced filters — date posted, seniority level, job type, remote-only, minimum salary (LinkedIn & Indeed)
  • Smart salary extraction — extracts compensation from job descriptions when structured salary data is absent
  • Anti-bot protection for LinkedIn — browser fingerprinting, session pooling, randomized request delays, residential proxy support
  • Flexible proxy support — Apify Proxy (Residential recommended) or custom proxy URLs
  • Multiple export formats — JSON, CSV, Excel, XML, JSON Lines via the Apify Dataset API

Use Cases

Use CaseExample
Job market researchSearch "Data Scientist" across LinkedIn + Indeed + Glassdoor to benchmark demand and compensation
Competitor hiring intelligenceMonitor which roles a rival is actively posting by searching their Greenhouse or Lever board
Lead generationIdentify companies hiring specific roles — a proven buying signal for B2B SaaS and staffing agencies
Job alert pipelineSchedule daily runs; trigger Zapier or Make notifications when new matching roles appear
Salary benchmarkingAggregate salary data across platforms for a specific role and city
ATS monitoringTrack new openings across 175+ tech companies using Greenhouse, Lever, and Ashby
Academic researchCollect structured job market data for labor economics studies

Platforms

PlatformRegion
LinkedInGlobal
IndeedGlobal
GlassdoorGlobal
ZipRecruiterUnited States
NaukriIndia
BaytMiddle East
GreenhouseGlobal
LeverGlobal
AshbyGlobal

Input

FieldTypeRequiredDefaultDescription
platformsArray["linkedin"]Platforms to scrape. Valid values: linkedin, indeed, glassdoor, zip_recruiter, naukri, bayt, greenhouse, lever, ashby
keywordsArray["Software Engineer"]Job search terms. Each keyword triggers a separate search on every selected platform. Example: ["React Developer", "Frontend Engineer"]
locationStringCity, state or country. Example: "London", "New York, NY"
minJobsInteger10Target number of jobs per keyword per platform. Total ≈ minJobs × keywords × platforms
salarySelectMinimum annual salary (USD). Options: $40,000+ through $200,000+. Supported on LinkedIn and Indeed only
postedDateSelectMaximum job age. Options: Past 24 hours, Past week, Past month
jobTypeSelectEmployment type. Options: Full-time, Part-time, Contract, Temporary, Volunteer, Internship, Other
jobLocationTypeSelectallall = any location. remote = remote-only positions
seniorityLevelSelectSeniority filter (LinkedIn only). Options: Internship, Entry level, Associate, Mid-Senior level, Director, Executive
proxyConfigurationObjectProxy settings. Residential proxies strongly recommended for LinkedIn

Example Input

{
"platforms": ["linkedin", "indeed", "greenhouse"],
"keywords": ["Software Engineer", "Backend Developer"],
"location": "San Francisco, CA",
"minJobs": 25,
"jobType": "Full-time",
"postedDate": "Past week",
"jobLocationType": "all",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Tip: Total results ≈ minJobs × keywords × platforms. With the example above: 25 × 2 × 3 = up to 150 jobs. Actual count may be lower if fewer results exist on a platform.


Output

Each scraped job is stored as a JSON object in the Apify Dataset.

FieldTypeDescription
sourceStringPlatform — e.g. "linkedin", "indeed", "greenhouse"
titleString | nullJob title
companyString | nullCompany name
locationString | nullJob location
jobUrlStringDirect link to the original posting
salaryString | nullSalary (structured data or extracted from description)
postedDateString | nullWhen the job was posted
descriptionString | nullFull job description text
applicantsString | nullNumber of applicants (LinkedIn only)
jobTypeString | nullEmployment type
seniorityLevelString | nullSeniority level (LinkedIn only)
industryString | nullCompany industry (LinkedIn only)
scrapedAtString (ISO 8601)UTC timestamp when this record was collected

Example Output Record

{
"source": "linkedin",
"title": "Senior Software Engineer",
"company": "Acme Corp",
"location": "San Francisco, CA",
"jobUrl": "https://www.linkedin.com/jobs/view/123456789",
"salary": "$140,000–$180,000/year",
"postedDate": "2 days ago",
"description": "We are looking for a Senior Software Engineer to join our growing team...",
"applicants": "47 applicants",
"jobType": "Full-time",
"seniorityLevel": "Mid-Senior level",
"industry": "Computer Software",
"scrapedAt": "2025-06-01T12:00:00.000Z"
}

Integrations

ToolHow to Connect
ZapierApify Zapier app → "Actor Run Finished" trigger → access dataset items
Make (Integromat)Apify Make module → schedule runs and process results
n8nHTTP Request node or community Apify n8n node
REST APIGET https://api.apify.com/v2/datasets/{datasetId}/items — JSON, CSV, Excel, XML, RSS
WebhooksApify webhook fires on "Run succeeded" → POST results to your own endpoint
Apify SchedulerAutomate recurring runs (daily, weekly, or any cron expression)
Google SheetsExport via the Apify → Google Sheets integration in the Console

FAQ


Troubleshooting

LinkedIn returns 0 results

  • Enable Apify Residential Proxy (useApifyProxy: true, group RESIDENTIAL).
  • Reduce minJobs to 10 or fewer for initial tests.
  • Use broader keywords — LinkedIn's public API returns fewer results for very specific queries.
  • Some proxy IP ranges are geo-blocked by LinkedIn; try a different proxy country or group.

Indeed / Glassdoor returns 0 results

  • Verify the keyword + location combination returns results on the platform's website directly.
  • Try without a location filter first to confirm the keyword works.
  • Check proxy connectivity — test without a proxy first at low volumes.

Greenhouse / Lever / Ashby returns no matches

  • Try broader keywords — matching is done on job titles only.

Salary is always null

  • Many jobs do not publish salary data. The Actor tries extraction from descriptions as a fallback.
  • The salary filter limits which jobs are returned; it does not guarantee that returned jobs include salary text.

Limitations

LimitationDetails
LinkedIn result cap1,000 per keyword (LinkedIn public limit)
LinkedIn rate limitingBot-sensitive; residential proxies required
Salary filterLinkedIn and Indeed only
Seniority filterLinkedIn only
Applicant countLinkedIn only
DeduplicationSame job may appear under multiple keywords