Multi-Platform Job Scraper avatar

Multi-Platform Job Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Multi-Platform Job Scraper

Multi-Platform Job Scraper

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

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

Mediocre_Interest

Mediocre_Interest

Maintained by Community

Actor stats

2

Bookmarked

23

Total users

3

Monthly active users

3 days ago

Last modified

Share

Multi-Platform Job Scraper scrapes job listings from LinkedIn, Indeed, Naukri, Bayt, Greenhouse, Lever and Ashby in a single run and returns every job in the same clean format: title, company, location, salary, posting date, full description and a link to the original posting. Type a job title, pick the job boards, and press Start. There is nothing to install, no login, and no cookies to paste.

  • One dataset for every job board — general boards (LinkedIn, Indeed), regional boards (Naukri for India, Bayt for the Middle East), and the public career boards of 240+ companies on Greenhouse, Lever and Ashby.
  • One row per job on each platform — a job that matches several of your keywords is returned, and charged, once.
  • A status message that explains itself — every run ends with how many jobs each platform returned and why any returned none.
  • Ready for automation — export JSON, CSV or Excel, call it from the Apify API, schedule it, or send results to Zapier, Make, n8n or Google Sheets.

What does Multi-Platform Job Scraper do?

Every job board has its own search box, its own filters and its own data format, and the career boards that companies run on Greenhouse, Lever and Ashby cannot be searched from any of them. Comparing roles across boards means running the same search several times and stitching the results together by hand.

Multi-Platform Job Scraper runs each of your keywords as its own search on every platform you select, and writes every job it finds as one row with the same columns: source, title, company, location, salary, postedDate, description, jobUrl and more. When a posting has no structured salary, the Actor extracts the compensation from the job description. Jobs are saved as they are found, so a run you stop early keeps what it already collected.

It is built for job market research, lead generation (a company hiring for a role is a company with budget for it), salary benchmarking, labor-market research, and job alert pipelines that run on a schedule.

Which job boards does it scrape?

PlatformRegionWhat to set
LinkedInGlobalWorks through the default Apify Proxy. Switch to the Residential group if it returns fewer jobs than you asked for
Indeed60+ countries, chosen with Country (Indeed)Keep Apify Proxy on (the default). Indeed refuses connections from Apify's servers without it
NaukriIndiaNothing
BaytMiddle East and North AfricaThe Residential proxy group. Bayt's Cloudflare check passes reliably through it, and only some of the time through the default proxy
GreenhouseGlobalNothing. Greenhouse, Lever and Ashby are public APIs and need no proxy
LeverGlobalNothing
AshbyGlobalNothing
Glassdoor—Switched off for now. See What happened to Glassdoor and ZipRecruiter?
ZipRecruiter—Switched off for now. See What happened to Glassdoor and ZipRecruiter?

Greenhouse, Lever and Ashby are searched across a fixed list of 240+ company career boards, not every company that uses them.

Which filters work on which job board?

FilterWhere it applies
LocationEvery platform
Country (Indeed)Indeed only; the other platforms use Location instead
Date postedEvery platform
Job location typeEvery platform
Job typeLinkedIn and Ashby apply every option; Indeed applies Full-time, Part-time, Contract and Internship
Minimum salaryLinkedIn only
Seniority levelLinkedIn only

Why use Multi-Platform Job Scraper?

  • One run instead of seven searches. Pick the job boards once; every keyword runs on each of them and lands in one table.
  • Company career boards included. Greenhouse, Lever and Ashby boards are where many tech companies post first, and no job board searches them.
  • Nothing to set up. No account on any job board, no login, no cookies and no API key. Apify Proxy is on by default.
  • Pay for jobs, not for time. You are charged per job in the dataset, and a platform that returns nothing costs nothing.
  • Clear about failures. One platform failing never stops the others, and the status message names the reason, for example Indeed 0 (connection refused; turn on Apify Proxy).
  • Built for pipelines. Schedule it, call it from the API, and send the results to Zapier, Make, n8n, Google Sheets or your own webhook.

How to scrape jobs from several job boards at once

  1. Open Multi-Platform Job Scraper in Apify Console and go to the Input tab.
  2. Under Platforms, select the job boards to search, for example LinkedIn, Indeed and Greenhouse.
  3. Under Keywords, add one or more job titles, such as Data Analyst or Backend Developer. Each keyword runs as its own search.
  4. Optionally set Location, Country (Indeed), Date posted, Job type or Job location type.
  5. Set Min jobs per keyword: the number of jobs to collect for each keyword on each platform.
  6. Click Start. When the run finishes, its status message counts the jobs from each platform.
  7. Open the Output tab to browse the jobs, or export them as JSON, CSV or Excel.

Input

FieldWhat it does
Platforms (platforms, required)Job boards to search: linkedin, indeed, naukri, bayt, greenhouse, lever, ashby. Default ["linkedin"]
Keywords (keywords, required)Job search terms. Each keyword triggers a separate search on every selected platform. Example: ["React Developer", "Frontend Engineer"]
Location (location)City, state or country, for example "London" or "New York, NY". Leave blank for no location filter
Country (Indeed) (country)Country site to search on Indeed, for example uk for London. Default usa. Other platforms use Location
Minimum salary (salary)Minimum annual salary in USD, $40,000+ through $200,000+. LinkedIn only
Date posted (postedDate)Maximum job age: Past 24 hours, Past week or Past month. Leave blank for any time
Seniority level (seniorityLevel)Internship, Entry level, Associate, Mid-Senior level, Director or Executive. LinkedIn only
Job type (jobType)Full-time, Part-time, Contract, Temporary, Volunteer, Internship or Other. See the filter table for where it applies
Job location type (jobLocationType)all (default) for any location, or remote for remote positions only
Min jobs per keyword (minJobs)Target number of jobs per keyword per platform. Default 10. Total ≈ minJobs × keywords × platforms
Proxy configuration (proxyConfiguration)Proxy settings. Apify Proxy is on by default, because Indeed refuses Apify's servers without one

Search LinkedIn, Indeed and Greenhouse for two roles in San Francisco, posted in the past week:

{
"platforms": ["linkedin", "indeed", "greenhouse"],
"keywords": ["Software Engineer", "Backend Developer"],
"location": "San Francisco, CA",
"country": "usa",
"minJobs": 25,
"jobType": "Full-time",
"postedDate": "Past week"
}

Total results ≈ minJobs × keywords × platforms, so this input asks for up to 25 × 2 × 3 = 150 jobs. The actual count may be lower if fewer matching jobs exist on a platform.

Search the career boards of 240+ companies on Greenhouse, Lever and Ashby for remote data engineering roles:

{
"platforms": ["greenhouse", "lever", "ashby"],
"keywords": ["Data Engineer"],
"jobLocationType": "remote",
"minJobs": 10
}

Output

Each job is one row in the run's default dataset, shown in the Output tab. Export the dataset as JSON, CSV, Excel, XML or JSON Lines from the Output tab or through the Dataset API.

A LinkedIn row produced by the first input above (description shortened here):

{
"source": "linkedin",
"title": "Senior Software Engineer, Backend (All Teams)",
"company": "DoorDash",
"location": "San Francisco, CA",
"jobUrl": "https://www.linkedin.com/jobs/view/senior-software-engineer-backend-all-teams-at-doordash-4476478584",
"salary": "$159,800—$235,000",
"postedDate": "5 days ago",
"description": "About The TeamDoorDash is building the world's most reliable on-demand, logistics engine for delivery! …",
"applicants": "87 applicants",
"jobType": "Full-time",
"seniorityLevel": "Mid-Senior level",
"industry": "Software Development",
"scrapedAt": "2026-10-19T11:31:06.354Z"
}

What does each job row contain?

FieldTypeDescription
sourceStringPlatform, e.g. "linkedin", "indeed", "greenhouse"
titleString | nullJob title
companyString | nullCompany name
locationString | nullJob location
jobUrlStringDirect link to the original posting
salaryString | nullSalary, from the posting's structured data or extracted from its description
postedDateString | nullWhen the job was posted, in the platform's own format ("5 days ago", "2026-10-16")
descriptionString | nullFull job description text
applicantsString | nullNumber of applicants (LinkedIn only)
jobTypeString | nullEmployment type
seniorityLevelString | nullSeniority level (LinkedIn only)
industryString | nullCompany industry on LinkedIn and Naukri; the hiring department on Greenhouse, Lever and Ashby
scrapedAtString (ISO 8601)UTC timestamp when this record was collected

How much does it cost to scrape jobs?

The Actor is pay per event. You are charged for the jobs you receive, not for how long a run takes. Current rates for each Apify plan are on the Pricing tab.

EventChargedWhen
ResultPer job in the datasetEach job written to the run's dataset
Actor StartOnce per GB of memory, at startWhen a run begins, minimum one event

The number of jobs is roughly minJobs × keywords × platforms, so those three numbers set the cost. A platform that returns nothing costs nothing. A job that matches two of your keywords is returned, and charged, once on each platform.

How to run Multi-Platform Job Scraper from the API or an integration

Start a run and get its jobs back in one call with the run-sync-get-dataset-items endpoint. Replace <YOUR_APIFY_TOKEN> with your token from Settings → API & Integrations in Apify Console:

curl -X POST "https://api.apify.com/v2/acts/mediocre_interest~multi-platform-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"platforms": ["greenhouse", "lever", "ashby"], "keywords": ["Product Manager"], "minJobs": 10}'

The call waits for the run to finish and returns the jobs as a JSON array, one object per job. Add &format=csv to the URL for CSV, or &fields=title,company,location,jobUrl to keep only those columns. A synchronous call waits up to 5 minutes; for bigger runs, start the run with the runs endpoint and read the dataset when it finishes.

ToolHow to Connect
ZapierApify Zapier app → "Actor Run Finished" trigger → access dataset items
Make (Integromat)Apify Make module → schedule runs and process results
n8nApify node (a verified community node) or HTTP Request 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

How do I connect results to Zapier or Make?

Configure an Apify webhook to fire on "Run succeeded". In Zapier, use the "Catch Hook" trigger. In Make, use the "Custom Webhook" module. The webhook payload includes the dataset ID for fetching items via the Dataset API.

Can I run this on a schedule?

Yes. Use the Apify Scheduler in the Console to automate recurring runs at any cron interval, for example a daily search with Date posted set to Past 24 hours for a job alert feed.

Tips for better results

  • Keep Apify Proxy on. Indeed refuses connections from Apify's servers without it.
  • Use the Residential proxy group for Bayt, and for LinkedIn when it returns fewer jobs than you asked for.
  • Match Country to Location for Indeed. With the default usa, a search for London goes to the US Indeed site.
  • Use broad keywords on Greenhouse, Lever and Ashby. A job matches when the keyword appears in its title, department or description.
  • Start small. A minJobs of 10–25 is enough for a first run; raise it once the results look right.

FAQ

Which platforms require a proxy?

Apify Proxy is on by default, and you should leave it on. Indeed refuses connections from Apify's servers without a proxy. LinkedIn works through the default proxy at moderate volumes; switch to the Residential group (apifyProxyGroups: ["RESIDENTIAL"]) if it starts returning fewer jobs than you asked for. Bayt sits behind a Cloudflare check: it works reliably through the Residential group and only some of the time through the default proxy. Greenhouse, Lever and Ashby use public APIs and need no proxy.

What does minJobs actually control?

minJobs is the target number of jobs per keyword per platform. With 2 keywords, 2 platforms, and minJobs: 25, the Actor aims for up to 100 results total. Actual count may be lower if fewer matching jobs exist.

Why are there fewer results than expected?

  • LinkedIn caps public results at 1,000 per keyword.
  • Some keyword + location combinations genuinely return few results on a given platform.
  • Greenhouse, Lever and Ashby search a fixed list of 240+ company boards, not every company that uses the ATS.

Why did a platform return 0 jobs?

Read the run's status message: it names the reason for every platform that returned nothing, for example Indeed 0 (connection refused; turn on Apify Proxy) or ZipRecruiter skipped (temporarily unavailable).

  • LinkedIn: switch to the Residential proxy group, reduce minJobs to 10 or fewer, or use broader keywords. Some proxy IP ranges are geo-blocked by LinkedIn; try a different proxy country or group.
  • Indeed: keep Apify Proxy on, set Country (Indeed) to the country of your location, and check that the keyword + location combination returns results on Indeed directly.
  • Greenhouse, Lever, Ashby: try broader keywords.

Do the salary and seniority filters work on all platforms?

No. Salary and seniority filtering are only supported on LinkedIn. They are silently ignored elsewhere.

Why is salary empty for some jobs?

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.

Can I scrape remote jobs only?

Yes. Set jobLocationType to remote. It applies on every platform.

Can I search Indeed outside the United States?

Yes. Set country to the country of your location, for example uk for London or india for Bangalore; Indeed has sites for 60+ countries. LinkedIn, Naukri, Bayt and the ATS platforms ignore country and use location.

What happened to Glassdoor and ZipRecruiter?

Both block Apify's servers, so they are switched off for now. glassdoor and zip_recruiter are still accepted in platforms, so saved tasks and API calls keep working; each is skipped with a warning and returns no jobs.

Is there deduplication?

Yes, on each platform. A job that matches several of your keywords appears, and is charged, once per platform. A job posted on two different platforms, for example LinkedIn and Indeed, appears once for each, since each copy has its own URL.

Why is applicants null on non-LinkedIn platforms?

Applicant counts are only exposed by LinkedIn's public job pages. Other platforms do not publish this data.

Can I use my own proxies?

Yes. Configure proxyConfiguration with your own proxy URLs or combine Apify Proxy with custom groups.

Does this work for non-English job postings?

Partially. Language support depends on the platform. Keywords and locations should match the language used on the target platform.

What happens if one platform fails mid-run?

Each platform runs on its own, so one failure does not stop the others, and jobs are saved as they are found. The run's status message lists how many jobs each platform returned and why any returned none, for example Indeed 0 (connection refused; turn on Apify Proxy) or ZipRecruiter skipped (temporarily unavailable). A run fails only when every selected platform failed.

How do I limit costs?

You pay per job returned, so the cap is the number of jobs you ask for. Set a conservative minJobs (10–25) for exploration runs, and select only the platforms and keywords you need. See How much does it cost to scrape jobs? for what is charged.

Can I export to CSV or Excel?

Yes. The Apify Dataset supports JSON, JSON Lines, CSV, Excel (xlsx), XML, and RSS. Use the "Export" button in the Console or the Dataset API.

What other Actors work with this one?

Job Posting Leads for Recruiters & Agencies turns job postings into a lead list. Where Multi-Platform Job Scraper returns one row per job, Job Posting Leads returns one row per hiring company — website, size, revenue band, open roles and salaries — with staffing agencies removed, so recruiters and agencies can see who to pitch.

Data: Google Maps Scraper - Every Business in an Area · Ad Library Scraper

n8n: Workflow Auditor · Workflow Backup & GitOps · Node Catalog · Workflow Generator

Make: Operations Usage & Cost Analyzer · Scenario Auditor · Scenario Backup & GitOps · App & Module Catalog

Airtable: Base Documentation & ER Diagram · Schema Auditor · Schema Diff · Data Quality Scan

Support

Found a bug, or a platform returning nothing it should find? Open an issue on the Issues tab with the run ID and the smallest input that reproduces it. For agencies: custom rule packs, white-label reports and custom Actors. Tell me what you need at openloopdev@proton.me.