Back to Templates

Match job descriptions with resumes using Google Gemini and log scores to Google Sheets

Last update

Last update 3 hours ago

Share


Smart Resume Screener — JD ↔ Resume AI Match & Sheet Logger

Smart Resume Screener ingests a candidate resume and a job description link, extracts clean text from both, runs an LLM-powered screening agent to produce a structured assessment (strengths, weaknesses, risk/reward, justification, and a 0–10 fit score), extracts contact details, and appends a single, validated row to a Google Sheet for tracking.


How It Works (Step-by-Step)

1. Trigger — On Form Submission

Public form webhook sends:

  • Binary resume file (PDF / DOCX)
  • Job Description (JD) URL or text

2. Extract & Fetch Content

  • Resume Extraction node

    • Converts the uploaded binary resume into plain text (data.resume).
  • HTTP Request node

    • Fetches the JD HTML/text from the provided link.
  • Job Description Extractor (LLM-driven)

    • Parses the fetched content into structured JD fields:
      • Requirements
      • Responsibilities
      • Skills
      • Seniority
      • etc.

3. Prepare and Aggregate

  • Set Resume node

    • Normalizes the resume into a clean JSON object.
  • Merge/Aggregate node

    • Builds a single payload containing:
      { "resume": "...", "job_description": "...", "meta": "..." }
      

4. AI Evaluation

  • Recruiter Agent (LangChain node, powered by Google Gemini)

    • Receives aggregated payload

    • Returns a strict JSON-formatted screening report including:

      • candidate_strengths
      • candidate_weaknesses
      • risk
      • reward
      • overall_fit_rating (0–10 numeric)
      • justification
  • Structured Output Parser

    • Enforces JSON schema
    • Ensures predictable downstream data

5. Identity Extraction & Logging

  • Contact Info Extractor

    • Extracts:
      • Name
      • Email
  • Append to Google Sheets

    • Writes:
      • Date
      • Name
      • Email
      • Strengths
      • Weaknesses
      • Risk
      • Reward
      • Justification
      • Overall Fit Score

6. (Optional) Notifications / Follow-Ups

  • Add Slack / Email / Webhook nodes
  • Trigger alerts for high-fit candidates

Quick Setup Guide

👉 Demo & Setup Video
👉 Sheet Template
👉 Course

Nodes of Interest You Can Edit

Trigger — On Form Submission

  • Change webhook URL
  • Modify accepted form fields
  • Add metadata capture (job_id, source)

Resume Extraction (Extract from File)

  • Enable OCR fallback
  • Adjust encoding/charset handling
  • Replace with third-party resume parser

HTTP Request (Fetch Job Description)

  • Configure timeouts
  • Add retry policy
  • Set headers
  • Restrict allowed domains

Job Description Extractor (Information Extractor1)

  • Modify extractor prompt/schema
  • Add fields like must_have and nice_to_have

Set Resume (Prepare Resume)

  • Strip headers/footers
  • Normalize dates
  • Split resume sections

Merge / Aggregate

  • Modify payload structure
  • Add context fields (job_id, recruiter_notes, source_platform)

Recruiter Agent (LangChain Agent)

  • Edit system/user prompts
  • Adjust model temperature
  • Modify token limits
  • Switch LLM provider

Structured Output Parser

  • Update JSON schema
  • Add fields like:
    • experience_years
    • certifications
    • notice_period

Contact Info Extractor

  • Add:
    • Phone
    • LinkedIn
    • Location

Append to Google Sheets

  • Modify column mapping
  • Add fields like:
    • workflow_run_id
    • resume_link

What You’ll Need (Credentials)

  • Google Sheets API credentials (OAuth or Service Account)
  • Google Drive / Storage credentials (if resumes are stored there)
  • LLM provider credentials (e.g., Google Gemini API key/service account)
  • (Optional) OCR / Vision API credentials for scanned PDFs
  • (Optional) Email / Slack / Teams webhook or SMTP credentials
  • Access to public JD URLs (or credentials if behind authentication)

Recommended Settings & Best Practices

  • LLM temperature: 0.0–0.3 for consistent output
  • Max tokens: 800–1200 for justification (with enforced limits)
  • Strict JSON schema: Fail fast on invalid structure
  • Retries & timeouts:
    • ~10s HTTP timeout
    • 2 retries with exponential backoff
  • Rate limiting: Protect LLM quotas
  • Deduplication: Check existing email or resume hash
  • Least privilege: Scope Google service account to target sheet only
  • PII handling: Limit exposed fields; encrypt sensitive data if needed
  • Schema versioning: Add schema_version column
  • Error logging: Use Catch node with workflow_run_id
  • Human review gate: Route borderline scores (6–7) for manual review

Customization Ideas

  • Conditional alerts (overall_fit_rating >= 8)
  • Multi-model scoring (Gemini + alternative model)
  • Automated outreach emails
  • ATS integration (Greenhouse, Lever, etc.)
  • JD template library
  • Multi-language resume routing
  • Skill-level mapping (e.g., python: 4/5)
  • Candidate scoring dashboard
  • Resume storage with secure links

Troubleshooting — Quick Tips

Resume Extraction Issues

  • Validate binary input
  • Enable OCR for scanned PDFs
  • Check encoding and file type

JD Fetch Failure

  • Validate URL reachability
  • Add headers (User-Agent)
  • Increase timeout
  • Provide auth if needed

LLM JSON Errors

  • Lower temperature (0–0.2)
  • Enforce strict JSON prompt
  • Add retry with "fix-json" prompt
  • Inspect raw LLM output

Google Sheets Append Fails

  • Check credential expiry
  • Confirm sheet ID and gid
  • Validate column mapping
  • Monitor API quota

Duplicate Rows

  • Add email-based dedupe logic
  • Hash resume content

PII Exposure

  • Audit sheet sharing settings
  • Use restricted service accounts

Tags / Suggested Listing Fields

  • recruiting
  • resume-parser
  • ai-screening
  • langchain
  • google-gemini
  • google-sheets
  • n8n
  • ats-integration
  • pii-sensitive
  • automation