🧑💻 JobCLI - Jobs in your terminal

Fast, single-binary job aggregation CLI written in Go. Scrapes multiple sites in parallel and exports results to table, CSV, TSV, JSON, or Markdown.

Features
- Concurrent scraping across LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, and Stepstone
- TLS fingerprinting via
tls-client to reduce blocking
- Proxy rotation with temporary bans on 403/429 responses
- Human-friendly tables or machine-friendly exports
- Config + proxies stored in the user config directory
Requirements
Installation
Homebrew (macOS/Linux)
brew install jimezsa/tap/jobcli
Windows
- Download the latest
.zip for your architecture from the Releases page:
jobcli_<version>_windows_amd64.zip for 64-bit Intel/AMD
jobcli_<version>_windows_arm64.zip for ARM64
- Extract the
.zip file
- Move
jobcli.exe to a directory in your PATH, or run it directly:
.\jobcli.exe --help
Build from source
git clone https://github.com/jimezsa/jobcli
cd jobcli
make
./jobcli
Run:
jobcli --help
Quick Start
# show overview and command list
jobcli
# search software engineer roles in Munich, Germany
jobcli search "software engineer" --location "Munich, Germany" --limit 100
# search a single site last 48 hours
jobcli linkedin "chemical engineer" --location "Munich, Germany" --limit 10 --hours 48
# search a single site
jobcli stepstone "hardware engineer" --location "Munich, Germany" --limit 100
# avoid 403s by narrowing sites or providing proxies
jobcli search "software engineer" --sites linkedin --location "Munich, Germany" --country de --limit 10
jobcli search "software engineer" --location "Munich, Germany" --country de --proxies "http://user:pass@host:port,http://host2:port"
Commands
jobcli version
jobcli config init
jobcli config path
jobcli search <query> [--location L] [--sites S] [--limit N] [--offset N]
jobcli linkedin <query> ...
jobcli indeed <query> ...
jobcli glassdoor <query> ...
jobcli ziprecruiter <query> ...
jobcli google <query> ...
jobcli stepstone <query> ...
jobcli proxies check
- Default: table when stdout is a TTY, CSV otherwise (columns: site/title/company/url; URL is blue)
--json: JSON array
--plain: TSV
--format=csv|json|md: explicit format override
Flags
Global flags:
--color=auto|always|never
--json
--plain
--verbose
--version
Search flags:
--location
--sites (comma-separated list; default all)
--limit
--offset
--job-type=fulltime|parttime|contract|internship
--hours
--country
--format=csv|json|md
--links=short|full
--output (aliases: --out, --file)
--proxies (comma-separated URLs)
Config
Config directory:
$(os.UserConfigDir())/jobcli/
Files:
config.json
proxies.txt
cookies.json (optional)
Environment variables:
JOBCLI_COLOR=auto|always|never
JOBCLI_JSON=1
JOBCLI_VERBOSE=1
JOBCLI_PROXIES=...
JOBCLI_DEFAULT_LOCATION="New York, NY"
JOBCLI_DEFAULT_COUNTRY="usa"
JOBCLI_DEFAULT_LIMIT=20
Proxy Checking
jobcli proxies check --target "https://www.google.com" --timeout 15
Notes
- Scrapers are best-effort and may require selector updates as sites change.
- Heavy usage may require rotating proxies.
Inspiration
License
This project is licensed under the MIT License - see the LICENSE file for details.