Det ser enkelt ut att ta emot CV:n tills du sitter med en PDF, en DOCX och en länk till en LinkedIn-liknande profilsida, alla formaterade olika, alla ”brådskande”. Sedan kopierar du och klistrar in namn, mejladresser, titlar, datum, kompetenser. Och ändå frågar någon: ”Kan du skicka igen, fast i ett kalkylark?”
Det är här rekryterare tappar timmar. talent ops-team känner av det när pipelinen blir rörig. Och HR-tech-personer som bygger interna verktyg hamnar i samma städjobb, bara med snyggare etiketter. En bra automatisering för CV-tolkning gör kaoset till felfria rader som du kan filtrera, sortera och lämna över.
Det här flödet tar valfri CV-URL, extraherar innehållet med Thordata, låter OpenAI konvertera det till en JSON Resume-struktur och loggar det prydligt i Google Sheets (och sparar dessutom en JSON-kopia på disk). Du får se vad det löser, vad du behöver och hur du anpassar det till din egen intake-process.
Så fungerar automatiseringen
Se hur det här löser problemet:
n8n Workflow Template: Thordata + Google Sheets: CV loggas strukturerat
flowchart LR
subgraph sg0["Manual Launch Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Launch Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Input Fields", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Thordata API Call"]
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/markdown.dark.svg' width='40' height='40' /></div><br/>HTML to Markdown Convert"]
n4@{ icon: "mdi:robot", form: "rounded", label: "Resume JSON Extractor", pos: "b", h: 48 }
n5@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Engine", pos: "b", h: 48 }
n6@{ icon: "mdi:code-braces", form: "rounded", label: "Binary Payload Maker", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Spreadsheet Upsert", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Save JSON to Disk", pos: "b", h: 48 }
n4 --> n6
n4 --> n7
n1 --> n2
n6 --> n8
n3 --> n4
n5 -.-> n4
n0 --> n1
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 n0 trigger
class n4 ai
class n5 aiModel
class n7 database
class n2 api
class n6 code
classDef customIcon fill:none,stroke:none
class n2,n3 customIcon
Utmaningen: CV-data ser aldrig likadan ut två gånger
CV:n kommer in som ”det kandidaten hade till hands”. PDF:er med spalter. DOCX-filer med konstiga mellanrum. Publika profil-URL:er där extra navigations- och sidtext blandas in i innehållet. Det jobbiga är inte att läsa dem; det är att plocka ut samma fält varje gång och lägga dem någonstans på ett konsekvent sätt. Ett stavfel i en mejladress skapar fel i uppföljningar. Ett missat anställningsdatum gör att din kortlista ser slarvig ut. Och när du gör detta för dussintals sökande blir den mentala belastningen påtaglig, eftersom du hela tiden växlar mellan ”tolka det här CV:t” och ”formatera det för systemet”.
Det eskalerar snabbt. Här är var det brukar fallera.
- Att kopiera och klistra in grunderna (namn, mejl, telefon, plats) är repetitivt och ändå lätt att göra fel i.
- Arbetslivserfarenhet är tidstjuven eftersom jobbtitlar och datum sällan linjerar snyggt mellan kandidater.
- Kompetenser och projekt får inkonsekventa benämningar, så sökningar senare blir gissningslek.
- Alla bygger sitt eget ”uppföljningsark”, vilket gör att överlämningar blir till förklaringsmöten.
Lösningen: konvertera valfri CV-URL till strukturerade rader
Det här flödet gör ostrukturerat CV-innehåll till ett konsekvent JSON Resume-objekt och loggar sedan fälten där teamet redan jobbar: Google Sheets. Du börjar med en CV-URL (en hostad PDF-länk, en webbsida, en profilsida). Thordatas Universal API hämtar innehållet och tar bort röran (extra HTML och layoutbrus), vilket gör texten enklare för AI att tolka. Därefter konverterar flödet den rensade HTML:en till Markdown, så AI:n ser ett enklare och mer förutsägbart dokument. OpenAI extraherar sedan kandidatdetaljer till ett strukturerat JSON Resume-format (basics, work, education, skills, projects, certifications, languages med mera). Till sist sparar n8n en JSON-kopia på disk och gör en upsert av en rad i Google Sheets för spårning och filtrering.
Flödet startar när du kör det och skickar in CV-URL:en. Därifrån hanterar Thordata extrahering och städning, och sedan omvandlar OpenAI innehållet till en schema-anpassad JSON Resume. Google Sheets blir din sökbara pipeline-logg, medan den sparade JSON:en ger dig en felfri payload för ATS/CRM-integrationer.
Vad som förändras: före vs. efter
| Det här elimineras | Effekt du märker |
|---|---|
|
|
Effekt i verkligheten
Säg att du granskar 25 sökande på en dag. Manuellt tar det ofta runt 15 minuter per person att plocka ut grunderna, skriva om arbetslivserfarenheten till ditt föredragna format och mata in kompetenser i ett ark, så du bränner ungefär 6 timmar. Med det här flödet klistrar du in CV-URL:en och låter det köra: kanske 2 minuter av din tid per kandidat, plus några minuters bearbetning i bakgrunden. Det ger cirka 5 timmar tillbaka en intensiv intake-dag, och ditt ark blir faktiskt konsekvent.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Thordata Universal API för att extrahera innehåll från CV-URL:er
- Google Sheets för att logga kandidater i en tabell
- OpenAI API-nyckel (hämta den i OpenAI-dashboarden)
Svårighetsnivå: medel. Du kopplar in autentisering och mappar några fält, men du behöver inte skriva kod.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet i arbetsflödet
En CV-URL kickar igång allt. I standardupplägget kör du flödet manuellt och det läser en enda resume_url som du anger. Vill du ha löpande intake senare kan den här triggern bytas mot en webhook eller ett formulärinskick.
Thordata hämtar och städar dokumentet. Flödet skickar URL:en till Thordatas Universal API via en HTTP-request och får tillbaka rensat innehåll (mindre layoutskräp, mer faktisk CV-text), vilket innebär att du inte matar AI:n med irrelevant navigation och styling.
Innehållet förbereds för extrahering. n8n konverterar HTML till Markdown så att CV:t läses som ett rakt dokument. Det gör nästa steg mer tillförlitligt, särskilt när källan är en webbprofilsida.
OpenAI skapar en JSON Resume-payload. Med ett AI-extraheringssteg ihop med en OpenAI-chatmodell mappar flödet CV:t till strukturerade fält som basics, work history, education, skills, projects och certifications. Det är byggt för att linjera med JSON Resume-schemat så att outputen förblir förutsägbar.
Google Sheets blir pipeline-loggen. Flödet gör en upsert av en rad i ditt kalkylark och skriver dessutom JSON-filen till disk för säker lagring och vidare integrationer.
Du kan enkelt byta inputkälla (manuell URL) till en webhook eller en Jotform-inlämning utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den manuella triggern
Konfigurera den manuella triggern för att starta arbetsflödet vid behov och skicka med CV-URL:en in i flödet.
- Lägg till noden Manual Launch Trigger som arbetsflödets trigger.
- Öppna Map Input Fields och ställ in värdet för resume_url till
https://registry.jsonresume.org/thomasdavis?theme=elegant. - Koppla Manual Launch Trigger → Map Input Fields.
Steg 2: Koppla Thordata API-anrop
Hämta CV:ts HTML från den angivna URL:en med Thordata API.
- Lägg till Thordata API Call och koppla den efter Map Input Fields.
- Ställ in URL till
https://universalapi.thordata.com/requestoch Method tillPOST. - Aktivera Send Body och ställ in Content Type till
form-urlencoded. - Ställ in body-parametrar: url till
{{ $json.resume_url }}, type tillhtml, js_render tillFalse, country tillinoch clean_content tillcss,js. - Credential Required: Anslut era httpBearerAuth-uppgifter.
Steg 3: Sätt upp CV-tolkning och AI
Konvertera HTML till markdown och extrahera strukturerad JSON med AI-extraktorn.
- Lägg till HTML to Markdown Convert och koppla den efter Thordata API Call.
- Ställ in HTML till
{{ $json.html }}och Destination Key tillmarkdown. - Lägg till Resume JSON Extractor och koppla den efter HTML to Markdown Convert.
- Ställ in Text till
Analyze and Parse the provided resume in JSON Resume format. {{ $json.markdown }}och behåll Schema Type sommanualmed det angivna JSON-schemat. - Öppna OpenAI Chat Engine och ställ in Model till
gpt-4.1-mini. - Credential Required: Anslut era openAiApi-uppgifter i OpenAI Chat Engine. Den här noden levererar språkmodellen till Resume JSON Extractor.
Steg 4: Konfigurera utdata-destinationer
Lagra den extraherade JSON:en i ett kalkylark och spara en lokal JSON-fil.
- Observera att Resume JSON Extractor skickar utdata till både Binary Payload Maker och Spreadsheet Upsert parallellt.
- I Binary Payload Maker, behåll Function Code enligt angivet för att skapa en binär JSON-payload.
- Koppla Binary Payload Maker → Save JSON to Disk och ställ in File Name till
C:\\{{ $json.output.basics.name }}.jsonmed Operation somwrite. - I Spreadsheet Upsert, ställ in Operation till
appendOrUpdate. - Ställ in Document ID till
[YOUR_ID]och Sheet Name tillgid=0. - Mappa kolumnen json_resume till
{{ $json.output.toJsonString() }}och ställ in den som matchande kolumn. - Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter.
C:\\{{ $json.output.basics.name }}.json om er n8n-host kör Linux eller Docker.Steg 5: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att bekräfta tolkning, lagring och filutskrift, och aktivera sedan arbetsflödet för löpande användning.
- Klicka på Execute Workflow i Manual Launch Trigger för att köra hela pipelinen.
- Verifiera att Thordata API Call returnerar HTML och att HTML to Markdown Convert skapar ett fält
markdown. - Bekräfta att Resume JSON Extractor producerar strukturerad JSON-utdata under
output. - Kontrollera att Spreadsheet Upsert skriver en ny rad med värdet för json_resume och att Save JSON to Disk skapar JSON-filen.
- Växla arbetsflödet till Active för att aktivera användning i produktion.
Saker att se upp med
- Thordata-autentisering kan gå ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först n8n:s Credentials-panel och status för din Thordata-token.
- 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 er ton och era krav tidigt, annars kommer du att redigera output i all oändlighet.
Vanliga frågor
Cirka 30 minuter om du redan har dina API-nycklar.
Ja, men någon behöver hantera den initiala konfigurationen av autentisering. Efter det är det mest ”klistra in URL, kör, kontrollera arket”.
Ja. n8n har ett gratis alternativ för egen hosting 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 med OpenAI API-användning plus vad din Thordata-plan kostar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och klarar n8n bra. Egen hosting ger obegränsat antal körningar men kräver grundläggande serveradministration.
Du kan byta den manuella triggern mot en Webhook Trigger för att ta emot CV-URL:er från din webbplats, eller koppla in en Jotform Trigger om du redan samlar in kandidatinformation via ett formulär. Steget ”Map Input Fields” är där du lägger till extra indata (jobb-ID, rekryterarnamn, källa). På outputsidan kan du ersätta Google Sheets-upsert med Notion, Airtable eller Supabase via API-noder om Sheets inte är ert system of record.
Oftast är det en ogiltig eller utgången bearer token i n8n Credentials. Det kan också fallera om CV-URL:en är blockerad, kräver inloggning eller omdirigerar på ett sätt som API-anropet inte följer, så testa URL:en i en webbläsare och prova en publikt åtkomlig länk.
På en typisk n8n Cloud-plan kan du hantera tusentals körningar per månad, vilket räcker för de flesta rekryteringsteam. Om du kör egen hosting finns inget tak för antal körningar, men din server och externa API:er blir de begränsande faktorerna. I praktiken är det här flödet bäst att behandla som ”en kandidat per körning”, och du kan köa batchar om du behöver beta av backlogs.
Ofta, ja. Det här flödet drar nytta av n8n:s flexibilitet: det är enklare att styra dokumentförberedelser, hantera förgreningar när inputen är märklig och lagra både en kalkylarksrad och en JSON-fil utan nödlösningar. Zapier och Make kan göra delar av det, men så fort du vill ha schema-anpassad extrahering och robustare felhantering blir uppläggen sköra. Dessutom är egen hosting av n8n en stor grej om du hanterar många CV:n och inte vill betala per task för alltid. Om du är osäker, prata med en automationsexpert så verklighetscheckar vi ditt use case.
Felfri CV-data förändrar allt nedströms. När den ligger i Sheets (och är sparad som JSON) slutar rutinjobbet vara din flaskhals, så att du kan fokusera på att faktiskt utvärdera kandidater.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.