How to use JobSpy?
JobSpy is an open-source Python library, not a hosted service. Install the python-jobspy package with pip, import scrape_jobs, and call it with site_name listing the boards to query, a search_term, a location and results_wanted. It scrapes those boards concurrently and returns a pandas DataFrame of postings that you can write out to a spreadsheet file.
A few parameters decide whether a run succeeds. Indeed and Glassdoor searches require country_indeed spelled exactly as the README lists it, and Google uses only google_search_term, copied from the phrasing Google's own jobs box produces. hours_old, job_type, is_remote and easy_apply narrow results, but on Indeed and on LinkedIn only one of those filter groups applies per search. linkedin_fetch_description adds full descriptions and direct links at the cost of one extra request per job. Because the library fetches pages from the boards directly, it inherits their rate limits and their terms of service: the README says LinkedIn usually rate limits around the tenth page from a single address and that a too-many-requests response means the board has blocked you, with waiting between runs or the proxies parameter as the remedy. Every board caps how many results one search returns. When a board changes its markup a scraper stops working until a fix is released, and the project is MIT licensed with no support obligation, so that maintenance falls to you.
JobSpy hands back rows per board and per query. It does not deduplicate a role seen on several boards or record when a posting closes. JobsPipe does that part as a service: it collects continuously from LinkedIn, Indeed, Naukri and employer-hosted boards such as Workday, Greenhouse, Lever and Ashby, and POST /v1/jobs/search filters with job_title_or, skills_or, company_name_or, posted_at_gte and status, with webhooks for new and closed postings.
For a one-off analysis or a prototype, JobSpy is a sound choice: start with Indeed alone and a small results_wanted, then add boards one at a time. If the data will feed a product that must stay up, compare it with the keyless JobsPipe sandbox search endpoint. The full review is at jobspipe.dev/blog/jobspy-review.
The full treatment is on Job data vendors and tools.
Related questions
Which job boards does JobSpy support?
The README lists LinkedIn, Indeed, Glassdoor, Google, ZipRecruiter, Bayt, Naukri and BDJobs. Coverage differs by board: LinkedIn searches globally using the location parameter, ZipRecruiter covers the United States and Canada, Indeed and Glassdoor need the country_indeed parameter, and Bayt currently uses only the search term. Pass the boards you want as a list in site_name.
Is JobSpy free to use?
Yes. It is open source under the MIT licence and installs from the Python package index at no cost. The running costs are indirect: proxies once a board starts blocking your address, the time spent handling failed runs, and updating when a board changes. For small, occasional pulls those costs are close to nothing; for scheduled collection they grow.
Why does JobSpy return a too-many-requests error?
The README explains that this response means the job board has blocked you for sending too many requests, and notes that all the boards block aggressively. Its advice is to wait between scrapes, with the right pause depending on the site, or to pass a list of proxies so each board scraper rotates through different addresses.
Is it legal to scrape job boards with JobSpy?
The library itself is ordinary open-source code; the question is how you use it. Each board publishes terms of service that govern automated access, and the rules on scraping vary by country and by what you do with the data. Read the terms of the boards you target and take legal advice before building a commercial product on scraped listings.
More answers
Query live postings yourself, 1,000 jobs a month free.
Get a free API key