This workflow automatically detects duplicate job applicants by checking incoming emails from Gmail against existing records in Google Sheets. If a candidate’s email already exists, it sends an alert to Slack; otherwise, it adds the candidate to the sheet.
- HR and recruitment teams processing candidate emails manually
- Startups or SMEs handling job applications via Gmail
- Anyone looking to automate resume collection and deduplication
- Teams using Slack and Google Workspace
- Triggers at a fixed interval using the Schedule Trigger node
- Fetches recent emails labeled
applicantfrom Gmail - Extracts candidate details from the email body using regex
- Reads existing candidate records from Google Sheets
- Compares the incoming candidate email with existing entries
- If duplicate → Sends a Slack alert
- If new → Appends the candidate to Google Sheets
-
Label candidate emails in Gmail with a label such as
applicant -
Connect Gmail, Google Sheets, and Slack credentials in n8n
-
Create a Google Sheet with the following columns:
candidate_namecandidate_emailcandidate_phonerole_appliedyears_of_experiencerecruiterresume_urlsource_email
-
Import the workflow JSON into n8n
-
Update:
- Gmail label ID
- Google Sheet ID and tab name
- Slack channel or user
-
Activate the workflow
- n8n account (cloud or self-hosted)
- Gmail account with labeled application emails
- Google Sheet for candidate storage
- Slack account with
chat:writepermission - Basic regex knowledge (optional)
- Extend comparison logic to include phone numbers
- Add fuzzy matching for similar candidate names
- Filter candidates by role or experience level
- Upload resume attachments to Google Drive or Notion
- Add approval or screening flows for shortlisted candidates
- Google Drive – Upload and store parsed resumes
- Notion / Airtable – Maintain structured candidate databases
- Webhooks – Forward candidates to ATS or CRM systems
- PDF Parsers – Extract structured data from resume attachments
| Use Case | Description |
|---|---|
| Resume deduplication | Avoid processing the same applicant multiple times |
| Auto Slack alert | Instantly notify recruiters of repeat candidates |
| Centralized tracking | Maintain candidate records in Google Sheets |
| Passive sourcing | Run scheduled checks on labeled Gmail inboxes |
| Issue | Possible Cause | Solution |
|---|---|---|
| Slack message not sent | Invalid Slack token or channel not selected | Reauthorize Slack and select the correct channel or user |
| Google Sheet not updated | Incorrect Sheet ID or tab name | Verify the Google Sheet URL and worksheet tab |
| Email data not extracted | Regex does not match email body | Update regex logic in the Code node |
| Workflow not running | Gmail label or time filter too strict | Ensure labeled emails exist within the trigger time window |
Need help setting this up or adjusting regex for your custom email format? We’re happy to help.
Looking for advanced enhancements like:
- Phone number duplication checks
- Auto-upload resumes to Google Drive
- ATS or CRM integrations
Our automation experts can guide you step by step 👍