Resume Analysis System - Automating HR Screening
.jpeg)
Process description
This automation is a full-fledged HR system for automatic analysis of candidates' resumes. The system accepts resumes via Gmail, processes various file formats (Word, PDF, TXT), conducts a detailed AI analysis of job eligibility, extracts contact information and automatically maintains a database of candidates in Google Sheets with a structured assessment of each applicant.
API keys and services:
- Gmail OAuth2 - to receive a resume from the mail
- Google Drive OAuth2 - for working with files
- Google Sheets OAuth2 - to maintain a database of candidates
- OpenAI API Key - for o4-mini and gpt-4o-mini models
System architecture by blocks
SECTION 1: GETTING A RESUME

1.1 Gmail Trigger — Getting a resume
Purpose: Automatically receives resumes sent to corporate email
Gmail Trigger settings:
- Poll Times: Every Hour (check every hour)
- Simple: false (advanced settings)
- Options:
- DownloadAttachments: true (download attachments)
- Credentials: Gmail account 2
What we get:
{
“subject”: “Developer resume”,
“from”: "candidate@email.com “,
“attachment_0": {
“filename”: "resume.pdf “,
“mimeType”: “application/pdf”,
“data”: “[binary_data]”
}
}
1.2 Upload to Drive
Purpose: Saves the received resume to Google Drive for further processing
Google Drive settings:
- Input Data Field Name: attachment_0
- Name: {{$json.subject}} Resume (file name = email subject + “Resume”)
- Drive ID: My Drive
- Folder ID: Root folder
The result: The file is saved to Google Drive and its ID is returned for further work.
SECTION 2: FILE PROCESSING IN DIFFERENT FORMATS

2.1 Switch - File Type
Purpose: Determines the format of the downloaded file and sends it to the appropriate processing stream
Switch conditions:
- Word Doc (Output 0):
- MimeType equals “application/vnd.openxmlformats-officedocument.wordprocessingml.document”
- Sends Word documents for conversion
- PDF (Output 1):
- MimeType equals “application/pdf”
- Sends PDF files for direct extraction
- Text (Output 2):
- MimeType equals “text/plain”
- Sends text files for text extraction
2.2 Word document processing flow
Word to Docs conversion: Purpose: Converts Word documents to Google Docs format
HTTP Request settings:
- Method: POST
- URL: https://www.googleapis.com/drive/v2/files/ {{$json.id}} /copy? convert=true&supportsAllDrives=true
- Authentication: Google Drive OAuth2

Get Doc: Purpose: Downloads converted Google Doc as PDF
Settings:
- Operation: Download
- File ID: {{$json.id}}
- Google File Conversion: Docs to PDF format
Extract from File: Purpose: Extracts text from the PDF version of the document
Settings:
- Operation: PDF
- Destination Key: text
2.3 PDF file processing flow
Get PDF: Purpose: Downloads a PDF file from Google Drive
Extract from File2: Purpose: Extracts text from a PDF file
Settings:
- Operation: PDF
- The result: Resume text in string format
2.4 Text file processing flow
Get TXT: Purpose: Downloads a text file from Google Drive
Extract from File3: Purpose: Extracts text from a file
Settings:
- Operation: Text
- Destination Key: text
SECTION 3: COLLECTING ALL DATA

3.1 Preparation
Purpose: Combines the results of all processing flows into a single structure
Set settings:
{
“assignments”: [
{
“name”: “resume”,
“value”: “{{$json.text}}”,
“type”: “string”
}
]
}
What's going on:
- Receives resume text from any of the three streams (Word/PDF/TXT)
- Creates a unified data structure
- Prepares data for AI analysis
3.2 Job description
Purpose: Gets a job description to compare with a resume
Google Drive settings:
- Operation: Download
- File ID: 1kqu3gc37e5xr5z4brfn57f9ushaqenn7v6mn2wvlnvs (fixed document ID)
- Google File Conversion: Docs to PDF
Extract from File1: Purpose: Retrieves job description text
The result: A text with candidate requirements, duties and evaluation criteria.
SECTION 4: ANALYSIS OF THE INFORMATION OBTAINED

4.1 AI Agent — Basic Analysis
Purpose: Conducts a detailed analysis of the compliance of the resume with the job description
Connected components:
- o4-mini (OpenAI o4-mini model) is the most advanced model for analysis
- Structured Output Parser - structured output of results
Input data:
Summary: {{$ ('Job Description') .item.json.resume}}
System prompt:
# Review
You are a technical recruiting expert specializing in artificial intelligence, automation, and software. You were provided with a job description and a candidate's resume. Your task is to analyze your resume for compliance with the job description and provide a detailed inspection report in Russian.
Focus on whether the candidate meets the basic requirements and the ideal profile specified in the job description. Assess both compliance with technical skills and understanding of the business context. Use arguments based on the actual content of the resume and job - avoid making assumptions.
## Output
Your output should be in exactly this format:
The candidate's strengths are:
List the candidate's main strengths or qualifications. Be specific.
The candidate's weaknesses:
List areas in which the candidate is deficient or does not fit the job description.
Risk factor:
- Assign a risk score (low/medium/high) - explain the worst-case scenario if this candidate is hired.
Reward factor:
- Assess the reward (low/medium/high) - describe the best scenario - what value can this candidate discover?
Is the candidate suitable for the short term or the long term?
Overall conformity assessment (0-10):
Assign a number between 0 (terrible match) and 10 (perfect match). Don't enter decimal numbers.
Rationale for the assessment:
Explain clearly why this candidate received this grade. Indicate the specific content of the resume and whether it meets or does not match the job description.
## Job description {{$json.text}}
4.2 Structured Output Parser
Purpose: Converts an AI response into a structured JSON format
Structured Output Parser Schema:
{
“name”: “resume_screening_evaluation”,
“description”: “Parses a structured resume analysis in the format provided by an AI agent”,
“type”: “object”,
“properties”: {
“candidate_strengths”: {
“type”: “string”,
“description”: “A textual description of the candidate's strengths with all the lists and details”
},
“candidate_weaknesses”: {
“type”: “string”,
“description”: “A textual description of weaknesses and areas of inconsistency”
},
“risk_factor”: {
“type”: “object”,
“description”: “Risk factor assessment”,
“properties”: {
“risk_level”: {
“type”: “string”,
“description”: “Risk Level: Low, Medium, or High”
},
“risk_explanation”: {
“type”: “string”,
“description”: “Worst-case scenario explanation when hiring a candidate”
}
},
“required”: ["risk_level”, “risk_explanation"]
},
“reward_factor”: {
“type”: “object”,
“description”: “Assessment of the reward factor”,
“properties”: {
“reward_level”: {
“type”: “string”,
“description”: “Reward Level: Low, Medium, or High”
},
“reward_explanation”: {
“type”: “string”,
“description”: “A description of the best scenario and the candidate's value”
}
},
“required”: ["reward_level”, “reward_explanation"]
},
“career_perspective”: {
“type”: “string”,
“description”: “Is the candidate suitable for the short term or long term with justification”
},
“overall_fit_rating”: {
“type”: “integer”,
“minimum”: 0,
“maximum”: 10,
“description”: “Overall compliance score from 0 to 10 (integer)”
},
“rating_justification”: {
“type”: “string”,
“description”: “Detailed justification for the grade, including the specific content of the resume”
}
},
“required”: [
“candidate_strengths”,
“candidate_weaknesses”,
“risk_factor”,
“reward_factor”,
“career_perspective”,
“overall_fit_rating”,
“rating_justification”
]
}
WHAT IS Structured Output Parser Schema: This is a scheme that forces AI to return resume analysis in a strictly defined JSON format instead of free text.
WHY IS IT NEEDED HERE:
- Structured assessment - all analysis criteria in separate fields
- Automated processing - data can be immediately saved to Google Sheets
- Uniformity - each resume is analyzed according to the same criteria
- Integration - results are easily transferred to other systems
HOW IT WORKS:
- AI gets a schema as a mandatory response format
- The model fills in each field according to the resume analysis
- n8n automatically parses JSON and makes fields available as $json.output.candidate_strengths
4.3 Information Extractor - Extract contacts
Purpose: Extracts a candidate's personal information from a resume
Connected components:
- OpenAI Chat Model (gpt-4o-mini)
Text Input:
{{$ ('Preparation') .item.json.resume}}
Attributes (required fields):
{
“attributes”: [
{
“name”: “Name”,
“description”: “Candidate name”,
“required”: true
},
{
“name”: “Last name”,
“description”: “Candidate's last name”,
“required”: true
},
{
“name”: “Mail”,
“description”: “Candidate email”,
“required”: true
}
]
}
The result:
{
“output”: {
“Name”: “Ivan”,
“Last Name”: “Petrov”
“Mail”: "ivan.petrov@email.com”
}
}
4.4 Google Sheets - Save results
Purpose: Automatically maintains a database of analyzed candidates
Google Sheets settings:
- Operation: Append or Update
- Document ID: 1RoQKDLNx2INM15C_XJS77x3xAZXMUC16D-8x9-63MGC
- Sheet Name: Sheet1
- Matching Columns: Name (updates an existing record or creates a new one)
Columns Mapping:
{
“Name”: “{{$json.output ['Name']}}”,
“Last Name”: “{{$json.output ['Last Name']}}”,
“Mail”: “{{$json.output ['Mail']}}”,
“Strengths”: “{{$ ('AI Agent') .item.json.output.candidate_strengths}}”,
“Weaknesses”: “{{$ ('AI Agent') .item.json.output.candidate_weaknesses}}”,
“Risk factor”: “{{$ ('AI Agent') .item.json.output.risk_factor}}”,
“Reward Factor”: “{{$ ('AI Agent') .item.json.output.reward_factor}}”,
“Career perspective”: “{{$ ('AI Agent') .item.json.output.career_perspective}}”,
“Overall Score”: “{{$ ('AI Agent') .item.json.output.overall_fit_rating}}”,
“The rationale for the assigned score”: “{{$ ('AI Agent') .item.json.output.rating_justification}}”
}
The structure of the final table:

Node connection diagram
Main stream:
- Getting a resume → Upload to Drive
- Upload to Drive → File type
Format processing:
Word stream: 3. File type (Output 0) → Word to Docs conversion 4. Word to Docs conversion → Get Doc 5. Get Doc → Extract from File
PDF stream: 3. File type (Output 1) → Get PDF 4. Get PDF → Extract from File2
Text stream: 3. File type (Output 2) → Get TXT 4. Get TXT → Extract from File3
Integration and analysis:
- Extract from File/File2/File3 → Preparation
- Preparation → Job description
- Job description → Extract from File1
- Extract from File1 → AI Agent
- AI Agent → Information Extractor
- Information Extractor → Google Sheets
AI Connections:
- o4-mini → AI Agent (basic analysis model)
- Structured Output Parser → AI Agent (structured output)
- OpenAI Chat Model → Information Extractor (extracting contacts)
Required services and their settings
Setting up Gmail:
- Create a separate email to receive resumes
- Set up OAuth2 access for the Gmail API
- Make sure the DownloadAttachments option is enabled in the very first node
Setting up Google Drive:
- Create a folder to store your resume
- Prepare a job description document
- Get the ID document with the job description
Setting up Google Sheets:
- Create a “Candidate Table” table
- Add headings for all columns according to mapping
- Get the table ID to set up
System capabilities
Supported formats:
- Microsoft Word (.docx) - via conversion to Google Docs
- PDF (.pdf) - direct text extraction
- Text files (.txt) - direct read
Analysis criteria:
- Strengths - compliance with requirements
- Weaknesses - areas of discrepancy
- Risk factor - potential hiring problems
- Reward factor - the candidate's possible value
- Career prospects - short/long term suitability
- Overall score - a numerical score between 0 and 10
- Rationale - a detailed explanation of the assessment
Automated processes:
- Receiving resumes - automatic email check every hour
- Format processing - universal support for different file types
- AI analysis - in-depth conformity assessment
- Retrieving contacts - automatic name and email detection
- Database maintenance - structured storage of all candidates
System application
For HR departments:
- Mass screening - processing hundreds of resumes automatically
- Objective assessment - AI eliminates human prejudices
- Save time - the initial selection takes place without the participation of HR
- Structured base - all candidates in a convenient table
For recruiting agencies:
- Scaling - processing a large volume of candidates
- Standardization - common assessment criteria for everyone
- Reporting - ready data for customers
- Competitive advantage - modern AI technologies
For startups:
- HR automation - there is no need for a large HR department
- High-quality selection - professional expertise from AI
- Flexibility - easy to adapt to different positions
- Integration - compatibility with existing processes
The result of the system
What happens is:
- Automated HR process working 24/7
- Structured database of candidates with a detailed assessment
- Objective analysis based on AI expertise
- Save time Up to 80% of HR specialists
- Standardized assessment all candidates
Performance metrics:
- Processing speed - resume analysis in 2-3 minutes
- Extraction accuracy - 95% + correct contact details
- Objectivity of the assessment - elimination of human prejudices
- Scalability - processing an unlimited number of resumes
Advantages over the manual process:
- Consistency - the same criteria for everyone
- Speed - instant processing instead of waiting days
- Detail - in-depth analysis of every aspect
- Documenting - a complete history of all ratings
This system turns the labor-intensive process of manual resume screening into an automated pipeline with AI expertise!