Din innehållsplan ser bra ut … tills det är dags att faktiskt producera utkasten. Ämnena ligger utspridda, researchen bor i 12 webbläsarflikar och det “slutliga” Google-dokumentet blir på något sätt fem versioner som heter “final-final-2”.
Det är här automationen Sheets OpenAI drafts hjälper. Marknadschefer som försöker hålla en jämn publiceringstakt märker det först, men content leads och små team som levererar sidor åt kunder fastnar i samma flaskhals. Du behöver jämn output utan att lägga in ännu ett möte.
Det här arbetsflödet gör en enkel rad i Google Sheets till ett researchat, strukturerat utkastpaket (plus bildhantering) och sparar det prydligt för publicering. Du får se vad det gör, vad du behöver och var team oftast går snett.
Så fungerar den här automationen
Se hur detta löser problemet:
n8n Workflow Template: Google Sheets + OpenAI: utkast redo att publicera
flowchart LR
subgraph sg0["Sheets Row Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Cross-Channel Content Builder", pos: "b", h: 48 }
n1@{ icon: "mdi:wrench", form: "rounded", label: "Content Strategy Thinker", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", 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/supabase.svg' width='40' height='40' /></div><br/>Supabase Content Saver"]
n5["<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/code.svg' width='40' height='40' /></div><br/>Text Cleanup Script"]
n6@{ icon: "mdi:cog", form: "rounded", label: "Run Error Workflow (Configur..", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Drive Image Fetcher", pos: "b", h: 48 }
n8["<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/nextcloud.svg' width='40' height='40' /></div><br/>NextCloud Image Upload"]
n9["<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/nextcloud.svg' width='40' height='40' /></div><br/>NextCloud Share Link Maker"]
n10@{ icon: "mdi:play-circle", form: "rounded", label: "Sheets Row Trigger", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Tavily Insight Fetcher", pos: "b", h: 48 }
n3 -.-> n0
n5 --> n7
n10 --> n11
n11 --> n0
n2 -.-> n0
n8 --> n9
n1 -.-> n0
n7 --> n8
n9 --> n4
n0 --> 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 n10 trigger
class n0,n2 ai
class n3 aiModel
class n1 ai
class n5 code
classDef customIcon fill:none,stroke:none
class n4,n5,n8,n9 customIcon
Utmaningen: att förvandla ämnen till publicerbara utkast (konsekvent)
De flesta team har inte brist på idéer. De fastnar i det stökiga mellanläget: research, disposition, skrivande, städa upp formatering, hålla reda på rätt bild och få allt till en plats där granskare faktiskt hittar det. Det är inte svårt, men det avbryts hela tiden. Du växlar verktyg, tappar kontext och dubbelkollar samma detaljer för att du inte litar på att “senaste” versionen verkligen är den senaste. Och så frågar någon: “Hur ligger vi till med den posten?” och du lägger 10 minuter bara på att svara.
Det bygger snabbt på. Här är var det brukar fallera i verkligheten.
- Research görs om eftersom den sparas som länkar i Slack, inte kopplas till utkastet.
- Utkast kommer tillbaka och behöver strukturella ändringar (inte bara språkjusteringar), vilket saktar ner granskningar och frustrerar alla.
- Bilder är den tysta tidsboven: ladda ner från Drive, döpa om, ladda upp igen och försöka skapa delbara länkar.
- Utan en gemensam lagringskälla som en databas blir “content ops” ett minnestest för människor.
Lösningen: en Google Sheets → research → utkast-pipeline som sparar allt
Den här automationen bevakar ett Google Sheet efter nya ämnen och gör grovjobbet åt dig. När en ny rad dyker upp kör den Tavily-research för att hämta in några relevanta källor, matar in kontexten i en OpenAI-driven innehållsagent och genererar strukturerad text avsedd för olika användningsfall (till exempel en webbsideversion, ett blogginlägg och en landningssideversion). Därefter städar den upp texten så att du slipper ta bort konstiga formateringsartefakter. Om din rad innehåller en bild-URL från Google Drive laddar den ner bilden, laddar upp den till Nextcloud och skapar en offentlig delningslänk så att ditt utkast kan referera till en stabil bild-URL. Slutligen sparar den hela innehållspaketet i Supabase, så att hämtning blir enkel och konsekvent.
Arbetsflödet startar med en trigger från en rad i Sheets. Tavily levererar färsk research-kontext, OpenAI producerar utkasten och flödet hanterar bildöverlämningen från Google Drive till Nextcloud. Supabase blir “hemmabasen” där utkast och bild-URL:er ligger tillsammans, redo för publicering eller granskning.
Vad som förändras: före vs. efter
| Detta tar bort | Effekt du märker |
|---|---|
|
|
Effekt i verkligheten
Säg att du publicerar 5 innehållsdelar i veckan och att varje del behöver research, ett utkast, städning och bildhantering. Manuellt blir det kanske 30 minuter research, ungefär en timmes skrivande och ytterligare 20 minuter med bild och länkar, alltså runt 2 timmar per del. Med det här flödet lägger du in en ämnesrad i Google Sheets (cirka 2 minuter) och väntar sedan på generering och filhantering (ofta omkring 10–20 minuter i bakgrunden). Du granskar och justerar fortfarande, men du lägger inte längre förmiddagen på rutinjobb.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra ämnen och bild-URL:er.
- OpenAI API för att generera utkast (åtkomst till GPT-4).
- Tavily API-nyckel (hämta den i din Tavily-dashboard).
- Google Drive för att lagra och hämta bilder.
- Nextcloud för att hosta bilder och skapa offentliga URL:er.
- Supabase för att spara utkast och metadata i en tabell.
Kunskapsnivå: Medel. Du skriver ingen mjukvara, men du kopplar API:er, sätter behörigheter och mappar fält noggrant.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så flödar arbetsflödet
Ett nytt ämne landar i Google Sheets. Flödet övervakar ditt ark efter nya rader som innehåller en TITLE och (valfritt) en IMAGE_URL.
Research hämtas in automatiskt. Tavily söker på webben efter några relevanta källor om ämnet, så utkastet inte bygger på magkänsla eller föråldrade anteckningar.
OpenAI genererar strukturerade utkast. Innehållsagenten tar fram text för flera kanaler (till exempel: webbversion, bloggversion, landningssideversion), och sedan tar ett städsteg bort spretig formatering så att det läser som om en människa skrivit det.
Bilden hanteras end-to-end. Om du angav en Drive-länk laddar flödet ner bilden från Google Drive, laddar upp den till Nextcloud och skapar en offentlig delnings-URL som du tryggt kan använda i publiceringsverktyg.
Allt sparas tillsammans för återanvändning. Det färdiga innehållspaketet (inklusive Nextcloud-bildens URL och kategori) sparas i Supabase, vilket gör att dina utkast blir sökbara och konsekventa.
Du kan enkelt justera researchdjupet och innehållsformaten så att de matchar din redaktionella process. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera Google Sheets-triggern
Ställ in arbetsflödets startpunkt så att nya rader i ert kalkylark startar innehållspipelinen.
- Välj Sheets Row Trigger och anslut den till ert kalkylark.
- Inloggningsuppgifter krävs: Anslut era
googleSheetsTriggerOAuth2Api-inloggningsuppgifter. - Ställ in Document till
[YOUR_ID]och Sheet tillgid=0(Sheet1). - Ställ in Poll Times till
everyMinuteför att ofta kontrollera om det finns nya rader.
Steg 2: Koppla Google Sheets till research-insikter
Använd kalkylarkets titelkolumn för att hämta research-kontekst innan AI-innehållet skapas.
- Öppna Tavily Insight Fetcher och ställ in Query till
={{ $json.TITLE }}. - Ställ in Topic till
general, Max Results till3och Search Depth tilladvanced. - Inloggningsuppgifter krävs: Anslut era
tavilyApi-inloggningsuppgifter. - Verifiera att körflödet fortsätter från Sheets Row Trigger → Tavily Insight Fetcher → Cross-Channel Content Builder.
Steg 3: Sätt upp AI-innehållsgenerering
Konfigurera AI-agenten, dess modell och strukturerad parsning för att generera innehåll för webbplats, blogg och landningssida.
- Öppna Cross-Channel Content Builder och bekräfta att Text använder prompten med flera ämnen med uttryck som
{{ $json.results[0].title }}och{{ $json.results[0].content }}. - Säkerställ att Cross-Channel Content Builder har Has Output Parser aktiverat.
- Öppna OpenAI Chat Model och ställ in modellen till
gpt-4.1-mini. - Inloggningsuppgifter krävs: Anslut era
openAiApi-inloggningsuppgifter i OpenAI Chat Model. - Bekräfta att Structured Output Parser är ansluten som output parser för Cross-Channel Content Builder med det befintliga JSON-schemaexemplet.
- Bekräfta att Content Strategy Thinker är ansluten som ett AI-verktyg för Cross-Channel Content Builder.
Steg 4: Rensa AI-utdata och hämta bilder
Normalisera AI-svaret och hämta bildresursen från Google Drive.
- I Text Cleanup Script behåller ni den medföljande JavaScript-koden som rensar fälten
title,Articleochcategory. - Verifiera att körflödet fortsätter från Cross-Channel Content Builder → Text Cleanup Script → Drive Image Fetcher.
- Öppna Drive Image Fetcher och ställ in Operation till
download. - Ställ in File ID till
={{ $('Sheets Row Trigger').item.json.IMAGE_URL }}. - Inloggningsuppgifter krävs: Anslut era
googleDriveOAuth2Api-inloggningsuppgifter.
IMAGE_URL innehåller en giltig delningslänk från Google Drive eller ett fil-ID, annars kommer Drive Image Fetcher att misslyckas.Steg 5: Konfigurera bilduppladdning och delning
Ladda upp bilden till NextCloud och skapa en delbar länk för lagring.
- Öppna NextCloud Image Upload och ställ in Path till
=/images/{{ $('Sheets Row Trigger').item.json.TITLE }}.jpg. - Aktivera Binary Data Upload i NextCloud Image Upload.
- Inloggningsuppgifter krävs: Anslut era
nextCloudApi-inloggningsuppgifter i NextCloud Image Upload. - I NextCloud Share Link Maker ställer ni in Operation till
share, Share Type till3och Path till=/images/{{ $('Sheets Row Trigger').item.json.TITLE }}.jpg. - Inloggningsuppgifter krävs: Anslut era
nextCloudApi-inloggningsuppgifter i NextCloud Share Link Maker.
Steg 6: Konfigurera lagring av innehåll i Supabase
Spara det rensade innehållet och bildens URL i er Supabase-tabell.
- Öppna Supabase Content Saver och ställ in Table till
works. - Mappa fält i Fields enligt följande: title →
={{ $('Text Cleanup Script').item.json.title }}, content →={{ $('Text Cleanup Script').item.json.article }}, image_url →={{ $json.url }}/preview, category →={{ $('Text Cleanup Script').item.json.category }}. - Inloggningsuppgifter krävs: Anslut era
supabaseApi-inloggningsuppgifter.
Steg 7: Lägg till felhantering
AI-agenten är konfigurerad att fortsätta vid fel och kan skicka misslyckanden till ett sekundärt arbetsflöde.
- Öppna Cross-Channel Content Builder och bekräfta att den skickar felutdata till Run Error Workflow (Configure Required).
- I Run Error Workflow (Configure Required) ställer ni in Workflow till ett giltigt arbetsflödes-ID så att fel hanteras korrekt.
Steg 8: Testa och aktivera ert arbetsflöde
Verifiera hela flödet innan ni slår på det i produktion.
- Lägg manuellt till en ny rad i arket som används av Sheets Row Trigger med
TITLEochIMAGE_URLifyllda. - Kör arbetsflödet en gång och bekräfta körvägen: Sheets Row Trigger → Tavily Insight Fetcher → Cross-Channel Content Builder → Text Cleanup Script → Drive Image Fetcher → NextCloud Image Upload → NextCloud Share Link Maker → Supabase Content Saver.
- Kontrollera att Supabase Content Saver skapar en ny rad i
worksmed fälten title, content, image_url och category ifyllda. - Klicka på Activate i arbetsflödet för att aktivera kontinuerlig bearbetning.
Se upp med
- Google Sheets- och Google Drive-inloggningar kan löpa ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera credential-status i n8n och bekräfta först att arket är delat med rätt Google-konto.
- Om du använder Wait-noder eller extern rendering varierar processtider. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du redigera utdata för alltid.
Vanliga frågor
Räkna med cirka 1–2 timmar när dina konton och nycklar är klara.
Ja, men du vill ha en “ops-inriktad” person som hanterar inloggningar och behörigheter. När allt är kopplat är det lika enkelt att använda som att lägga till rader i ett Google Sheet.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna in kostnader för OpenAI- och Tavily-API.
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 hanterar n8n bra. Egen hosting ger obegränsat antal körningar men kräver grundläggande serveradministration.
Börja i instruktionerna till innehållsagenten (delen “Cross-Channel Content Builder”) och ändra ton, struktur och obligatoriska sektioner så att det matchar ditt varumärke. Om du inte behöver bildhantering kan du ta bort Google Drive-hämtaren och stegen för uppladdning/delning i Nextcloud och ändå spara utkastet i Supabase. Vill du ha ett annat researchbeteende? Justera Tavily-noden för att ändra sökdjup och hur många källor den returnerar. Du kan också utöka Supabase-fälten för att lagra extra metadata som författare, funnel-steg eller målsökord.
Oftast handlar det om behörigheter. Se till att kalkylarket är delat med samma Google-identitet som används i dina n8n-credentials, och dubbelkolla sedan kalkylarks-ID:t i trigger-noden. Om det fortfarande misslyckas kan ditt OAuth-samtycke eller scopes vara ofullständiga, eller så har credentialn i n8n helt enkelt löpt ut och behöver anslutas igen.
Om du kör egen hosting finns ingen körningsgräns från n8n i sig (din server och API-gränser blir flaskhalsen). I praktiken kör många team dussintals utkast per dag utan problem, så länge rate limits i OpenAI/Tavily och skrivningar till Supabase är korrekt konfigurerade.
Ofta, ja. Det här flödet bygger på mer avancerad logik (research + strukturerad AI-output + textstädning + filhantering + databaslagring), och n8n är helt enkelt bekvämare när ett flöde har flera grenar och “om det här, så det där”-regler. Egen hosting är också viktigt om du vill skala och inte vill att varje extra uppgift ska kosta mer. Zapier eller Make kan fortfarande passa bra för väldigt små, tvåstegsautomationer, eller när teamet vägrar att drifta något själva, helt enkelt. Om du är osäker, prata med en automationsexpert och matcha det mot din volym och granskningsprocess.
När detta väl rullar blir ditt kalkylark en produktionskö, inte en önskelista. Flödet tar hand om de repetitiva delarna så att du kan lägga tiden på beslut som faktiskt driver resultat.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.