Att publicera samma video på nio plattformar låter enkelt. I verkligheten blir det en seg loop av uppladdningar, omskrivna bildtexter, dubbelkoll av länkar och insikten att du missade en kanal efter att lanseringen redan skett.
Marknadschefer känner av det när kampanjer har deadlines. Creators känner av det när konsekvens är viktigare än ”perfekt”. Och byråägare fastnar i rutinjobb i stället för kundstrategi. Den här Blotato-videoautomationen gör om en enda rad i Google Sheets till en publicering på flera plattformar, med en spårning du kan lita på.
Du får se hur arbetsflödet hämtar ”Ready”-videor från Sheets, skickar dem till Blotato, publicerar överallt och sedan markerar raden som klar så att den inte publiceras igen.
Så fungerar den här automationen
Så här löser den problemet:
n8n Workflow Template: Google Sheets + Blotato: publicera videor överallt
flowchart LR
subgraph sg0["Scheduled Run Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Run Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Social Account IDs", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Retrieve Video Row", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Upload Media to Blotato"]
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/>Post to Instagram"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Publish on YouTube"]
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/>Publish on TikTok"]
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/>Post to Facebook"]
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/>Share to Threads"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Share on LinkedIn"]
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/>Post to Bluesky"]
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/>Publish to Pinterest"]
n12["<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/>Send to Twitter"]
n18@{ icon: "mdi:database", form: "rounded", label: "Update Video Spreadsheet", pos: "b", h: 48 }
n2 --> n1
n0 --> n2
n1 --> n3
n3 --> n4
n3 --> n5
n3 --> n6
n3 --> n7
n3 --> n8
n3 --> n9
n3 --> n10
n3 --> n11
n3 --> n18
n3 --> n12
end
subgraph sg1["Incoming Media Payload Flow"]
direction LR
n19@{ icon: "mdi:play-circle", form: "rounded", label: "Incoming Media Payload", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Social Posting Done", pos: "b", h: 48 }
n21@{ icon: "mdi:cog", form: "rounded", label: "Retrieve Blotato Token", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Social Account IDs 2", pos: "b", h: 48 }
n23["<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 Media to Blotato 2"]
n24["<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/>Post to Instagram 2"]
n25["<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/>Publish on YouTube 2"]
n26["<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/>Publish on TikTok 2"]
n27["<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/>Post to Facebook 2"]
n28["<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/>Share to Threads 2"]
n32["<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/>Send to Twitter 2"]
n26 --> n20
n32 --> n20
n21 --> n22
n19 --> n21
n22 --> n23
n23 --> n24
n23 --> n25
n23 --> n26
n23 --> n27
n23 --> n28
n23 --> n32
end
subgraph sg2["File Upload Form Flow"]
direction LR
n13["<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/>File Upload Form"]
n14@{ icon: "mdi:cog", form: "rounded", label: "Run Sub-Workflow (Configure ..", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Run Sub-Workflow (Configure ..", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Assign URL Title Summary", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "Test Flow Finished", pos: "b", h: 48 }
n13 --> n15
n14 --> n17
n16 --> n14
n15 --> n16
end
subgraph sg3["Flow 4"]
direction LR
n31["<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/>Publish to Pinterest 2"]
end
subgraph sg4["Flow 5"]
direction LR
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to Bluesky 2"]
end
subgraph sg5["Flow 6"]
direction LR
n29["<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/>Share on LinkedIn 2"]
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,n19,n13 trigger
class n2,n18 database
class n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n23,n24,n25,n26,n27,n28,n32,n31,n30,n29 api
classDef customIcon fill:none,stroke:none
class n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n23,n24,n25,n26,n27,n28,n32,n13,n31,n30,n29 customIcon
Utmaningen: publicera video på flera plattformar utan att tappa förståndet
Manuell distribution är den typen av uppgift som ser harmlös ut i kalendern och sedan i tysthet äter upp din vecka. Du laddar upp filen, väntar på bearbetning, lägger till titel, klistrar in beskrivning, letar upp hashtags och upprepar. Sedan misslyckas en plattform, en länk är fel eller bildtexten skiljer sig lite från det kampanjbriefen godkände. Nu blir din ”enkla publiceringsuppgift” ett städjobb, och nästa lansering blir försenad eftersom du fortfarande rättar till den förra.
Det staplas snabbt på hög. Här är var det brukar fallera.
- Att ladda upp en och en på Instagram, YouTube, TikTok och resten kan lätt sluka runt 2 timmar för en enda lansering.
- Bildtexter glider mellan plattformar eftersom du kopierar och justerar i stress, vilket gör att budskapet tappar konsekvens.
- Att spåra vad som gick live blir en rörig mix av flikar, skärmdumpar och ”jag tror att jag postade den”–oro.
- Om någon annan i teamet postar tar du över deras process, deras namngivning och deras misstag.
Lösningen: publicera från Google Sheets till 9 plattformar i ett enda körningstillfälle
Det här arbetsflödet behandlar Google Sheets som din publiceringskö. Du lägger in en video-URL, en titel, en beskrivning och sätter ett enkelt statusfält till ”Ready”. Enligt schema (dagligen som standard) kontrollerar n8n arket, hämtar nästa redo-post och skickar mediet till Blotato via deras API. Blotato sköter distributionen till dina anslutna konton, så samma video kan gå ut till Instagram, YouTube, TikTok, Facebook, LinkedIn, Threads, Twitter, Bluesky och Pinterest i samma cykel. Efter uppladdning och publicering uppdaterar arbetsflödet exakt den rad det använde och byter ”Ready” till ”Finished”, så du får ett tydligt spår och inga oavsiktliga återpubliceringar.
Arbetsflödet startar enligt schema (inställt på 22:00, men går att konfigurera). Det hämtar en ”Ready”-rad från Google Sheets, laddar upp mediet till Blotato och triggar sedan publicering till alla nio plattformar. Till sist skriver det tillbaka till arket så att din spårning förblir korrekt.
Vad som förändras: före vs. efter
| Vad detta eliminerar | Effekten du kommer att se |
|---|---|
|
|
Effekt i verkligheten
Säg att du publicerar en video per dag på nio plattformar. Om manuell publicering tar kanske 10–15 minuter per plattform (uppladdning, bildtext, kontroller) blir det runt 2 timmar per dag. Med det här arbetsflödet lägger du till en rad i Google Sheets (cirka 5 minuter), och sedan laddar den schemalagda körningen upp och distribuerar medan du gör något annat. Du kan fortfarande lägga några minuter på stickprovskontroll, men det repetitiva arbetet är borta.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets som fungerar som din publiceringskö.
- Blotato för videodistribution till flera plattformar via API.
- Blotato API-nyckel (hämta den i Blotatos API-inställningar).
Kunskapsnivå: Nybörjare. Du kopplar konton, klistrar in ID:n/API-nycklar och mappar några kalkylarksfält.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet i arbetsflödet
En schemalagd kontroll körs automatiskt. n8n triggar som standard varje natt (22:00) och letar sedan i Google Sheets efter en rad där status är markerad som ”Ready”. Om du vill ha flera publiceringsfönster kan du ändra schemat utan att röra resten.
Raden blir ”sanningskällan”. Arbetsflödet hämtar video-URL, titel och beskrivning från arket och förbereder sedan den payload som Blotato förväntar sig, inklusive dina anslutna konto-ID:n för varje plattform.
Blotato tar emot mediet en gång. n8n skickar en HTTP-begäran för att ladda upp videon till Blotatos medietjänst och triggar sedan distributionen så att varje ansluten kanal får samma material och copy.
Arket uppdateras så att inget återpubliceras. Efter uppladdning/publiceringssteget skriver arbetsflödet tillbaka till Google Sheets och byter status till ”Finished”, vilket ger dig en tydlig historik över vad som gick ut och när.
Du kan enkelt justera schemat för att publicera mer än en gång per dag utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera schematriggern
Ställ in arbetsflödet så att det körs automatiskt enligt ett dagligt schema för att hämta nästa färdiga video från Google Sheets.
- Lägg till och konfigurera Scheduled Run Trigger.
- Ställ in schemaregeln så att den körs vid triggerAtHour
22. - Koppla Scheduled Run Trigger till Retrieve Video Row.
Steg 2: Anslut Google Sheets
Hämta nästa post som är redo att publiceras och uppdatera dess status efter publicering.
- Öppna Retrieve Video Row och välj kalkylarket: Document
UGC Ads Veo & Soraoch SheetSheet1. - Konfigurera filtret att använda ReadyToPost med värdet
Ready. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Retrieve Video Row.
- Öppna Update Video Spreadsheet och bekräfta att Operation är
updatemed ReadyToPost satt tillFinished. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Update Video Spreadsheet.
Steg 3: Sätt upp mappning för sociala konton
Ange plattformarnas konto-ID:n som används i efterföljande Blotato-postförfrågningar.
- Öppna Map Social Account IDs och ersätt platshållarna i jsonOutput med era ID:n för Instagram, YouTube, TikTok, Facebook, Threads, Twitter, LinkedIn, Pinterest och Bluesky.
- Öppna Map Social Account IDs 2 och spegla samma jsonOutput-struktur för publiceringsflödet via formulär.
- Bekräfta att Retrieve Video Row skickar output till Map Social Account IDs före mediauppladdningen.
Steg 4: Konfigurera mediauppladdning till Blotato
Ladda upp videofilens URL till Blotato och återanvänd den returnerade media-URL:en för publicering på flera plattformar.
- I Upload Media to Blotato, ställ in URL till
https://backend.blotato.com/v2/mediaoch Method tillPOST. - Ställ in body-parametern url till
={{ $('Retrieve Video Row').item.json['URL VIDEO'] }}. - Lägg till headern blotato-api-key och ange värdet för er Blotato API-nyckel.
- I Retrieve Blotato Token, ställ in Operation till
getoch filtrera service tillblotatoi den valda datatabellen. - I Upload Media to Blotato 2, ställ in body-parametern url till
={{ $('Incoming Media Payload').item.json.url }}och headern blotato-api-key till={{ $('Retrieve Blotato Token').item.json.token }}.
⚠️ Vanlig fallgrop: Alla Blotato httpRequest-noder kräver headern blotato-api-key. Om den saknas kommer förfrågningar att misslyckas med auktoriseringsfel.
Steg 5: Konfigurera åtgärder för publicering i sociala medier (parallellt)
När media har laddats upp publicerar arbetsflödet till flera plattformar parallellt.
- Bekräfta att Upload Media to Blotato skickar output till Post to Instagram, Publish on YouTube, Publish on TikTok, Post to Facebook, Share to Threads, Share on LinkedIn, Post to Bluesky, Publish to Pinterest, Update Video Spreadsheet och Send to Twitter parallellt.
- I varje publiceringsnod ska URL vara satt till
https://backend.blotato.com/v2/postsoch Method tillPOST. - Verifiera att JSON-bodyfälten refererar till rätt uttryck, till exempel
{{ $('Retrieve Video Row').item.json.DESCRIPTION }}och{{ $json.url }}. - Bekräfta att Upload Media to Blotato 2 skickar output till Post to Instagram 2, Publish on YouTube 2, Publish on TikTok 2, Post to Facebook 2, Share to Threads 2 och Send to Twitter 2 parallellt.
Upload Media to Blotato skickar output till både Post to Instagram och Publish on YouTube och de andra sociala noderna parallellt.
Upload Media to Blotato 2 skickar output till både Post to Instagram 2 och Publish on YouTube 2 och de andra sociala noderna parallellt.
Steg 6: Konfigurera uppladdningsflöde via formulär
Den här vägen möjliggör manuell videouppladdning via ett formulär och startar ett underarbetsflöde för bearbetning.
- Öppna File Upload Form och bekräfta att Form Title är
Upload File To DropBox. - Säkerställ att formulärfälten inkluderar obligatoriska Upload file, Video Title och Description.
- I Assign URL Title Summary, mappa fälten med hjälp av uttryck: url
={{ $json.url }}, Description={{ $('File Upload Form').item.json.Description }}och Title={{ $('File Upload Form').item.json['Video Title'] }}. - Koppla File Upload Form → Run Sub-Workflow (Configure Required) 2 → Assign URL Title Summary → Run Sub-Workflow (Configure Required) → Test Flow Finished.
⚠️ Vanlig fallgrop: Både Run Sub-Workflow (Configure Required) och Run Sub-Workflow (Configure Required) 2 har tomma workflow-ID:n. Ni måste välja mål-underarbetsflödena innan den här vägen kan köras.
Steg 7: Konfigurera triggern för inkommande medie-payload
Den här vägen gör att ett annat arbetsflöde kan skicka mediedetaljer direkt in i det här arbetsflödet.
- Använd Incoming Media Payload med inputSource satt till
passthroughför att ta emot inkommande data. - Koppla Incoming Media Payload till Retrieve Blotato Token, och därefter till Map Social Account IDs 2 och Upload Media to Blotato 2.
Steg 8: Testa och aktivera ert arbetsflöde
Kör ett manuellt test och aktivera sedan arbetsflödet för schemalagd publicering.
- Klicka på Execute Workflow för att testa den schemalagda vägen och bekräfta att Retrieve Video Row returnerar en post markerad
Ready. - Verifiera att Blotato-uppladdningen returnerar en media-URL och att varje nod för social publicering tar emot
{{ $json.url }}. - Kontrollera att Update Video Spreadsheet skriver
Finishedtill ReadyToPost för den matchande raden. - Testa formulärvägen genom att skicka in File Upload Form och säkerställ att data når Assign URL Title Summary.
- När testerna lyckas, växla arbetsflödet till Active så att Scheduled Run Trigger körs dagligen.
Se upp med
- Google Sheets-inloggningar kan gå ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera vyn för autentiseringsuppgifter i n8n och bekräfta att det anslutna Google-kontot fortfarande har åtkomst till arket.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Blotato-konto-ID:n är lätta att klistra in fel. Om bara vissa plattformar publicerar, dubbelkolla mappningen ”Assign Social Media IDs” mot dina Blotato-inställningar och kör sedan ett test med ett enda objekt.
Vanliga frågor
Cirka 20–25 minuter om dina Blotato-konton redan är anslutna.
Ja. Ingen kodning krävs, men du behöver klistra in rätt ID:n och API-nyckel på rätt ställen. Kan du underhålla ett Google Sheet kan du köra det här.
Ja. n8n har ett gratis alternativ för egen hosting 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 Blotato-kostnader enligt din plan och eventuella hostingkostnader för dina videofiler (om relevant).
Två alternativ: n8n Cloud (hanterat, enklast) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Du kan byta ut den schemalagda triggern mot den återanvändbara subworkflow-triggern ”Incoming Media Payload” när du vill att andra automationer ska anropa den. Vanliga anpassningar är att bara publicera till plattformarna du faktiskt använder, lägga till en godkännandekolumn i Google Sheets (t.ex. ”Approved = Yes”) och lägga in IF-kontroller för att använda plattformsspecifika bildtexter innan Blotato-begäran om publicering.
Oftast beror det på att Googles auktorisering har gått ut eller att det anslutna kontot har tappat åtkomst till kalkylarket. Anslut Google Sheets-credentialen igen i n8n och bekräfta sedan att Sheet ID i noden ”Retrieve Video Row / Get my video” matchar rätt fil. Om det fortfarande fallerar, kontrollera delningsbehörigheter och se till att kolumnerna i arket matchar vad arbetsflödet förväntar sig (URL VIDEO, ReadyToPost, Description, Titre).
Med n8n Cloud Starter brukar det fungera bra för ett litet team med daglig publicering, och högre planer hanterar större volymer. Om du hostar själv finns ingen körningsgräns från n8n (det beror på din server). I praktiken är det bäst att se arbetsflödet som ”en rad = en publiceringscykel”, så skalning innebär fler schemalagda körningar eller att loopa igenom flera redo-rader.
Ofta, ja, eftersom det här är mer än en enkel tvåstegs-zap. Du koordinerar flera HTTP-begäranden, hanterar en kö och uppdaterar spårningen så att det är säkert att köra igen. n8n är byggt för den typen av grenar och logik där du ”gör mycket i en körning”, och du kan hosta själv för obegränsade körningar. Zapier eller Make kan fortfarande fungera om du bara behöver en eller två destinationer och inte bryr dig om en tajt kalkylarksbaserad kö. Om du är osäker, prata med en automationsexpert och kvalitetssäkra den enklaste vägen för din innehållsvolym.
När detta väl rullar blir din ”publiceringsprocess” en enda uppdatering i kalkylarket. Arbetsflödet sköter repetitionen och du får tillbaka dina kvällar.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.