Du börjar med konkurrentanalysen med goda intentioner. Sedan blir det en rörig mix av flikar, halvt kopierade video-URL:er och ett kalkylark som ingen litar på.
YouTube Sheets logging slår hårdast mot content strategists först. Men marknadsansvariga som bygger dashboards och solokonsulter som gör revisioner känner samma friktion. Du vill ha en korrekt formaterad lista med videor per kanal, inte ännu en fil som “vi städar upp senare”.
Det här arbetsflödet hämtar videor från valfri YouTube-kanal och skriver in dem snyggt i Google Sheets, med ett enkelt statussystem så att du alltid vet vad som körde, vad som misslyckades och vad som kräver åtgärd.
Så fungerar den här automatiseringen
Se hur den här löser problemet:
n8n Workflow Template: YouTube till Google Sheets, logga konkurrentvideor
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If - Check Success Response", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Google Sheets - Update Data", pos: "b", h: 48 }
n3@{ icon: "mdi:database", form: "rounded", label: "Google Sheets - Update Data ..", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>HTTP Request - Get Channel ID"]
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Fields - Set Channel Username", pos: "b", h: 48 }
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/>HTTP Request - Get Channel V.."]
n7@{ icon: "mdi:database", form: "rounded", label: "Google Sheets - Get Channel ..", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Google Sheets - Update Data ..", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out - Videos", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch - Detect Channel ID o..", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Fields - Set Channel ID 1", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Fields - Set Channel ID 2", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop", pos: "b", h: 48 }
n14 --> n10
n14 --> n13
n13 --> n14
n9 --> n2
n11 --> n6
n12 --> n6
n1 --> n9
n1 --> n8
n1 --> n3
n5 --> n4
n4 --> n12
n7 --> n14
n6 --> n1
n0 --> n7
n10 --> n11
n10 --> n5
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 n1,n10 decision
class n2,n3,n7,n8 database
class n4,n6 api
classDef customIcon fill:none,stroke:none
class n4,n6 customIcon
Utmaningen: konkurrenters videoresearch blir en kalkylarks-mardröm
Att följa konkurrentkanaler låter enkelt tills du gör det varje vecka. Du öppnar en kanal, scrollar, kopierar en länk, klistrar in den någonstans och inser sedan att du missade publiceringsdatumet eller tog fel titel. Multiplicera det med en handfull kanaler och plötsligt har du bränt en eftermiddag på admin i stället för att lära dig vad som fungerar. Än värre: inkonsekvent formatering saboterar sortering och filtrering, vilket gör att ditt “research-kalkylark” blir en hög anteckningar som inte kan driva en dashboard, en rapport eller ett strategisamtal.
Det eskalerar snabbt. Här är var det oftast faller isär.
- Du slösar cirka 10 minuter per kanal bara på att samla in grunderna, och det är innan du städar något.
- Videotitlar och URL:er blir inkonsekventa, så dubbletter smyger in och dina siffror blir opålitliga.
- Någon glömmer att registrera miniatyrbilder eller publiceringsdatum, vilket gör snabbskanning och färskhetsanalys irriterande.
- Det finns ingen tydlig “klar/fel”-indikator, så du dubbelkollar kanaler som du redan har bearbetat.
Lösningen: hämta kanalvideor automatiskt till ett strukturerat Google Sheet
Det här n8n-arbetsflödet gör din YouTube-konkurrentlista till strukturerad data som du faktiskt kan använda. Du behåller en enkel flik “Channel URLs” i Google Sheets med kanallänkar (fullständiga URL:er, anpassade URL:er eller råa kanal-ID:n) och en statuskolumn. När du kör arbetsflödet läser det bara rader markerade “Ready”, avgör vilken typ av input varje rad är och konverterar URL:er till korrekt kanal-ID vid behov. Sedan anropar det YouTube API:t, hämtar de senaste publika videorna (10 som standard) och skriver varje video som en egen korrekt formaterad rad i fliken “Videos” med titel, länk, beskrivning, miniatyrbild-URL, publiceringsdatum med mera. Om något misslyckas markeras kanalraden som “Error” så att du inte tappar bort vad som hände.
Arbetsflödet startar med en manuell körning i n8n, så du behåller kontrollen. I mitten normaliserar det kanalinputs, pausar kort mellan batcher och validerar API-svaret så att felaktiga anrop inte förstör ditt ark. Till sist upsertar det videoposter i Google Sheets och markerar varje kanal som Finished eller Error.
Vad som förändras: före vs. efter
| Det här elimineras | Effekten du märker |
|---|---|
|
|
Praktisk effekt i verkligheten
Säg att du följer 12 konkurrentkanaler och loggar de senaste 10 videorna för varje. Gör du det manuellt kan du lägga cirka 10 minuter per kanal på att samla titlar, länkar, datum och miniatyrbilder, alltså runt 2 timmar. Med det här arbetsflödet klistrar du in kanallistan en gång, sätter dem till “Ready” och kör; hands-on-tiden blir närmare 10 minuter, sedan väntar du på att API-anropen och arkuppdateringarna blir klara. Det är en rejäl mängd tid tillbaka varje vecka, och din data blir mer korrekt formaterad.
Krav
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra kanaler och videorader.
- YouTube Data API för att hämta kanalvideor via HTTP Request.
- Google Cloud-inloggningsuppgifter (skapa i Google Cloud Console för åtkomst till Sheets + YouTube API)
Kunskapsnivå: Medel. Du kopplar Google-inloggning och bekräftar att flikar/kolumner i arket matchar mallen.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet i arbetsflödet
Manuell körning från n8n. Du klickar på Execute (eller Test), vilket är smidigt när du vill uppdatera research enligt din egen plan.
Kanallistan hämtas från Google Sheets. Arbetsflödet läser fliken “Channel URLs” och bearbetar bara rader markerade “Ready”, så du kan köa arbete utan att röra automatiseringen.
Inputs normaliseras innan några YouTube-anrop. Ett routing-steg kontrollerar om du angav ett rått kanal-ID eller en URL. Om det är en anpassad eller full URL extraherar det handtaget och anropar YouTube API:t för att slå upp korrekt kanal-ID.
Videor hämtas, valideras och skrivs sedan korrekt formaterat. Svaret från YouTube API:t kontrolleras för lyckat resultat, delas upp i enskilda videoobjekt och upsertas till fliken “Videos”. Den ursprungliga kanalraden uppdateras till Finished, eller flaggas som Error för snabb uppföljning.
Du kan enkelt ändra standardgränsen “10 videor per kanal” för att hämta fler (eller färre) 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
Det här arbetsflödet startar manuellt och hämtar sedan kanallistan för bearbetning.
- Lägg till noden Manual Run Starter som trigger.
- Koppla Manual Run Starter till Fetch Channel List.
Steg 2: Anslut Google Sheets
Dessa noder läser kanalindata och skriver tillbaka resultaten till ert kalkylark.
- Öppna Fetch Channel List och ställ in Document till
[YOUR_ID]och Sheet tillChannel Urls. - Ställ in filtret i Fetch Channel List till Status =
ready. - Öppna Upsert Video Records och ställ in Document till
[YOUR_ID]och Sheet tillVideos. - Bekräfta att Upsert Video Records använder Operation =
appendOrUpdatemed Matching Columns =video_url. - Öppna Mark Channel Success och Mark Channel Error och ställ in Document till
[YOUR_ID]och Sheet tillChannel Urls. - Credential Required: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Fetch Channel List, Upsert Video Records, Mark Channel Success och Mark Channel Error.
Steg 3: Sätt upp kanalparsning och routning
Det här steget standardiserar kanalindata och routar dem baserat på ID- eller handle-format.
- Koppla Fetch Channel List till Batch Iterator, och sedan till Route Channel Input.
- I Route Channel Input behåller ni de fem regex-reglerna för
{{$json.channel_url}}för att routa kanal-URL:er, ID:n och handles. - Konfigurera Assign Channel ID A med channel_id =
{{ $json.channel_url.match(/UC[\w-]{22}/)?.[0] || '' }}. - Konfigurera Extract Channel Handle med channel_username =
{{ $json.channel_url.replace(/^https?:\/\/(www\.)?youtube\.com\/@/, '').replace(/^@/, '') || '' }}. - Säkerställ att Route Channel Input skickar utdata till Assign Channel ID A eller Extract Channel Handle beroende på matchningen.
@channel och fullständiga URL:er; behåll dem som de är om inte ert indataformat ändras.Steg 4: Konfigurera YouTube API-anrop
Dessa noder hämtar kanal-ID:n (vid behov) och hämtar nyliga videor.
- I API Request Channel ID ställer ni in URL till
https://www.googleapis.com/youtube/v3/channelsoch behåller forHandle ={{ $json.channel_username }}. - Ställ in Assign Channel ID B med channel_id =
{{ $json.body.items[0].id }}. - I API Fetch Channel Videos ställer ni in URL till
https://www.googleapis.com/youtube/v3/search, channelId ={{ $json.channel_id }}och maxResults ={{ $('Fetch Channel List').item.json.limit || 10 }}. - Credential Required: Anslut era youTubeOAuth2Api-inloggningsuppgifter i API Request Channel ID och API Fetch Channel Videos.
Steg 5: Bearbeta API-resultat och uppdatera Sheets
Arbetsflödet validerar svar, skriver videorader och markerar varje kanal som klar eller felad.
- I Validate API Response behåller ni villkoret
{{ $json.body.pageInfo.totalResults }}greater than0. - Koppla API Fetch Channel Videos till Validate API Response.
- Validate API Response skickar utdata parallellt till både Split Video Items och Mark Channel Success.
- Ställ in Split Video Items Field To Split Out till
body.items, och koppla sedan den till Upsert Video Records. - Bekräfta att Mark Channel Success sätter status till
finishoch last_fetched_time till{{ $now.toISO().toString().slice(0, 19).replace('T', ' ') }}. - På felutgången från Validate API Response kopplar ni in Mark Channel Error och behåller status =
errormed row_number ={{ $('Batch Iterator').item.json.row_number }}.
row_number, säkerställ att ert Channel Urls-ark innehåller den kolumnen och att noden Fetch Channel List returnerar den.Steg 6: Lägg till loop för rate limiting
Den här loopen stryper anrop mellan batch-iterationer.
- Koppla Batch Iterator till Pause Briefly.
- Ställ in Pause Briefly Amount till
0.01. - Koppla Pause Briefly tillbaka till Batch Iterator för att fortsätta bearbeta batchar.
Steg 7: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att bekräfta att videor hämtas och skrivs korrekt innan ni aktiverar arbetsflödet.
- Klicka på Execute Workflow och följ dataflödet från Manual Run Starter via Fetch Channel List.
- Verifiera att Upsert Video Records lägger till/uppdaterar rader i arket
Videosmedvideo_url,titleochpublished_at. - Bekräfta att kanaler markeras i
Channel Urlssomfinishellererrorav Mark Channel Success och Mark Channel Error. - När ni är nöjda slår ni på arbetsflödets Active-toggle för användning i produktion.
Se upp för
- Google Sheets-inloggning kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera Google-anslutningen i n8n under Credentials och bekräfta att kontot kan redigera det aktuella kalkylarket.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om nedströmsnoder misslyckas på grund av tomma svar.
- HTTP Request-anrop till YouTube Data API kan misslyckas på grund av kvotgränser eller att API:t inte är aktiverat. Om kanaler fortsätter hamna i “Error”, kontrollera ditt Google Cloud Console-projekt för YouTube API-kvot och att API:t faktiskt är aktiverat.
Vanliga frågor
Cirka 30 minuter när dina Google-inloggningsuppgifter är klara.
Ja, men du behöver någon som är bekväm med Google Cloud-konfigurationen. Efter det är det dagliga arbetet bara att uppdatera statusen i arket till “Ready” och köra arbetsflödet.
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 volymer. Du behöver också ta hänsyn till användningen av YouTube Data API (kvotbaserad, vanligtvis gratis för lättare research).
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 obegränsade körningar men kräver grundläggande serveradministration.
Du kan höja gränsen för “videor per kanal” genom att använda värdet från kolumn C i fliken Channel URLs, så att varje kanal kan hämta olika antal. Om du vill köra det automatiskt kan du byta Manual Trigger mot en Google Sheets-trigger som bevakar nya “Ready”-rader. Du kan också utöka HTTP Request som hämtar kanalvideor för att begära extra fält, och sedan justera steget för “rensning” (Edit Fields/Set) innan du skriver till fliken Videos.
Oftast beror det på att YouTube Data API-åtkomst saknas eller är felkonfigurerad i Google Cloud Console. Säkerställ att YouTube Data API är aktiverat i samma projekt som du använde för inloggningsuppgifterna, och att din API-nyckel eller OAuth-behörigheter matchar vad HTTP Request-noderna förväntar sig. Kvotgränser kan också trigga fel om du bearbetar många kanaler samtidigt, så kontrollera kvotsidan och testa en mindre batch. Bekräfta till sist att arbetsflödet kan lösa anpassade kanal-URL:er; om ett handle har ändrats brukar det räcka att uppdatera indata-raden.
Den är byggd för att bearbeta kanaler i batcher, och de flesta små team kör utan problem dussintals kanaler per uppdatering. Standardhämtningen är 10 videor per kanal; skalar du upp blir kvoten och skrivhastigheten i arket de praktiska begränsningarna.
Ofta, ja. Det här arbetsflödet bygger på villkorsstyrd routing (URL vs kanal-ID), batchning, svarvalidering och uppdateringar för “markera lyckad/fel”, vilket är där n8n förblir flexibelt utan att bli en dyr kedja av uppgifter. Zapier eller Make kan fortfarande fungera om behoven är enkla, men blir klumpiga när du loopar genom många kanaler och skriver många rader. n8n låter dig också self-hosta, vilket spelar roll om du vill ha obegränsade körningar. Om du väljer mellan verktyg: kartlägg först volymen du förväntar dig, och sedan edge cases. Prata med en automationsexpert om du vill ha en second opinion.
När det här väl är på plats slutar konkurrentresearch att kännas som kontorsgöra. Ditt ark håller sig strukturerat, din status speglar verkligheten, och du kan lägga tiden på mönster som faktiskt spelar roll.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.