jobscanner is a command line utility that automatically scans job boards and surfaces the best jobs for you by matching them against a rich candidate profile.
Note
Installing this project has only been tested on Linux. It may install without modification on macOS. You may have success running it on Windows through WSL.
- Install Dependencies
- Install jobscanner
- Profit
Bun is an alternative to the node ecosystem, it offers much faster dependency resolution and package installs and is fully compatible with the node API.
If you don't already have bun installed, follow the installation instructions at bun.sh
Additionally, for generating resume and cover letter templates, you will need LaTeX installed locally. See The LaTeX Project for more info.
Download this repo's source, extract the archive, navigate to the root of the project, and run the install script.
./install.shjobscanner <command> [options]Interactively manage user profiles for job matching.
jobscanner profile [--create | --update | --delete | --list]Options:
--create, -c- Create a new profile--update, -u- Update an existing profile--delete, -d- Delete a profile--list, -l- List all existing profiles
Example:
jobscanner profile --create
jobscanner profile --list
jobscanner profile --updateRun the job search pipeline to scan job boards and match them against your profile.
jobscanner run [--config <path>]Options:
--config <path>- Path to config file (YAML). If not specified, defaults to~/.config/jobscanner/scan.yaml
Example:
jobscanner run
jobscanner run --config config/jobs.yamlConfig Options:
When installed, the default config file is stored at ~/.config/jobscanner
-
request:timeoutMs: Limits the time to wait on network requests, default: 15000throttleMs: Wait time between requests to reduce chance of blacklisting, default: 300maxPages: Pagination limit for supported sources, default: 5userAgent: User agent to send requests as, default: "jobscanner/0.1"
-
output:maxResults: Limits the number of results shown in the terminal, all matches are stored, default: 10
Manually generate a résumé PDF from structured résumé data.
jobscanner resume <data> <output> [--template <name>] [--sections <section1> <section2> ...]Arguments:
data- Input file path with structured résumé content (YAML)output- Output file path for the generated PDF (e.g.,output/resume.pdf)
Options:
--template, -t- Template to use (default:traditional)--sections- Sections to include in the résumé. Sections will be placed in the order provided. Valid sections:summary,coreCompetencies,experience,additionalExperience,volunteerExperience,education,projects,skills
Example:
jobscanner resume resume-data.yaml my-resume.pdf
jobscanner resume resume-data.yaml my-resume.pdf --sections summary experience education skills
jobscanner resume resume-data.yaml my-resume.pdf --template traditionalSee resume.example.yaml for supported fields and structure.
Manually generate a cover letter PDF from structured letter data.
jobscanner letter <data> <output> [--template <name>]Arguments:
data- Input file path with structured cover letter content (YAML)output- Output file path for the generated PDF (e.g.,output/letter.pdf)
Options:
--template, -t- Template to use (default:traditional)
Example:
jobscanner letter letter-data.yaml my-letter.pdf
jobscanner letter letter-data.yaml my-letter.pdf --template traditionalSee letter.example.yaml for supported fields and structure.