CLI tool·Python·November 2023

JobRadar

Stop scrolling job boards. Get a ranked, fit-scored shortlist of the listings that actually match your skills, in one command.

A command-line tool that scrapes job listings by role and location, filters and deduplicates them, scores each one against a skills profile you define, and exports the ranked list to CSV. Run it daily to get a fresh, personalized shortlist instead of manually re-scrolling the same job boards.

zsh — jobradar

$ python jobradar.py --role "Python Developer" --location "Bangalore"

Searching for "Python Developer" in "Bangalore"...

RankScoreCompanyRole
194%RazorpayBackend Engineer (Python)
287%FreshworksPython Developer - Integrations
371%InfosysAssociate - Python & Django
...

📁 Full results exported to jobs_2023-11-14.csv

Python 3.8+BeautifulSoup4pandasrequestsargparseregex keyword scoringrobots.txt awarenessrate limitingconfig-driven skill profilesCSV export
The X-Factor

A real fit score, not just a sort-by-date list

Every listing gets a fit score from 0–100% instead of being dumped in chronological order. It's a deterministic, weighted keyword match — no randomness, fully explainable:

  1. 1You define a skill profile in config/skills_profile.json — keywords with weights, so you can tell JobRadar which skills matter most.
  2. 2Every scraped job description is checked against each keyword with a case-insensitive, word-boundary regex — so sql won't falsely match inside mysqlite, and multi-word skills like rest api are matched as a phrase.
  3. 3The results are sorted by score, descending — the most relevant listings float to the top instead of being buried in an unsorted pile.
# scoring.py
fit_score = (sum of weights of skills FOUND in the description) / (sum of weights of ALL skills in the profile) * 100

Change config/skills_profile.json and every score, and the ranking, updates to reflect it — no code changes needed:

{
  "profile_name": "Python Backend / Data Roles",
  "skills": [
    { "keyword": "python",     "weight": 3.0 },
    { "keyword": "django",     "weight": 2.0 },
    { "keyword": "rest api",   "weight": 2.0 },
    { "keyword": "docker",     "weight": 1.5 },
    { "keyword": "kubernetes", "weight": 1.0 }
  ]
}
Pipeline

Scrape → score → dedup → export

scraper.py

Parses job-board result cards with BeautifulSoup. Checks the target host's robots.txt via urllib.robotparser before any live fetch, and sleeps --rate-limit seconds (default 2s) before every request.

scoring.py

The fit-score algorithm — weighted, regex-based, word-boundary keyword matching against your configurable skill profile.

dedup.py

Listings are loaded into a pandas DataFrame and deduplicated on normalized (company, role), keeping the highest-scoring copy of each.

jobradar.py

The CLI entry point — wires the pipeline together with argparse and exports the final ranked set with DataFrame.to_csv(...).

Run it

Two commands, one ranked shortlist

Requires Python 3.8+. By default it parses a bundled local HTML fixture so the full scrape → score → dedup → export pipeline runs offline, deterministically, with no live network calls.

# install dependencies
$ pip install -r requirements.txt

# search + score + export
$ python jobradar.py --role "Python Developer" --location "Bangalore"
FlagDefaultDescription
--rolerequiredRole to search for
--locationrequiredLocation to search in
--skills-configconfig/skills_profile.jsonSkill profile used to compute fit scores
--top-n10Ranked rows to print to the console
--liveoffFetch a real job board instead of the local fixture
--rate-limit2.0Seconds to sleep before each live request