AI-powered, intelligent automation for job application tracking using LLMs and MCPs.
- 📧 Gmail Integration: Fetches recent job application emails
- 🤖 AI Email Parsing: Uses LLM to extract structured data from emails
- 📊 Notion Database: Automatically creates entries in your Notion job tracker
- 🔄 Daily Sync: Prevents duplicate entries with smart caching
- 🔁 Smart Retry Logic: Automatically handles OpenRouter rate limits with backoff
- 🎯 Application ID Tracking: Updates existing entries when status changes
- 📈 Weekly Reports: AI-generated summaries with statistics and insights
JobSyncd/
├── mcp_servers/ # MCP servers for external services
│ ├── gmail_server.py # Gmail MCP server
│ ├── notion_server.py # Notion MCP server
│ └── weekly_report_server.py # Weekly report MCP server
├── workflows/ # LangGraph workflows
│ ├── job_sync_workflow.py # Main job sync workflow
│ └── weekly_report_workflow.py # Weekly report workflow
├── agent/ # Main automation agents
│ ├── gmail_client.py # Gmail API client
│ ├── credentials.json # Gmail OAuth credentials (download from Google Cloud Console)
│ ├── token.json # OAuth token (auto-generated)
│ ├── notion_utils.py # Notion database operations
│ ├── main.py # Daily sync orchestrator (MCP + LangGraph)
│ └── weekly_report.py # Weekly summary generator
├── pyproject.toml # Project configuration
├── requirements.txt # Python dependencies
├── uv.lock # Locked dependencies
├── README.md # Project overview and quick start
└── SETUP_ENV.md # Complete setup guide (includes weekly reports)
- ✅ MCP Architecture: Modular, reusable services
- ✅ LangGraph Workflow: Intelligent email processing with built-in deduplication
- ✅ Single LLM Call: Processes all emails together for better context
- ✅ Smart Deduplication: LLM naturally understands email relationships
- ✅ Extensible: Easy to add new services and workflows
See SETUP_ENV.md for complete setup instructions including Gmail API, Notion configuration, and environment variables.
uv run agent/notion_utils.pyuv run agent/main.pyThis will:
- Fetch recent emails (last 10 emails by default)
- Process all emails together with AI for intelligent deduplication
- Extract job application info with built-in duplicate detection
- Create entries in your Notion database
- Handle status updates automatically
On first run: A browser will open for Gmail OAuth authentication. Grant permissions and the agent will save a token.json for future use.
Prerequisites:
- You need to download
credentials.jsonfrom Google Cloud Console and place it in theagent/folder - See
SETUP_ENV.mdfor detailed setup instructions
Key improvements:
- Smart Deduplication: LLM processes all emails together, naturally identifying related emails
- Status Progression: Automatically handles Applied → Assessment → Interview → Offer flows
- No Duplicates: Same company emails are merged into single applications
Note: Requires Weekly Reports database setup (see SETUP_ENV.md).
uv run agent/weekly_report.pyThis will:
- Fetch application data from the last 7 days using MCP + LangGraph
- Generate AI-powered summary with intelligent insights
- Create a formatted report in your Notion database
- Handle rate limits and errors gracefully
Custom time range:
uv run agent/weekly_report.py 14 # Last 14 days
uv run agent/weekly_report.py 30 # Last 30 days (monthly report)Key improvements:
- MCP Architecture: Modular, reusable weekly report services
- LangGraph Workflow: Intelligent data processing and summary generation
- Smart Insights: AI analyzes patterns and provides actionable recommendations
- Flexible Timeframes: Support for custom date ranges
Automate everything with GitHub Actions - no need to keep your computer running!
Features:
- ☁️ Runs in the cloud (free for public repos)
- 📅 Daily sync + weekly reports
- 🔄 Auto-refreshes OAuth tokens
- 💾 Persists cache between runs
- 📧 Email notifications on failures
Setup (GitHub Actions):
- Run once locally:
uv run agent/main.py(createsagent/token.json) - Add GitHub Secrets with raw JSON content (Settings → Secrets → Actions):
GMAIL_CREDENTIALS= contents ofagent/credentials.jsonGMAIL_TOKEN= contents ofagent/token.jsonNOTION_TOKEN,NOTION_DATABASE_ID,NOTION_WEEKLY_REPORTS_DB_ID,OPENROUTER_KEY
- Ensure workflow permissions: Settings → Actions → General → Read and write
- Manually run each workflow once to verify
See “GitHub Actions Setup” in SETUP_ENV.md for details.
Schedules:
- Daily Sync: Every day at 9:00 AM UTC
- Weekly Report: Every Monday at 10:00 AM UTC
If you prefer running locally on your own machine:
Windows (Task Scheduler):
schtasks /create /tn "JobSyncd-Daily" /tr "uv run D:\Projects\JobSyncd\agent\main.py" /sc daily /st 09:00Linux/Mac (Cron):
crontab -e
# Add: 0 9 * * * cd /path/to/JobSyncd && uv run agent/main.pyWindows (Task Scheduler):
schtasks /create /tn "JobSyncd-Weekly" /tr "uv run D:\Projects\JobSyncd\agent\weekly_report.py" /sc weekly /d MON /st 10:00Linux/Mac (Cron):
crontab -e
# Add: 0 10 * * 1 cd /path/to/JobSyncd && uv run agent/weekly_report.pyimport schedule
import time
schedule.every().day.at("09:00").do(daily_sync)
while True:
schedule.run_pending()
time.sleep(3600)Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License. See the LICENSE file for more details.