Ditt LinkedIn‑”content system” ser bra ut på papper. Sedan slår verkligheten till. En PDF full av idéer ligger i Google Drive, ditt utkastdokument blir en röra och publiceringen blir en sista‑minuten‑stress som du upprepar varje vecka.
Det här är exakt det som marknadschefer klagar på, men grundare och byråledare känner av det också. En stabil Drive LinkedIn automation gör de bortglömda PDF:erna till en strukturerad publiceringskö, så att du kan publicera utan att behöva jaga ikapp.
Det här flödet bevakar en Drive‑mapp efter bok‑PDF:er, använder AI för att extrahera och skapa postutkast, sparar dem i Google Sheets och publicerar en per dag på LinkedIn. Du får se hur flödet fungerar, vad du behöver och var team oftast kör fast.
Så fungerar den här automatiseringen
Hela n8n‑workflowet, från trigger till slutresultat:
n8n Workflow Template: Google drive till LinkedIn, kö i Google sheets
flowchart LR
subgraph sg0["Google Drive Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Google Drive Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "DownLoadPdf", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Extract from File", pos: "b", h: 48 }
n3@{ icon: "mdi:cube-outline", form: "rounded", label: "Pinecone Vector Store", pos: "b", h: 48 }
n4@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "Default Data Loader", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Recursive Character Text Spl..", pos: "b", h: 48 }
n7@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "LinkedIn Post Idea Generation", pos: "b", h: 48 }
n9@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI1", pos: "b", h: 48 }
n10@{ icon: "mdi:cube-outline", form: "rounded", label: "Pinecorn Vector Store-book", pos: "b", h: 48 }
n11@{ icon: "mdi:memory", form: "rounded", label: "Simple Memory", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "GeneratePostContent", pos: "b", h: 48 }
n19@{ icon: "mdi:database", form: "rounded", label: "linkedInPostsContent", pos: "b", h: 48 }
n22@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n22 --> n8
n13 --> n14
n1 --> n2
n11 -.-> n8
n4 -.-> n3
n2 --> n3
n7 -.-> n8
n9 -.-> n10
n5 -.-> n3
n14 --> n19
n0 --> n1
n3 --> n22
n12 -.-> n8
n10 -.-> n8
n8 --> n13
n6 -.-> n5
end
subgraph sg1["Schedule Flow"]
direction LR
n15@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "Limit", pos: "b", h: 48 }
n17["<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/linkedin.svg' width='40' height='40' /></div><br/>LinkedIn"]
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n20@{ icon: "mdi:database", form: "rounded", label: "linkedInPostsContent1", pos: "b", h: 48 }
n21@{ icon: "mdi:database", form: "rounded", label: "linkedInPostsContent2", pos: "b", h: 48 }
n18 --> n21
n16 --> n17
n17 --> n18
n15 --> n20
n20 --> n16
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,n15 trigger
class n5,n6,n8,n12,n14 ai
class n7 aiModel
class n11 ai
class n3,n10 ai
class n4,n9 ai
class n18 decision
class n19,n20,n21 database
classDef customIcon fill:none,stroke:none
class n17 customIcon
Problemet: LinkedIn‑publicering blir ett manuellt slit
Om du skapar LinkedIn‑innehåll från böcker, PDF:er, researchdokument eller playbooks är flaskhalsen oftast inte ”idéer”. Det är jobbet mellan idé och publicering. Du hittar ett bra avsnitt, kopierar ut det, skriver om, vässar kroken, lägger till en CTA, kapar tecken och klistrar sedan in det någonstans där du tror att du kommer hitta det senare. Nästa vecka hittar du det inte. Eller så postar du något som är för likt förra månaden eftersom du inte spårade vad som redan gått live. Den mentala belastningen är konstant, och helt ärligt gör det att konsekvens känns svårare än det behöver vara.
Friktionen byggs på.
- En bra PDF kan generera dussintals inlägg, men det mesta av värdet blir aldrig publicerat eftersom utkast och formatering tar för lång tid.
- Utan en riktig kö slutar du med att läsa om samma material och göra om samma omskrivningar.
- Statusspårning blir slarvig, så dubbletter händer och ”vad postades när?” blir till gissningar.
- Schemaläggningsverktyg löser inte idéarbetet, och ett dokument fullt av utkast publicerar inte sig självt.
Lösningen: gör bok‑PDF:er till en daglig LinkedIn‑kö
Det här n8n‑flödet kopplar ihop platserna du redan använder: Google Drive för källmaterial, AI för utkast, Google Sheets för kön och LinkedIn för publicering. När en PDF läggs till eller uppdateras i en specifik Drive‑mapp laddar flödet ner den, extraherar texten och delar upp den i läsbara chunkar. OpenAI skapar embeddings (tänk: en sökbar ”betydelsekarta” av innehållet), och de embeddings lagras i Pinecone så att flödet kan hämta relevanta idéer senare i stället för att gissa. Därefter söker en LangChain‑agent i bokinnehållet, föreslår fem inläggsidéer och skriver om varje till ett koncist LinkedIn‑redo utkast med hook, insikt och CTA. Till sist sparas varje utkast i ett Google‑ark med publiceringsstatus, och ett dagligt schema postar ett opublicerat utkast på LinkedIn och markerar det som publicerat.
Flödet börjar med att bevaka en Google Drive‑mapp. Det gör en PDF till en sökbar kunskapsbas i Pinecone, genererar fem strukturerade inläggsidéer och formaterar dem till korta inlägg (under cirka 600 tecken). Därefter blir Google Sheets din ”enda kö”, och den schemalagda körningen publicerar en per dag utan att du behöver röra något.
Det du får: automatisering vs. resultat
| Det här workflowet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du lägger till en ny bok‑PDF varje vecka och vill publicera ett inlägg om dagen. Manuellt tar det lätt cirka 2 timmar per bok att plocka fram fem användbara vinklar ur ett kapitel, skriva om dem och formatera dem för LinkedIn, ibland mer om du är petig. Med det här flödet släpper du PDF:en i Drive och låter det generera fem utkast i Google Sheets, sedan publicerar schemat ett per dag. Din manuella tid blir en snabb genomgång (kanske 10 minuter) i stället för en hel skrivsession.
Det du behöver
- n8n‑instans (prova n8n Cloud gratis)
- Alternativ för self‑hosting om du föredrar det (Hostinger fungerar bra)
- Google Drive för att lagra och bevaka dina PDF:er
- Google Sheets för att hantera utkast och publiceringsstatus
- LinkedIn för att publicera inlägg via OAuth‑anslutning
- Pinecone för vektorlager och bokspecifik sökning
- OpenAI API‑nyckel (hämta den i din OpenAI‑dashboard)
- Pinecone API‑nyckel (hämta den i Pinecone‑konsolen)
Kompetensnivå: Medel. Du kopplar konton, skapar ett ark med rätt kolumner och klistrar in ett par API‑nycklar.
Vill du inte sätta upp det här själv? Prata med en automatiseringsexpert (gratis 15‑minuters konsultation).
Så fungerar det
En PDF ändras i Google Drive. Flödet bevakar en specifik mapp och laddar sedan ner den nya eller uppdaterade filen så att den kan bearbetas direkt.
Innehållet blir sökbart. n8n extraherar PDF‑texten, delar upp den i chunkar, skapar embeddings med OpenAI och sparar dem i Pinecone under ett namespace baserat på bokens filnamn.
AI genererar idéer och utkast. En LangChain‑agent frågar Pinecone efter det bästa materialet, returnerar fem strukturerade inläggsidéer (hook, insikt, CTA), och därefter skriver ett annat AI‑steg om varje till ett LinkedIn‑redo inlägg under cirka 600 tecken, inklusive hashtags och ton‑guidning.
Google Sheets blir din publiceringskö. Utkast lagras i ett ark med statusfält som ”publicerad” och en datumkolumn, och sedan hämtar ett dagligt schema en opublicerad rad, postar den på LinkedIn och uppdaterar statusen.
Du kan enkelt ändra publiceringsschemat för att publicera oftare (eller mer sällan) utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera triggern för Drive File Update
Det här arbetsflödet startar när en PDF uppdateras i en specifik Google Drive-mapp, så triggern behöver bevaka rätt plats.
- Lägg till och öppna Drive File Update Trigger.
- Ställ in Event på
fileUpdated. - Ställ in Trigger On på
specificFolderoch välj mappen för LinkedIn-käll-PDF:er. - Inloggningsuppgifter krävs: anslut era googleDriveOAuth2Api-inloggningsuppgifter.
⚠️ Vanlig fallgrop: om mapp-ID:t lämnas som [YOUR_ID] kommer triggern inte att upptäcka uppdateringar. Ersätt det med ett riktigt mapp-ID.
Steg 2: anslut Google Drive och tolka PDF:en
Den här delen laddar ner den uppdaterade filen och extraherar dess text för indexering.
- Öppna Fetch PDF File och ställ in Operation på
download. - Ställ in File ID på
={{ $json.id }}. - Inloggningsuppgifter krävs: anslut era googleDriveOAuth2Api-inloggningsuppgifter.
- Öppna Parse PDF Content och ställ in Operation på
pdf.
Steg 3: konfigurera vektorindexering och AI-generatorn för idéer
Dessa noder lagrar PDF-innehållet i Pinecone och genererar strukturerade LinkedIn-idéer med OpenAI.
- Öppna Pinecone Vector Indexer, ställ in Mode på
insertoch ställ in Pinecone Namespace på={{ $('Fetch PDF File').item.json.name }}. - Inloggningsuppgifter krävs: anslut era pineconeApi-inloggningsuppgifter i Pinecone Vector Indexer.
- Säkerställ att OpenAI Embedding Generator är ansluten som embedding-modell för Pinecone Vector Indexer. Inloggningsuppgifter krävs: anslut era openAiApi-inloggningsuppgifter.
- Bekräfta att Standard Data Loader och Recursive Text Chunker är kopplade in i flödet för vektorindexeraren (inga inloggningsuppgifter behövs).
- Öppna LinkedIn Idea Agent och behåll Text inställd på
=Name of the book: {{ $('Drive File Update Trigger').item.json.originalFilename }}. - Anslut OpenAI Chat Engine som språkmodell för LinkedIn Idea Agent. Inloggningsuppgifter krävs: anslut era openAiApi-inloggningsuppgifter.
- Anslut Pinecone Vector Tool som verktyg för LinkedIn Idea Agent med Mode inställd på
retrieve-as-tool, Tool Name pålinkedinpostnewoch Tool Description påextract information from this data. Inloggningsuppgifter krävs: anslut era pineconeApi-inloggningsuppgifter. - Koppla Structured Result Parser till LinkedIn Idea Agent för att tvinga fram JSON-schemat (inloggningsuppgifter hanteras på den överordnade noden LinkedIn Idea Agent).
- Koppla Buffer Memory till LinkedIn Idea Agent med Session Key inställd på
={{ 111 }}(inloggningsuppgifter hanteras på den överordnade noden LinkedIn Idea Agent).
Tips: AI-verktygs- och parsernoder som Structured Result Parser, Buffer Memory och Pinecone Vector Tool använder inloggningsuppgifter som är satta i deras överordnade eller anslutna noder. Säkerställ att OpenAI Chat Engine och Pinecone Vector Tool har inloggningsuppgifter konfigurerade.
Steg 4: generera text för LinkedIn-inlägg och lagra den
Arbetsflödet delar upp de strukturerade idéerna i rader, genererar inläggstext och lagrar allt i Google Sheets.
- Öppna Split Records och ställ in Field To Split Out på
output. - Öppna Generate Post Text och verifiera att det första meddelandet använder
=Hook: {{ $json.Hook }}.,Insight: {{ $json.Insight }}.ochCTA: {{ $json.CTA }}. - Inloggningsuppgifter krävs: anslut era openAiApi-inloggningsuppgifter i Generate Post Text.
- Öppna Update Posts Sheet och ställ in Operation på
appendOrUpdate. - Ställ in kolumnmappningarna i Update Posts Sheet till:
cta→={{ $('Split Records').item.json.CTA }},hook→={{ $('Split Records').item.json.Hook }},insight→={{ $('Split Records').item.json.Insight }},bookname→={{ $('Drive File Update Trigger').item.json.originalFilename }},postContent→={{ $json.message.content }}ochpublished→no. - Inloggningsuppgifter krävs: anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Update Posts Sheet.
Steg 5: konfigurera schemalagd publicering till LinkedIn
En schemalagd körning letar efter opublicerade rader, begränsar batchen, publicerar till LinkedIn och markerar inlägget som publicerat.
- Öppna Scheduled Run Trigger och ställ in intervallregeln så att den matchar er publiceringstakt.
- Öppna Fetch Unpublished Posts och bekräfta att filtret på published är lika med
no. - Inloggningsuppgifter krävs: anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Fetch Unpublished Posts.
- Öppna Limit Items för att styra hur många inlägg som publiceras per körning.
- Öppna Publish LinkedIn Post och ställ in Text på
={{ $json.postContent }}och Person till ert LinkedIn-ID (ersätt[YOUR_ID]). - Inloggningsuppgifter krävs: anslut era linkedInOAuth2Api-inloggningsuppgifter i Publish LinkedIn Post.
- Öppna Check Post Result och säkerställ att den kontrollerar att
={{ $json.urn }}finns. - Öppna Mark Post Published och ställ in Operation på
update. Bekräfta att date är={{$now}}och att row_number är={{ $('Fetch Unpublished Posts').item.json.row_number }}. - Inloggningsuppgifter krävs: anslut era googleSheetsOAuth2Api-inloggningsuppgifter i Mark Post Published.
⚠️ Vanlig fallgrop: om Publish LinkedIn Post fortfarande har [YOUR_ID] kommer publiceringen att misslyckas även om inloggningsuppgifterna är giltiga.
Steg 6: testa och aktivera ert arbetsflöde
Validera både flödet för PDF-inläsning och flödet för schemalagd publicering innan ni slår på arbetsflödet.
- Kör Drive File Update Trigger manuellt med en exempel-PDF i den bevakade mappen.
- Bekräfta att Fetch PDF File laddar ner filen och att Parse PDF Content returnerar extraherad text.
- Verifiera att LinkedIn Idea Agent ger strukturerade idéer, och kontrollera sedan att Update Posts Sheet skapar rader där
publishedär satt tillno. - Kör Scheduled Run Trigger manuellt och verifiera att Publish LinkedIn Post returnerar en
urn, och säkerställ sedan att Mark Post Published uppdaterar fältetpublishedtillyes. - När resultaten ser korrekta ut, växla arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Google Drive‑inloggningar kan löpa ut eller kräva specifika behörigheter. Om saker skapar fel, kontrollera först inställningarna för n8n‑credentials och åtkomst-/delningsinställningarna för Drive‑mappen.
- Om du använder Wait‑noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram misslyckas på grund av tomma svar.
- Standardprompter i AI‑noder är generiska. Lägg in din varumärkesröst tidigt, annars kommer du redigera utdata för alltid.
Vanliga frågor
Cirka en timme om dina konton och API‑nycklar är klara.
Nej. Du kopplar främst konton och klistrar in API‑nycklar. Den ”svåra delen” är att bestämma vilka kolumner ditt ark ska ha och vilka publiceringsregler som ska gälla.
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‑API (ofta några cent per PDF‑bearbetning och utkastkörning) samt Pinecone‑lagring.
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änsat antal körningar men kräver grundläggande serverhantering.
Ja, och det bör du. Du kan justera AI‑prompterna i LinkedIn Idea Agent och noden Generate Post Text för att styra ton, förbjuda emojis, kräva ett visst CTA‑format eller lägga till dina hashtag‑regler. Många team lägger också till en status som ”granska” i Google Sheets så att inlägg måste godkännas innan den schemalagda publiceraren kan plocka upp dem. Om du vill byta ut Pinecone mot en annan vektordatabas ersätter du Pinecone‑noderna för vector store/tool men behåller i övrigt samma flöde.
Oftast beror det på en utgången OAuth‑anslutning eller att behörigheterna för Drive‑mappen har ändrats. Anslut Google Drive igen i n8n och bekräfta att den specifika mappen fortfarande är åtkomlig för det kontot. Om triggern fungerar men nedladdningar misslyckas, dubbelkolla åtkomstscopes för filer och att PDF:en inte är begränsad av en organisationspolicy. Stora PDF:er kan också tajma ut beroende på din hosting, så att höja timeouts på nedladdnings-/extraheringsstegen kan hjälpa.
En typisk körning genererar fem inlägg per PDF‑uppdatering, och den dagliga schemaläggaren publicerar ett per dag, så det skalar bekvämt för de flesta små team.
För det här användningsfallet oftast ja, eftersom AI + vektorsök snabbt blir komplext. n8n hanterar förgreningar, loopar över items och strukturerade outputs utan att automatiseringen blir en skör kedja av mini‑zaps. Du får också möjligheten att self‑hosta, vilket spelar roll när du bearbetar stora PDF:er och kör dagliga schemalagda jobb. Zapier eller Make kan ändå fungera om du förenklar flödet (till exempel hoppar över Pinecone och bara genererar inlägg från ett kort utdrag). Om du är osäker, prata med en automatiseringsexpert så gör vi en rimlighetscheck av upplägget.
När det här väl rullar slutar dina PDF:er vara ”innehåll någon gång” och börjar mata en pålitlig LinkedIn‑kö. Sätt upp det en gång och lägg sedan tiden på att granska och finslipa i stället för att uppfinna processen på nytt.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.