AI-assisted job discovery and application tracking through Telegram, with configurable filtering, resume matching, Supabase persistence, and Google Sheets reporting.
ApplyBot does not submit applications or store LinkedIn credentials. It helps discover, evaluate, and track opportunities while keeping the final application step under the user's control.
- Aggregates roles from public job APIs and configured Greenhouse, Lever, and Ashby boards
- Applies deterministic role, experience, location, and score gates before using LLM quota
- Scores jobs against a candidate profile and produces resume-tailoring suggestions
- Routes AI requests across Gemini, NVIDIA NIM, and Groq with quota-aware fallbacks
- Deduplicates jobs and resumes safely after interrupted runs
- Tracks application stages through Telegram and logs qualified roles to Google Sheets
- Redacts sensitive values from operational logs
- Includes 200+ offline tests
Job APIs and ATS boards
|
v
Discovery -> normalization -> deduplication -> eligibility filters
|
v
optional semantic matching
|
+-------------------------+-------------------------+
| | |
Supabase Google Sheets Telegram
source of truth reporting interaction
Core modules:
app/jobs/— discovery, normalization, filtering, scoring, and deduplicationapp/llm/— provider routing, rate-limit handling, and resume analysisapp/telegram/— commands and application workflowapp/sheets/— formatted workbook outputsupabase/migrations/— database schematests/— offline unit and integration coverage
- Python 3.10+
- A Supabase project
- A Telegram bot
- Optional Google Sheets and LLM-provider credentials
git clone https://github.com/ad1820/ApplyBot.git
cd ApplyBot
python -m venv .venvActivate the environment and install dependencies:
pip install -r requirements.txtCopy .env.example to .env, then add the credentials required for the integrations you want to enable. See HOW_TO_RUN.md for the complete configuration walkthrough.
Run discovery:
python scripts/run_discovery.pyStart the Telegram interface:
python scripts/telegram_polling.py| Command | Purpose |
|---|---|
/today, /jobs, /job <id> |
Browse discovered jobs |
/done <id>, /skip <id> |
Record an application decision |
/status <id>, /applied, /stats |
Review application progress |
/interview <id>, /offer <id> |
Move an application through the pipeline |
/setresume <text> |
Store the master resume |
/resume <id> |
Analyze resume fit for a job |
/approveresume <id> |
Approve a tailored-resume draft |
The test suite is designed to run without live external services:
pytestApplyBot is an assistant, not an autonomous applicant. Review generated resume content for accuracy, verify job details at the original source, and submit applications manually. Keep credentials in local environment variables and never commit a populated .env file.