← Back to Skills Marketplace
barleviatias

Job Hunter

by barleviatias · GitHub ↗ · v0.1.0 · MIT-0
cross-platform ✓ Security Clean
92
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install job-hunter-bot
Description
Build and deploy an automated job hunting system with Telegram bot. Scrapes LinkedIn jobs, scores them by match percentage, sends notifications with apply bu...
README (SKILL.md)

Job Hunter - Automated Job Search System

Build a complete job hunting system: LinkedIn scraper, match scorer, and Telegram bot with inline buttons.

What This System Does

  1. Scrapes real jobs from LinkedIn (public guest API, no login needed)
  2. Scores each job 0-100% based on candidate profile (title, skills, experience, location)
  3. Sends matching jobs to Telegram with action buttons (details, apply, remove)
  4. Provides a clean foundation you can extend with CV generation later if needed

Setup Flow

1. Gather Candidate Profile

Ask the user for:

  • Target roles (e.g. data analyst, BI developer, frontend developer)
  • Core skills (e.g. SQL, Python, React, Power BI)
  • Bonus skills (nice-to-have)
  • Max years of experience they qualify for
  • Preferred location and metro area cities
  • Contact info (name, email, phone, LinkedIn URL)
  • Work experience (companies, roles, dates, bullet points)
  • Education (degree, institution, year)

2. Create Telegram Bot

Guide the user:

  1. Open Telegram, search for @BotFather
  2. Send /newbot, choose a name and username
  3. Copy the bot token
  4. Get their Telegram user ID (send a message to @userinfobot)
  5. Optionally add more authorized users (e.g. the job seeker)

3. Deploy the System

Create a project directory and deploy these scripts (from scripts/):

job-hunter/
├── config.json          # Bot token, user IDs, candidate profile
├── jobs.db              # SQLite database (auto-created)
├── scorer.py            # Match scoring engine
├── linkedin_scraper.py  # LinkedIn job scraper
├── bot.py               # Telegram bot with inline buttons
└── notify_new_jobs.py   # Send new matches to Telegram

config.json Structure

{
  "telegram_bot_token": "TOKEN_FROM_BOTFATHER",
  "telegram_user_id": 123456789,
  "authorized_users": [123456789],
  "notify_users": [123456789],
  "candidate": {
    "name": "Full Name",
    "email": "[email protected]",
    "phone": "054-1234567",
    "linkedin": "linkedin.com/in/username",
    "location": "Tel Aviv, Israel",
    "target_titles": ["data analyst", "bi developer"],
    "good_titles": ["business analyst"],
    "core_skills": ["sql", "python", "power bi"],
    "bonus_skills": ["etl", "dax", "pandas"],
    "max_years": 2,
    "preferred_locations": ["tel aviv", "herzliya", "ramat gan"],
    "metro_locations": ["petah tikva", "rishon lezion"]
  }
}

4. Customize Scripts

After copying scripts from scripts/, customize:

  • scorer.py - Update PROFILE dict with candidate's profile from config.json
  • linkedin_scraper.py - Update DEFAULT_QUERIES with relevant search terms
  • bot.py - Should work with just config.json changes
  • notify_new_jobs.py - Verify notification flow and recipients

5. Install Dependencies

Install Python dependencies required by the included scripts. At minimum, verify the libraries imported by the scraper and bot are available in your environment.

6. Initialize Database

The database auto-creates on first run. Schema:

CREATE TABLE jobs (
    job_id TEXT PRIMARY KEY,
    title TEXT, company TEXT, location TEXT,
    url TEXT, career_url TEXT,
    description TEXT, requirements TEXT,
    required_years INTEGER,
    published_date TEXT, found_date TEXT,
    status TEXT DEFAULT 'new'
);

7. Start the Bot

nohup python3 -u bot.py > bot.log 2>&1 &

8. Set Up Daily Search (Cron)

# Run daily job search + notify at 9 AM
0 9 * * * cd /path/to/job-hunter && python3 linkedin_scraper.py && python3 notify_new_jobs.py

Or use OpenClaw cron:

openclaw cron add --name daily-job-search --schedule "0 9 * * *" --prompt "Run job search and notify"

Bot Commands

Command What it does
/top Show top jobs (score >= 60%)
/jobs List all jobs with scores
/search Trigger new LinkedIn search
/stats Show statistics
/applied Show applied jobs
/help Show commands

Scoring Weights

Factor Points Logic
Title match 0-30 Perfect match = 30, partial = 15
Skills match 0-30 Core skills = 5 each (max 20), bonus = 2 each (max 10)
Experience 0-40 0yr = 40, 1yr = 30, 2yr = 10, 3+ = -20
Location 0-25 Preferred = 25, metro = 15, country = 5
Junior keywords 0-10 Entry-level indicators

Thresholds: 🟢 >= 70% apply | 🟡 >= 50% review | 🔴 \x3C 50% skip

Troubleshooting

  • Bot not responding: Check only ONE instance is running (ps aux | grep bot.py)
  • 409 Conflict: Multiple bot instances. Kill all, restart one.
  • No jobs found: Check search queries match real LinkedIn job titles
  • Scoring too high/low: Adjust weights in scorer.py
Usage Guidance
This package appears to do what it says: scrape LinkedIn guest pages, score jobs, and send Telegram notifications. Before installing or running: (1) review and protect config.json because it will contain your Telegram bot token and personal PII — consider using environment variables or a secrets store instead of a plaintext file; (2) run the code in an isolated account or container and ensure file permissions on the project directory are restrictive; (3) be aware LinkedIn scraping may be brittle and could violate LinkedIn's Terms of Service; (4) the scripts only contact linkedin.com and api.telegram.org — if you see other network activity after running, stop and inspect; (5) use a single bot instance (SKILL.md notes 409 conflicts) and monitor logs; (6) if you need higher assurance, run a static review or dynamic sandbox of the scripts before giving them network access.
Capability Analysis
Type: OpenClaw Skill Name: job-hunter-bot Version: 0.1.0 The skill bundle provides a legitimate automated job search system consisting of a LinkedIn scraper, a match-scoring engine, and a Telegram bot. The system collects candidate profile information (PII) and job data, but stores it locally in 'config.json' and 'jobs.db' for the user's own bot to process. The Python scripts (bot.py, linkedin_scraper.py, notify_new_jobs.py) use standard libraries like urllib and sqlite3 to perform their stated functions without any evidence of data exfiltration to third parties, malicious execution, or obfuscation.
Capability Assessment
Purpose & Capability
Name/description (job scraping + Telegram bot) align with the included scripts. The code only requires a local config.json (Telegram bot token, user IDs, candidate profile), writes to a local SQLite DB, and calls linkedin.com and api.telegram.org — all expected for the stated functionality.
Instruction Scope
SKILL.md instructions are narrowly scoped to gathering a candidate profile, setting up a Telegram bot, deploying the provided scripts, and scheduling cron runs. It does ask you to store contact/PII (name, email, phone, LinkedIn URL) in config.json — this is functionally useful for future CV generation but is sensitive and should be stored/handled carefully. The scraper uses LinkedIn's public guest endpoints and HTML parsing (regex), which is brittle and may break or violate LinkedIn terms of service.
Install Mechanism
No install spec or remote downloads are used — this is an instruction-only skill with bundled Python scripts. No external archives or package installs are performed by the skill itself; dependency installation is left to the user/environment.
Credentials
The skill asks you to populate config.json with a Telegram bot token and user IDs (sensitive but proportional to sending messages). It does not request other credentials or environment variables. Storing the bot token and personal PII in an unencrypted config file is risky in practice; the code expects those values in plaintext in the working directory.
Persistence & Privilege
The skill does not request always:true, does not modify other skills or system-wide configurations, and only persists to its own jobs.db and local config.json. Autonomous model invocation is default but not combined with other high-risk factors here.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install job-hunter-bot
  3. After installation, invoke the skill by name or use /job-hunter-bot
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.1.0
Initial release
Metadata
Slug job-hunter-bot
Version 0.1.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Job Hunter?

Build and deploy an automated job hunting system with Telegram bot. Scrapes LinkedIn jobs, scores them by match percentage, sends notifications with apply bu... It is an AI Agent Skill for Claude Code / OpenClaw, with 92 downloads so far.

How do I install Job Hunter?

Run "/install job-hunter-bot" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Job Hunter free?

Yes, Job Hunter is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Job Hunter support?

Job Hunter is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Job Hunter?

It is built and maintained by barleviatias (@barleviatias); the current version is v0.1.0.

💬 Comments