Back to Projects
JobHunter
CompletedPythonFastAPILangChain+5 more

JobHunter

AI-powered automated job scraping and cold email outreach system that finds relevant job listings, extracts recruiter contacts, and generates personalized emails with your resume attached.

Timeline

April 2026 - Present

Role

Creator

Team

Solo

Status
Completed

Technology Stack

Python
FastAPI
LangChain
NLP
Selenium
Email Automation
PostgreSQL
REST API

Key Challenges

  • Multi-platform job scraping
  • Email deliverability
  • LLM integration for personalization
  • Google Sheets integration

Key Learnings

  • Advanced web scraping with Selenium
  • LLM-powered content generation
  • Email automation best practices
  • Database design for audit trails

Overview

JobHunter is an intelligent job application automation system that scrapes job listings from multiple boards (Indeed, LinkedIn, Glassdoor), extracts recruiter contact information, and sends personalized cold emails with your resume attached — all on autopilot.

Built on top of python-jobspy for robust multi-board scraping and integrated with OpenRouter for LLM-powered email generation.

Key Features

Multi-Board Scraping

  • Scrapes job listings from Indeed, LinkedIn, Glassdoor, and more
  • Intelligent filtering by title keywords and location preferences
  • Deduplication to avoid contacting the same company multiple times

AI-Powered Email Generation

  • Uses LLM (via OpenRouter) to generate personalized cold emails
  • Reads your applicant profile to tailor each message
  • Fallback to template-based emails if LLM unavailable

Complete Audit Trail

  • All scraped jobs stored in Google Sheets
  • Tracks status of each email (Sent, Skipped, Failed, DryRun)
  • Run statistics and summary reports

Smart Filtering

  • Title keyword filtering (skip senior/lead roles if unwanted)
  • Generic email address filtering (only targets personal recruiter emails)
  • DNS email validation to reduce bounced emails

Architecture

Phase 1: Scrape + Save
Search terms × Locations × Boards → python-jobspy
→ Batch write to "Scraped Jobs" worksheet (status: Pending)

Phase 2: Process + Email
For each job:
→ Extract valid emails
→ Check deduplication
→ Generate personalized email (LLM or template)
→ Send with resume attached
→ Update row status

→ Write run statistics
→ Email summary report

Tech Stack

  • Backend: Python, FastAPI
  • AI/ML: LangChain, OpenRouter, LLM integration
  • Scraping: Selenium, python-jobspy
  • Storage: Google Sheets API, CSV
  • Email: SMTP with resume attachment
  • DevOps: GitHub Actions, Docker, CI/CD

Challenges & Solutions

Challenge 1: Email Deliverability

Ensuring emails don't get flagged as spam. Used proper SMTP configuration, Gmail App Passwords, and strict email validation via DNS/MX lookups.

Challenge 2: LLM Cost Management

LLM API calls can be expensive. Implemented fallback to template-based emails and used efficient prompting to minimize token usage.

Challenge 3: Multi-Platform Scraping

Each job board has different HTML structures. Leveraged python-jobspy which abstracts away these differences and provides consistent output.

Results

  • Successfully scrapes 1,000+ jobs per run
  • Sends personalized emails to real recruiter addresses
  • Complete audit trail in Google Sheets
  • 99.8% uptime with automated GitHub Actions scheduling

Future Improvements

  • Add support for more job boards
  • Integrate with ATS platforms (Lever, Greenhouse)
  • Build a web dashboard for monitoring
  • Add email tracking (opens, clicks)

Command Palette

Search for a command to run...

Designed & Developed by Arin Balyan
© 2026. All rights reserved.