Airtable + Gmail: faster AI resume screening
Your inbox fills up with resumes, and suddenly hiring turns into copy-paste work. You download attachments, rename files, log candidates, skim for keywords, then try to remember why you liked someone two days later. It’s messy, slow, and way too easy to be inconsistent.
This kind of AI resume screening hits recruiters first, honestly. But HR managers and small-team founders feel it too, because the “quick review” becomes a daily time sink and a decision-quality problem.
This workflow routes resumes from intake to Airtable, scores candidates with AI using your job criteria, emails the right next step, and updates statuses automatically. You’ll see how it works, what you need, and where teams usually tweak it.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Airtable + Gmail: faster AI resume screening
flowchart LR
subgraph sg0["Resume Data Extracto 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/>Inbound CV Webhook"]
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/airtable.svg' width='40' height='40' /></div><br/>Airtable Save Applicant"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch CV File"]
n3@{ icon: "mdi:robot", form: "rounded", label: "Resume Data Extractor", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Engine", pos: "b", h: 48 }
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/airtable.svg' width='40' height='40' /></div><br/>Load Job Criteria"]
n6@{ icon: "mdi:robot", form: "rounded", label: "AI Qualification Review", pos: "b", h: 48 }
n7@{ icon: "mdi:brain", form: "rounded", label: "Assessment Chat Model", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Structured Result Parser", pos: "b", h: 48 }
n9["<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/airtable.svg' width='40' height='40' /></div><br/>Update Candidate Assessment"]
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Qualified Records", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Compose Outreach Email", pos: "b", h: 48 }
n12@{ icon: "mdi:brain", form: "rounded", label: "Email Chat Model", pos: "b", h: 48 }
n13@{ icon: "mdi:message-outline", form: "rounded", label: "Send Candidate Email", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Interview List", pos: "b", h: 48 }
n15@{ icon: "mdi:location-exit", form: "rounded", label: "Schedule Interview Event", pos: "b", h: 48 }
n16["<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/airtable.svg' width='40' height='40' /></div><br/>Update Interview Details"]
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/slack.svg' width='40' height='40' /></div><br/>Slack Status Alert"]
n18["<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/>Return Webhook Response"]
n4 -.-> n3
n3 --> n6
n0 --> n1
n0 --> n2
n12 -.-> n11
n8 -.-> n6
n11 --> n13
n17 --> n18
n1 --> n5
n2 --> n3
n9 --> n10
n9 --> n17
n7 -.-> n6
n14 --> n15
n10 --> n11
n5 --> n6
n13 --> n14
n6 --> n9
n16 --> n18
n15 --> n16
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 n3,n6,n8,n11 ai
class n4,n7,n12 aiModel
class n10,n14 decision
class n1,n5,n9,n16 database
class n0,n2,n18 api
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n5,n9,n16,n17,n18 customIcon
The Problem: Resume screening turns into inbox chaos
Most hiring bottlenecks aren’t about finding candidates. They’re about processing them. A resume lands, someone downloads it, someone else logs it, and then you’re stuck comparing apples to oranges because each reviewer focuses on different things. Add a few roles running in parallel and you get duplicated work, lost attachments, and “Where are we with this person?” messages all day. The worst part is the mental load: switching between Gmail, spreadsheets, calendar, and Slack just to move one candidate forward.
It adds up fast. Here’s where it usually breaks down.
- Resume files get separated from the candidate record, so context disappears when you need it most.
- Manual scoring changes person-to-person, which means strong candidates can slip through on busy days.
- Sending updates is tedious, so candidates wait longer and your team looks disorganized.
- Scheduling interviews requires back-and-forth, and the status in your tracker lags behind reality.
The Solution: Gmail-to-Airtable resume scoring with automated follow-up
This n8n workflow turns incoming CV submissions into a consistent, trackable pipeline. It starts when a resume hits your intake endpoint (a webhook), then saves the applicant into Airtable so every candidate has a record from minute one. Next, it downloads the CV file, extracts structured details (skills, experience, education), and sends that summary to an AI reviewer that scores the candidate against your job criteria stored in Airtable. Based on the score and rules you set, the workflow updates the candidate’s status, drafts a relevant email, and sends it through your email account. For interview-ready candidates, it can schedule a Google Calendar event and then posts a Slack update so your team stays in sync.
The workflow begins with CV intake and Airtable storage. Then AI handles extraction and qualification scoring using your criteria. Finally, candidates get the right email, interviews get booked in Google Calendar, and Airtable becomes the single source of truth.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you get 20 resumes for a role. Manually, even a quick process can look like 5 minutes to download and log each CV plus about 10 minutes to review and score, which is roughly 5 hours total. With this workflow, intake and Airtable logging are automatic, and AI scoring runs in the background after the webhook fires. You’re left with a quick review of the shortlist and the edge cases, which is often about an hour instead of most of an afternoon.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Airtable for candidate pipeline and criteria storage
- Gmail (or SMTP email) to send candidate updates automatically
- OpenAI API key (get it from your OpenAI dashboard)
Skill level: Intermediate. You’ll connect accounts, map a few fields, and adjust the scoring rules to match your role.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
CV intake hits your webhook. A candidate submits a resume and the workflow immediately receives it, so you’re not waiting for someone to forward an email or upload a file.
Airtable becomes the home base. The workflow creates (or updates) the applicant record in Airtable and pulls your job criteria from a separate table so scoring stays aligned with what you actually want.
AI extracts and reviews the resume. n8n downloads the CV file, extracts key fields, then runs an AI qualification review with a structured output parser, so you get clean scores and notes instead of messy free-text.
Email, scheduling, and alerts happen automatically. Qualified candidates get the right outreach email, interview-ready candidates can be scheduled in Google Calendar, and your team gets a Slack status alert so nobody is guessing.
You can easily modify the scoring rubric to match different roles 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 webhook that receives candidate details and starts the workflow.
- Add and open Inbound CV Webhook.
- Set HTTP Method to
POSTand Path tocandidate-cv. - Set Response Mode to
responseNodeso Return Webhook Response can answer the request. - Send a test payload that includes
name,email,phone,cv_url, andpositionin the body.
Step 2: Connect Airtable and Save Applicant Data
This step stores applicant data and loads job requirements for AI evaluation.
- Open Airtable Save Applicant and set Operation to
createwith Authentication asoAuth2. - Map fields such as Name to
{{ $json.body.name }}, Email to{{ $json.body.email }}, and CV_URL to{{ $json.body.cv_url }}. - Set Application_Date to
{{ $now.toISO() }}and Position_Applied to{{ $json.body.position }}. - Open Load Job Criteria, set Operation to
search, and use Filter By Formula=AND({Position}='{{ $('Inbound CV Webhook').item.json.body.position }}', {Active}=TRUE()). - Credential Required: Connect your Airtable credentials in Airtable Save Applicant, Load Job Criteria, Update Candidate Assessment, and Update Interview Details.
Step 3: Fetch and Extract Resume Data
Download the CV file and extract structured resume data for AI review.
- Open Fetch CV File and set URL to
{{ $('Inbound CV Webhook').item.json.body.cv_url }}. - Connect Fetch CV File to Resume Data Extractor.
- Ensure OpenAI Chat Engine is connected as the language model for Resume Data Extractor and add credentials to OpenAI Chat Engine.
- Credential Required: Connect your OpenAI API credentials in OpenAI Chat Engine.
Step 4: Configure AI Screening and Structured Results
Evaluate candidates against job criteria and parse AI output for structured storage.
- Open AI Qualification Review and confirm the Text prompt includes job fields from Load Job Criteria like
{{ $('Load Job Criteria').item.json.Required_Skills }}. - Connect Assessment Chat Model as the language model for AI Qualification Review and set Model to
gpt-4o. - Ensure Structured Result Parser is attached as the output parser for AI Qualification Review. Add credentials to the parent model node, not the parser.
- Credential Required: Connect your OpenAI API credentials in Assessment Chat Model.
- Open Update Candidate Assessment and verify expressions like
{{ $json.match_score }}and{{ $json.recommendation }}map to Airtable fields.
Step 5: Configure Outreach, Interview Scheduling, and Notifications
Send personalized emails, schedule interviews, and notify the team.
- In Filter Qualified Records, confirm the condition uses
{{ $json.recommendation }}notEqualsReject. - Open Compose Outreach Email and keep the prompt fields such as
{{ $json.strengths.join('\n') }}and the conditional interview/phone screening line. - Ensure Email Chat Model is connected as the language model for Compose Outreach Email. Credential Required: Connect your OpenAI API credentials in Email Chat Model.
- Open Send Candidate Email and set Subject to
{{ $json.subject }}, To Email to{{ $('Airtable Save Applicant').item.json.Email }}, and replace From Email[YOUR_EMAIL]with a real sender. - In Filter Interview List, confirm leftValue uses
{{ $('AI Qualification Review').item.json.recommendation }}and equalsInterview. - Open Schedule Interview Event and set Start to
{{ $now.plus({ days: 3 }).toISO() }}and End to{{ $now.plus({ days: 3, hours: 1 }).toISO() }}. - Open Update Interview Details and keep mappings such as
{{ $json.hangoutLink }}and{{ $json.start.dateTime }}. - Open Slack Status Alert and verify the message template includes
{{ $('AI Qualification Review').item.json.match_score }}and the Airtable link. - Credential Required: Connect your SMTP/email credentials in Send Candidate Email, Slack credentials in Slack Status Alert, and Google Calendar credentials in Schedule Interview Event.
Step 6: Return the Webhook Response
Send a confirmation back to the inbound webhook caller with processed candidate data.
- Open Return Webhook Response and keep Respond With as
json. - Verify the Response Body expression includes values like
{{ $('Airtable Save Applicant').item.json.id }}and{{ $('AI Qualification Review').item.json.match_score }}. - Confirm that both Slack Status Alert and Update Interview Details connect into Return Webhook Response.
Step 7: Test and Activate Your Workflow
Run a full test to validate data flow, AI results, and external notifications.
- Click Execute Workflow and send a test POST to Inbound CV Webhook with sample candidate data.
- Confirm a record appears in Airtable and is updated by Update Candidate Assessment with
Match_Score,AI_Strengths, andAI_Recommendation. - Check that Send Candidate Email sends an email and that Slack Status Alert posts in the selected channel.
- If recommendation equals
Interview, verify Schedule Interview Event creates a calendar event and Update Interview Details writes back the link and event ID. - Ensure Return Webhook Response returns a JSON payload with
successset totrue. - Toggle the workflow Active for production use.
Common Gotchas
- Airtable credentials can expire or need specific permissions. If things break, check your n8n Credentials settings and Airtable base access 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.
Frequently Asked Questions
About an hour if your Airtable base and email account are ready.
No. You’ll mostly connect accounts and map fields between Airtable, email, and the AI steps.
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 OpenAI API costs, which are usually a few cents per resume depending on the model 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, but plan the decision points first. You can add another filtering branch after “Filter Interview List” and schedule different Google Calendar events based on role level, score band, or availability rules. Many teams also customize the “AI Qualification Review” prompt to produce a second score (for culture add or domain depth), then store both fields in Airtable. If you want the workflow to send different email templates, swap the prompt in “Compose Outreach Email” so it generates distinct messages for stage one, stage two, and rejection.
Usually it’s the Airtable token or base permissions. Reconnect the Airtable credential in n8n, then confirm the account has access to the base and the specific tables used for job criteria and candidates. Also check field names, because renaming a column in Airtable can make updates silently fail. If it only breaks sometimes, you may be hitting Airtable rate limits during large batches.
A lot, as long as your n8n plan and AI budget match your volume.
Often, yes, because the AI scoring and branching logic is where simpler tools start to feel cramped. n8n handles multi-step flows, filters, and structured AI outputs without forcing you into extra paid “paths,” and you can self-host if you want unlimited executions. Zapier or Make can still be fine for a lightweight “log resumes and send a notification” setup. For resume evaluation, though, you usually want tighter control over prompts, parsing, and status updates in Airtable. Talk to an automation expert if you want a quick recommendation for your volume and process.
You set the criteria once, and the workflow does the repetitive screening work every day. That’s hours back each week, and a hiring process that stays consistent even when you’re busy.
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.