speedyapply/JobSpy

Jobs scraper library for LinkedIn, Indeed, Glassdoor, ZipRecruiter, Bayt, Naukri, BDJobs & HelloWork

What it solves

Job seekers, researchers, and developers often need job listings from multiple boards but each site has its own format, rate limits, and blocking. JobSpy combines scraping from LinkedIn, Indeed, Glassdoor, ZipRecruiter, Bayt, Naukri, BDJobs, and HelloWork into one tool that returns a unified dataframe with standardized fields like title, company, salary, location, and URL.

How it works

You call scrape_jobs() with parameters like site_name, search_term, location, results_wanted, and hours_old. JobSpy fetches postings concurrently from the selected boards, applies filters (job type, remote, salary conversion, etc.), and returns a pandas dataframe. It supports proxies to avoid IP blocking, and can optionally fetch full job descriptions from individual pages when the search results don't include them. Results include errors and warnings in the dataframe's attrs for debugging.

Who it's for

Python developers who need to collect job data for job search automation, market analysis, or research. It's also useful for anyone who wants to query multiple job boards without writing and maintaining separate scrapers.

Highlights

  • Scrapes LinkedIn, Indeed, Glassdoor, ZipRecruiter, Bayt, Naukri, BDJobs, and HelloWork concurrently.
  • Returns results as a pandas dataframe with many standardized job fields (title, company, salary, remote status, description, etc.).
  • Supports many configuration options: proxy lists, remote filter, job type, posting age, salary conversion, and more.
  • Works from the command line via the jobspy command, and can be used as an MCP server (mcp-jobspy).
  • Includes error/warning reporting in the result's attrs to distinguish blocked boards from empty results.
  • Covers many countries, especially for Indeed and Glassdoor, with a single parameter.

Related

  • Project
  • Project
  • Project
  • Project