I want to discuss a task or project
Done! We will get back to you within one business day
Something went wrong. Please try again
Alexander Start:Duck 🦢
@olga_startduck
Write to Telegram
Назад
1k+ участников
Вступить в Telegram
n8n
05.09.2025

Resume Analysis System - Automating HR Screening

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:

  1. Gmail OAuth2 - to receive a resume from the mail
  2. Google Drive OAuth2 - for working with files
  3. Google Sheets OAuth2 - to maintain a database of candidates
  4. 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:

  1. Word Doc (Output 0):


    • MimeType equals “application/vnd.openxmlformats-officedocument.wordprocessingml.document”
    • Sends Word documents for conversion
  2. PDF (Output 1):


    • MimeType equals “application/pdf”
    • Sends PDF files for direct extraction
  3. 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:

  1. Structured assessment - all analysis criteria in separate fields
  2. Automated processing - data can be immediately saved to Google Sheets
  3. Uniformity - each resume is analyzed according to the same criteria
  4. 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:

  1. Getting a resumeUpload to Drive
  2. Upload to DriveFile type

Format processing:

Word stream: 3. File type (Output 0) → Word to Docs conversion 4. Word to Docs conversionGet Doc 5. Get DocExtract from File

PDF stream: 3. File type (Output 1) → Get PDF 4. Get PDFExtract from File2

Text stream: 3. File type (Output 2) → Get TXT 4. Get TXTExtract from File3

Integration and analysis:

  1. Extract from File/File2/File3Preparation
  2. PreparationJob description
  3. Job descriptionExtract from File1
  4. Extract from File1AI Agent
  5. AI AgentInformation Extractor
  6. Information ExtractorGoogle Sheets

AI Connections:

  • o4-miniAI Agent (basic analysis model)
  • Structured Output ParserAI Agent (structured output)
  • OpenAI Chat ModelInformation 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!

Читайте также

No items found.

write to us and we will show you the way to efficiency