Two tools in one repo:
- Job Match Ranker -- a web dashboard that scores and ranks job postings against your resume
- Auto-Applier -- a CLI bot that fills out and submits job applications automatically
A local web dashboard at http://localhost:5050 that helps you figure out which jobs are worth applying to.
- Pulls fresh postings from SimplifyJobs
- Scrapes each job description
- Scores fit (0-100) using AWS Bedrock Claude based on experience match, recency, and location
- Ranked table you can filter by score, age, category, and applied status
- Track what you've applied to with one-click "Mark Applied"
python -m openclaw.web_ui
# Open http://localhost:5050Click Score New Jobs to fetch and rank the latest postings. Click Score Unscored to process any jobs already in the ledger that haven't been scored yet.
A headless browser bot that opens a job posting, fills every field, uploads your resume, answers custom questions with an LLM, and optionally submits.
Supports Lever, Greenhouse, Ashby, Workday, and a generic fallback for other sites.
Apply to a single job:
python -m openclaw.applier "https://jobs.lever.co/company/job-id" \
--company "Acme Corp" \
--role "Software Engineer Intern" \
--dry-runBatch apply from SimplifyJobs:
python -m openclaw.applier --source simplify \
--category "software engineering" \
--max-jobs 10 \
--dry-runApply to your top-ranked jobs from the scorer:
python -m openclaw.applier --source simplify --apply-top-scored \
--min-score 75 --max-jobs 5 --dry-runDrop --dry-run to actually submit.
pip install -r requirements.txt
playwright install chromiumCreate a real_memory/ folder (gitignored) with your personal data:
real_memory/
├── profile.json # Your info + answer bank (copy from profile.example.json)
├── resume.json # Structured resume data
└── resume.pdf # Your actual resume
The scorer and question answerer call AWS Bedrock Claude. Set up ~/.aws/credentials or the standard AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY env vars.
| Flag | What it does |
|---|---|
--dry-run |
Fill forms but don't submit |
--force |
Auto-submit even for top-tier companies |
--human-in-loop |
Pause for CAPTCHAs, auth walls, or missing fields |
--headful |
Show the browser window |
--keep-open |
Leave browser open after the run for manual review |
--quality |
Generate cover letters, richer answers (slower) |
--score-jobs |
Score new jobs from source (--source simplify required) |
--list-scored-jobs |
Print scored jobs from the ledger |
--ledger-stats |
Print ledger stats |
-v |
Verbose logging |
Add a questionBank array to profile.json to give consistent answers to common form fields (LinkedIn URL, "how did you hear about us", etc.). Matching is best-match-wins against form labels. Use __HUMAN__ for questions you want to answer yourself. See profile.example.json for the full template.
real_memory/, test_memory/, .env, and all credential files are gitignored. Only source code, config templates, and this README get committed.