Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

Airtable + OpenAI: cv tolkade till strukturerade fält

Rickard Andersson Partner, Nodenordic.se

CV-granskning faller ihop i samma stund som den ”enkla delen” blir datainmatning. Du öppnar en PDF, kopierar ett namn, klistrar in det i Airtable och upprepar sedan för antal års erfarenhet, senaste roll, plats, LinkedIn och allt annat teamet spårar. Missar du en rad är din pipeline plötsligt full av halvt felaktiga poster.

Det här är den sortens röra som rekryterare känner av varje dag, men HR ops och byråteam som jobbar med kandidatinhämtning råkar också ut för det. Med automatiserad CV-tolkning slutar du skriva in samma fakta om och om igen och kan börja granska kandidater tidigare. Mer strukturerade fält. Färre ”vänta, är det där deras nuvarande titel?”-ögonblick.

Den här guiden går igenom vad arbetsflödet gör, varför det fungerar så bra för röriga CV:n och hur du sätter upp det i n8n utan att leva i kalkylblad.

Så fungerar automatiseringen

Här är det kompletta arbetsflödet du kommer att sätta upp:

n8n Workflow Template: Airtable + OpenAI: cv tolkade till strukturerade fält

Varför detta spelar roll: datainmatning av CV:n är en flaskhals

De flesta rekryteringsteam har egentligen inte problem med att in CV:n. De har problem med att omvandla dem till konsekvent, sökbar data. PDF:er kommer i olika layouter, med otydliga rubriker, duplicerade avsnitt och ”kreativ” formatering som ser bra ut för människor och är usel för system. Så någon plockar manuellt ut samma detaljer varje gång och rättar sedan stavfel när en kollega inte kan filtrera på plats eller sortera på antal års erfarenhet. Det är inte bara långsamt. Det är mentalt dränerande, och det försenar i det tysta kontakt med riktigt bra kandidater.

Friktionen växer. Särskilt när dina Airtable-fält utvecklas över tid.

  • Copy-paste från PDF:er är felkänsligt, och små misstag gör att filtrering och rapportering skapar fel.
  • Olika teammedlemmar tolkar samma CV olika, så ”nuvarande titel” blir snabbt inkonsekvent.
  • När du lägger till ett nytt fält (som ”arbetstillstånd”) måste någon fylla i äldre poster manuellt.
  • Rekryterande chefer slutar med att läsa råa PDF:er eftersom databasfälten inte går att lita på.

Vad du bygger: Airtable-styrd CV-extraktion med flexibla prompts

Det här arbetsflödet gör om en CV-PDF till strukturerade Airtable-fält med OpenAI, men den stora vinsten är hur lätt det är att underhålla. I stället för att hårdkoda vad som ska extraheras i n8n läser arbetsflödet dina kolumnbeskrivningar i Airtable som ”dynamiska prompts”. Du bifogar en CV-PDF (eller uppdaterar inmatningsfältet) i Airtable, Airtable triggar n8n via webhook och n8n hämtar filinnehållet. Sedan tolkar den PDF-texten, ber OpenAI extrahera exakt det som respektive fältbeskrivning efterfrågar och skriver tillbaka de felfria värdena till samma post. Lägger du till en ny kolumn senare uppdaterar du fältbeskrivningen, och extraktionen anpassar sig utan att du behöver bygga om arbetsflödet.

Arbetsflödet startar med ändelsehändelser i Airtable (ny post, uppdaterat fält eller uppdaterad fil). Därefter bearbetar det CV-innehållet och tar fram värden per fält med OpenAI. Till sist uppdaterar det Airtable så att tabellen blir din källa till sanning i stället för en lagringsplats för PDF:er.

Det här bygger du

Förväntat resultat

Säg att du hanterar 20 CV:n i veckan och extraherar cirka 10 fält per CV (namn, e-post, plats, senaste roll, antal år och några egna). Manuellt kan du lägga runt 10 minuter per CV på att kopiera, kontrollera och fixa formatering, vilket blir cirka 3 timmar i veckan. Med det här arbetsflödet blir ”jobbet” att ladda upp/bifoga PDF:en och snabbt skumma de extraherade fälten efter uppenbara missar, oftast ett par minuter per CV. Det är ungefär 2 timmar tillbaka de flesta veckor, och tabellen håller sig mer strukturerad när volymen ökar.

Innan du börjar

  • n8n-instans (prova n8n Cloud gratis)
  • Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
  • Airtable för din CV-tabell och fältbeskrivningar.
  • OpenAI för att extrahera strukturerad data från CV-text.
  • OpenAI API-nyckel (hämta den från sidan för OpenAI API-inställningar)

Svårighetsgrad: Medel. Du är bekväm med att koppla konton, klistra in ID:n för Airtable-webhooks och testa med ett par riktiga poster.

Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).

Steg för steg

Airtable triggar arbetsflödet. När en CV-post skapas eller uppdateras skickar Airtable en ändelsehändelse till n8n via en inkommande webhook.

Arbetsflödet läser dina ”instruktioner” i tabellen. n8n hämtar Airtable-schemat och plockar sedan fältbeskrivningarna från de kolumner du bryr dig om. De beskrivningarna fungerar som mini-prompts (till exempel: ”Kandidatens nuvarande jobbtitel och företag”).

CV-filen hämtas och tolkas. Om posten har en bifogad PDF laddar n8n ner den, extraherar texten och förbereder kontext för AI-steget. Om det inte finns någon fil hoppar den över posten.

OpenAI extraherar värden och uppdaterar Airtable. Arbetsflödet kör en AI-extraktion för hela raden eller bara för saknade fält, slår ihop resultaten och skriver tillbaka felfria värden till Airtable-posten. Ett webhook-svar bekräftar körningen.

Du kan enkelt ändra vilka fält du extraherar så att de matchar din rekryteringsscorecard. Se den fullständiga implementationsguiden nedan för alternativ för anpassning.

Steg-för-steg-implementeringsguide

Steg 1: konfigurera webhook-triggern

Det här arbetsflödet startar från webhook-händelser i Airtable och använder dem för att driva efterföljande parsning och uppdateringar.

  1. Lägg till noden Airtable Incoming Webhook och ställ in HTTP MethodPOST.
  2. Ställ in Patha82f0ae7-678e-49d9-8219-7281e8a2a1b2 så att den matchar den inkommande Airtable-webhooken.
  3. Anslut webhook-utdata till Fetch Table Schema för att starta schemaidentifiering för fältbeskrivningar.

Steg 2: definiera Airtable-inställningar och skapa webhooks

Använd grenen för manuell konfiguration för att registrera Airtable-webhooks och lösa indatafilfältet som används för PDF-extraktion.

  1. Lägg till noden Manual Run Trigger för att möjliggöra engångskonfiguration.
  2. I Define Airtable Settings ställer ni in appId, tableId och notificationUrl till era Airtable-värden, och sätter inputField till File.
  3. Define Airtable Settings skickar utdata parallellt till både Fetch Schema Setup och Create Fields Webhook.
  4. I Fetch Schema Setup bekräftar ni att Resource är base och att Operation är getSchema. Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.
  5. I Locate Input Field behåller ni uttrycket för JSON Output som det är för att hitta filfältet: {{$input.all().map(item => item.json).find(item => item.id === $('Define Airtable Settings').first().json.tableId).fields.find(field => field.name === $('Define Airtable Settings').first().json.inputField)}}.
  6. Konfigurera Create Records Webhook med Method POST och det angivna JSON-body-uttrycket. Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.
  7. Konfigurera Create Fields Webhook med Method POST och det angivna JSON-body-uttrycket. Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.
Kör Manual Run Trigger en gång efter att ni har fyllt i ID:n för att skapa Airtable-webhooks innan ni aktiverar produktionswebhooken.

Steg 3: ladda schema och tolka händelser

Den här vägen läser Airtable-schemat, hämtar webhook-payloads och routar händelser baserat på ändringstyp.

  1. I Fetch Table Schema behåller ni Resource inställt på base och Operation inställt på getSchema. Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.
  2. Lämna Extract Prompt Fields som den är för att filtrera fält med beskrivningar och mappa dem till en struktur som är redo för prompten.
  3. I Retrieve Webhook Payload ställer ni in URL=https://api.airtable.com/v0/bases/{{ $('Airtable Incoming Webhook').first().json.body.base.id }}/webhooks/{{ $('Airtable Incoming Webhook').first().json.body.webhook.id }}/payloads och aktiverar Airtable-autentisering. Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.
  4. Behåll koden i Interpret Event Data för att härleda event_type, field och rowId för routning.
  5. I Event Category Router säkerställer ni att de tre rutterna matchar row.updated, field.created och field.updated med {{ $json.event_type }}.
⚠️ Vanlig fallgrop: Om era fältbeskrivningar i Airtable är tomma kommer Filter Described Fields att stoppa bearbetningen – se till att varje målfält har en beskrivning i Airtable.

Steg 4: konfigurera flöde för raduppdatering (PDF-extraktion)

När en rad uppdateras hämtar arbetsflödet PDF-filen, extraherar text och skriver härledda värden tillbaka till Airtable.

  1. Från Event Context B ansluter ni till Fetch Single Row med ID satt till {{$json.rowId}}. Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.
  2. Använd Filter Rows With Files för att behålla poster där {{$json.File[0].url}} inte är tom.
  3. Skicka poster genom Iterate Row Updates och Row Pointer, och sätt sedan Retrieve File Content URL till {{ $('Row Pointer').item.json.File[0].url }}.
  4. Ställ in Parse File Content B till Operation pdf, och kör sedan Identify Missing Fields för att avgöra vilka beskrivna fält som fortfarande är tomma.
  5. I Derive Single Field behåller ni Text-prompten med {{ $('Parse File Content B').first().json.text }} och {{$json.description}} för riktad extraktion. OpenAI Chat Engine är ansluten som språkmodell för Derive Single Field – säkerställ att inloggningsuppgifter läggs till i OpenAI Chat Engine. Credential Required: Anslut era openAiApi-inloggningsuppgifter.
  6. I Compile Field Output behåller ni det dynamiska uttrycket för fältnamn {{ $('Identify Missing Fields').item.json.name }} och matar ut {{ $json.text.trim() }}.
  7. I Append Row ID behåller ni det råa JSON-uttrycket för att slå ihop extraherade fält och post-id, och uppdaterar sedan Airtable med Modify Record Fields. Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.

Steg 5: konfigurera flöde för fältbeskrivningar (dynamisk extraktion)

När ett beskrivet fält skapas eller uppdateras skannar arbetsflödet alla poster med filer och fyller i värden för just det specifika fältet.

  1. Från Event Context passerar ni genom Filter Described Fields för att säkerställa att {{ $json.field.description }} finns.
  2. I Retrieve Table Records behåller ni Operation search och Filter By Formula inställt på NOT({File} = ""). Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.
  3. Iterera med Iterate Record Batch och skicka aktuellt objekt till Row Snapshot.
  4. Ställ in Fetch File Content URL till {{$json.File[0].url}} och extrahera sedan med Parse File Content med pdf.
  5. I Derive Field Value behåller ni prompttexten och fälten för utdataformat: {{ $json.text }}, {{ $('Event Context').first().json.field.description }} och {{ $('Event Context').first().json.field.type }}. OpenAI Chat Engine B är ansluten som språkmodell för Derive Field Value – säkerställ att inloggningsuppgifter läggs till i OpenAI Chat Engine B. Credential Required: Anslut era openAiApi-inloggningsuppgifter.
  6. I Assemble Row Output sätter ni id till {{ $('Row Snapshot').item.json.id }} och behåller det dynamiska fältnamnet {{ $('Event Context').first().json.field.name }}.
  7. Skriv uppdateringar med Modify Row Record och behåll Operation som update. Credential Required: Anslut era airtableTokenApi-inloggningsuppgifter.
Om extraktionskvaliteten är låg, förfina texten i fältbeskrivningen i Airtable, eftersom den direkt styr AI-prompten för Derive Field Value och Derive Single Field.

Steg 6: verifiera stödjande noder och grupperade integrationer

Det här arbetsflödet använder flera Airtable-, HTTP- och Set-noder – verifiera nyckelkonfigurationer på den kritiska vägen och gruppera liknande noder för snabbare granskning.

  1. Bekräfta att alla Airtable-noder (Fetch Table Schema, Retrieve Table Records, Fetch Single Row, Modify Row Record, Modify Record Fields, Fetch Schema Setup) delar samma airtableTokenApi-inloggningsuppgifter.
  2. Granska HTTP-noder som används för Airtable-webhooks och filhämtningar (Retrieve Webhook Payload, Create Records Webhook, Create Fields Webhook, Fetch File Content, Retrieve File Content) för att säkerställa att URL:er använder de angivna uttrycken.
  3. Bekräfta att Set-noderna (Define Airtable Settings, Assemble Row Output, Compile Field Output, Append Row ID, Locate Input Field) behåller sina dynamiska uttryck intakta.

Steg 7: testa och aktivera ert arbetsflöde

Kör setup, trigga en testhändelse och aktivera sedan webhooken för produktion.

  1. Klicka på Execute WorkflowManual Run Trigger för att skapa Airtable-webhooks och verifiera att anropen till Create Records Webhook och Create Fields Webhook lyckas.
  2. Skicka en test-webhook från Airtable (uppdatera en post eller ett fält) och bekräfta att körningen passerar genom Interpret Event Data och Event Category Router.
  3. För en raduppdatering kontrollerar ni att Retrieve File Content och Parse File Content B slutförs och att Modify Record Fields uppdaterar Airtable-posten med extraherade värden.
  4. För en fältuppdatering verifierar ni att Retrieve Table RecordsParse File ContentModify Row Record uppdaterar varje rad med det härledda fältvärdet.
  5. När allt är verifierat ställer ni arbetsflödet till Active för att bearbeta Airtable-webhook-händelser i produktion.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Felsökningstips

  • Airtable-autentisering kan gå ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera först scopes för Airtables personal access token och åtkomsten till basen.
  • Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
  • Standardprompts i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera utdata för alltid.

Snabba svar

Hur lång tid tar det att sätta upp den här automatiseringen för CV-tolkning?

Cirka en timme om din Airtable-bas redan är uppsatt.

Krävs kodning för den här automatiseringen för CV-tolkning?

Nej. Du kopplar ihop Airtable och OpenAI och klistrar sedan in några Airtable-ID:n för webhook-uppsättningen.

Är n8n gratis att använda för det här arbetsflödet för automatiserad CV-tolkning?

Ja. n8n har ett gratisalternativ för self-hosting 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 OpenAI API, vilket vanligtvis är några cent per CV beroende på längd.

Var kan jag hosta n8n för att köra den här automatiseringen?

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änsade körningar men kräver grundläggande serverhantering.

Kan jag anpassa det här arbetsflödet för automatiserad CV-tolkning för andra användningsfall?

Ja, och det är hela poängen med mönstret för dynamiska prompts. Du uppdaterar fältbeskrivningarna i Airtable (logiken ”Extract Prompt Fields” läser dem), och sedan följer OpenAI-extraktionsstegen (”Derive Field Value” / ”Derive Single Field”) de instruktionerna automatiskt. Vanliga anpassningar är att extrahera portföljlänkar, lägga till en uppskattning av ”senioritet” eller byta indata från en PDF-fil till ren text som klistras in i posten.

Varför misslyckas min Airtable-anslutning i det här arbetsflödet?

Oftast handlar det om behörigheter. Säkerställ att din Airtable-token har åtkomst till basen och inkluderar rätt scopes (schema och records), och bekräfta sedan att base-/table-ID:n matchar det arbetsflödet förväntar sig. Om webhooken skapades under ett annat konto kan du behöva återskapa Airtable-webhooks så att händelser faktiskt triggas. Kontrollera också Airtables rate limits om du uppdaterar många poster samtidigt.

Vilken volym kan det här arbetsflödet för automatiserad CV-tolkning hantera?

Med n8n Cloud Starter brukar du kunna hantera några tusen körningar per månad, och med self-hosting försvinner körningsbegränsningar (din server blir begränsningen). I praktiken bearbetar det här arbetsflödet CV:n en post i taget och begränsas främst av PDF-tolkning och OpenAI:s svarstid, så det är bäst att köra det kontinuerligt i stället för att batcha hundratals på en gång. Om du väntar dig hög volym, lägg till throttling och en kö så att Airtable-uppdateringar inte staplas på hög.

Är den här automatiseringen för CV-tolkning bättre än att använda Zapier eller Make?

Ofta, ja. Upplägget med dynamiska prompts bygger på att läsa Airtable-schemat och köra rikare logik (som ”fyll bara saknade fält”), och n8n hanterar vanligtvis den typen av förgrening mer naturligt. Du får också möjligheten att self-hosta, vilket spelar roll när varje CV triggar flera steg och kostnader lätt smyger upp. Zapier eller Make kan fortfarande fungera om du vill ha ett väldigt enkelt ”PDF in, fält ut”-flöde och inte planerar att vidareutveckla ditt schema. Om du är osäker, prata med en automationsexpert och mappa det mot din volym.

När detta väl rullar slutar CV:n vara en hög med PDF:er och blir tillförlitlig Airtable-data. Sätt upp det en gång, finjustera dina fältbeskrivningar löpande och kom tillbaka till faktiska rekryteringsbeslut.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Launch login modal Launch register modal