Din innehållsplan ser bra ut på papper. Sedan börjar researchen. Flikar överallt, halvfärdiga dispositioner, ”People Also Ask”-frågor kopierade till slumpmässiga dokument, och den ursprungliga ämneslistan i Google Sheets blir i tysthet inaktuell.
Det här är den typ av röra som drabbar marknadschefer först, men byråägare och solokonsulter känner av det också. Med SerpAPI blog automation förvandlar du en enkel ämneslista till utkast som är redo att redigeras, utan att köra samma research-loop om och om igen för varje inlägg.
Det här arbetsflödet hämtar verkliga sökfrågor, slår ihop insikterna och låter GPT-4 skriva ett första utkast. Du granskar, justerar och publicerar enligt din tidsplan.
Så fungerar automatiseringen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Google Sheets + SerpAPI: bloggutkast redo
flowchart LR
subgraph sg0["Google Sheets Flow"]
direction LR
n0["<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/merge.svg' width='40' height='40' /></div><br/>Merge"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger", pos: "b", h: 48 }
n3["<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/>All of the Information"]
n4@{ icon: "mdi:database", form: "rounded", label: "Read Rows", pos: "b", h: 48 }
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/>Only Reads Empty Status"]
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/code.svg' width='40' height='40' /></div><br/>Broad Words"]
n7["<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/>PAA (SerpAPI)"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Autocomplete"]
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/code.svg' width='40' height='40' /></div><br/>Format PAA (SerpAPI)"]
n10@{ icon: "mdi:robot", form: "rounded", label: "Generate Blog Post", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "GPT-4", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Update 'Done' Status", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Export", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "Use Wait Node for Large Batc..", pos: "b", h: 48 }
n11 -.-> n10
n0 --> n3
n13 --> n1
n4 --> n5
n6 --> n8
n8 --> n0
n7 --> n9
n1 --> n10
n10 --> n12
n9 --> n0
n12 --> n13
n2 --> n4
n3 --> n1
n5 --> n14
n14 --> n6
n14 --> n7
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 n2 trigger
class n10 ai
class n11 aiModel
class n4,n13 database
class n7,n8 api
class n3,n5,n6,n9 code
classDef customIcon fill:none,stroke:none
class n0,n3,n5,n6,n7,n8,n9 customIcon
Problemet: SEO-research blir en tidstjuv
Att skriva utkastet är sällan den långsamma delen. Det är ”förarbetet” som i tysthet äter upp kalendern: hitta relaterade fraser, förstå vad folk faktiskt frågar, och försöka bygga en struktur som inte faller isär i redigeringen. Gör du det en gång är det hanterbart. Gör du det för tio ämnen blir det en veckoskatt. Och eftersom researchen är utspridd över webbläsarflikar, anteckningar och halvt uppdaterade kalkylark, slutar det med att du upprepar samma arbete nästa gång du tar upp ämnet.
Friktionen byggs på. Här är var det faller isär.
- Du lägger cirka 45 minuter per inlägg bara på att samla ”People Also Ask”-frågor och autocomplete-fraser, och sedan strukturera dem så att de går att använda.
- Ämneslistor i Google Sheets förblir inte korrekta när utkast bor någon annanstans, så ”vad som är klart” blir ett gissningsspel.
- Skribenter jobbar utifrån inkonsekventa underlag, vilket ger fler omskrivningar och svagare on-page-struktur.
- Manuell copy-paste bjuder in små missar, som fel sökfraser eller att viktiga frågor saknas, och de missarna syns senare som tunt innehåll.
Lösningen: ämnen från Google Sheets in, utkast tillbaka
Det här arbetsflödet börjar med det du redan har: ett Google Sheet fullt av bloggidéer. Det kontrollerar varje rad och bearbetar bara de som inte är markerade som ”done”, så att du inte råkar generera samma inlägg igen. För varje ämne hämtar det verkliga sökinsikter från två håll: Google Autocomplete plus ”People Also Ask”-data (via SerpAPI och en kompletterande SEO-API-endpoint). Insikterna normaliseras och slås ihop till ett strukturerat paket med fraser och frågor. Sedan använder GPT-4 paketet som kontext för att skriva ett helt blogginlägg som faktiskt går att redigera. Till sist skrivs utkastet tillbaka till samma Google Sheet, precis bredvid det ursprungliga ämnet.
Arbetsflödet startar när ditt Google Sheet ändras (eller när du kör det manuellt). Därefter hämtar det autocomplete-förslag och PAA-frågor, kombinerar dem och matar den slutliga kontexten in i AI-skrivsteget. När utkastet är genererat uppdaterar det raden så att arket blir din single source of truth igen.
Det här får du: automatisering vs. resultat
| Det här automatiserar arbetsflödet | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du skriver 8 inlägg i månaden. Manuellt kanske du lägger cirka 45 minuter på att samla autocomplete-fraser och PAA-frågor, och sedan ytterligare 45 minuter på att göra det till en användbar disposition och ett grovt utkast — totalt ungefär 12 timmar i månaden innan redigeringen ens börjar. Med det här arbetsflödet lägger du in 8 ämnen i Google Sheets, kör det en gång och låter det generera utkast medan du gör något annat. Även om du lägger 10 minuter per inlägg på att granska och justera promptresultaten, är det ändå ungefär en hel arbetsdag tillbaka varje månad.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra ämnen, status och utkast.
- SerpAPI för att hämta People Also Ask-frågor.
- OpenAI API-nyckel (hämta den i din OpenAI-dashboard).
Kunskapsnivå: Medel. Du kopplar konton, klistrar in API-nycklar och justerar en prompt, men du bygger ingen app.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En uppdatering i kalkylarket (eller en manuell körning) startar. Google Sheets-triggern upptäcker nya eller ändrade rader, och sedan hämtar arbetsflödet hela raden med data för att kunna avgöra vad som behöver göras.
Rader filtreras så att du bara bearbetar det som är pågående. Ett enkelt logiksteg kontrollerar kolumnen ”Status” och skickar bara ämnen som inte är klara vidare till batch-hanteringen. Mindre duplicering. Färre oavsiktliga överskrivningar.
Signaler för sökintention samlas in och struktureras. Ett HTTP-anrop hämtar PAA-frågor via SerpAPI, medan ett annat anropar autocomplete/PAA-endpointen (arbetsflödet använder ett hostat API). Resultaten normaliseras och slås ihop så att din AI-prompt får felfria, förutsägbara fält i stället för rörig rå-JSON.
GPT-4 skriver utkastet och arket uppdateras. AI-agenten genererar bloggutkastet, arbetsflödet sätter utdatafälten, och Google Sheets-uppdateringen skriver tillbaka utkastet i kolumnen ”Blog Draft” för just den raden.
Du kan enkelt ändra ”Status”-logiken så att allt bearbetas, eller byta trigger till ett schema för veckovisa produktionskörningar. Se den fullständiga implementationsguiden nedan för anpassningsmöjligheter.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera triggern för kalkylbladsrad
Ställ in arbetsflödet så att det startar när en ny rad läggs till i ert Google Sheet.
- Lägg till och öppna Spreadsheet Row Trigger.
- Ställ in Event på
rowAdded. - Välj ert Document och Sheet i listfälten.
- Credential Required: Anslut era googleSheetsTriggerOAuth2Api-inloggningsuppgifter.
Steg 2: Anslut Google Sheets och hämta väntande poster
Hämta alla rader och filtrera fram endast de utan status så att arbetsflödet behandlar nya idéer.
- Öppna Fetch Sheet Rows och välj samma Document och Sheet.
- Credential Required: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Fetch Sheet Rows.
- Öppna Filter Pending Entries och bekräfta att koden behåller rader med tom Status.
- Verifiera flödet Spreadsheet Row Trigger → Fetch Sheet Rows → Filter Pending Entries.
Steg 3: Sätt upp ämnesberikning och parallella API-anrop
Ta fram korta ämnen och hämta relaterad autocomplete- och ”People Also Ask”-data från två källor parallellt.
- Öppna Batch Delay Gate (wait-nod) för att styra batch-takten vid behov.
- Bekräfta att Batch Delay Gate skickar output till både Derive Topic Phrases och PAA Search Request parallellt.
- I Derive Topic Phrases behåller ni koden som skapar
topicfrån de tre sista orden i Blog Inspiration. - I Autocomplete API Request ställer ni in URL till
https://seo-api2.onrender.com/get-seo-data, Method tillPOSToch body-parametern topic till{{ $json.topic }}. - I PAA Search Request ställer ni in URL till
https://serpapi.com/searchoch query-parametern q till{{ $('Filter Pending Entries').item.json['Blog Inspiration'] }}. - Lägg in er SerpAPI-nyckel i PAA Search Request query-parametern api_key (för närvarande tom).
- Behåll flödet PAA Search Request → Normalize PAA Results → Combine Data Streams och Autocomplete API Request → Combine Data Streams.
Steg 4: Sätt samman kontext och generera bloggutkastet
Slå ihop autocomplete- och PAA-resultat och generera sedan ett bloggutkast med AI-agenten.
- I Combine Data Streams behåller ni båda ingångarna anslutna från Autocomplete API Request och Normalize PAA Results.
- Öppna Assemble Context Data och behåll koden som normaliserar ämnen och slår ihop arrayerna för autocomplete + PAA.
- Bekräfta att Assemble Context Data skickar output till Iterate Through Entries för att bearbeta varje rad.
- Öppna Compose Blog Draft och behåll prompttexten som börjar med
Write a blog post based on the following topic:, inklusive variablerna{{ $json.topic }},{{ $json.autocomplete }}och{{ $json.paa }}. - Säkerställ att OpenAI Chat Model är ansluten som språkmodell för Compose Blog Draft.
- Credential Required: Anslut era openAiApi-inloggningsuppgifter i OpenAI Chat Model.
- I OpenAI Chat Model bekräftar ni att Model är satt till
gpt-4o.
Steg 5: Konfigurera output-mappning och uppdatera kalkylbladet
Skriv tillbaka det genererade utkastet till sheetet och markera raden som klar.
- Öppna Set Output Fields och bekräfta följande tilldelningar:
- Ställ in Blog Draft till
{{ $json.output }}. - Ställ in Blog Inspiration till
{{ $('Iterate Through Entries').item.json.topic }}. - Ställ in Status till
done. - Öppna Update Spreadsheet Row och ställ in Operation till
update. - Välj samma Document och Sheet som användes tidigare.
- Credential Required: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Update Spreadsheet Row.
Steg 6: Testa och aktivera ert arbetsflöde
Validera hela flödet från ny rad till färdigt bloggutkast.
- Lägg till en ny rad med Blog Inspiration ifyllt och tom Status.
- Kör arbetsflödet manuellt från Spreadsheet Row Trigger för att testa hela flödet.
- Bekräfta att utkastet visas i kolumnen Blog Draft och att Status blir
done. - Kontrollera att Compose Blog Draft genererade en narrativ text på 500 ord med angiven ton och CTA.
- Slå på arbetsflödet genom att växla Active till enabled för användning i produktion.
Vanliga fallgropar
- Google Sheets-inloggning kan gå ut eller tappa åtkomst om kalkylarket flyttas. Om uppdateringar slutar skrivas tillbaka, kontrollera Google-anslutningen i n8n och bekräfta filbehörigheterna i Google Drive.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera utdata i all evighet.
Vanliga frågor
Cirka 30 minuter om du redan har dina konton och API-nycklar.
Nej. Du kopplar Google Sheets, klistrar in API-nycklar och justerar en prompt.
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å räkna in användning av SerpAPI och OpenAI (ofta bara några dollar när du skriver utkast till en handfull inlägg).
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 serveradministration.
Ja, och det bör du. Uppdatera prompten i AI-steget ”Compose Blog Draft” så att den matchar din tonalitet, din målgrupp och dina formateringspreferenser (som H2/H3-struktur, CTA-stil eller läsnivå). Du kan också justera logiken i ”Filter Pending Entries” för att köra om äldre rader när du vill uppdatera innehåll, och justera steget ”Set Output Fields” om du vill ha extra kolumner som titelvarianter, metabeskrivningar eller FAQ-förslag.
Oftast beror det på en utgången Google-auktorisering eller att behörigheterna för kalkylarket har ändrats. Anslut Google Sheets igen i n8n och bekräfta sedan att exakt samma fil och worksheet fortfarande finns och är delad med det anslutna Google-kontot. Om det fallerar vid uppdatering, dubbelkolla radidentifierarna som skickas in i steget ”Update Spreadsheet Row”, eftersom fel ID:n kan se ut som fel av typen ”rad saknas”.
Dussintals per körning för de flesta små team, och fler om du finjusterar batchning och begränsningar.
Ofta ja, om du bryr dig om kontroll. Det här arbetsflödet drar nytta av batchning, att slå ihop dataströmmar och mer flexibel logik utan att betala extra per gren. n8n ger dig också en realistisk self-host-väg om du börjar generera många utkast. Zapier eller Make kan gå snabbare för väldigt enkla flöden med ”en indata, en utdata”, men blir snabbt klumpiga när du behöver strukturera och kombinera researchdata. Om du tvekar, prata med en automationsexpert så får du ett rakt svar för din setup.
När researchen och första utkastet är automatiserade slutar publicering kännas som panikinsatser. Sätt upp det, håll arket organiserat och lägg tiden på det som faktiskt kräver en mänsklig redaktör.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.