Scrapes Greenhouse and Lever job boards, scores postings against a keyword profile, deduplicates via SQLite, and sends Telegram alerts for new matches.
- Fetches all open roles from every company in
sources.json - Scores each posting against your
profile.json(title keywords, description keywords, location bonuses) - Skips anything already seen (SQLite dedup in
data/jobs.db) - Sends a Telegram message for every new match above your threshold
git clone https://github.com/anadivatsa/job-radar.git
cd job-radar
pip install -r requirements.txt
cp profile.example.json profile.json
cp sources.example.json sources.json
cp notifier.env.example notifier.envFill in notifier.env with your Telegram bot token and chat ID.
Edit profile.json to match your target roles, keywords, and preferred locations.
Edit sources.json with the companies you want to watch.
| Field | Description |
|---|---|
threshold |
Minimum score (0–100) to trigger an alert |
title_keywords |
Phrases to match in the job title, each with a score |
title_exclude |
If any of these appear in the title, the job is skipped entirely |
description_keywords |
Phrases to match in the job description (scores are additive) |
location_bonus |
Extra score if the location contains a preferred place |
Only the single highest-scoring title_keyword and location_bonus match counts — description keyword scores are all summed.
Each entry needs a platform (greenhouse or lever), a token (the company's board slug), and a company display name. Greenhouse EU boards also accept "region": "eu".
Finding tokens:
- Greenhouse:
https://boards.greenhouse.io/<token> - Lever:
https://jobs.lever.co/<token>
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_CHAT_ID=your_chat_id_here
Create a bot via @BotFather. Get your chat ID by messaging @userinfobot.
# Check all sources are reachable and show job counts
python3 job_match.py --check-sources
# Dry run — fetch, score, dedup, mark seen (no Telegram alert)
python3 job_match.py --run-once
# Full run with Telegram alerts
python3 job_match.py --run-once --notifyTo run daily at 09:00 via cron:
crontab -eAdd:
0 9 * * * cd /path/to/job-radar && python3 job_scan.py >> logs/job_scan.log 2>&1
🎯 Job Match — 61/100
Product Manager, Payments
Stripe · San Francisco, NY, Remote
Why: product manager · payments · cross-functional
👉 Apply now
| Platform | API |
|---|---|
| Greenhouse | boards-api.greenhouse.io / boards-api.eu.greenhouse.io |
| Lever | api.lever.co |