A personalized job hunting bot that scrapes LinkedIn jobs via Apify, matches them against your resume using keyword scoring and experience filtering, and emails you the top results.
- Smart Filtering: Automatically removes jobs requiring high years of experience (customizable).
- Keyword Scoring: Boosts jobs that match your skills (Python, SQL, etc.) and prioritizes fresh grad/entry-level roles.
- Context Aware: Distinguishes between "2 years experience" (filtered) vs "within 2 years" (kept).
- Daily Reporting: Emails you a summary of the top 10 matches.
This project uses Apify to scrape data from LinkedIn.
- Create an Account: Go to Apify and sign up.
- Get API Token: Go to Settings > Integrations and copy your Personal API Token.
- Choose an Actor:
- By default, this project uses the actor
curious_coder/linkedin-jobs-scraper. - You need to "Rent" or "Start" this actor in your Apify console at least once to ensure it's active (or just rely on the API call).
- Note: You are free to swap this for any other LinkedIn scraper actor on Apify. If you do, update line 32 in
daily_bot.pywith the new Actor ID/URL structure.
- By default, this project uses the actor
-
Install Dependencies
pip install -r requirements.txt
-
Environment Variables Create a
.envfile in the root directory:APIFY_TOKEN=your_apify_token_here EMAIL_USER=your_email@gmail.com EMAIL_PASSWORD=your_app_password
-
Resume Place your resume PDF in the project folder and update
config.jsonwith its filename.
All settings are managed in config.json.
settings:max_experience_years: Filter out jobs requiring more than this (e.g., set to 3 to keep 1-2 year roles).top_results_limit: How many jobs to email you (e.g., 10, 20).fresh_grad_boost_score: Bonus points for "fresh grad" / "junior" roles.resume_path: Path to your PDF resume.
apify:max_items: How many jobs to fetch from LinkedIn (e.g. 100).
job_queries: Add or remove LinkedIn search URLs.- Tip: In the URL,
f_TPR=r86400means "Past 24 Hours". f_TPR=r604800means "Past Week".f_TPR=r2592000means "Past Month".
- Tip: In the URL,
keywords: Add skills you want to match (e.g., "React", "AWS").
Run the script manually:
python3 daily_bot.pyTo run this without keeping your laptop on, use GitHub Actions.
- Push the code to a GitHub repository.
- Add Secrets: Go to your Repo Settings > Secrets and variables > Actions.
- Click New repository secret (do NOT use "Variables" or "Environment secrets").
- Add
APIFY_TOKEN - Add
EMAIL_USER - Add
EMAIL_PASSWORD
- Done! The bot is pre-configured (in
.github/workflows/daily_job.yml) to run every day at 09:00 AM Singapore Time (01:00 UTC).
If you prefer to run it on your own computer:
- Run
crontab -e. - Add:
0 9 * * * cd "/path/to/project" && /usr/bin/python3 daily_bot.py >> cron_log.txt 2>&1