Gmail + Gemini, consistent CV fit scores by email
Reviewing CVs manually sounds manageable until you’re on your fifth “quick skim” of the day and everything starts blending together. Notes get inconsistent. Good candidates slip through. And you still have to write a coherent email summary afterward.
This is where recruiters feel the grind first, but hiring managers and career coaches running weekly reviews get dragged into it too. A solid CV scoring automation keeps every CV assessed the same way, with the same rubric, every time.
This workflow uses Gemini to score a CV against a job post, extract gaps, and email a clean report through Gmail. You’ll learn what it does, what you need, and how to run it without turning your hiring process into a spreadsheet nightmare.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Gmail + Gemini, consistent CV fit scores by email
flowchart LR
subgraph sg0["Parse AI JSON Output Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/> Webhook - CV Optimizer Form"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Response - HTML Form"]
n2@{ icon: "mdi:cog", form: "rounded", label: "Extract CV Text (PDF)", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare CV Text", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Job Posting"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge CV + Job Data"]
n6@{ icon: "mdi:brain", form: "rounded", label: " Gemini Model - Primary", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Parse AI JSON Output", pos: "b", h: 48 }
n8@{ icon: "mdi:brain", form: "rounded", label: "Gemini Model", pos: "b", h: 48 }
n9@{ icon: "mdi:message-outline", form: "rounded", label: "Send report ", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "AI CV Analyzer", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Job Text Cleaner"]
n8 -.-> n7
n10 --> n9
n3 --> n4
n3 --> n5
n11 --> n5
n4 --> n11
n5 --> n10
n7 -.-> n10
n2 --> n3
n6 -.-> n10
n0 --> n1
n0 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n7,n10 ai
class n6,n8 aiModel
class n0,n1,n4 api
class n11 code
classDef customIcon fill:none,stroke:none
class n0,n1,n4,n5,n11 customIcon
Why This Matters: Inconsistent CV Reviews Waste Great Candidates
Most CV screening processes break in boring ways. You read a CV, open the job post, copy a few lines into notes, then try to remember what you said about the last three candidates. By the end of the day, “strong communicator” means something different in every email you send. Honestly, it’s not laziness. It’s context switching. And it creates uneven decisions that are hard to justify later when someone asks, “Why did we reject them?”
The friction compounds. Here’s where it usually falls apart.
- Review criteria drift over time, so your “fit” score quietly becomes a feeling instead of a repeatable standard.
- Job posts are messy, which means key requirements get missed or interpreted differently by different reviewers.
- Writing candidate feedback emails turns into a second task, and it’s easy to delay or send something vague.
- When volume spikes, you either rush or you stop responding, and neither outcome helps your hiring brand.
What You’ll Build: CV-to-Job Fit Scoring + Email Reports
This automation starts when a CV is submitted through a simple web form (powered by an n8n webhook). The workflow extracts the resume text from the uploaded file, then pulls the job listing content via an HTTP request. Next, it cleans up the job text, combines the job and CV into one structured prompt, and sends it into Gemini for analysis. Gemini returns a structured result: a fit score on a 1–10 scale, a recommendation (Apply, Consider, or Not a fit), plus gaps and next steps. Finally, n8n formats everything into a readable report and sends it via Gmail to the candidate (or to your internal review inbox, if you prefer).
The workflow begins with a CV upload and a job post fetch. AI then evaluates alignment and produces a JSON-style response you can reliably parse. Gmail delivers the final report so the outcome is immediate and easy to act on.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you review 20 CVs for one role in a week. Manually, even a “fast” process can take about 15 minutes per CV (reading, checking the job post, writing notes, then emailing a summary), which is roughly 5 hours total. With this workflow, you submit the CV once and wait for the report, usually a few minutes, then spend about 2 minutes sanity-checking the result and deciding what to do next. That’s about 4 hours back per role, and the decision trail is cleaner.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Gemini API for CV scoring and recommendations
- Gmail account to send the report email
- Gemini API key (get it from Google AI Studio / Google Cloud)
Skill level: Beginner. You’ll connect accounts, paste an API key, and adjust a few text fields like your email template.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A CV upload triggers the workflow. The candidate submits a resume through a simple form connected to an n8n webhook, which means you don’t need a separate landing page tool just to start.
The workflow extracts and prepares the inputs. n8n pulls readable text from the CV file, fetches the job listing via HTTP request, then cleans the job text so the AI isn’t distracted by navigation, cookie banners, or random page clutter.
Gemini scores the candidate against the role. The “Analyze CV Against Role” agent runs the core evaluation, and Gemini produces a structured response that includes the 1–10 fit score, a recommendation, and missing skills you can act on.
Gmail sends a clean report. The workflow parses the AI response, optionally runs a second Gemini pass to tighten clarity, then emails the final summary to the candidate or your internal inbox for review.
You can easily modify the scoring thresholds to change “Apply” vs “Consider” based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the inbound form endpoint that receives CV uploads, job URLs, and email addresses.
- Add the Incoming CV Webhook node and set Path to
cv-optimizer. - Enable Multiple Methods in Incoming CV Webhook and set Response Mode to
responseNode. - Connect Incoming CV Webhook to Return HTML Form to serve the form UI to users.
- In Return HTML Form, set Respond With to
textand Response Body to the provided HTML expression.
Step 2: Extract and Map CV Content
Convert the uploaded PDF into text and map it into a clean field for downstream processing.
- Connect Incoming CV Webhook to Extract Resume Text to process the uploaded PDF.
- In Extract Resume Text, set Operation to
pdfand Binary Property Name to=cv. - Add Map CV Text and set a field named cv_text to
{{ $json.text }}.
cv so Extract Resume Text can access it via =cv.Step 3: Retrieve and Clean the Job Listing (Parallel Branch)
Fetch the job page HTML and normalize it into plain text for the AI comparison.
- From Map CV Text, branch to Retrieve Job Listing and Combine CV and Job Info in parallel.
- In Retrieve Job Listing, set URL to
{{ $('Incoming CV Webhook').item.json.body.job_url }}. - Connect Retrieve Job Listing to Clean Job Text and keep the JavaScript that strips HTML and returns
{ job_text: text }. - Connect Clean Job Text to Combine CV and Job Info.
Map CV Text outputs to both Retrieve Job Listing and Combine CV and Job Info in parallel.
Step 4: Merge CV and Job Data for Analysis
Combine the cleaned CV and job text into a single payload for the AI agent.
- In Combine CV and Job Info, set Mode to
combineand Combine By tocombineByPosition. - Ensure Combine CV and Job Info receives one input from Map CV Text and one from Clean Job Text.
Step 5: Configure the AI Analysis Chain
Set up the Gemini language model, output parser, and agent to evaluate CV fit and create a structured report.
- Add Primary Gemini Chat and connect it to Analyze CV Against Role as the language model.
- Credential Required: Connect your googlePalmApi credentials to Primary Gemini Chat.
- Add Parse AI Response JSON and connect it to Analyze CV Against Role as the output parser with Auto Fix enabled and the provided JSON schema.
- Add Secondary Gemini Chat and connect it to Parse AI Response JSON as the language model used by the parser.
- Credential Required: Connect your googlePalmApi credentials to Secondary Gemini Chat.
- In Analyze CV Against Role, set Text to the provided prompt, including the expressions
{{ $json["cv_text"] ? $json["cv_text"].slice(0, 18000) : "" }}and{{ $json["job_text"] ? $json["job_text"].slice(0, 18000) : "" }}.
Step 6: Send the CV Report via Email
Email the structured AI results back to the candidate.
- Connect Analyze CV Against Role to Send CV Report Email.
- Credential Required: Connect your gmailOAuth2 credentials to Send CV Report Email.
- Set Send To to
{{ $('Incoming CV Webhook').item.json.body.email }}. - Set Subject to
Your CV Review: {{ $json.output.job_title }} in {{ $json.output.location }}. - Set Message to the provided HTML template that references
$json.outputfields for summary, gaps, and recommendations.
Step 7: Test and Activate Your Workflow
Validate the full flow and then enable it for production.
- Click Execute Workflow and open the test URL from Incoming CV Webhook.
- Submit the form with a PDF CV, a live job posting URL, and a valid email address.
- Confirm that Extract Resume Text outputs text, Retrieve Job Listing fetches HTML, and Clean Job Text returns
job_text. - Verify that Analyze CV Against Role returns structured JSON parsed by Parse AI Response JSON.
- Check that Send CV Report Email delivers the formatted email to the submitted address.
- Toggle the workflow to Active for live use.
Troubleshooting Tips
- Gmail credentials can expire or need specific permissions. If things break, check the Gmail node’s connected account and re-auth in n8n credentials first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Quick Answers
About 30 minutes if you already have Gemini and Gmail ready.
No. You’ll mostly connect accounts and tweak prompts or email text.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Gemini API usage costs (usually small per analysis, but it depends on CV length and prompt size).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you probably should. You can adjust the decision thresholds inside the “Analyze CV Against Role” agent prompt (for example, what qualifies as “Apply” vs “Consider”), and you can edit the “Send CV Report Email” Gmail node to change tone, branding, or who receives the report. Many teams also swap the “Retrieve Job Listing” HTTP request so it pulls from an ATS, a Google Doc, or a pinned internal URL. If you want multi-language output, add a translation step right before the email is generated.
Usually it’s an expired OAuth session or the wrong Gmail account connected in n8n credentials. Reconnect the Gmail credential, then confirm the “From” address matches what Gmail allows you to send from. If it fails only on some runs, check quota limits or security settings on the Google workspace.
On most setups, dozens of CVs per day is fine, because each execution is just “fetch job post → analyze → email.” On n8n Cloud, your practical limit is your plan’s monthly executions, and on self-hosting there’s no hard execution cap (your server and AI rate limits are the real bottlenecks). If you’re running batches of hundreds, add simple queueing: throttle requests to Gemini and stagger sends through Gmail to avoid provider limits.
Often, yes. n8n is more comfortable with “real” workflow logic like branching, merging, and structured parsing, which matters when you’re turning AI output into reliable fields. You also get a self-hosting option, which is a big deal when volume grows. Zapier or Make can still work if you only need a basic CV-to-email pipeline, but things get fiddly when you want consistent scoring logic, retries, and cleaner data handling. If you want help choosing, talk it through with an automation specialist. Talk to an automation expert.
This workflow turns CV screening into a repeatable system instead of a mood-dependent task. Set it up once, tune the rubric, and get your evenings back.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.