Innehållsproduktion går sönder på ett tråkigt ställe: efter idén. Du har en lista med ämnen, men att göra varje punkt till ett korrekt formaterat WordPress-utkast innebär researchflikar överallt, rörig copy-paste, saknade bilder och “vi lägger in interna länkar senare” (vilket sällan händer).
Sheets WordPress drafts-automatisering träffar Content managers först, ärligt talat. Men smärtan märks också hos SEO-ansvariga som försöker skala, och hos byråteam som behöver utkast som är konsekventa innan en kund ens ser dem. Resultatet är enkelt: färre manuella steg, snabbare granskningar och utkast som redan ser ut som något du faktiskt skulle publicera.
Det här flödet tar en rad i Google Sheets och gör om den till ett researchat, strukturerat WordPress-utkast med bilder, kategorier, taggar och backuper. Du får se vad som automatiseras, vad du får tillbaka och vad du behöver se upp med när du kör det i större volym.
Så fungerar automatiseringen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Google Sheets till WordPress, utkast redo att redigera
flowchart LR
subgraph sg0["Triggered by Parent Workflow Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Scale Chapter Image", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterate Article Items", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Pause After Merge", 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/merge.svg' width='40' height='40' /></div><br/>Combine Featured Streams"]
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/merge.svg' width='40' height='40' /></div><br/>Combine Image Paths"]
n5@{ icon: "mdi:robot", form: "rounded", label: "Parse Plan Output", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Parse Research Output", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Initial Research Agent", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Outline Planner", pos: "b", h: 48 }
n9@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Base", pos: "b", h: 48 }
n10@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Planner", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Configure Defaults", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "Update Topic Status", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "Pause For Subchapter", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Parse Subchapter Output", pos: "b", h: 48 }
n15@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat SubResearch", pos: "b", h: 48 }
n16@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat SubWrite", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "Pause Before Writing", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Subchapters", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route Deep Research", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Pause Chapter Loop", pos: "b", h: 48 }
n21@{ icon: "mdi:robot", form: "rounded", label: "Parse Chapter Output", pos: "b", h: 48 }
n22@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat MainResearch", pos: "b", h: 48 }
n23@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat ChapterWrite", pos: "b", h: 48 }
n24@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterate Chapters", pos: "b", h: 48 }
n25@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterate Subchapters", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Subchapter Output", pos: "b", h: 48 }
n27@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Final Chapters", pos: "b", h: 48 }
n28@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterate Main Chapters", pos: "b", h: 48 }
n29@{ icon: "mdi:cog", form: "rounded", label: "Pause After Research", pos: "b", h: 48 }
n30["<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/>Combine Research Streams"]
n31@{ icon: "mdi:cog", form: "rounded", label: "Pause Main Chapter", pos: "b", h: 48 }
n32@{ icon: "mdi:robot", form: "rounded", label: "Subchapter Research Agent", pos: "b", h: 48 }
n33@{ icon: "mdi:robot", form: "rounded", label: "Subchapter Writing Chain", pos: "b", h: 48 }
n34@{ icon: "mdi:robot", form: "rounded", label: "Chapter Writing Chain", pos: "b", h: 48 }
n35@{ icon: "mdi:robot", form: "rounded", label: "Main Chapter Research Agent", pos: "b", h: 48 }
n36["<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 Chapter Batches"]
n37@{ icon: "mdi:database", form: "rounded", label: "Write Final Blog Sheet", pos: "b", h: 48 }
n38@{ icon: "mdi:database", form: "rounded", label: "Update Blog Status", pos: "b", h: 48 }
n39@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Output Bundle", pos: "b", h: 48 }
n40@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Chapter Content", pos: "b", h: 48 }
n41@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Main Chapter Content", pos: "b", h: 48 }
n42@{ icon: "mdi:cog", form: "rounded", label: "Create Drive Directory", pos: "b", h: 48 }
n43@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Chapters List", pos: "b", h: 48 }
n44["<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/>Upload Chapter Images API"]
n45["<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/>Update Image Metadata"]
n46@{ icon: "mdi:cog", form: "rounded", label: "Drive Upload Chapter Images", pos: "b", h: 48 }
n47@{ icon: "mdi:cog", form: "rounded", label: "Scale Featured Image", pos: "b", h: 48 }
n48@{ icon: "mdi:cog", form: "rounded", label: "Drive Upload Featured Image", pos: "b", h: 48 }
n49@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Inputs", pos: "b", h: 48 }
n50["<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/>Fetch Post Sitemap"]
n51@{ icon: "mdi:cog", form: "rounded", label: "Parse XML File", pos: "b", h: 48 }
n52@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Link Entries", pos: "b", h: 48 }
n53@{ icon: "mdi:cog", form: "rounded", label: "Cap Internal Links", pos: "b", h: 48 }
n54@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Internal URLs", pos: "b", h: 48 }
n55@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Initial Research", pos: "b", h: 48 }
n56@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Main Chapters", pos: "b", h: 48 }
n57@{ icon: "mdi:cog", form: "rounded", label: "Compile All Chapters", pos: "b", h: 48 }
n58["<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/>Fetch Categories API"]
n59@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Category Fields", pos: "b", h: 48 }
n60@{ icon: "mdi:cog", form: "rounded", label: "Collect Categories", pos: "b", h: 48 }
n61@{ icon: "mdi:cog", form: "rounded", label: "Create Document", pos: "b", h: 48 }
n62["<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/>Assemble Article Text"]
n63@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Markdown Article", pos: "b", h: 48 }
n64["<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/markdown.dark.svg' width='40' height='40' /></div><br/>Convert Markdown HTML"]
n65@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set HTML Article", pos: "b", h: 48 }
n66@{ icon: "mdi:cog", form: "rounded", label: "Save Texts Document", pos: "b", h: 48 }
n67["<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/wordpress.svg' width='40' height='40' /></div><br/>Publish to WordPress"]
n68["<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/>Hold Featured Image"]
n69["<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/>Upload Featured Image API"]
n70["<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/>Update Featured Image Meta"]
n71["<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/>Assign Featured Image"]
n72["<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/>Set Post Excerpt"]
n73@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterate Tags", pos: "b", h: 48 }
n74@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Tag Fields", pos: "b", h: 48 }
n75@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Tag List", pos: "b", h: 48 }
n76["<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 Tag API"]
n77@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Tag Exists", pos: "b", h: 48 }
n78@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check New Tag", pos: "b", h: 48 }
n79@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map New Tag Fields", pos: "b", h: 48 }
n80@{ icon: "mdi:cog", form: "rounded", label: "Collect Tag IDs", pos: "b", h: 48 }
n81@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Final Tag List", pos: "b", h: 48 }
n82["<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 Tag Streams"]
n83@{ icon: "mdi:cog", form: "rounded", label: "Convert To File", pos: "b", h: 48 }
n84["<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/>Generate Feature Image API"]
n85@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Feature Image", pos: "b", h: 48 }
n86@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Feature Image", pos: "b", h: 48 }
n87["<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/>Generate Chapter Image API"]
n88@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Chapter Image", pos: "b", h: 48 }
n89@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Chapter Image", pos: "b", h: 48 }
n90@{ icon: "mdi:cog", form: "rounded", label: "Convert Image Data", pos: "b", h: 48 }
n91@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Empty Output", pos: "b", h: 48 }
n92@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Subchapter Fields", pos: "b", h: 48 }
n93@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Subchapter List", pos: "b", h: 48 }
n94@{ icon: "mdi:play-circle", form: "rounded", label: "Triggered by Parent Workflow", pos: "b", h: 48 }
n95@{ icon: "mdi:cog", form: "rounded", label: "Perplexity Research Tool", pos: "b", h: 48 }
n96@{ icon: "mdi:cog", form: "rounded", label: "Perplexity Main Research", pos: "b", h: 48 }
n97@{ icon: "mdi:cog", form: "rounded", label: "Perplexity Sub Research", pos: "b", h: 48 }
n98["<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/>Fetch Tags API"]
n99@{ icon: "mdi:cog", form: "rounded", label: "Pause Tag Fetch", pos: "b", h: 48 }
n100@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Global Config", pos: "b", h: 48 }
n99 --> n98
n2 --> n1
n13 --> n40
n17 --> n33
n20 --> n28
n29 --> n55
n31 --> n34
n4 --> n2
n3 --> n68
n30 --> n19
n11 --> n58
n18 --> n26
n61 --> n66
n39 --> n43
n39 --> n75
n39 --> n84
n78 --> n79
n78 --> n73
n82 --> n67
n74 --> n73
n72 --> n37
n8 --> n91
n49 --> n7
n49 --> n50
n79 --> n73
n51 --> n52
n0 --> n44
n73 --> n80
n73 --> n99
n36 --> n57
n75 --> n73
n83 --> n47
n83 --> n48
n1 --> n62
n1 --> n87
n52 --> n53
n50 --> n51
n7 --> n29
n64 --> n65
n80 --> n81
n24 --> n27
n24 --> n92
n9 -.-> n7
n67 --> n68
n66 --> n82
n34 --> n20
n91 --> n42
n91 --> n8
n10 -.-> n8
n15 -.-> n32
n16 -.-> n33
n22 -.-> n35
n23 -.-> n34
n43 --> n1
n26 --> n25
n42 --> n39
n28 --> n41
n28 --> n35
n68 --> n69
n60 --> n49
n62 --> n63
n90 --> n0
n90 --> n46
n100 --> n12
n53 --> n54
n19 --> n24
n19 --> n28
n65 --> n61
n27 --> n36
n98 --> n77
n98 --> n73
n77 --> n74
n77 --> n76
n25 --> n24
n25 --> n32
n47 --> n3
n33 --> n13
n32 --> n17
n44 --> n45
n69 --> n70
n57 --> n8
n59 --> n60
n81 --> n82
n93 --> n25
n45 --> n4
n92 --> n93
n76 --> n78
n76 --> n73
n35 --> n31
n88 --> n89
n85 --> n86
n56 --> n30
n54 --> n30
n37 --> n38
n89 --> n90
n86 --> n83
n63 --> n64
n55 --> n56
n5 -.-> n8
n14 -.-> n33
n6 -.-> n7
n21 -.-> n34
n58 --> n59
n87 --> n88
n71 --> n72
n84 --> n85
n40 --> n18
n95 -.-> n7
n41 --> n36
n96 -.-> n35
n97 -.-> n32
n46 --> n4
n48 --> n3
n12 --> n11
n70 --> n71
n94 --> n100
end
subgraph sg1["Scheduled Flow"]
direction LR
n101@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Trigger", pos: "b", h: 48 }
n102@{ icon: "mdi:database", form: "rounded", label: "Create Topics Sheet", pos: "b", h: 48 }
n105@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterate Topics", pos: "b", h: 48 }
n106@{ icon: "mdi:cog", form: "rounded", label: "Run Sub-Workflow (Configure ..", pos: "b", h: 48 }
n107@{ icon: "mdi:cog", form: "rounded", label: "Pause Topic Loop", pos: "b", h: 48 }
n107 --> n105
n105 --> n106
n101 --> n102
n102 --> n105
n106 --> n107
end
subgraph sg2["Form Submission Flow"]
direction LR
n103["<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/form.svg' width='40' height='40' /></div><br/>Form Submission Trigger"]
n104@{ icon: "mdi:database", form: "rounded", label: "Append Topic Sheet", pos: "b", h: 48 }
n103 --> n104
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 n94,n101,n103 trigger
class n5,n6,n7,n8,n14,n21,n32,n33,n34,n35 ai
class n9,n10,n15,n16,n22,n23 aiModel
class n19,n49,n77,n78,n86,n89,n91 decision
class n12,n37,n38,n102,n104 database
class n44,n45,n50,n58,n69,n70,n71,n72,n76,n84,n87,n98 api
class n62 code
classDef customIcon fill:none,stroke:none
class n3,n4,n30,n36,n44,n45,n50,n58,n62,n64,n67,n68,n69,n70,n71,n72,n76,n82,n84,n87,n98,n103 customIcon
Problemet: att förvandla ämneslistor till publicerbara utkast tar tid
En ämneslista känns som framsteg, tills du ska göra den till riktiga inlägg. Research tar längre tid än du tror eftersom du hoppar mellan Google, konkurrenters inlägg och din egen sajt för att hitta interna länkar som faktiskt passar. Sen skriver du, sen skriver du om, sen letar du bilder, sen kommer du på att du fortfarande behöver kategorier och taggar, sen skapar du ett utkast och på något sätt skapar formateringen ändå fel. Ett inlägg kan vara hanterbart. Tio inlägg i kö blir ett heltidsjobb, och kvaliteten brukar sjunka precis när du försöker “skala”.
Det växer snabbt. Och det värsta är att upprepningen stjäl energin du borde lägga på bättre vinklar, bättre hooks och bättre erbjudanden.
- Manuell research leder till ytliga inlägg eftersom du slutar när du är trött, inte när ämnet är ordentligt täckt.
- Interna länkar hoppas över eftersom det är störigt att plocka dem från en sitemap och lätt att skjuta upp.
- Utkast blir inkonsekventa mellan skribenter, vilket ger längre redaktionella genomgångar och mer fram och tillbaka.
- Tillgångar sprids över laptops och chattar, så att hitta den “slutliga” versionen senare blir en liten skattjakt.
Lösningen: Google Sheets → researchade WordPress-utkast med backuper
Det här n8n-flödet gör din Google Sheet till en kontrollpanel för innehåll. En schemaläggning (eller en enkel formulärinlämning) plockar upp rader markerade “To Do” och flyttar dem till “In Progress” så att inget processas två gånger. Därifrån hämtar det kandidater för interna länkar från din WordPress-sitemap, kör djupare onlineresearch via Perplexity och använder AI för att skapa en komplett kapitelstruktur innan skrivandet börjar. Vill du ha extra djup triggar en flagga för “deeper research” research och skrivning på underkapitelnivå, så artikeln inte bara blir lång, utan faktiskt komplett. Till sist genereras en utvald bild plus kapitelbilder, allt laddas upp till WordPress, ett utkast skapas med kategorier och taggar, och backuper sparas till Google Drive och Google Docs.
Flödet startar med en ämnesrad i Google Sheets. Därefter sker research och disposition, där interna och externa källor matas in i skrivplanen. Sedan tar WordPress emot ett korrekt formaterat utkast (bilder, taggar och kategorier inkluderade), medan Google Drive behåller en strukturerad backup av texten och bildtillgångarna.
Vad du får: automatisering vs. resultat
| Vad det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du publicerar 3 inlägg per vecka. Manuellt tar en cykel med “research + disposition + utkast + bilder + uppladdning + taggar/länkar” ofta runt 4 timmar per inlägg, alltså cirka 12 timmar i veckan. Med det här flödet lägger du in ämnen i en Google Sheet på cirka 10 minuter totalt och låter sedan automatiseringen generera utkast och tillgångar i bakgrunden (ofta runt en timmes processtid som du inte sitter och bevakar). Det är ungefär 10 timmar tillbaka varje vecka, och din redaktör börjar från ett faktiskt utkast i stället för en tom sida.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger funkar bra)
- Google Sheets för att lagra ämnen, flaggor och statusar
- WordPress som tar emot utkast via REST API
- OpenAI API-nyckel (hämta den i din OpenAI-dashboard)
- Perplexity API-nyckel (hämta den i inställningarna för ditt Perplexity-konto)
- Google Drive + Google Docs för text- och bildbackuper
Kunskapsnivå: Medel. Du kopplar några konton, lägger in API-nycklar och mappar kolumner i Google Sheet mot flödets fält.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett ämne plockas upp från Google Sheets. Triggern kan vara schemalagd eller formulärbaserad, och sedan läser n8n rader markerade “To Do” och uppdaterar status så att kön hålls ren.
Din sajtkontext och research hämtas in. Flödet hämtar din WordPress-sitemap för att samla interna URL:er, sedan hanterar Perplexity onlineresearch medan strukturerad tolkning gör utdata förutsägbar.
AI planerar och skriver artikeln med valfri fördjupad research. Det skapar kapitelstrukturen först och skriver sedan kapitelinnehåll (och underkapitel när flaggan för fördjupad research är aktiverad). Väntnoder hjälper till att undvika rate limit-fel när volymen är hög.
WordPress får ett utkast, och Drive behåller en backup. Bilder genereras och laddas upp, kategorier och taggar tilldelas och det färdiga utkastet skapas i WordPress. Parallellt sparas text och tillgångar i Google Docs och Google Drive, och slutdetaljerna loggas tillbaka till Sheets.
Du kan enkelt justera språk- och djupinställningar så att de matchar din redaktionella process. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera triggen Execute Workflow
Konfigurera de tre ingångarna så att arbetsflödet kan triggas av ett överordnat arbetsflöde, enligt schema eller via en formulärinlämning.
- Öppna Triggered by Parent Workflow och bekräfta att den är primär trigger för huvudkörningen av publiceringen.
- Öppna Scheduled Trigger och definiera det schema ni vill använda för att skapa ämnen via Create Topics Sheet.
- Öppna Form Submission Trigger och bekräfta att webhook-URL:en är sparad så att Append Topic Sheet kan samla in formulärbaserade ämnen.
- Verifiera att varje triggers utdata är kopplad till rätt första nod: Triggered by Parent Workflow → Set Global Config, Scheduled Trigger → Create Topics Sheet och Form Submission Trigger → Append Topic Sheet.
Steg 2: Anslut Google Sheets och noder för ämnesbearbetning
Koppla Google Sheets för ämnesinmatning, statusspårning och uppdateringar av slutlig bloggutdata.
- I Create Topics Sheet, anslut ert kalkylblad som ska ta emot schemalagda ämnen.
- I Append Topic Sheet, mappa formulärfält till de kolumner i ämnesarket som ni förväntar er att använda.
- I Update Topic Status, Write Final Blog Sheet och Update Blog Status, välj samma kalkylblad och ange rätt flik för statusuppdateringar.
- Säkerställ att Iterate Topics är kopplad till Run Sub-Workflow (Configure Required) och därefter tillbaka via Pause Topic Loop för att möjliggöra batchbearbetning.
- Inloggningsuppgifter krävs: Anslut era Google Sheets-inloggningsuppgifter i Create Topics Sheet, Append Topic Sheet, Update Topic Status, Write Final Blog Sheet och Update Blog Status.
Steg 3: Konfigurera uppslagning av kategorier och taggar
Det här arbetsflödet hämtar kategorier och taggar från er WordPress-webbplats och stämmer av dem mot nytt innehåll.
- I Configure Defaults, ange eventuella standardvärden som används för hantering av kategorier eller taggar (lämna standarderna om de redan är konfigurerade).
- Konfigurera Fetch Categories API för att anropa er WordPress-endpoint för kategorier, mappa sedan fält med Map Category Fields och aggregera dem med Collect Categories.
- Konfigurera Pause Tag Fetch och Fetch Tags API för att hämta befintliga taggar; låt sedan Check Tag Exists routa antingen Map Tag Fields eller Create Tag API.
- Säkerställ att flödet Split Tag List → Iterate Tags → Collect Tag IDs → Map Final Tag List går in i Merge Tag Streams.
- Inloggningsuppgifter krävs: Lägg till lämplig autentisering (Basic, OAuth eller API-nyckel) i Fetch Categories API, Fetch Tags API och Create Tag API baserat på er WordPress API-konfiguration.
Validate Inputs skickar utdata till både Initial Research Agent och Fetch Post Sitemap parallellt, så säkerställ att båda vägarna är konfigurerade innan ni fortsätter.
Steg 4: Konfigurera AI-kedjor för research och planering
Konfigurera AI-agenterna och planerarna som gör research, skapar disposition och genererar innehåll.
- I Initial Research Agent, koppla OpenAI Chat Base som språkmodell och behåll Parse Research Output ansluten som output parser.
- I Main Chapter Research Agent och Subchapter Research Agent, bekräfta att OpenAI Chat MainResearch och OpenAI Chat SubResearch är kopplade som deras språkmodeller.
- I Outline Planner, koppla OpenAI Chat Planner och behåll Parse Plan Output ansluten som output parser.
- I Chapter Writing Chain och Subchapter Writing Chain, bekräfta att OpenAI Chat ChapterWrite och OpenAI Chat SubWrite är kopplade, och att Parse Chapter Output och Parse Subchapter Output förblir anslutna som parsers.
- Inloggningsuppgifter krävs: Anslut era OpenAI-inloggningsuppgifter i OpenAI Chat Base, OpenAI Chat Planner, OpenAI Chat MainResearch, OpenAI Chat SubResearch, OpenAI Chat ChapterWrite och OpenAI Chat SubWrite.
- Inloggningsuppgifter krävs: Anslut era Perplexity-inloggningsuppgifter i Perplexity Research Tool, Perplexity Main Research och Perplexity Sub Research (dessa är verktyg som används av agenterna).
Steg 5: Konfigurera logik för kapitel, underkapitel och loopning
Säkerställ att flöden för kapitel/underkapitel, väntetider och batchiteration fungerar som avsett.
- Bekräfta att Route Deep Research delar upp i Iterate Chapters och Iterate Main Chapters för separat hantering.
- Kontrollera Split Subchapter List → Iterate Subchapters → Subchapter Research Agent → Subchapter Writing Chain → Pause For Subchapter → Extract Chapter Content → Aggregate Subchapters → Map Subchapter Output.
- Verifiera huvudkapitelflödet: Iterate Main Chapters → Main Chapter Research Agent → Pause Main Chapter → Chapter Writing Chain → Pause Chapter Loop → Extract Main Chapter Content → Merge Chapter Batches.
- Låt Pause Before Writing, Pause After Research, Pause For Subchapter och Pause Chapter Loop vara aktiverade för att förhindra rate-limits vid körningar med stora volymer.
Steg 6: Konfigurera bilder och hantering av assets
Konfigurera bildgenerering, konvertering, skalning och uppladdningar för utvalda bilder och kapitelbilder.
- Bekräfta Generate Chapter Image API → Split Chapter Image → Filter Chapter Image → Convert Image Data.
- Convert Image Data skickar utdata till både Scale Chapter Image och Drive Upload Chapter Images parallellt; säkerställ att båda utgångarna är anslutna.
- Bekräfta Generate Feature Image API → Split Feature Image → Filter Feature Image → Convert To File.
- Convert To File skickar utdata till både Scale Featured Image och Drive Upload Featured Image parallellt.
- Säkerställ Scale Chapter Image → Upload Chapter Images API → Update Image Metadata → Combine Image Paths och Scale Featured Image → Combine Featured Streams → Hold Featured Image.
- Inloggningsuppgifter krävs: Anslut era Google Drive-inloggningsuppgifter i Create Drive Directory, Drive Upload Chapter Images och Drive Upload Featured Image.
- Inloggningsuppgifter krävs: Lägg till lämplig autentisering i Generate Feature Image API, Generate Chapter Image API, Upload Chapter Images API och Update Image Metadata om de endpoints kräver åtkomst.
Steg 7: Sätt ihop artikeln och publicera till WordPress
Konvertera allt genererat innehåll till HTML, lagra dokument och publicera till WordPress med taggar och utvald bild.
- Säkerställ att Iterate Article Items matar Assemble Article Text och att Set Markdown Article → Convert Markdown HTML → Set HTML Article förblir intakt.
- Bekräfta att Create Document → Save Texts Document är ansluten för arkivering.
- Verifiera att Merge Tag Streams går in i Publish to WordPress, därefter Hold Featured Image → Upload Featured Image API → Update Featured Image Meta → Assign Featured Image → Set Post Excerpt.
- Säkerställ att Set Post Excerpt går vidare till Write Final Blog Sheet → Update Blog Status för statusuppdateringar.
- Inloggningsuppgifter krävs: Anslut era Google Docs-inloggningsuppgifter i Create Document och Save Texts Document.
- Inloggningsuppgifter krävs: Anslut era WordPress-inloggningsuppgifter i Publish to WordPress.
- Inloggningsuppgifter krävs: Lägg till lämplig autentisering i Upload Featured Image API, Update Featured Image Meta och Assign Featured Image om de riktar sig mot er WordPress REST API.
Steg 8: Konfigurera bundling av utdata och parallell bearbetning
Bunta utdata, bekräfta parallella grenar och säkerställ att arbetsflödet hanterar flera strömmar korrekt.
- Verifiera att Prepare Output Bundle är konfigurerad för att skicka vidare förväntade fält för kapitel, taggar och bildgenerering.
- Prepare Output Bundle skickar utdata till både Split Chapters List och Split Tag List och Generate Feature Image API parallellt; bekräfta att alla tre anslutningar är aktiva.
- Kontrollera att Combine Featured Streams och Combine Image Paths korrekt slår ihop sina respektive grenar innan ni fortsätter.
Steg 9: Testa och aktivera ert arbetsflöde
Kör ett end-to-end-test och aktivera först efter att ni har verifierat utdata.
- Kör Triggered by Parent Workflow manuellt med en test-payload för ämne för att validera hela flödet.
- Håll koll på att Publish to WordPress slutförs utan fel och bekräfta att Write Final Blog Sheet och Update Blog Status får uppdateringar.
- Kontrollera Google Drive för bilder som sparats av Drive Upload Chapter Images och Drive Upload Featured Image, och verifiera dokument som skapats av Create Document och Save Texts Document.
- När ni är nöjda, växla arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- WordPress Application Passwords kan misslyckas om REST API-åtkomst blockeras av ett säkerhetsplugin. Om utkast slutar skapas, kontrollera först applikationslösenordet för din WordPress-användare och eventuella brandväggsregler.
- Om du använder väntnoder eller extern rendering varierar processtider. Öka vänttiden om efterföljande noder misslyckas på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du redigera utdata i all evighet.
Vanliga frågor
Cirka 60–90 minuter om dina konton och API-nycklar är klara.
Nej. Du kommer mestadels koppla konton och klistra in API-nycklar i n8n-credentials.
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 in kostnader för OpenAI- och Perplexity-API, som varierar beroende på hur långa dina artiklar är och hur mycket research du aktiverar.
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 serverhantering.
Ja, och det är en av de bättre anledningarna att använda det här flödet. Du kan ändra språkinställningen i flödets globala konfiguration (noden “Set Global Config”) så att research, disposition och textproduktion matchar ditt målspråk. Många team justerar också promptnoderna för OpenAI för att styra lokala stavningsregler och ton. Om du publicerar i flera marknader, ha separata Sheet-köer per språk så att redaktörer inte blandar utkast.
Oftast beror det på ett ogiltigt eller återkallat Application Password, så generera ett nytt och uppdatera WordPress-credentials i n8n. Det kan också vara ett säkerhetsplugin som blockerar REST API-anrop, eller felaktiga behörigheter för WordPress-användaren du autentiserar med. Om felen bara händer vid bilduppladdning, kontrollera dina uppladdningsgränser för media och om din host blockerar stora requests.
Den klarar mycket, men du behöver styra takten. På n8n Cloud begränsas du av månadskörningar i din plan, medan self-hosting främst begränsas av din server och de API:er du anropar. I praktiken kör de flesta team det som en jämn kö (några inlägg per dag) eftersom research och bildgenerering kan slå i rate limits om du spikar volymen.
För långformat, oftast ja. n8n är mer bekvämt för flersteglogik (kapitelloopar, villkorad fördjupad research, väntan för att respektera rate limits) och du betalar inte extra för varje gren. Det ger också möjligheten att self-hosta, vilket spelar roll när du kör stora köer. Zapier eller Make kan fortfarande fungera för enklare flöden som “ta text, skapa utkast”, och de kan kännas enklare dag ett. Avvägningen är kontroll. Om du vill ha hjälp att välja, prata med en automationsexpert.
Du sätter upp kön en gång, och flödet gör det repetitiva jobbet i bakgrunden. Sedan öppnar du WordPress och möts av ett utkast som faktiskt är värt att redigera.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.