Skip to content

Repository files navigation

Job Search Tool

Scrapes ZipRecruiter, Indeed, and Google Jobs every day at 3 PM, then emails a list of new entry-level finance roles to your inbox.


Install

cd job_search

# 1. Create and activate a virtual environment (recommended)
python3 -m venv .venv
source .venv/bin/activate       # Windows: .venv\Scripts\activate

# 2. Install Python dependencies
pip install -r requirements.txt

# 3. Install the Playwright browser (Chromium only)
playwright install chromium

# 4. Copy the env template and fill in your credentials
cp .env.example .env
# Edit .env with your Gmail credentials (see below)

Gmail App Password

Gmail requires an App Password (not your regular password) when using SMTP:

  1. Go to myaccount.google.com/security
  2. Under "How you sign in to Google", enable 2-Step Verification if not already on.
  3. Search for "App passwords" in the search bar at the top.
  4. Choose app → Mail, device → Other (type "Job Search"), click Generate.
  5. Copy the 16-character password (shown once) into your .env as GMAIL_APP_PASSWORD.

Your .env should look like:

SENDER_EMAIL=you@gmail.com
GMAIL_APP_PASSWORD=xxxx xxxx xxxx xxxx
RECIPIENT_EMAIL=recipient@example.com

Running

Test immediately

python run_now.py

Runs a full scrape + email right now. Good for verifying everything works.

Start the daily scheduler

python run.py

Keeps running in the foreground. Triggers automatically at 3:00 PM local time every day.

To run in the background (macOS/Linux):

nohup python run.py > /dev/null 2>&1 &

Files

File Purpose
database.py SQLite helpers — init, insert, dedup
scraper.py ZipRecruiter (requests), Indeed + Google Jobs (Playwright)
emailer.py Builds HTML email and sends via Gmail SMTP
job_search.py Orchestrates scrape → store → email
run.py Daily scheduler (3 PM)
run_now.py One-shot immediate run
jobs.db SQLite database (auto-created on first run)
logs/job_search.log Run history with timestamps

How deduplication works

Each job is stored by (company, job_title) as a unique key. If the same posting appears on multiple sites or on a future day, it is stored once and never re-emailed. Only jobs whose (company, job_title) pair has never been seen before are included in the daily email.


Roles searched

  • investment banking analyst
  • private equity analyst
  • venture capital analyst
  • equity research analyst
  • growth equity analyst
  • asset management analyst

All searches include "entry level" to target 0-2 year roles. No location filter is applied.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages