{"id":8553,"library":"python-jobspy","title":"JobSpy","description":"JobSpy is a Python library designed for scraping job postings from major job boards including LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, and Naukri. It aggregates job data into a Pandas DataFrame, supports concurrent scraping, and includes features like proxy support to manage rate limiting. The library is actively maintained, with frequent updates adding new features and improving scraper reliability.","status":"active","version":"1.1.82","language":"en","source_language":"en","source_url":"https://github.com/cullenwatson/JobSpy","tags":["job scraping","web scraping","jobs","linkedin","indeed","glassdoor","ziprecruiter","bayt","naukri","automation","data extraction"],"install":[{"cmd":"pip install -U python-jobspy","lang":"bash","label":"Install latest version"}],"dependencies":[{"reason":"Requires Python 3.10 or higher, but less than 4.0.","package":"python","optional":false}],"imports":[{"symbol":"scrape_jobs","correct":"from jobspy import scrape_jobs"}],"quickstart":{"code":"import pandas as pd\nfrom jobspy import scrape_jobs\n\njobs = scrape_jobs(\n    site_name=[\"indeed\", \"linkedin\", \"zip_recruiter\", \"google\", \"glassdoor\"],\n    search_term=\"software engineer\",\n    location=\"San Francisco, CA\",\n    results_wanted=10,\n    country_indeed=\"USA\", # Required for Indeed/Glassdoor in many cases\n    hours_old=72, # Jobs posted within the last 72 hours\n    description_format=\"markdown\",\n    verbose=1 # Show warnings and errors\n)\n\nif isinstance(jobs, pd.DataFrame):\n    print(f\"Found {len(jobs)} jobs\")\n    print(jobs.head())\n    # To save to CSV:\n    # import csv\n    # jobs.to_csv(\n    #     \"jobs.csv\",\n    #     quoting=csv.QUOTE_NONNUMERIC,\n    #     escapechar=\"\\\\\",\n    #     index=False,\n    # )\nelse:\n    print(\"No jobs found or an error occurred.\")","lang":"python","description":"This quickstart example demonstrates how to scrape job postings for 'software engineer' in 'San Francisco, CA' from multiple job boards. It retrieves the latest 10 results posted within the last 72 hours, specifying 'USA' for Indeed/Glassdoor. The results are returned as a Pandas DataFrame."},"warnings":[{"fix":"Set `verbose=1` (for warnings+errors) or `verbose=2` (for all logs) in the `scrape_jobs` function call to re-enable detailed logging.","message":"Default logging verbosity changed. Logs are now suppressed by default, showing only errors.","severity":"gotcha","affected_versions":"v1.1.77 and later"},{"fix":"If exact date-based sorting is crucial, consider filtering results by `hours_old` or refining `search_term` for more precise matches.","message":"Indeed job sorting changed from date to relevance by default, which may affect expected results.","severity":"gotcha","affected_versions":"v1.1.66 and later"},{"fix":"Implement delays between `scrape_jobs` calls, use proxies (via the `proxies` parameter), or enable authenticated scraping where available (e.g., `use_creds=True` for LinkedIn).","message":"Job boards aggressively block IP addresses for too many requests, leading to `response code 429` (rate limiting).","severity":"gotcha","affected_versions":"All versions"},{"fix":"Always specify `country_indeed='USA'` or the appropriate country code when scraping Indeed or Glassdoor.","message":"When searching Indeed or Glassdoor, the `country_indeed` parameter is often required for specific countries to yield correct results.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Consult the `scrape_jobs` documentation to understand parameter incompatibilities for each job board and choose only one of the conflicting filters.","message":"Certain parameters like `hours_old` cannot be combined with other filtering parameters (e.g., `job_type` + `is_remote`) for specific sites like Indeed or LinkedIn.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-16T00:00:00.000Z","next_check":"2026-07-15T00:00:00.000Z","problems":[{"fix":"Wait some time between scrape requests, try using the `proxies` parameter with a proxy list, or consider `use_creds=True` for authenticated access where applicable.","cause":"The job board site has temporarily blocked your IP due to too many requests.","error":"Received a response code 429"},{"fix":"Upgrade to a newer version of macOS if possible, or refer to the `tls_client` repository for known workarounds or fixes.","cause":"This issue is typically related to the `tls_client` dependency not fully supporting the specific macOS architecture or version.","error":"Segmentation fault: 11 on macOS Catalina"},{"fix":"Perform the desired search on Google Jobs in your browser, then copy and paste the exact query from the Google Jobs search bar into the `google_search_term` parameter.","cause":"The `google_search_term` parameter requires a very specific syntax, usually the exact search string that appears in the Google Jobs search box after applying filters in a browser.","error":"No results when using 'google'"},{"fix":"Refine your `search_term` using exact phrase matching (e.g., `\"engineering intern\"`) and negation (e.g., `-marketing`) to narrow down results.","cause":"Indeed's search engine often includes keywords from job descriptions, not just titles, which can lead to broader, less relevant results.","error":"Indeed giving unrelated roles"}]}