CV-granskning låter enkelt tills du sitter med 60 PDF:er, fem olika kravprofiler och ett kalkylark som redan är inaktuellt. Bra kandidater faller mellan stolarna för att någon glömde att följa upp, eller för att “magkänslan” hann ändras mellan måndag och fredag.
Det här är den typen av röra som drabbar rekryterare först, men rekryterande chefer och småföretagare känner av den också. Med resume shortlist automation får du konsekvent poängsättning, automatiska statusuppdateringar och intervjuinbjudningar som skickas i tid.
Nedan ser du hur flödet körs i n8n, vad det skapar i Google Sheets och hur det hjälper dig att jobba snabbare utan att sänka ribban.
Problemet: CV-granskning är långsam, inkonsekvent och lätt att tappa bort
De flesta rekryteringsprocesser fallerar inte för att du inte hittar kandidater. De fallerar för att de tidiga stegen är för manuella. Någon laddar ner CV:n, kopierar uppgifter till en tracker, skummar snabbt och lovar att “komma tillbaka senare” till de som kanske passar. Senare kommer sällan. Och när flera personer granskar flyttar sig poängsättningen beroende på humör, arbetsbelastning eller hur bra den senaste kandidaten var. Det är inte illvilja. Det är bara mänskligt. Resultatet blir en shortlist som är rörig, sen och svår att försvara när någon frågar: “Varför gick vi vidare utan dem?”
Friktionen växer, särskilt när volymerna ökar eller när du rekryterar till mer än en roll samtidigt.
- Att kopiera sökandes uppgifter till ett ark tar cirka 5 minuter per person, och det är första stället där fel brukar smyga sig in.
- Manuell screening tenderar att glida, så två liknande kandidater kan få helt olika utfall.
- Uppföljning är lätt att glömma när inkorgen blir stökig, vilket gör att kvalificerade personer kallnar.
- Intervjubokning blir en mailtråd fram och tillbaka som drar ut i dagar.
Så fungerar den här automationen
Hela n8n-workflowen, från trigger till slutresultat:
n8n Workflow Template: OpenAI + Google Sheets, konsekventa cv-shortlists
flowchart LR
subgraph sg0["OpenAI - AI Candidat 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/>Webhook - Receive Application"]
n1@{ icon: "mdi:database", form: "rounded", label: "Google Sheets - Store Applic..", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "OpenAI - AI Candidate Evalua..", pos: "b", h: 48 }
n3["<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 - Process Evaluation"]
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF - Check Score Threshold", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Email - Interview Invitation", pos: "b", h: 48 }
n6@{ icon: "mdi:message-outline", form: "rounded", label: "Email - Rejection Notice", pos: "b", h: 48 }
n7@{ icon: "mdi:location-exit", form: "rounded", label: "Google Calendar - Schedule I..", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Update Sheet - Interview Sta..", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Update Sheet - Rejection Sta..", pos: "b", h: 48 }
n10["<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/>Respond to Webhook"]
n6 --> n9
n3 --> n4
n4 --> n5
n4 --> n6
n5 --> n7
n0 --> n1
n8 --> n10
n9 --> n10
n2 --> n3
n1 --> n2
n7 --> n8
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 n2 ai
class n4 decision
class n1,n8,n9 database
class n0,n10 api
class n3 code
classDef customIcon fill:none,stroke:none
class n0,n3,n10 customIcon
Lösningen: OpenAI poängsätter sökande och din shortlist uppdateras av sig själv
Det här flödet gör din ansökningshantering till en strukturerad, konsekvent process. Det startar när en ny kandidat skickar in en ansökan via ditt formulär eller din jobbportal, som anropar en webhook i n8n. Kandidatens uppgifter loggas direkt i Google Sheets så att du får en enda, aktuell tracker. Därefter utvärderar OpenAI CV:t mot dina krav och tar fram en poäng (plus resonemang som du kan spara för spårbarhet). Sedan tillämpar flödet din poängregel: kandidater över tröskeln går automatiskt vidare, medan kandidater under tröskeln får ett artigt “nej” utan att du behöver skriva samma mejl igen. Om någon kvalificerar sig skickar flödet en intervjuinbjudan, skapar en Google Calendar-händelse och uppdaterar statusen i arket så att din shortlist är korrekt i realtid.
Workflowen börjar vid webhooken, skriver ansökan till Google Sheets och ber sedan OpenAI att bedöma matchningen. Efter ett kort bearbetningssteg för att normalisera poängen skickar en IF-gren kandidaten till “Intervju bokad” eller “Avslagen”, med motsvarande mejl- och ark-uppdateringar. Ett sista webhook-svar bekräftar att allt är klart så att ditt intagssystem vet att det fungerade.
Det här får du: automation vs. resultat
| Vad den här workflowen automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du får 40 ansökningar på en vecka. Manuellt kanske du lägger cirka 5 minuter på att logga varje ansökan i ett kalkylark (ungefär 3 timmar), och sedan ytterligare 5 minuter på en första genomläsning och att skriva anteckningar (ytterligare 3 timmar). Med det här flödet sker intag och loggning i arket automatiskt, och OpenAI-poängsättningen körs i bakgrunden efter varje inskick. Du granskar en shortlist som redan är poängsatt och märkt, vilket oftast gör att det där 6-timmarspasset blir cirka 1 timme för slutgranskning och beslut.
Det du behöver
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för din kandidat-tracker (ATS-light).
- OpenAI API för att poängsätta CV:n mot krav.
- Google Calendar för att skapa intervju-event automatiskt.
- E-postkonto (Gmail) för att skicka inbjudningar och avslag.
- OpenAI API-nyckel (hämta den i OpenAI-dashboarden).
Kunskapsnivå: Medel. Du kopplar konton, redigerar en prompt och mappar fält från ditt formulär till ett Google Sheet.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En ny ansökan träffar din webhook. Ditt formulär eller din jobbportal skickar kandidatens grunduppgifter (namn, e-post, roll, CV-länk eller text) till n8n i samma ögonblick som de skickar in.
Kandidaten registreras i Google Sheets. Flödet skapar en ny rad med de fält du bryr dig om, inklusive tidsstämpel, så att du alltid har en enda sanningskälla för vad som kom in och när.
OpenAI bedömer matchningen och tar fram en poäng. Ett AI-steg jämför CV:t med dina krav, och sedan gör ett litet bearbetningsscript svaret korrekt formaterat så att nästa beslut blir tillförlitligt. Det är här konsekvensen kommer ifrån, helt ärligt, eftersom du tillämpar samma kriterier varje gång.
Beslut, kommunikation och bokning sker automatiskt. Om poängen möter din tröskel (mallen använder 70) skickar flödet ett mejl med intervjuinbjudan, bokar ett Google Calendar-event och uppdaterar statusen i arket till “Intervju bokad”. Om inte skickar det ett avslagsmejl och markerar raden “Avslagen”.
Du kan enkelt ändra poängtröskeln för att matcha rollens svårighetsgrad efter dina behov. Se den fullständiga implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera webhook-triggern
Konfigurera den inkommande webhooken så att ansökningar kan gå in i arbetsflödet och få ett strukturerat svar.
- Lägg till eller öppna Application Intake Webhook och ställ in Path på
job-application. - Ställ in Response Mode till Using “Respond to Webhook” Node (värde
responseNode). - Spara arbetsflödet och kopiera den genererade webhook-URL:en från Application Intake Webhook till ert ansökningsformulär.
name, email, phone, experience, skills och resume så att efterföljande noder mappas korrekt.Steg 2: Anslut Google Sheets för lagring av ansökningar
Lagra inkommande ansökningar och uppdatera deras status i ert kalkylark.
- Öppna Record Application Sheet och ställ in Operation på
appendOrUpdate. - Ställ in Sheet Name till
=Applicationsoch Document ID till=[YOUR_ID]. - Ställ in Authentication till
serviceAccount. - Inloggningsuppgifter krävs: Anslut era googleApi-inloggningsuppgifter i Record Application Sheet.
- Öppna Sheet Update Interview Status och bekräfta att Operation är
update, Sheet Name ärApplicationsoch Document ID är=[YOUR_ID]. - Inloggningsuppgifter krävs: Anslut era googleApi-inloggningsuppgifter i Sheet Update Interview Status.
- Öppna Sheet Update Rejection Status och ställ in Operation på
update, Sheet Name till=Applicationsoch Document ID till=[YOUR_ID]. - Inloggningsuppgifter krävs: Anslut era googleApi-inloggningsuppgifter i Sheet Update Rejection Status.
Steg 3: Konfigurera AI-utvärdering och bearbetning
Konfigurera prompten för AI-bedömningen och skriptet som strukturerar utvärderingens output.
- Öppna AI Applicant Assessment och ställ in Model till
=add your model(välj ert föredragna OpenAI model ID). - Granska innehållet i Messages för att säkerställa att det refererar till indatafälten som
{{ $json.body.name }},{{ $json.body.experience }},{{ $json.body.skills }}och{{ $json.body.resume }}. - Ställ in Temperature till
0.3för att hålla utvärderingar konsekventa. - Inloggningsuppgifter krävs: Anslut era openAiApi-inloggningsuppgifter i AI Applicant Assessment.
- Öppna Evaluation Processing Script och behåll JavaScript-logiken som den är för att tolka AI-JSON och bygga fälten
candidate,evaluationochdecision.
$('Application Intake Webhook').first().json.body för att komma åt den ursprungliga ansökningspayloaden. Säkerställ att er webhook-payload matchar dessa fält.Steg 4: Konfigurera beslutslogik och åtgärder för output
Routa kandidater till arbetsflöden för intervju eller avslag och skicka e-post samt kalenderuppdateringar.
- I Score Decision Check ställer ni in villkoret att jämföra Value 1
={{ $json.decision }}med Value 2Interviewmed equals. - Konfigurera Interview Invite Email med Subject
Interview Invitation - Automation Specialist Position, To Email={{ $json.candidate.email }}och From Email[YOUR_EMAIL]. - Inloggningsuppgifter krävs: Anslut era smtp-inloggningsuppgifter i Interview Invite Email.
- I Interview Calendar Booking ställer ni in Start till
={{ $now.plus(3, 'days').set({ hour: 10, minute: 0 }).toISO() }}och End till={{ $now.plus(3, 'days').set({ hour: 11, minute: 0 }).toISO() }}, och ställer in Calendar till=[YOUR_ID]. - Inloggningsuppgifter krävs: Anslut era googleCalendarOAuth2Api-inloggningsuppgifter i Interview Calendar Booking.
- Konfigurera Rejection Email Notice med Subject
Application Update - Automation Specialist Position, To Email={{ $json.candidate.email }}och From Email[YOUR_EMAIL]. - Inloggningsuppgifter krävs: Anslut era smtp-inloggningsuppgifter i Rejection Email Notice.
[YOUR_EMAIL] med en giltig avsändaradress i båda e-postnoderna för att undvika leveransproblem.Steg 5: Konfigurera webhook-svaret
Returnera ett strukturerat JSON-svar till ansökningsformuläret efter bearbetning.
- Öppna Webhook Response Return och ställ in Respond With till
json. - Ställ in Response Body till
={{ {"success": true, "message": "Application received and processed", "candidateName": $json.candidate.name, "status": $json.decision} }}. - Bekräfta flödet: Application Intake Webhook → Record Application Sheet → AI Applicant Assessment → Evaluation Processing Script → Score Decision Check → (intervju eller avslag) → Webhook Response Return.
Steg 6: Testa och aktivera ert arbetsflöde
Kör ett kontrollerat test för att verifiera både accepterings- och avslagsflöden, och aktivera sedan arbetsflödet.
- Klicka på Execute Workflow och skicka en test-POST-förfrågan till URL:en för Application Intake Webhook med exempeldata för kandidaten.
- Verifiera att en ny rad skapas eller uppdateras i Record Application Sheet och att AI Applicant Assessment returnerar en JSON-utvärdering.
- Bekräfta att Score Decision Check routar antingen till Interview Invite Email och Interview Calendar Booking eller till Rejection Email Notice baserat på poängen.
- Kontrollera att Sheet Update Interview Status eller Sheet Update Rejection Status uppdaterar ansökningsposten korrekt.
- Säkerställ att svaret från Webhook Response Return innehåller
success,candidateNameochstatus. - När allt är bekräftat, växla arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Google Sheets-inloggningar kan löpa ut eller kräva specifika behörigheter. Om det skapar fel, börja med att kontrollera fliken Credentials i n8n och ditt Google-kontos anslutna appar.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera output för alltid.
Vanliga frågor
Cirka 30–60 minuter om dina Google-konton är redo.
Nej. Du mappar främst fält och redigerar AI-prompten. Den enda “tekniska” delen är att testa en webhook en gång, vilket n8n gör ganska smärtfritt.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in kostnader för OpenAI API (ofta några cent per kandidat, beroende på CV-längd).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsat antal körningar men kräver grundläggande serveradministration.
Ja, och det bör du. Uppdatera prompten i noden AI Applicant Assessment så att den speglar rollens måsten, och justera sedan tröskeln i Score Decision Check (mallen använder 70). Vanliga justeringar är att lägga till “deal-breaker”-regler (som arbetstillstånd), ändra output så att den innehåller en kort motivering och skriva olika mejlmallar per roll så att kommunikationen känns mänsklig.
Oftast handlar det om utgången OAuth-åtkomst eller att fel Google-konto är anslutet. Återanslut Google Sheets i n8n Credentials och bekräfta sedan att arket är delat med det kontot och att Sheet ID är korrekt. Om du nyligen flyttade filen till en ny Drive-mapp kan behörigheter ändras utan att det märks. Kontrollera också om dina kolumner har bytt namn, eftersom fältmappning kan gå sönder när rubriker ändras.
Många. I n8n Cloud begränsas du främst av dina månatliga körningar, medan self-hosting beror på din server. I praktiken hanterar de flesta team utan problem några hundra ansökningar i veckan så länge du inte trycker in hela PDF-filer i AI-anropet varje gång.
Ibland. Om du behöver förgreningar, poänglogik och tydlig kontroll över vad som skrivs tillbaka till Google Sheets är n8n oftast lättare att bygga vidare på (och self-hosting slipper prissättning per uppgift). Zapier eller Make kan gå snabbare för ett enkelt tvåstegsflöde, som “ny rad → skicka mejl”. Men när du lägger till AI-poängsättning, villkorsstyrda vägar och kalenderbokning smyger både kostnader och komplexitet upp. Om du vill ha hjälp att välja, prata med en automationsexpert och få en rak rekommendation.
När det här väl rullar slutar din shortlist att vara ett skört kalkylark som kräver ständig handpåläggning. Den blir en levande pipeline som håller sig uppdaterad medan du fokuserar på intervjuerna som faktiskt spelar roll.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.