Multi Job Board Scraper β€” LinkedIn, Indeed, Glassdoor & More avatar

Multi Job Board Scraper β€” LinkedIn, Indeed, Glassdoor & More

Pricing

from $3.00 / 1,000 job scrapeds

Go to Apify Store
Multi Job Board Scraper β€” LinkedIn, Indeed, Glassdoor & More

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

Pika Choo

Maintained by Community

Actor stats

3

Bookmarked

583

Total users

230

Monthly active users

15 days ago

Last modified

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

FieldTypeDescription
searchTerm πŸ”stringJob title or keyword (e.g. "software engineer", "data analyst")

πŸ“ Search & Location

FieldTypeDefaultDescription
location πŸ“stringβ€”City, state, or country (e.g. "New York", "London", "Remote")
distance πŸ“integer50Search radius in miles from location
sites 🏒arrayAll 8Job boards: linkedin, indeed, glassdoor, google, zip_recruiter, bayt, bdjobs, naukri
countryIndeed 🌐stringusaCountry 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

FieldTypeDefaultDescription
maxResults πŸ“Šinteger20Max results per site (1–100)
isRemote 🏠booleanfalseRemote 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 ⚑booleanfalseQuick-apply jobs only (hosted on the job board)
offset ⏭️integerβ€”Skip first N results (pagination)

πŸ”— LinkedIn-Specific

FieldTypeDefaultDescription
linkedinFetchDescription πŸ”—booleanfalseFetch full descriptions + direct URLs (more requests, slower)
linkedinCompanyIds 🏭arrayβ€”Restrict to specific LinkedIn company IDs (e.g. ["1441", "2382910"])

βš™οΈ Output & Advanced Options

FieldTypeDefaultDescription
descriptionFormat πŸ“stringmarkdownJob description format: markdown or html
enforceAnnualSalary πŸ’°booleanfalseConvert all wages to yearly equivalents
userAgent πŸ€–stringβ€”Override default User-Agent header
caCert πŸ”stringβ€”CA certificate path for proxy auth
proxyConfiguration πŸ›‘οΈobjectRESIDENTIALProxy settings (residential recommended for LinkedIn)

πŸ“€ Output

Each item contains:

FieldDescription
titleJob title
companyCompany name
locationJob location
job_urlLink to job listing
job_url_directDirect apply URL (when available)
siteSource job board
date_postedDate the job was posted
job_typeEmployment type
is_remoteRemote flag
job_levelSeniority level (LinkedIn)
job_functionRole category
company_industryIndustry
company_num_employeesEmployee count
company_employees_labelHuman-readable employee range (e.g. "1001-5000")
company_revenueCompany revenue
company_revenue_labelHuman-readable revenue (e.g. "$1B+")
company_countryCompany country (Indeed)
company_ratingCompany rating
company_reviews_countNumber of reviews
company_logoLogo URL
company_descriptionCompany description
salary_minMinimum salary
salary_maxMaximum salary
salary_currencyCurrency
salary_intervalPay period (yearly, monthly, hourly)
descriptionFull job description (Markdown or HTML)
emailsEmails extracted from description
skillsSkills extracted from description (Naukri)
experience_rangeRequired experience (Naukri)
vacancy_countOpen positions (Naukri)
work_from_home_typeWFH type (Naukri)

πŸ’΅ Pricing

$0.003 per job scraped (pay-per-event, charged only for results delivered)


⚠️ Important Notes

API Limitations

  • LinkedIn ⚠️ β€” Cannot combine hoursOld with easyApply in the same search
  • Indeed ⚠️ β€” Cannot combine hoursOld with jobType, isRemote, or easyApply in the same search

Site-Specific Notes

BoardNotes
πŸ”΅ LinkedInRate-limited ~100 results per IP. Use residential proxies for large runs. Enable linkedinFetchDescription for full descriptions.
🟒 IndeedMost reliable, no rate limiting. Best for large scrapes.
🟑 GlassdoorRequires countryIndeed for country targeting.
πŸ”΄ Google JobsBest with a custom googleSearchTerm copied from the browser UI.
🟠 ZipRecruiterUS & Canada only.
πŸŒ™ BaytMiddle East job market. Only searchTerm filter supported.
🟒 NaukriIndia job market. Returns skills, experience_range, company_rating.
πŸ”΅ BDJobsBangladesh job market.

πŸ§ͺ Examples

{
"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"]
}
{
"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"
}
{
"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 searchTerm nor searchTerms is provided, the actor now pushes a single usage-hint row and exits cleanly (exit 0) instead of raising a ValueError (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 searchTerms array (max 5). Runs each query in turn, merges the results, and tags every row with matched_search_term so you can see which query surfaced each job.
  • Existing single searchTerm field 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 with urllib.parse.quote.
  • 🩹 Non-fatal GraphQL errors: Glassdoor's /graph endpoint often returns peripheral errors on SEO-only fields (jobsPageSeoData) alongside fully populated data.jobListings. Upstream treated any errors field as fatal and dropped all the good data. Now we only fail when core jobListings data 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_agent kwarg compatibility shim (still active).
  • Multi-site concurrent scraping across 8 boards.
  • Rich salary, company, and filter support.