- New
jobspycommand: search from the shell, one JSON line per job;-osaves the full records (#422) - New MCP server for AI agents:
uvx --from "python-jobspy[mcp]" mcp-jobspy, listed in the MCP Registry asio.github.speedyapply/jobspy(#423, #424) jobs.attrs["errors"]andjobs.attrs["warnings"]say which boards failed or changed the search (#419)- A blocked board says so:
response status code 429 (blocked: use a proxy)(#423) - Invalid
scrape_jobsarguments raise a one-lineValueError, unknown ones aTypeError(#415) site_name,job_typeanddescription_formattake the exact lower-case value (#415)- A search with no jobs returns the usual columns with no rows (#418)
- Logging uses the standard
loggingmodule, with loggers namedjobspy.<board>;create_loggerandset_logger_levelare removed (#414) - Type hints ship with the package (
py.typed) (#416) JobPostfields are the output columns (#418, closes #265)min_amountandmax_amountare always floats, and an empty description isNone(#416, #418)- Each board checks what it reads; a job that fails the check is skipped with a warning (#416)
- A proxy passed in
proxiesis used even when the environment sets one (#415) - LinkedIn: pay written in the description fills in when the job page shows none, on US searches (#418)
- HelloWork, Bayt and Naukri parsing fixes (#416, #418)
- Removed the job types
nightsandsummerand ten countries with no Indeed or Glassdoor site (#415) - For code that imports internals:
JobResponse,desired_order,extract_salaryandformat_descriptionare removed; scraper classes take no constructor arguments (#415, #416, #418)