Multi Job Board Scraper β LinkedIn, Indeed, Glassdoor & More
Pricing
from $3.00 / 1,000 job scrapeds
Multi Job Board Scraper β LinkedIn, Indeed, Glassdoor & More
Scrape job listings from LinkedIn, Indeed, Glassdoor, Google Jobs & ZipRecruiter simultaneously. Extract job title, company, salary, location, job type, description, company info & more. No API keys needed β pay per result.
Pricing
from $3.00 / 1,000 job scrapeds
Rating
5.0
(1)
Developer
Pika Choo
Actor stats
3
Bookmarked
583
Total users
230
Monthly active users
15 days ago
Last modified
Categories
Share
π Multi Job Board Scraper
Scrape job listings from LinkedIn, Indeed, Glassdoor, Google Jobs, ZipRecruiter, Bayt, BDJobs, and Naukri simultaneously with a single search β and get structured, deduplicated results in one dataset.
β¨ Features
- π’ 8 job boards in one run β LinkedIn, Indeed, Glassdoor, Google Jobs, ZipRecruiter, Bayt, BDJobs, Naukri
- π° Rich salary data β min/max, currency, interval, annual normalization
- π Deep company info β size, revenue, rating, industry, logo, description
- π― Advanced filters β remote only, job type, hours posted, distance, easy apply, LinkedIn company targeting
- π Flexible output β Markdown or HTML descriptions
- π Auto-deduplication β same job posted on multiple boards appears only once
- π‘οΈ Proxy support β residential proxies recommended for LinkedIn
- π€ Custom User-Agent β bypass board-specific blocks
- π CA cert support β for enterprise proxy authentication
π₯ Input
π΄ Required
| Field | Type | Description |
|---|---|---|
searchTerm π | string | Job title or keyword (e.g. "software engineer", "data analyst") |
π Search & Location
| Field | Type | Default | Description |
|---|---|---|---|
location π | string | β | City, state, or country (e.g. "New York", "London", "Remote") |
distance π | integer | 50 | Search radius in miles from location |
sites π’ | array | All 8 | Job boards: linkedin, indeed, glassdoor, google, zip_recruiter, bayt, bdjobs, naukri |
countryIndeed π | string | usa | Country for Indeed/Glassdoor (usa, uk, canada, australia, germany, france, india, etc.) |
googleSearchTerm π | string | β | Custom search term for Google Jobs only (copy from Google Jobs UI for best results) |
ποΈ Filters
| Field | Type | Default | Description |
|---|---|---|---|
maxResults π | integer | 20 | Max results per site (1β100) |
isRemote π | boolean | false | Remote jobs only |
jobType πΌ | string | β | fulltime, parttime, contract, internship, temporary |
hoursOld β° | integer | β | Jobs posted within N hours (e.g. 24 = last day, 168 = last week) |
easyApply β‘ | boolean | false | Quick-apply jobs only (hosted on the job board) |
offset βοΈ | integer | β | Skip first N results (pagination) |
π LinkedIn-Specific
| Field | Type | Default | Description |
|---|---|---|---|
linkedinFetchDescription π | boolean | false | Fetch full descriptions + direct URLs (more requests, slower) |
linkedinCompanyIds π | array | β | Restrict to specific LinkedIn company IDs (e.g. ["1441", "2382910"]) |
βοΈ Output & Advanced Options
| Field | Type | Default | Description |
|---|---|---|---|
descriptionFormat π | string | markdown | Job description format: markdown or html |
enforceAnnualSalary π° | boolean | false | Convert all wages to yearly equivalents |
userAgent π€ | string | β | Override default User-Agent header |
caCert π | string | β | CA certificate path for proxy auth |
proxyConfiguration π‘οΈ | object | RESIDENTIAL | Proxy settings (residential recommended for LinkedIn) |
π€ Output
Each item contains:
| Field | Description |
|---|---|
title | Job title |
company | Company name |
location | Job location |
job_url | Link to job listing |
job_url_direct | Direct apply URL (when available) |
site | Source job board |
date_posted | Date the job was posted |
job_type | Employment type |
is_remote | Remote flag |
job_level | Seniority level (LinkedIn) |
job_function | Role category |
company_industry | Industry |
company_num_employees | Employee count |
company_employees_label | Human-readable employee range (e.g. "1001-5000") |
company_revenue | Company revenue |
company_revenue_label | Human-readable revenue (e.g. "$1B+") |
company_country | Company country (Indeed) |
company_rating | Company rating |
company_reviews_count | Number of reviews |
company_logo | Logo URL |
company_description | Company description |
salary_min | Minimum salary |
salary_max | Maximum salary |
salary_currency | Currency |
salary_interval | Pay period (yearly, monthly, hourly) |
description | Full job description (Markdown or HTML) |
emails | Emails extracted from description |
skills | Skills extracted from description (Naukri) |
experience_range | Required experience (Naukri) |
vacancy_count | Open positions (Naukri) |
work_from_home_type | WFH type (Naukri) |
π΅ Pricing
$0.003 per job scraped (pay-per-event, charged only for results delivered)
β οΈ Important Notes
API Limitations
- LinkedIn β οΈ β Cannot combine
hoursOldwitheasyApplyin the same search - Indeed β οΈ β Cannot combine
hoursOldwithjobType,isRemote, oreasyApplyin the same search
Site-Specific Notes
| Board | Notes |
|---|---|
| π΅ LinkedIn | Rate-limited ~100 results per IP. Use residential proxies for large runs. Enable linkedinFetchDescription for full descriptions. |
| π’ Indeed | Most reliable, no rate limiting. Best for large scrapes. |
| π‘ Glassdoor | Requires countryIndeed for country targeting. |
| π΄ Google Jobs | Best with a custom googleSearchTerm copied from the browser UI. |
| π ZipRecruiter | US & Canada only. |
| π Bayt | Middle East job market. Only searchTerm filter supported. |
| π’ Naukri | India job market. Returns skills, experience_range, company_rating. |
| π΅ BDJobs | Bangladesh job market. |
π§ͺ Examples
Basic Search
{"searchTerm": "software engineer","location": "New York"}
π Remote Full-time Jobs β Last 24 Hours
{"searchTerm": "data analyst","isRemote": true,"jobType": "fulltime","hoursOld": 24,"sites": ["indeed", "google", "zip_recruiter"]}
π LinkedIn Company-Specific Search
{"searchTerm": "product manager","location": "San Francisco","sites": ["linkedin"],"linkedinCompanyIds": ["1441", "2382910"],"linkedinFetchDescription": true}
π Global Multi-Board Search with Salary Normalization
{"searchTerm": "machine learning engineer","location": "London","sites": ["linkedin", "indeed", "glassdoor"],"countryIndeed": "uk","maxResults": 50,"enforceAnnualSalary": true,"descriptionFormat": "markdown"}
π Middle East + India Search
{"searchTerm": "DevOps engineer","sites": ["bayt", "naukri"],"maxResults": 30}
π Changelog
v1.0.20 β 2026-04-23
Quality & reliability: resolved "under maintenance" flag.
Apify's automated quality tests run the actor with only the prefilled input
values. When v1.0.18 added multi-term search, the hard requirement on
searchTerm was relaxed β which meant the QA runs submitted empty input
and hit a ValueError crash, which triggered the maintenance flag.
- π©Ή Prefilled inputs for automated testing:
searchTermβ,"software engineer"locationβ"New York, NY". New users opening the actor for the first time also see these working defaults instead of a blank form. - π©Ή Graceful empty-input fallback: if neither
searchTermnorsearchTermsis provided, the actor now pushes a single usage-hint row and exits cleanly (exit 0) instead of raising aValueError(exit 91). No user is ever charged for a pointless failed run. - π¦ All 8 job boards still selectable by default β Google & ZipRecruiter remain available even though their upstream scrapers are currently unreliable (tracked in JobSpy issues #284 / #302 / #283).
Verified on Apify: empty-input run now succeeds in <1s instead of crashing; prefilled input returns 60 jobs across LinkedIn/Indeed/Glassdoor.
v1.0.18 β 2026-04-21
Multi-term OR search (based on store-review feedback).
- New optional
searchTermsarray (max 5). Runs each query in turn, merges the results, and tags every row withmatched_search_termso you can see which query surfaced each job. - Existing single
searchTermfield unchanged and fully backwards compatible. - Example:
{"searchTerms": ["AI consultant", "AI help"],"location": "Remote","sites": ["linkedin", "indeed"]}
v1.0.17 β 2026-04-20
Glassdoor: fixed β now returns real results again.
Backported three open upstream patches from speedyapply/JobSpy
(PR #347, PR #350) that had not yet been merged into the pinned
python-jobspy==1.1.82:
- π©Ή CSRF token URL: the old bootstrap URL (
/Job/computer-science-jobs.htm) began returning HTTP 403 after Glassdoor's Next.js migration, so the session was initialized without a valid token β every Glassdoor search silently returned 0 results. Switched to/Job/index.htm, which returns 200 and the token parses cleanly. - π©Ή Location URL-encoding: location strings with commas or spaces (e.g.
"Nashville, TN","New York, NY") were interpolated raw into the location lookup URL, triggering HTTP 400"location not parsed". Now wrapped withurllib.parse.quote. - π©Ή Non-fatal GraphQL errors: Glassdoor's
/graphendpoint often returns peripheral errors on SEO-only fields (jobsPageSeoData) alongside fully populateddata.jobListings. Upstream treated anyerrorsfield as fatal and dropped all the good data. Now we only fail when corejobListingsdata is actually missing.
Verified locally before deploy: Nashville, TN + "software engineer" β 10 real jobs returned (Deloitte, KPMG, PwC, Amazon, etc.). Full regression on Indeed / LinkedIn / combined runs passed.
v1.0.x (pre-fix)
- BDJobs
user_agentkwarg compatibility shim (still active). - Multi-site concurrent scraping across 8 boards.
- Rich salary, company, and filter support.