File size: 2,979 Bytes
357af1c
 
 
 
 
 
 
 
 
a5f08ff
357af1c
 
 
3ed893c
3241f25
b717a78
3241f25
dada799
3241f25
dada799
 
 
 
 
 
3241f25
dada799
 
 
 
 
3241f25
dada799
 
 
 
 
3241f25
dada799
 
 
 
 
 
 
 
3241f25
dada799
3241f25
dada799
 
3241f25
dada799
 
f5f590a
dada799
3241f25
dada799
3241f25
d10b412
 
 
 
 
 
 
 
 
3241f25
dada799
3241f25
dada799
3241f25
dada799
3241f25
dada799
3241f25
dada799
 
 
d10b412
dada799
3241f25
d10b412
 
 
 
 
 
3241f25
dada799
3241f25
dada799
 
 
 
 
3241f25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
---
title: CrewAI ATS Resume Screener Rewriter
emoji: 🐨
colorFrom: blue
colorTo: red
sdk: streamlit
sdk_version: 1.42.0
app_file: app.py
pinned: false
license: apache-2.0
short_description: Resume Screener Rewriter using CrewAI flow
---

# CrewAI ATS Resume Screener & Rewriter

An AI-driven system built using CrewAI to streamline both employer-side candidate screening and candidate-side resume optimization for Applicant Tracking Systems (ATS).Please find the deployed app at https://huggingface.co/spaces/sunithalv/ATSCrewAI

## πŸ”§ Features

### πŸ‘” Employer Mode
- Upload a **job description** and **multiple resumes**.
- Automatically **score resumes** based on relevance.
- **Top 3 candidates** receive personalized interview invitation emails.
- Remaining candidates receive **personalized rejection emails**.
- All emails are customized based on resume and job context.

### πŸ‘€ Candidate Mode
Two available options:
1. **ATS Resume Score Check**:
   - Enter a **job URL** to evaluate your resume.
   - Get a **personalized score** with actionable feedback.

2. **Resume Rewriting**:
   - Optional: Provide a **job URL** for targeted optimization.
   - Resume is rewritten **only if the score < 85**.
   - Supports up to **2 rewrite attempts**.
   - Returns final score and **detailed feedback**.

## πŸš€ Tech Stack
- **Python 3.11**
- [CrewAI](https://github.com/joaomdmoura/crewai)
- LangChain Tools
- Gmail SMTP (secured with App Passwords)
- PyMuPDF, spaCy, NLTK
- Streamlit (for UI)
- ONNX Runtime for model inference

## πŸ“¦ Installation

```bash
git clone https://github.com/sunithalv/ATS-Crewai.git

# Install dependencies using uv
uv venv  # creates a virtual environment and activates it
uv pip install -e .
```

> Note: Python version must be >= 3.11 and < 3.12

## ▢️ Run the Application

Launch the app locally using Streamlit:

```bash
streamlit run app.py
```

> The UI will open in your browser at `http://localhost:8501`

## πŸ“§ Gmail Integration

This project sends emails using Gmail's SMTP server. You'll need to configure your environment with the following variables:

### πŸ” Environment Setup

Create a `.env` file in the root directory with:

```
EMAIL_ADDRESS=your-email@gmail.com
EMAIL_PASSWORD=your-app-password
FIRECRAWL_API_KEY=your-firecrawl-api-key
```

> ⚠️ **Important**:  
> You must use a **Gmail App Password** if you have 2-Step Verification enabled.  
> Learn how to generate one: [Google App Passwords](https://support.google.com/accounts/answer/185833)  
>  
> Get your **Firecrawl API key** from [firecrawl.dev](https://firecrawl.dev) to enable parsing job descriptions from URLs.


### βœ‰οΈ Sending Emails

- Emails are sent using **SMTP** via `smtp.gmail.com` on port `587`.
- Each message is read from a `.txt` file where:
  - The **first line** must start with `Subject:`
  - The **remaining lines** form the email body.
- Emails are sent individually with **personalized content** for each recipient.