Multi-Platform Job Scraper
Pricing
from $12.00 / 1,000 results
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
Maintained by CommunityActor stats
2
Bookmarked
6
Total users
1
Monthly active users
5 days ago
Last modified
Categories
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 Case | Example |
|---|---|
| Job market research | Search "Data Scientist" across LinkedIn + Indeed + Glassdoor to benchmark demand and compensation |
| Competitor hiring intelligence | Monitor which roles a rival is actively posting by searching their Greenhouse or Lever board |
| Lead generation | Identify companies hiring specific roles — a proven buying signal for B2B SaaS and staffing agencies |
| Job alert pipeline | Schedule daily runs; trigger Zapier or Make notifications when new matching roles appear |
| Salary benchmarking | Aggregate salary data across platforms for a specific role and city |
| ATS monitoring | Track new openings across 175+ tech companies using Greenhouse, Lever, and Ashby |
| Academic research | Collect structured job market data for labor economics studies |
Platforms
| Platform | Region |
|---|---|
| Global | |
| Indeed | Global |
| Glassdoor | Global |
| ZipRecruiter | United States |
| Naukri | India |
| Bayt | Middle East |
| Greenhouse | Global |
| Lever | Global |
| Ashby | Global |
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
platforms | Array | ✅ | ["linkedin"] | Platforms to scrape. Valid values: linkedin, indeed, glassdoor, zip_recruiter, naukri, bayt, greenhouse, lever, ashby |
keywords | Array | ✅ | ["Software Engineer"] | Job search terms. Each keyword triggers a separate search on every selected platform. Example: ["React Developer", "Frontend Engineer"] |
location | String | — | — | City, state or country. Example: "London", "New York, NY" |
minJobs | Integer | — | 10 | Target number of jobs per keyword per platform. Total ≈ minJobs × keywords × platforms |
salary | Select | — | — | Minimum annual salary (USD). Options: $40,000+ through $200,000+. Supported on LinkedIn and Indeed only |
postedDate | Select | — | — | Maximum job age. Options: Past 24 hours, Past week, Past month |
jobType | Select | — | — | Employment type. Options: Full-time, Part-time, Contract, Temporary, Volunteer, Internship, Other |
jobLocationType | Select | — | all | all = any location. remote = remote-only positions |
seniorityLevel | Select | — | — | Seniority filter (LinkedIn only). Options: Internship, Entry level, Associate, Mid-Senior level, Director, Executive |
proxyConfiguration | Object | — | — | Proxy 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.
| Field | Type | Description |
|---|---|---|
source | String | Platform — e.g. "linkedin", "indeed", "greenhouse" |
title | String | null | Job title |
company | String | null | Company name |
location | String | null | Job location |
jobUrl | String | Direct link to the original posting |
salary | String | null | Salary (structured data or extracted from description) |
postedDate | String | null | When the job was posted |
description | String | null | Full job description text |
applicants | String | null | Number of applicants (LinkedIn only) |
jobType | String | null | Employment type |
seniorityLevel | String | null | Seniority level (LinkedIn only) |
industry | String | null | Company industry (LinkedIn only) |
scrapedAt | String (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
| Tool | How to Connect |
|---|---|
| Zapier | Apify Zapier app → "Actor Run Finished" trigger → access dataset items |
| Make (Integromat) | Apify Make module → schedule runs and process results |
| n8n | HTTP Request node or community Apify n8n node |
| REST API | GET https://api.apify.com/v2/datasets/{datasetId}/items — JSON, CSV, Excel, XML, RSS |
| Webhooks | Apify webhook fires on "Run succeeded" → POST results to your own endpoint |
| Apify Scheduler | Automate recurring runs (daily, weekly, or any cron expression) |
| Google Sheets | Export via the Apify → Google Sheets integration in the Console |
FAQ
Troubleshooting
LinkedIn returns 0 results
- Enable Apify Residential Proxy (
useApifyProxy: true, groupRESIDENTIAL). - Reduce
minJobsto 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
| Limitation | Details |
|---|---|
| LinkedIn result cap | 1,000 per keyword (LinkedIn public limit) |
| LinkedIn rate limiting | Bot-sensitive; residential proxies required |
| Salary filter | LinkedIn and Indeed only |
| Seniority filter | LinkedIn only |
| Applicant count | LinkedIn only |
| Deduplication | Same job may appear under multiple keywords |