Send Automated Recruitment Rejection Email at End-of-Day (Google Sheets | Gmail)

Send Automated Recruitment Rejection Emails with Google Sheets and Gmail at End-of-Day.

Automatically reads a “Candidate Status” tab in Google Sheets every day at 18:00 Asia/Kolkata, filters rows with exact (case-sensitive) rejection statuses and sends one personalized rejection email per candidate via SMTP (Gmail). It rate-limits sends, supports DRY_RUN previews and writes a timestamp back to rejection_sent_at to avoid duplicates.

Who’s it for

Recruiters needing consistent, respectful closure at day end. Teams tracking hiring outcomes in Google Sheets. Coordinators who prefer a scheduled, hands-off workflow with safeguards.

How it works

Cron (18:00 IST) triggers daily Google Sheets Read → loads Candidate Status tab Filter → keep rows where status REJECT_STATUS_CSV (exact match), with valid candidate_email and empty rejection_sent_at DRY\RUN? If true → output preview only; if false → proceed Rate limit → wait RATE_LIMIT_SECONDS (default 10s) between emails SMTP (Gmail) → send personalized email per row using templates Mark as sent → write current timestamp to rejection_sent_at

How to set up

Sheet & Columns**: Create “Candidate Status” tab with: candidate_name, candidate_email, role, status, recruiter_name, recruiter_email, company_name, interview_feedback (optional), template_variant (optional), language (optional), rejection_sent_at Credentials: Connect Google Sheets (OAuth) and SMTP (Gmail) in n8n (use App Password if 2FA) Config (Set node): SPREADSHEET_ID SOURCE_SHEET = Candidate Status TIMEZONE = Asia/Kolkata REJECT_STATUS_CSV = e.g., Rejected SMTP_FROM = e.g., careers@company.com SUBJECT_TEMPLATE = Regarding your application for {{role}} at {{company_name}} HTML_TEMPLATE / TEXT_TEMPLATE RATE_LIMIT_SECONDS = 10 INCLUDE_WEEKENDS = true DRY_RUN = false Activate**: Enable the workflow

Requirements

Google Sheet with the “Candidate Status” tab and columns above. SMTP (Gmail) account for sending. n8n (cloud or self-hosted) with Google Sheets + SMTP credentials.

How to customize

Statuses**: REJECT_STATUS_CSV supports comma-separated exact values (e.g., Rejected,Not Selected) Templates**: Edit SUBJECT_TEMPLATE, HTML_TEMPLATE, TEXT_TEMPLATE

Variables:** {{candidate_name}}, {{role}}, {{company_name}}, {{recruiter_name}}, and optional {{feedback_text}}/{{feedback_html}} from interview_feedback Schedule**: Change Cron time from 18:00 to your preferred hour Rate limit**: Tune RATE_LIMIT_SECONDS for SMTP policy Preview**: Set DRY_RUN=true for a safe, no-send preview

Add-ons

Dynamic Reply-To** per recruiter_email Localization/Variants** via language or template_variant columns Daily summary** email: sent/skip/error counts Validation & logging**: log invalid emails to another tab Gmail API**: swap SMTP with Gmail nodes if preferred

Use Case Examples

Daily round-up**: 18:00 IST closure emails for all candidates marked Rejected today Multi-brand hiring**: Switch company_name per row and personalize subject lines Compliance/logging**: DRY\RUN each afternoon, review, then flip to live sends

Common troubleshooting

No emails sent**: Ensure status exactly matches REJECT_STATUS_CSV (case-sensitive) and candidate_email is present Duplicates**: Verify rejection_sent_at is blank before run; workflow sets it after sending Blank variables**: Fill candidate_name, role, company_name, recruiter_name in the sheet SMTP errors**: Check credentials, sender permissions, and daily limits Timing**: Confirm workflow timezone Asia/Kolkata and Cron = 18:00

Need Help?

Want us to tailor the template, add a summary report or wire up company-based variants? Contact our n8n automation engineers at WeblineIndia and we’ll plug it in.

0
Downloads
0
Views
8.18
Quality Score
beginner
Complexity
Author:WeblineIndia(View Original →)
Created:9/10/2025
Updated:10/24/2025

🔒 Please log in to import templates to n8n and favorite templates

Workflow Visualization

Loading...

Preparing workflow renderer

Comments (0)

Login to post comments