Repository navigation
Releases: pvega62/sweepy
Releases · pvega62/sweepy
Release list
Sweepy v3.0.0
Sweepy 3.0.0 release notes
Highlights
Released 2026-10-23. See the full changelog.
- Scrapers share one adapter and run concurrently instead of in sequence
- Download HireHunt, openroles, jobdrop, or Apify from inside the wizard
- A timeout and a circuit breaker per engine, so one unresponsive board can't stall a sweep
- Results from every engine normalized, deduplicated, and cached for an hour
- Sweeps return new postings only, and hide repeats for four days
- Profiles built or updated from flags, with no prompts
- Match percentages now reflect how much of a posting your resume actually covers
- Attach a separate resume to each resume track and score every job against its routed track's resume
- Score a
.docxresume directly, with no conversion step - Keep live postings that rate limiting used to delete
- Convert a Word resume to PDF right inside the setup wizard
- Create or edit a profile from the setup wizard's new main menu
- Update Sweepy from the command line or the wizard menu when a newer version becomes available
- Exit the wizard cleanly with Ctrl+C
New in 3.0.0
- Job engines. Sweepy now runs every enabled engine concurrently through one adapter contract. Sweepy bundles
jobspyand the built-in applicant tracking system readers. HireHunt, openroles, jobdrop, and Apify install on demand.sweepy --list-enginesshows what each engine scrapes and whether that engine has a local install.sweepy --install-engines alldownloads the compatible optional engines.jobdropneeds the explicit conflict override described below. - Engine downloads in the wizard. Sweepy's Toolbox then Download job engines lists each engine with its boards and install state, then installs on confirmation. Picking a missing engine while building a profile offers the download right there. The engine review screen sets per-engine choices and accepts a proxy with the password masked.
- Engines install as extras.
requirements-engines.txtholds the optional packages, andpyproject.tomlpublishesengines,apify, andall-enginesextras. An adapter imports its library at call time and prints the install command instead of breaking startup. - Engine settings per profile.
sources.enabledpicks the engines, each engine block sets its own options, andorchestratorandcachecontrol timeouts, the circuit breaker, and result caching. - Headless profiles.
sweepy --setup --non-interactive --sources jobspy,openroles --openroles-companies figma,stripe ...writes a validated profile without prompts. run_sweepnow reportsskipped_sources, so a caller can see which engine timed out or tripped its circuit breaker.create_profileaccepts asources_configblock, pluscache_configandorchestrator_configfor cache lifetime, per-engine timeouts, and circuit-breaker behavior.- Background sweeps.
run_sweepanswers withinwait_seconds, 45 seconds by default, withsweep_status: "running"and ajob_id.get_sweep_statuswaits in bounded slices until the sweep completes. A sweep keeps running after the client disconnects, and a repeat call for the same profile rejoins it. - New postings only. Sweepy records every posting it reports in
~/.sweepy/history.dband hides that posting on later sweeps for four days. Sethistory.enabled: falsein the profile, or pass--include-seen, to see every posting on every run.sweepy --reset-historyclears the record. - Wizard main menu.
sweepyopens the launchpad before the questionnaire. Create or edit a profile, toggle debug logging, adjust the scoring weight and report scaling, or add and edit aggregators. The header shows the loaded profile and its job-title count, andsweepy --setup --profile profiles/your_profile.yamlopens the wizard with that profile loaded. - Self-update.
sweepy --updatepulls the newest code and reinstalls dependencies, including the optional engines a checkout already had.sweepy --check-updatereports whether a newer version exists. The update leaves a checkout with uncommitted changes untouched. - Per-track resume scoring.
resume.tracks[].pathpoints each track at its own resume, and the setup wizard collects a path for each track. Jobs route to a track by keyword, then score against that track's resume. - Wizard resume-path hint. The resume question prints the shortcut that copies a file's full path for your operating system. Use
Ctrl+Shift+Cin File Explorer on Windows 11,Option+Command+Cin Finder on macOS, orCtrl+Shift+Cin most Linux file managers. - Wizard DOCX-to-PDF conversion. Enter a
.docxresume and the wizard offers to convert it. A "Convert a DOCX to PDF" choice in the review menu does the same on demand. - A navigation help banner in the wizard, plus "Show help" and "Show recent logs" review-menu choices. Ctrl+C cancels setup without a traceback.
.docxresume support. Sweepy reads a.docxwithpython-docx, andcreate_profileaccepts either format.- Profile synonyms.
resume.synonymslists groups of interchangeable terms, andcreate_profileaccepts asynonymsargument. A posting that writesdocumentation as codethen matches a resume that writesdocs-as-code, in either direction. - Wizard navigation. Submenus open with ← Back, and Esc goes up exactly one level. In a question, Esc returns to the previous answer. At a submenu, it returns to the parent menu. On the launchpad, Esc exits the wizard. The toolbox runs as its own menu level, so leaving engine, aggregator, or help screens returns to the toolbox instead of the launchpad. Ctrl+C still quits from anywhere.
- The launchpad shows six tiles in three even rows, including a new Exit Sweepy tile. A trailing odd tile centers itself.
- The platform step lists every board Sweepy can search, grouped by engine. All 63 boards appear, with per-engine counts:
jobspy8,ats5,hirehunt12,openroles4,jobdrop33,apify1. Each row shows its engine and whether that engine needs a download, soWellfound [jobdrop · needs download]says so before you tick it. Choosing boards from an engine with no local install prints the install command. --install-engines allno longer includesjobdrop.jobdropreports an oldercurl-cffipin than JobSpy needs, so pip can't resolve both at once. The pin lags the library:jobdropruns on the newer release. Add--allow-engine-conflictsto install it beside JobSpy, which keeps JobSpy'scurl_cffiimport.- Install sizes, per the README. Core takes 283 MB and the compatible engines about 310 MB.
jobdropadds 406 MB, which brings a forced total to about 715 MB before it downloads a browser.
What changed
- Match scoring now measures coverage both ways. Your keywords that appear in the posting supply 40% of the score. Requirements the posting states and your resume already covers supply 60%. The old score divided resume-keyword hits by the whole keyword list, which always ran low. An earlier comparison of 26 postings raised the mean from 17.8 to 31.4. Alias and priority refinements followed. Those still need evaluation against human relevance labels.
- Explicit required terms now outweigh preferred terms. Deterministic matching also recognizes regular plurals and selected acronym expansions. It applies the synonym groups you declare in
resume.synonyms. These scores rank postings by shared vocabulary. - Descriptions stay on by default. Scoring needs posting text, so
fetch_descriptionsnow defaults totrueforjobspyandjobdrop. Turning it off trades match quality for speed. - JobSpy sends a current Chrome User-Agent by default, and each engine block accepts its own override.
- Sweepy reads a Word resume correctly.
pymupdfused to open the.docxZIP without error and return reordered, partial text. The same resume scored differently as DOCX and PDF, differing on 17 keywords. Sweepy now also flattens hard-wrapped lines before it reads tokens and phrases. A PDF's line breaks no longer fragment multi-word skills such asFirst Aid. Both formats agree on 81% of keywords, and one wrapped skill phrase accounts for the rest. - Keyword extraction stops splitting skills on commas inside parentheses, so
Adobe Suite (InDesign, Acrobat)no longer becomes(indesignandacrobat). It also merges case duplicates such asCSS/css, and drops months, date ranges, employer names, and stopword-led fragments. Unmatchable keywords fell from 67% to 43% of the set on a real resume. - The 60-keyword cap now keeps the strongest signals instead of the alphabetically first terms. The old cap discarded
python,react, andsqlwhile keeping(indesign. - URL validation no longer deletes live postings. Sweepy keeps a posting answered with 403, 408, 425, 429, or a 5xx and marks it unverified. A measured HEAD request returned 429 while a GET on the same URL returned the full 312 KB job page.
data/sources/ashby_orgs.txtdrops three stale org slugs that returned 404 on every run.- DOCX-to-PDF conversion now reads tables in document order. The rebuilt PDF keeps the same text as the DOCX.
- Existing profiles keep working. A profile without
sources.enabledresolves to JobSpy plus the native ATS readers, and legacy board booleans undersources.jobspystill apply. - The README drops the table of contents. The package sizes now sit under Job engines as Disk footprint. A new Agent judgment section covers the agent workflow, the background sweep, and the install state MCP-created profiles inherit. It links to the MCP integration guide for the setup steps. A separate guide, Scoring and limits, covers what deterministic scoring misses.
Fixed
- The wizard now attaches a distinct resume to each resume track instead of only the first one.
- One failing engine no longer empties a sweep. Sweepy isolates every engine error, timeout, and o...
Sweepy v2.3.0
Highlights
- Convert a Word résumé to PDF without installing anything else
- Sweep without an LLM key and still get useful match percentages
- Review and correct every wizard answer before you save a profile
- Turn on debug logging from the command line or the wizard
- Install the bundled
/sweepyskill in a skill-aware CLI - Score LinkedIn and ZipRecruiter postings again
What’s new
- DOCX-to-PDF conversion through
python swee.py --docx resume.docxand the newconvert_docxMCP tool. - The converter rebuilds the PDF with python-docx and reportlab, then falls back to Microsoft Word through docx2pdf. A blank output path saves the PDF beside the source DOCX.
- Opt-in debug logging through
--debug,debug: truein a profile, orSWEEPY_DEBUG=1. Logs rotate underlogs/, andpython swee.py --logsprints the newest entries. - A wizard review screen that lists every answer. Edit one answer or start over before you save.
- Track
colorvalues accept a CSS name such asnavy, not only a hex code. - A bundled
/sweepyskill atskills/sweepy/SKILL.md, plus a README prompt to install it.
What changed
- Deterministic keyword extraction now pulls a Skills section, frequent résumé terms, and capitalized phrases into the match set. The merged list caps at 60 keywords.
- Scoring searches the job title and the description, which raises match accuracy without an LLM.
- The jobspy fetcher uses
fetch_description=Truein place of the deprecatedlinkedin_fetch_description. LinkedIn and ZipRecruiter descriptions return again. Those roles now score instead of returning empty text. - Every source module now sends
Sweepy/2.3in itsUser-Agentheader, up fromSweepy/2.2. - The wizard now prompts you to enable debug logging.
Fixed
- Ashby fetches treat an HTTP 404 from a stale org slug as an empty result instead of raising through discovery.
- A profile with
report.max_cards: 0now renders every card. The old fallback silently capped unlimited reports at 24 cards.
Impact
Sweepy now works as well without an LLM key as it does with one. The new keyword and title signals raise no-key match accuracy. Restored LinkedIn and ZipRecruiter descriptions put more postings in front of you. The wizard review screen stops one typo from costing you an entire setup run. An unlimited report now renders every match instead of stopping at 24 cards.
See the full changelog: https://github.com/pvega62/sweepy/blob/main/CHANGELOG.md
Sweepy v2.2.0
Highlights
- Greenhouse and Lever now run by default, with no API key required
- More predictable source control through explicit enabled flags
- Better title filtering to keep sweeps focused and faster
- More reliable exports, including safer PNG fallback behavior
- Expanded docs for résumé formatting and keyword matching
What’s new
- Added deterministic source support for Greenhouse and Lever
- Added default seed lists for additional boards and company targets
- Enabled all five built-in deterministic sources by default
- Centralized shared source helpers for HTML cleanup and title matching
- Updated source request metadata to use a shared Sweepy user agent
What changed
- Each source now respects both source-level and platform-level enablement flags
- Source discovery accepts platform configuration directly
- Greenhouse and Lever requests are filtered by profile title matches
- README guidance was expanded for best-practice résumé formatting and keyword strategy
Fixed
- PNG export now fails gracefully without stopping CSV/JSON output generation
Why it matters
Sweepy is more reliable out of the box, easier to customize, and better aligned with how users actually manage job searches and résumé optimization.
See the full changelog: https://github.com/pvega62/sweepy/blob/main/CHANGELOG.md