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

YouTube + Google Sheets: sökbara transkriptinsikter

Rickard Andersson Partner, Nodenordic.se

Du känner igen känslan: du svär på att en kreatör sa något användbart i en video, men för att hitta det måste du skrolla i tidslinjen, titta om på avsnitt och öppna tio flikar.

Den här automatiseringen för transkriptsökning slår hårdast mot marknadsförare som gör konkurrensanalys. Men byråägare som bygger kundinsikter och operatörer som försöker fånga “vad vi lärde oss” från webbinarier sitter i samma röra. Du förvandlar utspridda YouTube-transkriptioner till ett sökbart bibliotek som du kan fråga ut på sekunder.

Du får lära dig vad arbetsflödet gör, vad du behöver för att köra det och hur du ska tänka när du anpassar det för dina egna kanallistor och researchfrågor.

Så fungerar automatiseringen

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

n8n Workflow Template: YouTube + Google Sheets: sökbara transkriptinsikter

Varför det här spelar roll: hitta svar i långa videor

Video är där de bästa detaljerna om “hur de faktiskt gör” finns, men det är också där kunskap försvinner. Du tar anteckningar i ett dokument, sparar länkar i Slack, kanske lägger några tidsstämplar i ett kalkylark, och sen… ingenting är sökbart. En vecka senare är du tillbaka och tittar om på en 60-minutersintervju bara för att hitta en prissättningstaktik eller en verktygsrekommendation. Multiplicera det med en handfull kanaler och plötsligt blir research ett heltidsjobb, inte en stödprocess.

Det eskalerar snabbt. Här är var det faller isär.

  • Du tittar om på samma videor eftersom dina anteckningar saknar tillräcklig kontext för att du ska lita på dem.
  • Tidsstämplar försvinner i chattar och dokument, så att dela “exakt den delen” blir ett jobb i sig.
  • Manuell hantering av transkriptioner blir inkonsekvent, vilket gör att ditt “bibliotek” i praktiken bara är en hög filer.
  • När mängden research ökar sjunker kvaliteten eftersom ingen hinner hålla jämna steg.

Vad du bygger: en YouTube-sökmotor för transkriptioner som du styr själv

Det här arbetsflödet samlar in YouTube-transkriptioner, delar upp dem i mindre sökbara segment och lagrar dem i en vektordatabas (Qdrant) så att du kan “ställa frågor” och få tillbaka relevanta klipp. Det börjar med att hämta nya videor från en kanal, hämta undertexter via HTTP-förfrågningar (med Apify som källa för skrapningen) och dela upp långa transkriptioner i lagom stora avsnitt som är enklare att matcha senare. Varje segment taggas med metadata (videotitel, en videonyckel och andra referenser), sedan skapar OpenAI embeddings och Qdrant lagrar dem för återhämtning. När du söker levererar en webhook ett enkelt webbgränssnitt och en API-endpoint, genererar en query-embedding, kör en grupperad sökning i Qdrant för bredare täckning och använder sedan en LLM för att formulera ett lättläst svar med citerade avsnitt som du kan klicka på och dela.

Arbetsflödet börjar med inläsning (schemalagd eller manuell) för att hålla ditt transkriptbibliotek uppdaterat. Sedan indexerar det transkriptioner i Qdrant med OpenAI-embeddings. Till sist returnerar sökendpointen grupperade resultat plus ett svar du kan skumma och skicka till en kollega utan lång förklaring.

Det här bygger du

Förväntade resultat

Säg att du granskar 10 researchvideor i veckan och att varje video är cirka 45 minuter. Om du tittar om ens 15 minuter per video för att hitta ett citat blir det ungefär 2,5 timmar i veckan bara på “var var den där delen?” Med det här arbetsflödet lägger du vanligtvis en minut på att skriva en fråga i webbgränssnittet, skummar citerade avsnitt och öppnar den exakta träffen. Säg 15 minuter totalt för 10 sökningar. Det är ett par timmar tillbaka varje vecka, utan att tumma på kvaliteten.

Innan du börjar

  • n8n-instans (testa n8n Cloud gratis)
  • Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
  • Apify för skrapning av YouTube-kanaler och undertexter.
  • Qdrant för att lagra vektorer för transkriptsökning.
  • OpenAI API-nyckel (hämta den i OpenAI Dashboard)

Svårighetsnivå: Medel. Du kopplar mest in autentisering och klistrar in några endpoints, men du bör vara bekväm med att testa webhooks och läsa körloggar.

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

Steg för steg

Nya videor triggar inläsning. En schemalagd trigger kontrollerar de senaste YouTube-videorna, tar bort dubbletter och batchar det som är nytt så att du bara indexerar en gång.

Transkriptioner samlas in och struktureras. Arbetsflödet hämtar undertexter via HTTP-förfrågningar, segmenterar och normaliserar sedan texten så att varje del får en konsekvent struktur och metadata.

OpenAI skapar embeddings och Qdrant lagrar dem. Textsegmenten skickas genom ett embedding-steg och skrivs sedan till Qdrant som vektorer så att likhetssökning fungerar stabilt i stor skala.

En webhook levererar sök och svar. Du skriver en fråga i webbgränssnittets endpoint, arbetsflödet skapar embedding för frågan, söker i Qdrant med grupperad sökning och AI-kedjan formulerar ett svar med relevanta citerade avsnitt.

Du kan enkelt ändra kanalkällan för att indexera en annan kreatör, eller justera segmentstorleken för att styra hur “granulära” dina källhänvisningar blir. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementering

Steg 1: konfigurera triggertypen

Det här arbetsflödet använder flera ingångspunkter för att hämta in videor och leverera ett sökgränssnitt/UI och API, så ni måste konfigurera varje trigger.

  1. Öppna Manual Launch Trigger för att bekräfta att den är aktiverad för indexeringstester vid behov.
  2. Öppna Scheduled Run Trigger och verifiera att schemaregeln är inställd på att köra varje vecka på dag 6 och timme 6.
  3. Öppna Web UI Hook och ställ in Path till n8n_videos/ med Response Mode inställt på responseNode.
  4. Öppna Search API Endpoint och ställ in Path till n8n_videos/api/search med Response Mode inställt på responseNode.
Tips: Håll både Web UI Hook och Search API Endpoint aktiva så att webbsidan kan anropa API-endpointen utan CORS-problem.

Steg 2: anslut YouTube-transkript och videokällor

Dessa noder hämtar videometadata och undertexter från Apify för indexering och sökning.

  1. Öppna Fetch Latest YouTube Videos och ställ in URL till https://api.apify.com/v2/acts/streamers~youtube-channel-scraper/run-sync-get-dataset-items.
  2. Ställ in JSON Body i Fetch Latest YouTube Videos till den angivna payloaden och bekräfta att startUrls innehåller https://www.youtube.com/@n8n-io.
  3. Credential Required: Anslut era httpHeaderAuth-credentials i Fetch Latest YouTube Videos.
  4. Öppna Fetch Video Captions och ställ in URL till https://api.apify.com/v2/acts/streamers~youtube-channel-scraper/run-sync-get-dataset-items med JSON Body som innehåller downloadSubtitles inställt på true.
  5. Credential Required: Anslut era httpHeaderAuth-credentials i Fetch Video Captions.
⚠️ Vanlig fallgrop: Om Apify inte returnerar några undertexter, verifiera att subtitlesLanguage är en och att mål-videon har undertexter aktiverade.

Steg 3: konfigurera chunkning av transkript och vektorlager

Den här delen delar upp undertexter, bygger dokument och lägger in vektorer i Qdrant för snabb sökning.

  1. I Segment Captions, ställ in vtt-tilldelningen till {{ Array( Math.ceil($json.subtitles[0].vtt.length/30_000) ).fill(0) .map((_,idx) => $json.subtitles[0].vtt.substr(idx*30_000,(idx * 30_000) + 30_000)) }} för att dela långa undertexter i 30k-chunkar.
  2. I Split Caption Chunks, ställ in Field to Split Out till vtt, och säkerställ sedan att Iterate Chunks är ansluten för batchbearbetning.
  3. I Text Chunker, ställ in Chunk Size till 3000 för chunkar som passar embeddings.
  4. I Standard Data Loader, ställ in JSON Data till {{ $json.vtt.replaceAll('\n\n', '\n') }} och behåll metadatafälten mappade från Video Reference.
  5. Öppna Qdrant Vector Storage och ställ in Mode till insert med samlingen n8n_videos.
  6. Credential Required: Anslut era qdrantApi-credentials i Qdrant Vector Storage.
  7. Credential Required: Anslut era openAiApi-credentials i Embedding Generator. Detta är en AI-embedding-subnod som matar Qdrant Vector Storage.
Tips: Flödet använder Delay Node med Amount 1 för att strypa chunk-bearbetning och undvika rate limits.

Steg 4: konfigurera sökning, rate limiting och query-embeddings

Dessa noder hanterar användarfrågor, tillämpar rate limits och bygger embeddings för vektorsökning.

  1. I Increment Rate Counter, ställ in Key till =n8n_videos_session_{{ $json.headers['x-forwarded-for'] }} och behåll Operation inställt på incr.
  2. Credential Required: Anslut era redis-credentials i Increment Rate Counter.
  3. I Validate Rate Limit, behåll jämförelsen med Left Value som {{ Object.values($json)[0] }} och Right Value som 11 för att tillåta upp till 10 sökningar.
  4. I Retrieve Query, ställ in JSON Output till det angivna uttrycket som sanerar q och validerar type.
  5. I Fetch Embedding Vectors, ställ in URL till https://api.openai.com/v1/embeddings och Body Parameters så att de inkluderar input {{ $json.query }} och model text-embedding-3-small.
  6. Credential Required: Anslut era openAiApi-credentials i Fetch Embedding Vectors.
  7. I Qdrant Group Search, ställ in URL till http://qdrant:6333/collections/n8n_videos/points/search/groups och säkerställ att group_by är metadata.videoId.
  8. Credential Required: Anslut era qdrantApi-credentials i Qdrant Group Search.
⚠️ Vanlig fallgrop: Body i Qdrant Group Search använder uttryck (t.ex. {{ $json.data[0].embedding }}). Säkerställ att input från Fetch Embedding Vectors är kopplad korrekt.

Steg 5: konfigurera AI-bearbetning och sammanställning av resultat

Dessa noder extraherar relevanta transkriptutdrag, normaliserar output och genererar ett kortfattat AI-svar.

  1. I Extract Relevant Results, behåll parametern Text inställd på XML-mallen som bäddar in transkriptträffar och {{ $('Retrieve Query').first().json.query }}.
  2. Säkerställ att OpenAI Chat Model A är ansluten som språkmodell för Extract Relevant Results. Credential Required: Anslut era openAiApi-credentials i OpenAI Chat Model A.
  3. I Normalize Output, behåll fältmappningarna för title, url, extract, timestamp och video_ts med de angivna uttrycken.
  4. I Sort by Video Key, ställ in Field Name till videoId för gruppering per video.
  5. I Build Results Template, behåll malluttrycket för results som genererar HTML-listobjekt grupperade efter videoId.
  6. I Compose Answer, säkerställ att Text är inställt på {{ $json.results }} ... och att promptmeddelandet ber om en sammanfattning på 1–2 meningar.
  7. Säkerställ att OpenAI Chat Model B är ansluten som språkmodell för Compose Answer. Credential Required: Anslut era openAiApi-credentials i OpenAI Chat Model B.
Tips: Arbetsflödet använder flera set- och respondToWebhook-noder för att sätta ihop svar. Håll dessa grupperade som verktyg för outputformatering i stället för att redigera varje nod individuellt, om ni inte behöver anpassad HTML.

Steg 6: konfigurera rendering av webb-UI och API-svar

Den här delen bygger webbgränssnittet, hanterar svar och formaterar HTML som returneras till UI:t.

  1. I Generate Web UI, behåll den fullständiga HTML-mallen och bekräfta att formuläret använder hx-get="/webhook/n8n_videos/api/search" och hx-target="#results".
  2. I Render Web Page, ställ in Response Body till {{ $json.html }} och säkerställ att Content-Type är text/html.
  3. I Markdown to HTML, ställ in Mode till markdownToHtml och Markdown till {{ $json.text }}.
  4. I Map Response Fields, mappa text till {{ $json.data }} och results till {{ $('Build Results Template').first().json.results }}.
  5. I Return API Response, behåll Respond With som text och Response Body inställd på
    ...
    .
  6. Bekräfta att fallback-noderna Create Empty Reply, Return Empty Reply, Create Empty Group Reply och Return Group Empty Reply är anslutna för fall utan resultat.
⚠️ Vanlig fallgrop: Om webb-UI:t visar resultat utan svarssammanfattningen, bekräfta att Compose AnswerMarkdown to HTMLMap Response Fields är kopplade korrekt.

Steg 7: konfigurera körning av underarbetsflöde för videobearbetning

Indexeringsflödet förlitar sig på ett underarbetsflöde för att bearbeta varje videoobjekt i batcher.

  1. Öppna Run Sub-Workflow (Configure Required) och välj målflödet i Workflow ID.
  2. Behåll Mode inställt på each och ha Wait for Sub-Workflow aktiverat.
  3. Säkerställ att Subflow Trigger är startpunkten i underarbetsflödet och skickar data vidare till Video Reference.
⚠️ Vanlig fallgrop: Om indexeringen inte gör något alls har noden Run Sub-Workflow (Configure Required) sannolikt inget arbetsflöde valt.

Steg 8: testa och aktivera ert arbetsflöde

Validera både indexeringspipen och sök-UI/API innan ni går live.

  1. Klicka på Execute Workflow från Manual Launch Trigger för att indexera de senaste videorna och bekräfta att vektorer skrivs i Qdrant Vector Storage.
  2. Öppna test-URL:en för Web UI Hook och skicka in en fråga; ni ska se resultat och en AI-sammanfattning från Return API Response.
  3. Testa API:t direkt genom att anropa /webhook/n8n_videos/api/search?q=your+query och bekräfta att Return API Response returnerar HTML med resultat.
  4. När allt fungerar, aktivera arbetsflödet för att slå på Scheduled Run Trigger för löpande indexering.
🔒

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

Få den kompletta implementeringsguiden + nedladdningsbar mall

Felsökningstips

  • OpenAI-autentisering kan löpa ut eller blockeras av faktureringsgränser. Om svar plötsligt slutar fungera, kontrollera först din OpenAI API-nyckel och dina användningsgränser i OpenAI Dashboard.
  • Om du använder Wait-noder eller extern skrapning varierar processtiderna. Öka väntetiden om efterföljande steg träffar Qdrant innan vektorerna hunnit skrivas.
  • Apify-actors och Qdrant-collections behöver rätt behörigheter. När inläsningen kör men sökningen inte ger något, bekräfta att Apify faktiskt returnerade undertexter och att ditt Qdrant-collectionsnamn matchar det arbetsflödet skriver till.

Snabba svar

Hur lång tid tar det att sätta upp den här automatiseringen för transkriptsökning?

Räkna med cirka 45 minuter om dina Apify-, Qdrant- och OpenAI-konton är klara.

Krävs det kodning för den här automatiseringen för transkriptsökning?

Nej. Du kopplar tjänster, klistrar in några värden (som collectionsnamn) och testar webhook-endpoints.

Är n8n gratis att använda för det här arbetsflödet för transkriptsökning?

Ja. n8n har ett gratis alternativ för egen drift 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 med OpenAI API-kostnader (ofta några dollar i månaden vid lätt researchanvändning) samt Qdrant-hosting om du inte kör det lokalt.

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 egen drift på en VPS. För egen drift är Hostinger VPS prisvärt och hanterar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serverhantering.

Kan jag modifiera det här arbetsflödet för transkriptsökning för olika användningsfall?

Ja, och det bör du förmodligen. De flesta byter ut begäran “Fetch Latest YouTube Videos” så att den pekar på en annan kanal och justerar sedan segmentstorlekar i text-splittern så att källhänvisningarna matchar hur de vill läsa. Du kan också ersätta Qdrants grupperade sökning med en enklare vektorsökning om din vektorstore inte stödjer gruppering. Om du vill ha output i ett kalkylark, mappa fälten i “Normalize Output” till Google Sheets i stället för att bara returnera webhook-svaret.

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

Oftast är det URL:en, API-nyckeln eller att collectionsnamnet inte matchar mellan skrivning och läsning. Dubbelkolla Qdrant-endpointen (cloud vs lokalt) och bekräfta sedan att arbetsflödet skriver vektorer innan du testar sökning. Om inläsningen fungerar men sökningen misslyckas, titta på HTTP Request-noden för gruppsökningen och kontrollera att headers och autentisering skickas. Rate limits kan också se ut som “slumpmässiga fel” när du frågar för snabbt.

Vilken volym kan det här arbetsflödet för transkriptsökning hantera?

Om du kör egen drift finns ingen körningsbegränsning, så det beror främst på din server och hur snabbt Apify och Qdrant svarar.

Är den här automatiseringen för transkriptsökning bättre än att använda Zapier eller Make?

Ofta, ja, eftersom den här typen av arbetsflöde behöver batchning, förgrening och mönster som “lagra och sedan fråga”, vilket blir klumpigt (och dyrt) i enklare automationsverktyg. n8n fungerar också bättre med LangChain-liknande steg som segmentering, embeddings och anpassad retrieval, vilket är kärnan i transkriptsökning. Zapier eller Make kan fortfarande hjälpa i kanterna, till exempel att skicka highlights till ett CRM eller avisera en kanal när nya videor indexeras. Om du är osäker, definiera utfallet först: vill du ha ett sökbart bibliotek eller bara en engångsexport av en transkription? Prata med en automationsexpert så får du en rak rekommendation.

När detta väl rullar slutar din research att leva i webbläsarhistoriken. Du ställer bättre frågor, hittar svar snabbare och återanvänder faktiskt det du lär dig.

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

Launch login modal Launch register modal