CV:n landar i Gmail och försvinner sedan ner i det svarta hålet som heter ”jag kollar på det där senare”. När du väl kommer tillbaka letar du i trådar, laddar ner bilagor igen och frågar teamet om någon redan har gallrat kandidaten.
Det här upplägget för Gmail-loggning av CV:n träffar rekryterare först, helt ärligt. Men HR-chefer och startupgrundare känner av det också, eftersom rekryteringsförseningar alltid blir till verksamhetsförseningar.
Det här flödet tar varje inkommande CV, plockar ut de viktiga detaljerna automatiskt, loggar kandidaten i Google Sheets och pingar Slack med en strukturerad sammanfattning så att teamet kan agera snabbt (utan kaos).
Så här fungerar automatiseringen
Här är hela arbetsflödet som du kommer att sätta upp:
n8n Workflow Template: Gmail + Google Sheets: cv loggas, Slack larmar
flowchart LR
subgraph sg0["Monitor Gmail for Resumes Flow"]
direction LR
n0@{ icon: "mdi:message-outline", form: "rounded", label: "Send Acknowledgement Email", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Monitor Gmail for Resumes", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Parse Resume with VLM Run", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check for Github Profile", pos: "b", h: 48 }
n4["<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/>Extract GitHub Username"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch GitHub Profile"]
n6["<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 GitHub Repositories"]
n7["<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/>Process Profile Data"]
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/>Analyze Repository Data"]
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/merge.svg' width='40' height='40' /></div><br/>Combine GitHub Data"]
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/code.svg' width='40' height='40' /></div><br/>Flatten Response"]
n11@{ icon: "mdi:database", form: "rounded", label: "Save to Google 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/slack.svg' width='40' height='40' /></div><br/>Send Slack Notification"]
n10 --> n12
n10 --> n0
n10 --> n11
n9 --> n10
n5 --> n7
n7 --> n9
n8 --> n9
n4 --> n5
n4 --> n6
n3 --> n4
n3 --> n10
n6 --> n8
n1 --> n2
n2 --> n3
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 n1 trigger
class n3 decision
class n11 database
class n5,n6 api
class n4,n7,n8,n10 code
classDef customIcon fill:none,stroke:none
class n4,n5,n6,n7,n8,n9,n10,n12 customIcon
Varför detta spelar roll: CV-gallring blir rörig snabbt
Om du rekryterar till mer än en roll blir mejlbaserat inflöde snabbt ett jongleringsnummer. Du öppnar en bilaga, kopierar kontaktuppgifter någonstans, försöker sammanfatta erfarenhet och kommer sedan på att du också behöver en GitHub-länk för tekniska roller. Nästa steg: du postar en halvklar notis i Slack, någon frågar ”vad är deras stack?”, och du öppnar CV:t igen. Det är inte en stor uppgift. Det är tio små, upprepade för varje kandidat, vilket gör att saker missas och bra sökande får vänta för länge.
Friktionen byggs på. Här är var det fallerar i riktiga team.
- CV:n granskas inkonsekvent eftersom alla antecknar på olika ställen, eller inte alls.
- Manuell copy-paste till ett kalkylark slösar cirka 20–30 minuter per kandidat när du räknar in kontextbyten.
- Tekniska kandidater har ofta GitHub-profiler, men ingen har tid att gå igenom repos på ett repeterbart sätt.
- Slack-notiser blir vaga, så teamet kan inte triagera snabbt och intervjuer bokas sent.
Vad du bygger: Gmail-till-Sheets-inflöde med Slack-notiser för gallring
Det här flödet bevakar din Gmail-inkorg efter nya CV-inlämningar, hämtar bilagan och skickar den genom ett AI-steg för dokumenttolkning (VLM Run) för att ta fram strukturerad kandidatdata. Om CV:t innehåller en GitHub-länk härleder det automatiskt användarnamnet, hämtar profil och repositories via HTTP-anrop och skapar en teknisk översikt som faktiskt är användbar vid gallring. Sedan konsoliderar det allt till ett strukturerat payload, uppdaterar din Google Sheets-”kandidatdatabas” (med många kolumner för sök och filtrering senare) och postar en innehållsrik Slack-notis så att teamet kan reagera direkt. Det skickar också ett bekräftelsemejl till kandidaten, så att de inte undrar om ansökan bara försvann.
Flödet börjar med en Gmail-trigger och slutar med två resultat som teamet märker direkt: en strukturerad rad i Google Sheets och ett Slack-meddelande som sammanfattar sökanden. GitHub-analys läggs bara till när den finns, så icke-tekniska roller går fortfarande igenom utan problem.
Det här bygger du
| Vad som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du får 10 CV:n på en vecka för en teknisk roll. Manuellt kanske du lägger cirka 30 minuter per kandidat på att ladda ner filer, föra över kontaktuppgifter till ett ark, skumma GitHub och skriva en Slack-uppdatering, alltså ungefär 5 timmar. Med det här flödet är inflödet automatiskt: CV:t tolkas, en rad i Google Sheets skapas och Slack notifieras inom några minuter efter att mejlet kommit in. Du gör fortfarande en mänsklig granskning, men du börjar med en strukturerad sammanfattning i stället för ett tomt blad.
Innan du börjar
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Gmail för att ta emot CV:n och skicka bekräftelser
- Google Sheets för att lagra en rad i kandidatdatabasen
- Slack för teamnotiser i en rekryteringskanal
- VLM Run API-nyckel (hämta den från din VLM Run-dashboard)
- GitHub-åtkomst (publika API-anrop via HTTP Request-noder)
Kunskapsnivå: Medel. Du bygger ingen app, men du bör vara bekväm med att koppla konton, klistra in API-nycklar och testa med ett exempel-CV.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Gmail tar emot ett mejl med CV. Flödet lyssnar efter nya meddelanden som matchar ditt inflödesmönster (till exempel ansökningar till en specifik inkorg eller etikett) och hämtar sedan den bifogade CV-filen.
AI-tolkning gör dokumentet till fält. VLM Run extraherar grunderna som du vanligtvis skriver för hand: namn, e-post, telefon, roll, kompetenser, erfarenhetshöjdpunkter och eventuella länkar den kan identifiera i CV:t.
GitHub analyseras när det finns. En ”if”-kontroll letar efter GitHub, sedan härleder flödet användarnamnet och använder HTTP-anrop för att hämta profil- och repositorydata. Några transformationssteg konverterar rå repo-statistik till en gallringsvänlig sammanfattning (språk, ramverk, aktivitetsindikatorer och utvalda projekt).
Ett konsoliderat resultat skickas överallt. Det slutliga payloadet uppdaterar din post i Google Sheets, postar en Slack-notis med en strukturerad sammanfattning och triggar ett bekräftelsemejl tillbaka till kandidaten.
Du kan enkelt justera Gmail-filtren för att skicka olika roller till olika Sheets-flikar eller Slack-kanaler baserat på dina behov. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera Gmail-triggern
Starta arbetsflödet genom att övervaka inkorgen efter inkommande cv:n och bilagor.
- Lägg till noden Watch Inbox for Resumes som din trigger.
- Ställ in Simple på
falseför att aktivera fullständiga meddelandedata. - Aktivera Download Attachments under Options så att cv-filerna blir tillgängliga.
- Ställ in Poll Times på
everyMinuteför att kontrollera inkorgen ofta. - Inloggningsuppgifter krävs: Anslut era gmailOAuth2-inloggningsuppgifter.
Tips: Säkerställ att er Gmail-etikett eller ert filter skickar cv-mejl till inkorgen så att Watch Inbox for Resumes kan upptäcka dem.
Steg 2: Extrahera cv-data med VLM
Tolka den bifogade cv-filen och strukturera kandidatdata för vidare bearbetning.
- Lägg till Extract Resume via VLM och koppla den till Watch Inbox for Resumes.
- Ställ in File till
attachment_0. - Ställ in Domain till
document.resume. - Inloggningsuppgifter krävs: Anslut era vlmRunApi-inloggningsuppgifter.
⚠️ Vanlig fallgrop: Om bilagor inte laddas ned i Watch Inbox for Resumes kommer Extract Resume via VLM inte att hitta attachment_0.
Steg 3: Validera GitHub-data och förgrena till GitHub-berikning
Kontrollera om det finns en GitHub-URL i det tolkade cv:t och förgrena till berikning om den finns.
- Lägg till Verify GitHub Presence efter Extract Resume via VLM.
- Konfigurera villkoret så att det kontrollerar om
{{ $json.response.contact_info.github }}exists. - Lägg till Derive GitHub Handle på “true”-grenen och behåll “false”-grenen kopplad till Consolidate Payload.
- I Derive GitHub Handle behåller ni den angivna JS Code som delar upp GitHub-URL:en och returnerar
username.
Tips: Derive GitHub Handle förutsätter att URL:en innehåller github.com/. Säkerställ att cv:n anger en fullständig URL, inte bara ett användarnamn.
Steg 4: Hämta GitHub-profil och repo-insikter (parallellt)
Berika kandidatposten med GitHub-profilmått och insikter om repos parallellt.
- Koppla Derive GitHub Handle till både Retrieve GitHub Profile och Retrieve GitHub Repos parallellt.
- Ställ in Retrieve GitHub Profile URL till
=https://api.github.com/users/{{ $json.username }}. - Ställ in Retrieve GitHub Repos URL till
=https://api.github.com/users/{{ $json.username }}/repos. - Koppla Retrieve GitHub Profile till Transform Profile Metrics och behåll dess JS Code intakt.
- Koppla Retrieve GitHub Repos till Summarize Repo Insights och behåll dess JS Code intakt.
- Ställ in Merge GitHub Outputs Number Inputs till
3och koppla både Transform Profile Metrics och Summarize Repo Insights till den.
Derive GitHub Handle skickar output till både Retrieve GitHub Profile och Retrieve GitHub Repos parallellt.
Steg 5: Konsolidera data och konfigurera utdata
Slå ihop cv- och GitHub-data till en payload och skicka aviseringar, e-post och uppdateringar i kalkylblad.
- Koppla Merge GitHub Outputs till Consolidate Payload och behåll den befintliga JS Code som slår ihop cv-, profil- och repo-data.
- Koppla Consolidate Payload till Post Slack Alert, Dispatch Confirmation Email och Update Sheets Record parallellt.
- I Post Slack Alert behåller ni Text-mallen med uttryck som
{{ $json.contact_info.full_name }}och{{ $json.contact_info.email }}. - Inloggningsuppgifter krävs: Anslut era slackApi-inloggningsuppgifter till Post Slack Alert.
- I Dispatch Confirmation Email ställer ni in Send To till
{{ $json.contact_info.email }}, Subject tillThanks for Your Interestoch Message tillWe will get in touch shortly.. - Inloggningsuppgifter krävs: Anslut era gmailOAuth2-inloggningsuppgifter till Dispatch Confirmation Email.
- I Update Sheets Record ställer ni in Document ID till
[YOUR_ID]och Sheet Name tillSheet1. - Behåll kolumnmappningarna som refererar till uttryck som
{{ $json.contact_info.full_name }},{{ $json.languageCount?.JavaScript || null }}och{{ $json.totalStars || null }}. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter till Update Sheets Record.
Consolidate Payload skickar output till både Post Slack Alert, Dispatch Confirmation Email och Update Sheets Record parallellt.
⚠️ Vanlig fallgrop: Mappningsnyckeln {{ $json.expeience || null }} innehåller ett stavfel; säkerställ att er data använder samma nyckel eller korrigera den i Update Sheets Record.
Steg 6: Testa och aktivera ert arbetsflöde
Verifiera flödet från början till slut med ett riktigt cv och aktivera sedan automatiseringen.
- Klicka på Execute Workflow och skicka ett testmejl med en cv-bilaga till den övervakade inkorgen.
- Bekräfta att Extract Resume via VLM returnerar fält i
response.contact_info. - Om en GitHub-URL finns, verifiera att både Retrieve GitHub Profile och Retrieve GitHub Repos körs och att Merge GitHub Outputs tar emot tre inputs.
- Kontrollera att Post Slack Alert postar i vald kanal, att Dispatch Confirmation Email skickar ett mejl och att Update Sheets Record lägger till eller uppdaterar raden.
- Växla arbetsflödet till Active för att köra det i produktion.
Felsökningstips
- Gmail-inloggningar kan löpa ut eller tappa åtkomst till rätt inkorg/etikett. Om triggern slutar köra, kontrollera först statusen för n8n:s Gmail-inloggning och triggerns etikett-/query-inställningar.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströms noder fallerar på tomma svar.
- Slack-behörigheter är lätta att missa om boten inte är inbjuden till kanalen. Om notiser inte dyker upp, verifiera kanal-ID:t och att Slack-appen får posta där.
Snabba svar
Cirka 45 minuter om Gmail, Slack och Sheets redan är redo.
Nej. Du kopplar mest konton och klistrar in några ID:n och API-nycklar. Det befintliga flödet innehåller redan logiken för GitHub-uppslag och datakonsolidering.
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 volym. Du behöver också räkna in kostnader för VLM Run och OpenAI API-användning beroende på hur många CV:n du hanterar.
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 bör du. Vanliga ändringar är att justera filtren i Gmail-triggern, skriva till en annan Google Sheets-flik per roll eller posta till olika Slack-kanaler baserat på nyckelord. Om du vill byta tolkleverantör kan du ersätta noden ”Extract Resume via VLM” och behålla resten av flödet. Du kan också bygga ut GitHub-grenen genom att lägga till extra HTTP Request-anrop för saker som pinnade repos eller organisationsmedlemskap.
Oftast är det en utgången OAuth-session eller att Gmail-kontot har tappat behörighet till den inkorg du bevakar. Återanslut Gmail-inloggningen i n8n och dubbelkolla sedan att triggerns query/etikett fortfarande är giltig. Om CV:n vidarebefordras från en annan adress, verifiera att bilagan faktiskt följer med och inte är ett ”molnlänksmejl” utan någon fil.
Några dussin CV:n per dag är realistiskt för de flesta små team med en standarduppsättning i n8n.
Ofta, ja, eftersom det här flödet behöver förgreningar, datatransformation och berikning i flera steg (GitHub-profil plus repos) som kan bli krångligt eller dyrt på andra plattformar. n8n ger dig också mer kontroll över hur payloadet formas innan det når Google Sheets och Slack, vilket spelar roll när du vill ha konsekventa kolumner och förutsägbara notiser. En annan praktisk anledning: self-hosting är ett alternativ, så högre volym betyder inte automatiskt en enorm månadsfaktura. Zapier eller Make kan fortfarande vara bra om du bara vill ha ”Gmail-bilaga → Slack-meddelande” utan tolkning eller berikning. Om du är osäker, prata med en automationsexpert så rimlighetskontrollerar vi ditt användningsfall.
När detta väl rullar byggs inga CV-högar upp i inkorgar. De blir strukturerade, sökbara kandidater och tydliga teamnotiser, automatiskt.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.