En rekryteringsgranskning ska inte kännas som att spela spreadsheet-whack-a-mole. Men när kandidater kommer in i stökiga CSV-filer slutar det med att alla kopierar kolumner, jagar LinkedIn-länkar och skriver om samma ”varför”-anteckningar från noll.
Rekryterare märker det först. Sedan ber rekryterande chef om ”en rankad shortlist till i morgon”, och plötsligt dras även ops eller en byråpartner in i kaoset. Den här automatiseringen för kandidatrankning ger dig en strukturerad shortlist i Google Sheets med konsekvent 0–100-poängsättning och tydliga förklaringar på hebreiska.
Nedan ser du hur flödet körs i n8n, vad det ersätter i er nuvarande process och de praktiska inställningsdetaljerna för att få det att fungera utan att förvandla veckan till ett tekniskt projekt.
Så här fungerar automatiseringen
Hela n8n-workflowen, från trigger till slutresultat:
n8n Workflow Template: Google Sheets + Google Drive för rankade kandidater
flowchart LR
subgraph sg0["On form submission 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/form.svg' width='40' height='40' /></div><br/>On form submission"]
n1@{ icon: "mdi:cog", form: "rounded", label: "No Operation, do nothing", pos: "b", h: 48 }
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/merge.svg' width='40' height='40' /></div><br/>Merge"]
n3@{ icon: "mdi:database", form: "rounded", label: "Create Google Sheet", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Upload file", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Download file", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Extract from CSV", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Get Rid of File", pos: "b", h: 48 }
n8["<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/>Format Columns1"]
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Columns", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Add Columns", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Read Sheet", pos: "b", h: 48 }
n12["<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/>Get First Row"]
n13["<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/>Apply Formatting"]
n14@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet in Googl..", pos: "b", h: 48 }
n16@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Get dataset items in Apify", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare for Formatting", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n20@{ icon: "mdi:database", form: "rounded", label: "Convert to Google Sheet", pos: "b", h: 48 }
n21@{ icon: "mdi:cog", form: "rounded", label: "Extract from XLSX", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Run an Actor in Apify", pos: "b", h: 48 }
n23["<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/merge.svg' width='40' height='40' /></div><br/>Merge1"]
n24@{ icon: "mdi:brain", form: "rounded", label: "GPT-4.1", pos: "b", h: 48 }
n2 --> n19
n23 --> n20
n19 --> n6
n19 --> n21
n24 -.-> n14
n14 --> n18
n11 --> n14
n10 --> n11
n4 --> n5
n5 --> n3
n5 --> n1
n12 --> n13
n9 --> n8
n8 --> n10
n7 --> n9
n6 --> n23
n21 --> n23
n0 --> n4
n3 --> n2
n22 -.-> n14
n18 --> n12
n20 --> n7
n1 --> n2
n16 -.-> n14
n17 -.-> n14
n15 -.-> n14
end
subgraph sg1["Error Flow"]
direction LR
n25@{ icon: "mdi:message-outline", form: "rounded", label: "Send a message", pos: "b", h: 48 }
n26@{ icon: "mdi:play-circle", form: "rounded", label: "Error Trigger", pos: "b", h: 48 }
n26 --> n25
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 n0,n26 trigger
class n14,n16 ai
class n24 aiModel
class n17,n19,n22 decision
class n3,n10,n11,n15,n20 database
class n12,n13 api
class n8 code
classDef customIcon fill:none,stroke:none
class n0,n2,n8,n12,n13,n23 customIcon
Problemet: kandidatreviews blir långsamma och inkonsekventa
När du utvärderar kandidater från en CSV eller XLSX är det de ”enkla” delarna som dränerar dig. Någon laddar upp en fil till Drive, någon annan skapar ett Sheet, och sedan inser ni att rubrikerna inte matchar förra gången. Nu letar du LinkedIn-URL:er, skummar senaste aktiviteten och försöker hålla anteckningarna tillräckligt konsekventa för att kunna motivera ett beslut senare. Multiplicera det med en batch på 20 kandidater och en lång eftermiddag är borta. Än värre: två granskare kan läsa samma profil och sätta helt olika betyg, vilket gör att shortlisten känns godtycklig.
Friktionen växer snabbt. Här är var det oftast faller isär.
- Att copy-pasta kandidatrader till ett ”master”-Sheet skapar formateringsdrift och dolda fel som du ofta upptäcker först efter att du delat det.
- LinkedIn-kontroller görs inkonsekvent, så en kandidat får ”djup research” och nästa får en 30-sekunders snabbkoll.
- Poängrubriker tillämpas olika av olika personer, vilket gör shortlisten svår att lita på och ännu svårare att förklara.
- När något fallerar mitt i processen får du ofta veta det efter mötet, inte innan.
Lösningen: ladda upp en gång, få en rankad shortlist i Google Sheets
Det här flödet omvandlar uppladdningar av kandidatfiler till en poängsatt, formaterad shortlist – automatiskt. En formulärinsändning triggar flödet, sparar den uppladdade CSV/XLSX-filen i Google Drive och skapar ett nytt Google Sheet för just den batchen. Därefter extraherar den rader från filen, lägger in dem i Sheetet och skapar de extra kolumner du vill ha (poäng, hebreisk förklaring, LinkedIn-insikter). Sedan loopar en AI-agent igenom varje kandidat, hämtar upp till tre senaste LinkedIn-inlägg via Apify och utvärderar kandidaten mot era krav med en OpenAI-chattmodell (GPT-4.1). Till sist skriver den tillbaka resultaten till Sheetet, sorterar på poäng och applicerar professionell formatering med RTL-stöd så att granskare snabbt kan skumma, fatta beslut och känna sig trygga.
Flödet börjar med en uppladdning, normaliserar sedan din data (CSV eller XLSX), berikar den med LinkedIn-kontext och avslutar med att leverera en rankad lista i Google Sheets. Om något går fel någonstans skickar en feltrigger ett varningsmejl så att du inte felsöker i blindo.
Det du får: automation vs. resultat
| Vad det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du granskar 20 kandidater för en roll. Manuellt, om du lägger cirka 15 minuter per kandidat på att kolla LinkedIn, föra in anteckningar i ett Sheet och enas om en poäng, blir det ungefär 5 timmar fokuserat arbete (och oftast med några avbrott). Med det här flödet laddar du upp en CSV/XLSX på en minut eller två och låter sedan agenten köra igenom batchen medan du gör annat. Även om bearbetningen tar runt en timme i bakgrunden får du fortfarande tillbaka större delen av de 5 timmarna – plus ett rankat Sheet som är redo att delas.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Google Drive för att ta emot och lagra uppladdade filer
- Google Sheets för att skapa den rankade shortlist-tabellen
- OpenAI API-nyckel (hämta den i din OpenAI-dashboard)
- Apify API-nyckel (hämta den i din Apify Console)
- Gmail-konto för att skicka felvarningsmejl
Kunskapsnivå: Medel. Du kopplar in behörigheter, klistrar in API-nycklar och uppdaterar några ID:n (som Drive-mappen) utan att skriva riktig kod.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En formuläruppladdning drar igång allt. Någon skickar in en CSV/XLSX med kandidater, och n8n laddar direkt upp den till en Google Drive-mapp så att batchen är sparad och spårbar.
Filen konverteras till ett användbart Sheet. Flödet laddar ner filen, skapar ett nytt Google Sheet och styr parsningen baserat på filtyp (CSV eller XLSX). Sedan slår det ihop den parsade outputen och lägger till kandidatraderna i Sheetet.
En AI-agent utvärderar varje rad med LinkedIn-kontext. Den läser rader från Google Sheets, hämtar upp till tre senaste LinkedIn-inlägg via Apify och använder sedan GPT-4.1 för att skapa en 0–100-poäng samt en professionell hebreisk förklaring som följer er rubric.
Den rankade shortlisten formateras och levereras. Flödet uppdaterar varje kandidatrad, applicerar styling och RTL-vänlig formatering via Google Sheets-requests, sorterar på poäng och mejlar dig om en feltrigger aktiveras.
Du kan enkelt justera poängrubriken för att matcha en specifik roll eller senioritetsnivå utifrån dina behov. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera formulärtriggern
Konfigurera startpunkten för arbetsflödet så att kandidater kan skicka in sin CSV/XLSX-fil via det inbyggda formuläret.
- Lägg till noden Form Submission Trigger och behåll Form Title inställt på
Upload CSV File. - I Form Fields, säkerställ att etiketten för filfältet är
New File Attachmentoch att Accept File Types ärcsv,xlsx,xls. - Anslut Form Submission Trigger till Drive File Upload för att starta filbearbetningen vid inskick.
Steg 2: Anslut Google Drive och skapa kalkylark
Ladda upp den inskickade filen till Drive, ladda ned den för tolkning och skapa ett nytt Google Sheet för varje inskick.
- Konfigurera Drive File Upload med Name inställt på
=New Job Application Form {{ $now.format('d-LL-yyyy, H:mm') }}och Input Data Field Name inställt påNew_File_Attachment. - Inloggning krävs: Anslut era googleDriveOAuth2Api-uppgifter i Drive File Upload, Drive File Download och Move File to Temp.
- I Drive File Download, ställ in File ID till
={{ $json.id }}och Binary Property Name tillNew_File_Attachment. - Konfigurera Create Spreadsheet med Title inställt på
=New Job Application Google Sheet Form {{ $now.format('d-LL-yyyy, H:mm') }}och Resource inställt påspreadsheet. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Create Spreadsheet.
- Observera parallell körning: Drive File Download skickar utdata både till Create Spreadsheet och No-Op Placeholder parallellt, och därefter går båda in i Combine Streams.
Steg 3: Tolka den uppladdade filen och lägg till i arket
Routa filer baserat på filändelse, tolka innehållet och lägg till alla kandidatrader i det nya kalkylarket.
- I Route by File Type, bekräfta att CSV-regeln kontrollerar att
={{ $('Form Submission Trigger').item.json["New File Attachment"].filename }}slutar med.csv, och att XLSX-regeln slutar med.xlsx. - Ställ in Parse CSV File Binary Property Name till
New_File_Attachment. - Ställ in Parse XLSX File Operation till
xlsxoch Binary Property Name tillNew_File_Attachment. - Säkerställ att både Parse CSV File och Parse XLSX File ansluter till Merge Parsed Data, som sedan fortsätter till Append to Sheet.
- I Append to Sheet, ställ in Operation till
appendOrUpdateoch Document ID till={{ $('Combine Streams').item.json.spreadsheetId }}. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Append to Sheet.
Steg 4: Lägg till extra kolumner och läs rader i arket
Flytta den uppladdade filen till temporär lagring, lägg till utvärderingskolumner och läs hela datamängden för AI-poängsättning.
- I Move File to Temp, ställ in File ID till
={{ $('Drive File Upload').item.json.id }}och välj er temp-mapp. - I Define Extra Columns, ställ in värdet för columns till
Score Explanation, Evaluation Score. - Behåll JavaScript-koden i Build Column Headers som angiven för att skapa header-objekt från
$json.columns. - I Append Columns, ställ in Operation till
append, Sheet Name till={{ $('Create Spreadsheet').item.json.sheets[0].properties.sheetId }}, och Document ID till={{ $('Create Spreadsheet').item.json.spreadsheetId }}. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Append Columns och Read Sheet Rows.
Steg 5: Konfigurera AI-utvärdering och verktyg
Konfigurera AI-agenten, dess modell och verktygsintegrationer för att poängsätta kandidater och uppdatera arket.
- I AI Evaluation Agent, behåll Text inställt på
=Google sheets Information: {{ $json.toJsonString() }}och aktivera hasOutputParser. - Öppna OpenAI Chat Model och bekräfta att modellen är
gpt-4.1. Inloggning krävs: Anslut era openAiApi-uppgifter i OpenAI Chat Model. - Konfigurera Run Apify Actor med det angivna uttrycket för Custom Body:
={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Input_JSON', `{\n "total_posts": 3,\n "username": "paste here the exact linkedin URL of the candidate as it appears in google sheet"\n}`, 'json') }}. Inloggning krävs: Anslut era apifyApi-uppgifter i Run Apify Actor och Fetch Apify Dataset. - I Fetch Apify Dataset, ställ in Dataset ID till
={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Dataset_ID', `The "defaultDatasetId" received from the Apify actor tool as is`, 'string') }}. - Säkerställ att Structured Output Parser innehåller JSON-schemexemplet för
Evaluation_Score,Score_ExplanationochRow_Number_to_Match. - I Update Sheet Row, behåll mappningarna i Columns:
row_number,Evaluation ScoreochScore Explanationmed$fromAI(...)-uttrycken, och matcha pårow_number. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Update Sheet Row.
- AI-undernoderna (Run Apify Actor, Fetch Apify Dataset, Structured Output Parser, Update Sheet Row) är kopplade till AI Evaluation Agent—lägg till inloggningsuppgifter på dessa verktygsnoder och säkerställ att OpenAI Chat Model är länkat som språkmodell.
Steg 6: Formatera och styla arkets utdata
Hämta rubrikraden och applicera styling, filtrering och sortering för en ren utvärderingstabell.
- Behåll Prep Formatting ansluten efter AI Evaluation Agent för att fortsätta till flödet för styling.
- I Fetch Header Row, ställ in URL till
=https://sheets.googleapis.com/v4/spreadsheets/{{ $('Create Spreadsheet').item.json.spreadsheetId }}/values/{{ $('Create Spreadsheet').item.json.sheets[0].properties.title }}!1:1. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Fetch Header Row och Apply Sheet Styling.
- I Apply Sheet Styling, behåll URL inställd på
=https://sheets.googleapis.com/v4/spreadsheets/{{ $('Create Spreadsheet').item.json.spreadsheetId }}:batchUpdateoch JSON Body som angiven för att ställa in RTL, formatera rubriker, autoanpassa kolumner och sortera efterEvaluation Score.
Steg 7: Lägg till felhantering
Få en notis när arbetsflödet misslyckas så att ni snabbt kan felsöka.
- Bekräfta att Trigger Error Handler är ansluten till Send Alert Email.
- I Send Alert Email, ställ in Send To till er adress och behåll Subject som
Workflow Error Alert. - Behåll Message-texten inställd på
=Please check out the workflow in order to be able to configure it. Error accured in {{ $now.format('dd/MM/yyyy HH:mm') }}. - Inloggning krävs: Anslut era gmailOAuth2-uppgifter i Send Alert Email.
Steg 8: Testa och aktivera ert arbetsflöde
Verifiera arbetsflödet från början till slut och aktivera det därefter för riktiga kandidatinlämningar.
- Klicka på Execute Workflow och skicka in en test-CSV/XLSX via Form Submission Trigger.
- Bekräfta att en ny fil dyker upp i Drive via Drive File Upload, att ett ark skapas av Create Spreadsheet och att rader läggs till av Append to Sheet.
- Verifiera att AI Evaluation Agent körs, uppdaterar rader via Update Sheet Row och att arket stylas av Apply Sheet Styling.
- Om några fel uppstår, bekräfta att Send Alert Email levererar en notis.
- När testerna lyckas, slå på arbetsflödet med Active för produktionsanvändning.
Vanliga fallgropar
- Behörigheter för Google Drive och Google Sheets kan löpa ut eller kräva specifika rättigheter. Om det slutar fungera: kontrollera credential-statusen i n8n och bekräfta först att det kopplade Google-kontot kan skriva till målmappen.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Apify- och OpenAI-prompter driver över tid om du fortsätter ”tweaka” utan en baslinje. Standardprompter i AI-noder är generiska, så spika rubric och tonalitet tidigt – annars kommer du att sitta och redigera output för alltid.
Vanliga frågor
Cirka 15 minuter om du redan har kontona och nycklarna.
Nej. Du kopplar främst Google, Apify och OpenAI och klistrar sedan in några ID:n och nycklar.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna in OpenAI- och Apify-användning (det här flödet ligger ofta runt 0,05 USD per kandidat).
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 klarar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en av de bästa anledningarna att använda n8n för det här. Du kan ändra AI-agentens instruktioner för att byta hebreiska till valfritt språk och justera rubriken (inklusive viktningen 50/25/15/10) utan att röra resten av flödet. Du kan också öka eller minska hur många LinkedIn-inlägg som hämtas genom att uppdatera Apify-actor-inputen. Om du vill skippa LinkedIn helt för vissa roller kan du behålla poängsättningen men ta bort Apify-stegen så att agenten bara utvärderar CV:t och dina egna frågor.
Oftast beror det på utgångna Google OAuth-behörigheter eller att Sheetet skapas i en Drive-plats där ditt kopplade konto saknar skrivrättigheter. Koppla om Google Sheets- och Google Drive-credentials i n8n och bekräfta sedan att mapp-ID och delningsinställningar är korrekta. Om det bara fallerar vid uppdateringar: kontrollera att flödet skriver tillbaka till rätt kalkylark och att förväntade rubrikkolumner finns.
De flesta team kör batchar på 10–20 kandidater utan problem, och du kan skala högre om du tar hänsyn till Apifys rate limits och dina OpenAI-användningsgränser.
Ofta, ja – eftersom det här inte är ett enkelt ”flytta data från A till B”-flöde. Du routar filtyper, loopar rader, berikar via Apify och skriver strukturerad output tillbaka till Sheets, vilket tenderar att bli dyrt eller klumpigt i Zapier. n8n låter dig också self-hosta för obegränsade körningar, vilket spelar roll när ni kör återkommande rekryteringscykler. Samtidigt: om du bara vill kopiera ett formulärsvar till ett Sheet och skicka en notis kan Zapier eller Make gå snabbare. Om du är osäker, prata med en automationsexpert och beskriv er nuvarande process.
När det här väl är på plats slutar shortlisten vara ett skört spreadsheet-projekt och blir ett repeterbart system. Du granskar kandidater – inte formatering.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.