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:
- Arbeitnow — Free remote job API, no key needed
- 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()
How to Set It Up (5 Minutes)
Step 1: Create a Telegram Bot
- Open Telegram, search for
@BotFather - Send
/newbot, give it a name - Copy the token — that's your
TELEGRAM_BOT_TOKEN
Step 2: Get Your Chat ID
- Search for
@userinfobotin Telegram - Send any message
- Copy the ID — that's your
TELEGRAM_CHAT_ID
Step 3: Run It
pip install requests
python job_alert.py
Step 4: Automate with Cron
crontab -e
# Check every hour
0 * * * * cd /path/to/script && python job_alert.py
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
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)