DEV Community

Alex Spinov
Alex Spinov

Posted on

I Built a Job Alert Bot That Texts Me New Remote Jobs Every Hour (Python + Telegram)

I was tired of refreshing job boards. So I built a Python script that checks for new remote developer jobs and sends them to my Telegram every hour.

The whole thing is 47 lines. No paid APIs. No databases. No frameworks.

The Problem

Job boards send email alerts, but:

  • They arrive 6-12 hours late
  • They're buried in promotions
  • You can't filter by tech stack
  • Half the "remote" jobs are hybrid

I wanted instant alerts for jobs matching my exact criteria, sent to a place I actually check — Telegram.

The Solution

Two free APIs:

  1. Arbeitnow — Free remote job API, no key needed
  2. Telegram Bot API — Free, instant push notifications
import requests
import hashlib
import json
import os

# Config
TELEGRAM_BOT_TOKEN = "YOUR_BOT_TOKEN"  # Get from @BotFather
TELEGRAM_CHAT_ID = "YOUR_CHAT_ID"      # Get from @userinfobot
KEYWORDS = ["python", "backend", "data", "scraping", "automation"]
SEEN_FILE = "seen_jobs.json"

def load_seen():
    if os.path.exists(SEEN_FILE):
        return set(json.load(open(SEEN_FILE)))
    return set()

def save_seen(seen):
    json.dump(list(seen), open(SEEN_FILE, "w"))

def send_telegram(message):
    url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
    requests.post(url, json={
        "chat_id": TELEGRAM_CHAT_ID,
        "text": message,
        "parse_mode": "HTML",
        "disable_web_page_preview": True
    })

def check_jobs():
    seen = load_seen()
    new_count = 0

    # Arbeitnow: free remote job API
    data = requests.get("https://www.arbeitnow.com/api/job-board-api", timeout=15).json()

    for job in data.get("data", []):
        job_id = hashlib.md5(job["url"].encode()).hexdigest()

        if job_id in seen:
            continue

        title = job.get("title", "").lower()
        desc = job.get("description", "").lower()

        # Filter by keywords
        if not any(kw in title or kw in desc for kw in KEYWORDS):
            continue

        if not job.get("remote", False):
            continue

        message = (
            f"🟢 <b>{job['title']}</b>\n"
            f"🏢 {job.get('company_name', 'Unknown')}\n"
            f"📍 {', '.join(job.get('tags', []))}\n"
            f"🔗 {job['url']}"
        )
        send_telegram(message)
        seen.add(job_id)
        new_count += 1

    save_seen(seen)
    print(f"Found {new_count} new matching jobs")

if __name__ == "__main__":
    check_jobs()
Enter fullscreen mode Exit fullscreen mode

How to Set It Up (5 Minutes)

Step 1: Create a Telegram Bot

  1. Open Telegram, search for @BotFather
  2. Send /newbot, give it a name
  3. Copy the token — that's your TELEGRAM_BOT_TOKEN

Step 2: Get Your Chat ID

  1. Search for @userinfobot in Telegram
  2. Send any message
  3. Copy the ID — that's your TELEGRAM_CHAT_ID

Step 3: Run It

pip install requests
python job_alert.py
Enter fullscreen mode Exit fullscreen mode

Step 4: Automate with Cron

crontab -e
# Check every hour
0 * * * * cd /path/to/script && python job_alert.py
Enter fullscreen mode Exit fullscreen mode

Why This Beats Job Board Alerts

Feature Job Board Email This Bot
Speed 6-12 hours Real-time
Custom filters Basic Any keyword combo
Where Buried in inbox Telegram push
Remote filter Often wrong Verified
Cost Free (but annoying) Free (and useful)

Add More Sources

The beauty of this approach: you can add ANY job API. Here are free ones:

# RemoteOK (append .json to their URL)
remoteok = requests.get("https://remoteok.com/api").json()

# GitHub Jobs (via their API)
github_jobs = requests.get("https://jobs.github.com/positions.json?search=python").json()

# Hacker News "Who's Hiring" (monthly thread)
# Parse the monthly thread via HN API
Enter fullscreen mode Exit fullscreen mode

What I'd Add Next

  • Salary filter — some APIs include salary ranges
  • Company blocklist — skip recruiters you've already rejected
  • Weekly digest — summary of all jobs seen that week
  • Multiple channels — different Telegram groups for different tech stacks

What job search hacks do you use? I'm curious if anyone else has automated their job hunt. Drop a comment 👇

I write about Python automation scripts that solve real problems. Follow for weekly tutorials.

Top comments (0)