Makani Tech: Build. Automate. Evolve.

AI Resume Screener with n8n + Claude (free workflow)

How to build an AI resume screener that scores every application for you

FreeWorkflowBy Kishan Makani · updated 19 October 2026 · 8 min read

Gmail/FormGoogle DriveClaudeGoogle SheetsCalendly/Gmail

Downloads

  • Download the n8n workflow (JSON)

    ai-resume-screening-n8n-claude.json · n8n workflow · 22 steps · starts with New application email · uses Gmail, Google Drive, Google Sheets, Anthropic, Slack · 42 KB

    Import into n8n: Create Workflow, then the menu, then Import from File.

How to import it into n8n
  1. In n8n, create a new workflow.
  2. Open the ⋯ menu at the top right and choose Import from File, then pick the downloaded .json. (Or open the file, copy everything and paste it on the canvas.)
  3. Open each node with a warning and connect your own account: the file carries no passwords or keys.
  4. Run it once with Test workflow, check the result, then switch it to Active.

What it does

Every job application, whether it arrives in your jobs inbox or through a careers page form, goes into one pipeline. The PDF is saved to Google Drive and read as text. Claude scores it out of 100 against the must-haves for that role from your Roles sheet, lists what is met and what is missing, notes any red flags and writes a two-line summary. Every candidate is logged in a Google Sheet. Strong candidates come to Slack, and only when you tap Invite do they get your interview booking link. Maybes are posted to a separate channel, and weak matches get a polite regret saved as a Gmail draft that you send yourself.

Who it is for

Any small business hiring a few people at a time: trading firms, clinics, agencies, CA firms, retail chains. It suits owners or office managers who post a role on Naukri, LinkedIn or Indeed and then face a pile of PDFs with no HR team to read them.

What you need

  • An n8n account (n8n Cloud or self-hosted)
  • A Gmail inbox for applications (for example [email protected])
  • Google Drive (an Applicants folder) and Google Sheets
  • An Anthropic API key for Claude
  • A Slack workspace with #hiring and #hiring-maybe channels
  • An interview booking link (Calendly, Google Calendar booking page or similar)

How the workflow runs, node by node

The slides show the same steps. Open the workflow in n8n and you will see a sticky note over each one.

Step 1 · Catch every application

Applications from your jobs inbox and your careers form land in one pipeline. n8n keeps name, email, role and the PDF, skips anyone it has already screened for that role, and politely asks for a PDF if there isn't one.

  • New application email: Checks your jobs inbox every minute for unread emails with an attachment, and downloads the attachments.
  • Careers page form: A public form for your careers page. It asks for name, email, phone, role and a PDF resume.
  • Normalise application: Turns an email or a form entry into one clean record: name, email, phone, role, source and the PDF (renamed to 'resume').
  • Seen this candidate?: Remembers every email plus role it has screened. The same person applying twice for the same job stops here.
  • PDF attached?: True when a PDF resume came with the application. Word files, photos or no file go down the false path.
  • Ask for a PDF: Replies in the same thread asking for a PDF. This is a fixed, polite text, so it is safe to send without approval.

Step 2 · Read the resume and the job

The PDF is saved to your Applicants folder in Drive and turned into text. The job's must-haves come from your Roles sheet, so every candidate is judged against the same list.

  • Save resume to Drive: Saves the PDF to your Applicants folder in Drive as 'Role - Name - date.pdf', so every resume is in one place.
  • Read resume text: Turns the PDF into plain text for Claude. Scanned image PDFs come out empty and are flagged in the next step.
  • Load job description: Reads the matching row from your Roles tab: must-haves, good-to-haves, location, experience and the interview booking link.

Step 3 · Claude scores it against your JD

Claude gives a score out of 100, which must-haves are met and which are missing, any red flags and a two-line summary. It is told to ignore name, gender, age, photo and college.

  • Score with Claude: Reads the resume against the job's must-haves and returns a score, what is met and missing, red flags, a two-line summary and a recommendation. It is told to ignore name, gender, age, photo and college.
  • Claude: Claude (claude-sonnet-5-5) at temperature 0.1, so answers stay consistent from run to run.
  • Scorecard schema: Forces Claude to answer in fixed fields (score, must_haves_met, missing, red_flags, experience_years, summary, recommendation, confidence), so routing never has to guess.
  • Log to Candidates sheet: Writes one row per candidate to the Candidates tab, keyed on Candidate ID (email plus role), with score, reasons and the Drive link.

Step 4 · Shortlist, maybe or no

Every candidate becomes a row in your Candidates sheet. 75 and above goes to the shortlist, 50 to 74 lands in a maybe pile on Slack, and below 50 gets a polite regret saved as a Gmail draft. Nobody is rejected automatically.

  • Route by score: Score 75+ with confidence 0.6+ goes to the shortlist. 50 to 74, or a resume Claude could not read well, goes to the maybe pile. Below 50 goes to the regret draft.
  • Post to maybe pile: Posts maybe candidates to #hiring-maybe with the score, summary and what is missing, so you can skim them in one place.
  • Draft polite regret: Saves a polite regret email as a Gmail draft. Nothing is sent: you read it and send it yourself, or delete it.

Step 5 · You approve, the invite goes out

Shortlisted candidates come to Slack with the score, the reasons and the resume link. Tap Invite and they get your interview booking link by email, and the sheet says Invited. If Gmail fails, you get an alert.

  • Approve interview invite: Posts the shortlisted candidate to #hiring with score, met and missing skills, red flags and the resume link, then waits up to 48 hours for your tap.
  • Approved?: True only when you tapped 'Invite to interview'. 'Not now', or no answer in 48 hours, goes down the false path.
  • Send interview link: Emails the candidate your interview booking link (Calendly or Google booking page) from the Roles sheet. Retries 3 times; its error output goes to the alert.
  • Mark as invited: Updates the candidate's row: Status 'Invited' with the time.
  • Alert hiring manager: Tells you in Slack if Gmail refused the invite, so an approved candidate is never left waiting.
  • Mark as held back: Updates the row to 'Held back' when you tap Not now or do not answer, so the sheet always shows who was skipped.

Setup

  1. In n8n, create a new workflow, open the menu and choose Import from File, then pick the JSON file.
  2. Connect Gmail (OAuth) on New application email, Ask for a PDF, Draft polite regret and Send interview link. Change jobs@YOUR_DOMAIN in the trigger's search to your jobs address.
  3. Make a Google Sheet with a Roles tab (Role, Must haves, Good to have, Location, Experience, Interview link) and a Candidates tab (Candidate ID, Received, Name, Email, Phone, Role, Source, Score, Recommendation, Met, Missing, Summary, Resume, Status, Invited at). Paste its URL in the four sheet nodes.
  4. Create an Applicants folder in Drive and put its id in Save resume to Drive (replace YOUR_APPLICANTS_FOLDER_ID).
  5. Create an Anthropic credential on the Claude node. Replace YOUR_COMPANY in Score with Claude.
  6. Put your role names in Careers page form (dropdown) and in the ROLES list at the top of Normalise application. They must match the Roles tab exactly.
  7. Connect Slack on Approve interview invite, Post to maybe pile and Alert hiring manager.
  8. Activate the workflow, then copy the form's production URL from Careers page form onto your careers page.
  9. Send one real resume from a personal email with the role in the subject. Check the Drive file, the sheet row and the Slack message before you share the job post.

How to customise it

  • Change the score bands (75 and 50) in Route by score to make the shortlist stricter or looser.
  • Add role-specific screening questions to the form (notice period, current CTC, expected CTC) and pass them into the Claude prompt.
  • Send shortlisted candidates a WhatsApp message instead of email, using an approved WhatsApp template.
  • Add a second Claude step that writes five interview questions based on the missing must-haves, and post them with the approval card.
  • If you get applications through Naukri or LinkedIn notification emails, add those senders to the Gmail search.

Guardrails

No one is invited until you tap Invite, and no one is rejected unless you send the draft yourself.

  • Claude is told to ignore name, gender, age, religion, caste, marital status, photo and college or company prestige, and to score only evidence against the must-haves.
  • No candidate is ever rejected by the workflow. Regret emails are drafts you choose to send.
  • No interview invite goes out without your tap in Slack. No answer in 48 hours means nothing is sent.
  • Scanned or unreadable resumes are sent to the maybe pile for a human look instead of being scored low.
  • Only the resume text and the cover note are sent to Claude. Resumes stay in your own Drive.
  • Tell applicants on your careers page that you use software to help screen applications, and keep a person in the decision.

Troubleshooting

  • Nothing happens when an application email arrives. Check the Gmail search in New application email. It needs an unread email to your jobs address with an attachment.
  • Claude gives everyone a low score. Your must-haves are probably too long or too vague. Keep 3 to 5 concrete ones per role in the Roles tab.
  • Score with Claude says the resume is empty. That PDF is a scanned image. Ask the candidate for a text PDF or open it yourself from the Drive link in the maybe pile.
  • Load job description returns nothing. The role name in the form or in the ROLES list does not exactly match the Roles tab. Copy and paste it.
  • Slack buttons do nothing. Send-and-wait needs n8n to be reachable from the internet (n8n Cloud, or a public URL when self-hosted) and the workflow must be active.
  • The same person shows up twice. They used two different email addresses. The guard works on email plus role, so check the Candidates sheet before you invite.

Want the members-only resources too?

A free account unlocks them all, including the ones shared in DMs.

Create a free account