Agente AI che automatizza la ricerca di lavoro in Italia. Scansiona annunci ogni mattina, li filtra con LLaMA e li analizza con DeepSeek rispetto al CV, inviando il report su Telegram.

An AI pipeline that automates the entire job hunting workflow for the Italian tech market — from web search to personalized CV analysis — and delivers results directly to Telegram.
Built because manually scanning job boards every day is a solved problem. This tool runs unattended, filters noise with a fast LLM, and only surfaces opportunities that actually match your profile.
Two independent pipelines, both running fully automated:
Hunt mode — finds active job listings targeting the Italian market, runs a fast boolean AI triage, analyzes each match against your CV, and delivers a formatted report to Telegram.
Scout mode — discovers target companies in Italy and generates a personalized cold-outreach pitch for each one, ready to send to a CTO or HR Manager.
Tavily (web search)
│
▼
Groq / llama-3.1-8b-instant
(boolean triage — YES / NO)
│ YES
▼
DeepSeek-V3
(CV match analysis + recruiter hook)
│
▼
Telegram Bot
(formatted report)
Each model is assigned the task it handles best: Groq for fast, cheap boolean classification — DeepSeek for deep reasoning and personalization. No single model does everything.
A single LLM for the entire pipeline is expensive and slow. This architecture uses:
The result: processing 20 job listings costs less than a cent and completes in under 30 seconds.
| Service | Purpose | Cost |
|---|---|---|
| Tavily | Web search | Free tier available |
| Groq | Boolean triage | Free |
| DeepSeek | CV analysis | Pay-as-you-go, very cheap |
| Telegram Bot | Delivery | Free |
# 1. Clone the repository
git clone https://github.com/simonecamerano/italy-job-hunter.git
cd italy-job-hunter
# 2. Install dependencies
npm install
# 3. Set up environment variables
cp .env.example .env
# Edit .env and fill in your API keys
# 4. Add your CV
# Replace data/cv.md with your own CV in Markdown format
# Find job listings and send match reports to Telegram
npm start
# Find target companies and generate cold-outreach pitches
npm run scout
# Run the test suite
npm test
.env)| Variable | Description |
|---|---|
TELEGRAM_BOT_TOKEN |
Your bot token from @BotFather |
TELEGRAM_CHAT_ID |
Your personal chat ID (use @userinfobot) |
TAVILY_API_KEY |
Tavily API key |
GROQ_API_KEY |
Groq API key |
DEEPSEEK_API_KEY |
DeepSeek API key |
src/config.js)All search queries, model names, and tuning parameters live in src/config.js. Edit this file to adapt the tool to any stack or market without touching the pipeline logic.
| Constant | Default | Description |
|---|---|---|
SEARCH_QUERY |
(see file) | Tavily query for job listings |
SEARCH_MAX_RESULTS |
20 |
Max raw results per hunt run |
SCOUT_QUERY |
(see file) | Tavily query for company scouting |
SCOUT_MAX_RESULTS |
6 |
Max companies per scouting session |
TRIAGE_MODEL |
llama-3.1-8b-instant |
Groq model for boolean filtering |
ANALYSIS_MODEL |
deepseek-chat |
DeepSeek model for CV analysis |
API_DELAY_MS |
2500 |
Delay between calls (rate limit safety) |
TELEGRAM_MAX_CHARS |
4000 |
Message chunk size (Telegram limit: 4096) |
data/cv.md)Replace data/cv.md with your own CV in Markdown format. The analyzer reads it at runtime to generate personalized match reports and cold-outreach pitches. The quality of the output scales directly with the quality of your CV file.
italy-job-hunter/
├── data/
│ └── cv.md Your CV in Markdown format
├── src/
│ ├── config.js Centralized constants — queries, models, limits
│ ├── seen_store.js Deduplication cache — no duplicate results
│ ├── search_engine.js Stage 1: web search via Tavily
│ ├── triage_filter.js Stage 2: boolean AI filter via Groq
│ ├── deepseek_analyzer.js Stage 3: CV match analysis via DeepSeek
│ ├── telegram_sender.js Stage 4: formatted delivery via Telegram
│ ├── company_scouter.js Scout: finds target companies via Tavily
│ └── spontaneous_analyzer.js Scout: generates cold-outreach pitches via DeepSeek
├── tests/ Vitest test suite — runs fully offline, no API calls
├── index.js Hunt mode orchestrator
├── scouting.js Scout mode orchestrator
└── .env.example Environment variable template
| Tool | Purpose | Why |
|---|---|---|
| Tavily | Web search | Purpose-built for AI agents; returns clean, structured content |
| Groq | Triage filter | Fastest inference available — ideal for high-volume boolean classification |
| DeepSeek-V3 | CV analysis | High reasoning quality at a fraction of GPT-4 pricing |
| Telegram Bot API | Delivery | Instant push notifications, zero UI to build or maintain |
| Vitest | Testing | Native ESM support, zero config |
The pipeline is not Italy-specific. To use it for a different market or tech stack:
SEARCH_QUERY and SCOUT_QUERY in src/config.jsdata/cv.md with your own CVThe core pipeline logic does not need to change.
Simone Camerano — AI workflow engineer and full stack developer.
I build systems that automate complex, multi-step processes. This tool came out of a real problem: the Italian tech job market is fragmented and noisy. Manual searching wastes time that could be automated.
ISC