Google Sheets to Gmail, kind rejections sent fast
Your interview feedback is in Google Sheets, your email is in Gmail, and your “we’ll follow up soon” promise is sitting in someone’s inbox. Meanwhile, decisions get delayed, notes get misread, and candidates are left waiting.
This Sheets Gmail rejection automation hits recruiters hardest, but hiring managers and ops leads feel it too. You will send kind, consistent rejection emails quickly, without losing the human tone or the paper trail.
Below is how the workflow turns messy feedback into a scored decision, a compassionate email, and a ClickUp record your whole team can trust.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets to Gmail, kind rejections sent fast
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n2["<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/>Code"]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", 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/clickup.svg' width='40' height='40' /></div><br/>Create a task"]
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/code.svg' width='40' height='40' /></div><br/>Code1"]
n6@{ icon: "mdi:robot", form: "rounded", label: "Basic LLM Chain", pos: "b", h: 48 }
n7@{ icon: "mdi:brain", form: "rounded", label: "Azure OpenAI Chat Model1", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Basic LLM Chain1", pos: "b", h: 48 }
n9@{ icon: "mdi:brain", form: "rounded", label: "Azure OpenAI Chat Model", pos: "b", h: 48 }
n10@{ icon: "mdi:message-outline", form: "rounded", label: "email", 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/>Code2"]
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n13["<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/clickup.svg' width='40' height='40' /></div><br/>Create a task1"]
n14["<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/>Code3"]
n15@{ icon: "mdi:robot", form: "rounded", label: "Basic LLM Chain2", pos: "b", h: 48 }
n16@{ icon: "mdi:brain", form: "rounded", label: "Azure OpenAI Chat Model2", pos: "b", h: 48 }
n17["<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/>Code4"]
n18@{ icon: "mdi:message-outline", form: "rounded", label: "Send Rejection Email1", pos: "b", h: 48 }
n3 --> n8
n3 --> n5
n3 --> n6
n2 --> n17
n5 --> n4
n11 --> n10
n11 --> n12
n14 --> n18
n17 --> n3
n12 --> n13
n6 --> n14
n8 --> n11
n15 --> n2
n0 --> n15
n9 -.-> n8
n7 -.-> n6
n16 -.-> n15
n1 --> n0
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 n1 trigger
class n6,n8,n15 ai
class n7,n9,n16 aiModel
class n3 decision
class n0 database
class n2,n5,n11,n14,n17 code
classDef customIcon fill:none,stroke:none
class n2,n4,n5,n11,n13,n14,n17 customIcon
The Problem: Rejections get delayed, inconsistent, and awkward
Candidate rejections are one of those tasks everyone agrees are important, and then they slip to the bottom of the list. The feedback is spread across a sheet, a manager’s notes, and a half-written email draft. You copy and paste, tweak the tone, second-guess the wording, and still worry it sounds cold. Then there’s the internal side: someone asks, “Did we already email them?” and you’re digging through threads instead of moving the pipeline forward. It’s draining work, and it happens at the worst time (when you’re already busy).
The friction compounds. Here’s where it breaks down.
- Writing “just one quick rejection” turns into about 10–15 minutes once you personalize it and check details.
- Feedback in Google Sheets often isn’t clean, so decisions get stuck in interpretation and follow-ups.
- Different people send different messages, which makes your employer brand feel inconsistent.
- No central logging means you lose the audit trail when questions come up later.
The Solution: Score candidates in Sheets, email via Gmail, log in ClickUp
This workflow watches for interview feedback stored in Google Sheets, then uses AI to turn that raw input into a structured candidate profile. It assigns a clear score (based on your feedback), compares it to your threshold, and routes the candidate into the rejection path when they fall short. From there, the workflow generates a compassionate HTML rejection email that still feels personal, sends it through Gmail, and creates a ClickUp task so your team has a permanent record of what happened. If something fails mid-run, an error trigger can surface it, so you’re not blind to missed communications. Honestly, it’s the kind of automation that protects both your time and your reputation.
The workflow starts by pulling interview responses from Google Sheets. AI structures the notes into a consistent format with an average score, then an If check routes only the “reject” outcomes. Finally, Gmail sends the email and ClickUp logs the decision for visibility.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you reject 15 candidates in a week. If each email takes about 10–15 minutes to write, double-check, and send, that’s roughly 3 hours of repetitive work, plus the mental overhead of keeping tone consistent. With this workflow, you update feedback in Google Sheets and let it run: a minute to make sure the sheet row is complete, a short processing window for the AI, and the email is sent and logged in ClickUp. You get those hours back, and candidates stop waiting days for closure.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for interview feedback rows and scores.
- Gmail to send rejection emails from your domain.
- ClickUp API credentials (get it from ClickUp Settings → Apps).
- Azure OpenAI API key (get it from Azure OpenAI Studio).
Skill level: Intermediate. You’ll connect accounts, map a few fields, and test with real sheet rows.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Feedback arrives in Google Sheets. The workflow pulls structured interview responses from your sheet (the place your team already uses), so you’re not chasing notes across tools.
AI cleans it up and scores it. GPT-4o-mini takes the raw feedback and converts it into a consistent JSON-style profile with an average score, key notes, and context you can reuse in the email.
A threshold check decides the route. When the score is under 3, the If logic sends the candidate down the rejection path (the acceptance path isn’t implemented in this template, which keeps the behavior predictable).
Gmail sends, ClickUp logs. The workflow generates a compassionate HTML rejection email, sends it via Gmail, then creates a ClickUp task so the decision is visible to the team and easy to audit later.
You can easily modify the scoring threshold to match your hiring bar based on role, seniority, or stage. See the full implementation guide below for customization options.
Common Gotchas
- Google Sheets access can fail if the connected Google account loses permissions to the file. If it breaks, check the file sharing settings and the n8n credential connection 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.
- Gmail sending can silently fail when you hit sending limits or the “from” identity isn’t allowed. Check Gmail API credentials, the sender alias, and your Google Workspace limits before you assume the workflow is wrong.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About an hour if your credentials are ready.
No. You’ll mostly connect accounts and map fields from Google Sheets into the email and ClickUp task.
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 Azure OpenAI usage costs for GPT-4o-mini.
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, but keep it simple at first. You can change the threshold in the scoring check (the logic that flags candidates when the average score is under your minimum), and you can swap the AI prompt used to generate the HTML email to match different job families. Common tweaks include using a stricter threshold for senior roles, adding a “reason category” field pulled from Google Sheets, and writing a different closing line per department.
Usually it’s credentials or permissions. Reconnect the Gmail/Google Workspace account in n8n, confirm the correct sending identity is allowed, and check that you haven’t hit daily sending limits. If the workflow runs but no email arrives, look at the n8n execution logs for the Gmail node response and confirm the candidate email field from Google Sheets is not blank or malformed.
A lot for most small teams. On n8n Cloud, it depends on your plan’s monthly executions; self-hosting has no hard execution cap, but your server still has limits. In practice, this workflow is lightweight per candidate, so it scales fine as long as your Gmail and Azure OpenAI quotas are sized for your hiring volume.
Often, yes, because the logic is not just “if row added, send email.” You’re doing AI structuring, scoring, conditional routing, and writing HTML, which tends to get expensive or awkward in tools that charge per step. n8n also gives you a self-hosting path if you want more control over candidate data. Zapier or Make can be fine if you want a basic template email and minimal branching. If you’re unsure, Talk to an automation expert and describe your hiring flow.
You set the bar once, and the workflow enforces it consistently. Candidates get a timely, respectful message, and your team keeps a clean ClickUp record without extra busywork.
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.