Du har produktidéer. Du har ett kalkylark. Och ändå fastnar du med att jaga briefs, skrapa “inspo”, skriva om prompts och vänta på ändringar bara för att få fram en enda annons som går att testa.
Det här är det performance marketers klagar på privat. E-handelsgrundare känner det när lanseringar stannar av. Och byråteam blir pressade när kunder vill ha “fem fler vinklar till i morgon.” Den här Sora 2-automationen gör en enkel rad i Google Sheets till en färdig 10-sekunders UGC-inspirerad porträttvideo som du faktiskt kan testa.
Du får se hur arbetsflödet researchar produkten, bygger en starkare prompt, genererar videon via Kie.ai Sora 2 och skriver tillbaka resultatet till ditt kalkylark så att inget tappas bort.
Så fungerar den här automationen
Här är hela arbetsflödet som du kommer att sätta upp:
n8n Workflow Template: Google Sheets + Sora 2: UGC-annonser redo att testa
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Error Message", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n7@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n8@{ icon: "mdi:web", form: "rounded", label: "Tavily", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Append or update row in sheet", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Create Video"]
n11["<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/>Grab Video"]
n1 --> n11
n3 --> n2
n3 --> n4
n3 --> n1
n8 -.-> n5
n5 --> n10
n11 --> n3
n2 --> n9
n10 --> n1
n7 -.-> n5
n6 --> n5
n0 --> n6
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 n5 ai
class n7 aiModel
class n3 decision
class n6,n9 database
class n8,n10,n11 api
classDef customIcon fill:none,stroke:none
class n10,n11 customIcon
Varför det här spelar roll: UGC-annonstestning blir en flaskhals
Testning av kortformatannonser låter enkelt tills du gör det i volym. Varje “snabb” creative behöver research (vilka vinklar trendar), en användbar prompt (inte ett luddigt stycke text) och ett konsekvent sätt att spara output så att du kan jämföra vinnare senare. Manuellt blir de stegen utspridda över flikar, DM:s och halvfärdiga dokument. Kontexten försvinner snabbt. Sedan kommer den verkliga kostnaden: färre iterationer, långsammare lärande och återanvända idéer eftersom det är enklare än att börja om från noll igen. Det är ärligt talat så kampanjer blir stagnerade.
Friktionen byggs på. Här är var det oftast faller isär.
- Research blir inkonsekvent eftersom någon “gissar” vinklar i stället för att kolla vad som faktiskt trendar.
- Prompts skrivs om om och om igen, vilket bränner en timme du tänkte lägga på teststrategi.
- Videooutput hamnar på slumpmässiga ställen, så du kan inte se vilken prompt som gav vilket resultat en vecka senare.
- När du försöker skala sjunker kvaliteten eftersom du förlitar dig på copy-paste i stället för ett repeterbart system.
Det du bygger: Google Sheets till Sora 2-generering av videoannonser
Det här arbetsflödet gör ditt Google Sheet till en lättviktig creative-pipeline. Du lägger in ett produktnamn, en grov idé (eller vinkel) och en bildlänk och kör sedan automationen. n8n hämtar en obehandlad rad, researchar produktkategorin och relaterade trender med Tavily Search och skickar insikterna till en OpenAI-driven “prompt builder”-agent som skriver en modern videoprompt i rätt format för Sora 2. Den prompten, plus din produktbild, skickas till Kie.ai:s Sora 2 image-to-video-endpoint för att generera en 10-sekunders porträttvideo. Arbetsflödet kontrollerar sedan status i en loop tills den är klar och uppdaterar till sist samma rad med den färdiga videolänken och en enkel markering “Processed = Yes”.
Arbetsflödet startar med en manuell körning, så att du behåller kontrollen under test. I mitten gör det grovjobbet: trendresearch, prompt engineering och övervakning av genereringen. På slutet blir ditt kalkylark källan till sanningen, med output-länken kopplad till originalinputen.
Det du bygger
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du vill testa 5 nya vinklar för en produkt den här veckan. Manuellt kanske du lägger cirka 20 minuter per vinkel på snabb research + promptjusteringar + organisering av länkar, vilket blir ungefär 2 timmar innan en enda video ens är genererad. Med det här arbetsflödet fyller du i 5 rader i Google Sheets på cirka 10 minuter och kör sedan varje rad när du är redo. Videorna tar fortfarande tid att generera, men ditt hands-on-arbete blir “skicka in och granska”, inte “bygga allt från grunden”.
Innan du börjar
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger funkar bra)
- Google Sheets för att spara produktinput och output.
- Tavily Search API för att researcha trender och kontext.
- OpenAI API-nyckel (hämta den från sidan för API-nycklar i din OpenAI-dashboard).
- Kie.ai Sora 2 API för att generera 10-sekunders porträttvideon.
Svårighetsgrad: Nybörjare. Du kopplar konton, klistrar in API-nycklar och ändrar ett Google Sheet-ID samt några nodfält.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Du triggar det manuellt från n8n. Det här arbetsflödet är byggt för kontrollerad generering, så du kör det när du vill bearbeta en produktpost (eller när du testar inställningar).
Google Sheets levererar nästa rad att jobba med. n8n läser ditt ark, hittar en rad som inte har bearbetats ännu och hämtar fälten du bryr dig om (produktnamn, prompt/idén och bildlänken).
AI gör “grov idé” till en användbar Sora 2-prompt. Agenten använder Tavily-sökresultat för att lägga till realistiska detaljer (scen, ton, ljussättning, kamerarörelse och känsla) och formaterar sedan allt så att videogeneratorn har färre chanser att missförstå dig.
Kie.ai genererar 10-sekunders porträttvideon, sedan kontrollerar n8n tills den är klar. En kort väntan sker mellan statuskontrollerna, och arbetsflödet routar success-, pending- eller error-lägen så att du kan köra om utan att behöva passa processen.
Slutlänken går tillbaka in i Google Sheets. Samma rad uppdateras med videolänken (utan vattenstämpel) och “Processed = Yes”, vilket gör ditt ark till en enkel creative-tracker.
Du kan enkelt ändra promptstilen så att den matchar din tonalitet och ditt varumärke efter 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 så att ni kan testa hela videopipelinen från början till slut innan ni automatiserar den.
- Lägg till och öppna Manual Start Trigger.
- Lämna alla inställningar som standard (inga parametrar krävs).
Steg 2: anslut Google Sheets
Dessa noder läser en enskild obehandlad rad och skriver senare tillbaka den genererade videolänken till samma kalkylark.
- Öppna Retrieve Sheet Row och ställ in Document till
[YOUR_ID]och Sheet tillSheet1. - Under Filters behåller ni Lookup Column som
Processedoch aktiverar Return First Match. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Retrieve Sheet Row.
- Öppna Update Sheet Record och bekräfta att Operation är
appendOrUpdate, Document är[YOUR_ID]och Sheet ärSheet1. - I Update Sheet Record ställer ni in kolumnmappningar till: Prompt
={{ $('Retrieve Sheet Row').item.json.Prompt }}, ProcessedYesoch Video Link={{ $json.video_link }}, med Matching Columns inställt påPrompt. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Update Sheet Record.
- Öppna Prompt Builder Agent och ställ in Text till
=Here is the prompt: {{ $json.Prompt }}. - Behåll Prompt Type som
defineoch behåll det befintliga systemmeddelandet som vägleder prompt engineering. - Öppna OpenAI Chat Engine och ställ in Model till
gpt-4.1-mini. - Inloggningsuppgifter krävs: Anslut era openAiApi-inloggningsuppgifter i OpenAI Chat Engine, som är ansluten som språkmodell för Prompt Builder Agent.
- Öppna Tavily Search Tool och bekräfta att URL är
https://api.tavily.com/search, Method ärPOSToch att JSON Body innehåller sökuttrycket{{ "What is " + $json["Product Name"] + " used for and what emotions or settings fit its video marketing?" }}. - Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter för Tavily Search Tool (det här verktyget körs under Prompt Builder Agent).
- Öppna Generate Video Request och bekräfta att URL är
https://api.kie.ai/api/v1/jobs/createTaskmed Method inställd påPOST. - Ställ in JSON Body så att den använder
"model": "sora-2-image-to-video"och"prompt": "{{ $json.output.replace(/\r?\n|\r/g, ' ').replace(/"/g, '\\"') }}". - Säkerställ att image_urls använder det Drive-säkra uttrycket:
{{ $('Retrieve Sheet Row').item.json['Image Link'].match(/\/d\/(.*?)\//) ? 'https://drive.google.com/uc?export=download&id=' + $('Retrieve Sheet Row').item.json['Image Link'].match(/\/d\/(.*?)\//)[1] : $('Retrieve Sheet Row').item.json['Image Link'] }}. - Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter i Generate Video Request.
- Öppna Delay Pause och ställ in Amount till
15(sekunder). - Öppna Fetch Video Status och ställ in URL till
https://api.kie.ai/api/v1/jobs/recordInfo, med Query Parameter taskId inställd på={{ $json.data.taskId }}. - Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter i Fetch Video Status.
- Öppna Status Router och bekräfta att regeln Success kontrollerar att
={{ $json.data.state }}är lika medsuccess. - Bekräfta att regeln Error kontrollerar att
={{ $json.code }}är lika med500och att fallback-utdata ärextra. - I Map Output Fields ställer ni in video_link till
={{ JSON.parse($json.data.resultJson).resultUrls[0] }}. - Säkerställ att körflödet fortsätter som: Fetch Video Status → Status Router → Map Output Fields → Update Sheet Record.
- Observera att Status Router också skickar utdata till Compose Error Notice vid fel och till Delay Pause för att kontrollera status igen.
- Klicka på Execute Workflow och följ hur items flödar från Manual Start Trigger till Retrieve Sheet Row och vidare in i Prompt Builder Agent.
- Bekräfta att Generate Video Request returnerar en
taskIdoch att Fetch Video Status till slut returnerarsuccess. - Verifiera att Update Sheet Record skriver Video Link och sätter Processed till
Yesi ert Google-kalkylark. - När resultaten är korrekta, växla arbetsflödet till Active för användning i produktion.
Steg 3: konfigurera Prompt Builder Agent
Det här steget bygger en rik videoprompt med hjälp av OpenAI och Tavily som webb-sökverktyg.
Steg 4: konfigurera förfrågningar för videogenerering
Dessa noder skickar videoförfrågan till Kie.ai, väntar och kontrollerar sedan jobbstatusen.
Steg 5: konfigurera routning och uppdateringar i kalkylarket
Statusroutern avgör om videons URL ska mappas, om den ska försöka igen efter en paus eller om ett felmeddelande ska skickas.
{{ $('Grab Ffff').item.json.msg }}, men ingen nod Grab Ffff finns i det här arbetsflödet. Uppdatera uttrycket eller ta bort denna nod för att undvika fel vid körning.Steg 6: testa och aktivera ert arbetsflöde
Kör ett manuellt test för att verifiera videoförfrågan, statuspollning och uppdateringsloopen i kalkylarket.
Felsökningstips
- Google Sheets-autentisering kan gå ut eller kräva specifika behörigheter. Om det börjar strula, kontrollera först det kopplade Google-kontot och statusen för n8n-credentialn.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompts i AI-noder är generiska. Lägg in din varumärkeston tidigt, annars kommer du redigera output för alltid.
Snabba svar
Cirka 30 minuter om dina API:er är redo.
Nej. Du klistrar mest in API-nycklar, kopplar Google Sheets och justerar några fält i n8n.
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 med OpenAI API-användning samt Tavily- och Kie.ai-genereringskostnader, som beror på hur många annonser du skapar.
Två alternativ: n8n Cloud (hanterat, enklast att sätta upp) 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 serveradministration.
Ja, och det bör du. De flesta börjar med att ändra Prompt Builder Agentens systemmeddelande så att output matchar varumärkets tonalitet och annonsstruktur. Du kan också byta Tavily-söklogiken för att fokusera på konkurrenter, fördelar eller invändningar. Om du vill ha längre eller kortare creatives justerar du genereringsrequesten som skickas i HTTP-noden “Generate Video Request” (så länge din Kie.ai-plan stödjer det).
Oftast handlar det om en OAuth-anslutning som gått ut eller fel Google-konto. Återanslut Google Sheets-credentialn i n8n och bekräfta sedan att kalkylarket är delat med det kontot. Kontrollera också att arkets kolumner matchar vad arbetsflödet förväntar sig (inklusive fälten “Processed” och “Video Link”), eftersom saknade kolumner kan se ut som ett auth-problem.
Det är designat för att bearbeta en rad per körning, men du kan köra det upprepat eller anpassa det för att loopa igenom rader. På n8n Cloud är din praktiska gräns din månatliga körningskvot, medan self-hosting främst beror på din server. Det verkliga taket är oftast Kie.ai:s genereringskapacitet och API-gränser, inte Google Sheets.
Ofta, ja, eftersom det här arbetsflödet har förgreningslogik (success/pending/error), loopande statuskontroller och ett AI-agentsteg som är enklare att styra i n8n. Zapier och Make kan göra delar av det, men komplexa retries och prompt engineering i flera steg blir snabbt rörigt. n8n ger dig också en self-hosting-väg, vilket spelar roll när du börjar generera många creatives. Nackdelen är att du lägger lite mer tid på att sätta upp det första gången. Om du vill ha en second opinion, prata med en automationsexpert.
När det här väl rullar blir ditt kalkylark en creative-motor i stället för en dumpningsplats. Sätt upp det, generera konsekvent och lägg tiden på testbeslut – inte på admin.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.