Att skriva en bra Instagram-caption är tillräckligt svårt. Sedan faller du ner i hashtag-kaninhålet, återanvänder samma trötta taggar, gissar vad som är “hett” och hoppas att du inte råkar sänka räckvidden med döda eller irrelevanta sökord.
Sociala medier-ansvariga känner av det när de jonglerar flera kunder. En småföretagare känner av det när publiceringen glider till “när jag har tid.” Och marknadsförare som försöker skala innehåll känner det också. Den här automatiseringen av Instagram-hashtags gör en caption till fem datadrivna hashtags du faktiskt kan lita på.
Du får se hur workflowet genererar kandidat-taggar med OpenAI, kontrollerar verkliga engagemangsmått via det officiella Instagram Graph API och lagrar tidigare uppslag i Google Sheets så att du inte bränner din API-kvot.
Så fungerar automatiseringen
Hela n8n-workflowet, från trigger till slutresultat:
n8n Workflow Template: Instagram + Google Sheets: hashtags valda åt dig
flowchart LR
subgraph sg0["Manual Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Dummy Caption", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Generate Initial Hashtags", 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/code.svg' width='40' height='40' /></div><br/>Parse & Clean Tags"]
n5@{ icon: "mdi:database", form: "rounded", label: "Fetch Cached Hashtags", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split In Batches", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check if Tag Exists", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Save to Cache", pos: "b", h: 48 }
n9@{ icon: "mdi:cog", form: "rounded", label: "Rate Limit Wait", pos: "b", h: 48 }
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/merge.svg' width='40' height='40' /></div><br/>Merge Cache & Fresh"]
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/code.svg' width='40' height='40' /></div><br/>Aggregate & Rank Candidates"]
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format New Hashtag Data", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Check Cache Status"]
n14["<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 Input"]
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route Cached vs New", pos: "b", h: 48 }
n16["<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/facebook.svg' width='40' height='40' /></div><br/>Get Hashtag Info"]
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/facebook.svg' width='40' height='40' /></div><br/>Get Hashtag Metrics"]
n18["<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/>Calculate Average Metrics"]
n19@{ icon: "mdi:brain", form: "rounded", label: "AI Model Selector", pos: "b", h: 48 }
n20@{ icon: "mdi:robot", form: "rounded", label: "Select Top 5 Hashtags", pos: "b", h: 48 }
n21@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Output", pos: "b", h: 48 }
n22@{ icon: "mdi:play-circle", form: "rounded", label: "Workflow Trigger", pos: "b", h: 48 }
n14 --> n13
n8 --> n9
n0 --> n1
n9 --> n6
n16 --> n7
n16 --> n9
n6 --> n10
n6 --> n16
n22 --> n3
n19 -.-> n20
n2 -.-> n3
n1 --> n3
n1 --> n5
n13 --> n15
n4 --> n14
n7 --> n17
n7 --> n9
n17 --> n18
n10 --> n11
n15 --> n10
n15 --> n6
n5 --> n14
n20 --> n21
n12 --> n8
n18 --> n12
n3 --> n4
n11 --> n20
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,n22 trigger
class n3,n20 ai
class n2,n19 aiModel
class n7,n15 decision
class n5,n8 database
class n16,n17 api
class n4,n11,n13,n18 code
classDef customIcon fill:none,stroke:none
class n4,n10,n11,n13,n14,n16,n17,n18 customIcon
Problemet: hashtags blir gissningar (och en tidstjuv)
Hashtags ska hjälpa till med upptäckt, men i de flesta publiceringsrutiner blir de en sista-minuten-uppgift. Du kopierar gårdagens uppsättning, justerar en eller två och kallar det klart. Eller så lägger du alldeles för mycket tid på att söka på Instagram och försöker välja mellan breda taggar som är överbefolkade och nischade taggar som kanske saknar momentum. Sedan publicerar du … och du vet fortfarande inte om taggarna var problemet eller om innehållet bara inte landade. Det är frustrerande, ärligt talat, eftersom jobbet är på riktigt och återkopplingsloopen är vag.
Friktionen bygger på. Här är var det fallerar i det dagliga marknadsarbetet.
- Manuell hashtag-research kan lätt ta runt 15 minuter per inlägg, särskilt när du försöker variera taggar för flera erbjudanden eller platser.
- Du återanvänder “säkra” taggar, vilket gör att dina inlägg konkurrerar i de stökigaste flödena.
- När taggarna är off-topic blir räckvidden konstig och rapporteringen blir ett gissningsspel.
- API-begränsningar gör “bara hämta data” svårare än det låter, så de flesta team bygger aldrig ett pålitligt hashtag-bibliotek.
Lösningen: OpenAI + officiella mätvärden + en Google Sheets-cache
Det här workflowet tar en enda Instagram-caption och gör den till fem starkare hashtags genom att kombinera AI-förslag med verklig engagemangsdata. Först analyserar OpenAI din caption och föreslår en kort lista med relevanta hashtags, med målet att få en mix av populära och nischade termer så att du inte fastnar i valet mellan “för brett” och “för obskyrt.” Sedan använder workflowet det officiella Instagram Graph API för att slå upp hashtag-ID:n och hämta genomsnittliga engagemangsmått (gilla-markeringar och kommentarer) för de kandidater som faktiskt finns. Till sist rankar det alternativen, väljer de bästa fem och returnerar dem som en korrekt formaterad textsträng som du kan klistra in i ditt inlägg. En Google Sheets-cache sparar tyst tidigare uppslag, så att återkommande taggar inte kostar extra API-anrop.
Workflowet startar med en manuell körning, en webhook eller en Telegram-/subworkflow-input (beroende på hur du vill trigga det). Därifrån strukturerar det AI-utdata, kontrollerar Google Sheets efter cachade resultat och anropar bara Graph API för nya taggar. Det avslutar genom att ranka kandidater och sätta ihop dina fem slutliga hashtags.
Det du får: automatisering vs. resultat
| Vad det här workflowet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du publicerar 5 inlägg i veckan. Om du lägger cirka 15 minuter per inlägg på att söka, kontrollera och skriva om hashtags, är det ungefär 75 minuter per vecka. Med det här workflowet klistrar du in en caption en gång, väntar på API-kontrollerna och får fem rankade hashtags tillbaka på ett par minuter (plus lite bakgrundsprocesseringstid som du inte behöver sitta och vakta). Realistiskt köper du tillbaka ungefär en timme i veckan, och dina taggar baseras på mätvärden i stället för känsla.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger funkar bra)
- Google Sheets för att cacha hashtag-mätvärden över tid
- OpenAI för att generera initiala hashtag-kandidater från captions
- Facebook Graph API-uppgifter (skapa i Meta for Developers och koppla sedan i n8n)
Svårighetsgrad: Medel. Du kopplar konton, redigerar två ID:n (Instagram Business ID och Spreadsheet ID) och testar först med mockdata.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En caption kickar igång det. Du kan köra det manuellt för snabb testning, eller mata in en caption via en webhook-/Telegram-/subworkflow-trigger när du vill koppla det till en större innehållspipeline.
OpenAI föreslår kandidat-hashtags. Workflowet använder en OpenAI Chat Model (GPT-4o-mini) för att generera cirka 10 hashtags som matchar captionens intention, och sedan strukturerar ett kort kodsteg formateringen så att resten av workflowet pålitligt kan bearbeta varje tagg.
Google Sheets avgör vad som behöver färsk data. Cachade hashtags slås ihop direkt. Nya routas genom ett batchsteg, vilket hjälper till att kontrollera rate limits och håller anropen förutsägbara.
Officiella Instagram-mätvärden hämtas och rankas. För varje ny hashtag slår workflowet upp hashtag-ID:t (ig_hashtag_search), validerar att den finns och hämtar sedan genomsnittliga gilla-markeringar/kommentarer. Allt kombineras, rankas och ett AI-valsteg väljer de fem slutliga.
Du kan enkelt ändra rankningsreglerna (till exempel exkludera taggar under en tröskel för antal inlägg) så att det matchar din nisch och din rapporteringsstil. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera triggern för indata till subworkflow
Konfigurera arbetsflödets startpunkter så att ni kan köra det manuellt eller från ett annat workflow.
- Öppna Subworkflow Input Trigger och bekräfta att workflow-indatan heter caption.
- Öppna Manual Execution Start för lokala testkörningar; inga fält krävs.
- I Assign Sample Caption ställer ni in värdet för caption till
Just built an amazing automation workflow with n8n! 🚀 It connects my apps and saves me hours every week. - Notera den parallella körningen: Assign Sample Caption skickar output till både Create Initial Hashtag List och Retrieve Cached Hashtags parallellt.
Steg 2: Anslut Google Sheets
Konfigurera uppslagning i hashtag-cache och append-operationer i Google Sheets.
- I Retrieve Cached Hashtags ställer ni in Document till
YOUR_SPREADSHEET_IDoch Sheet tillYOUR_SHEET_NAME_OR_ID. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-credentials i Retrieve Cached Hashtags.
- I Append Cache Records ställer ni in Operation till
append, Document tillYOUR_SPREADSHEET_IDoch Sheet tillYOUR_SHEET_NAME_OR_ID. - Mappa kolumner i Append Cache Records: tag →
{{$json.tag}}, average_likes →{{$json.average_likes}}, average_comments →{{$json.average_comments}}. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-credentials i Append Cache Records.
tag, average_likes och average_comments så att det matchar append-mappningen.Steg 3: Sätt upp AI-generering av hashtags
Generera en startlista med hashtags och normalisera output till en tagglista.
- I Create Initial Hashtag List ställer ni in Prompt till
=Please suggest 10 English hashtags relevant to the following post caption. Include a balance of big words (high post volume) and niche ones. Caption: {{ $json.caption }} Output ONLY in the following JSON format. ["keyword1", "keyword2", ...]och behåller Prompt Type som Define. - Säkerställ att Create Initial Hashtag List är ansluten till OpenAI Chat Engine som språkmodell; lägg till OpenAI-credentials i föräldranoden OpenAI Chat Engine.
- Inloggning krävs: Anslut era openAiApi-credentials i OpenAI Chat Engine.
- I Clean Hashtag Output behåller ni JavaScript-koden som extraherar JSON-arrayen och returnerar
{ tag }-items för varje hashtag.
Steg 4: Konfigurera cachelogik och Instagram-mätvärden
Jämför AI-genererade taggar med cachad data och hämta samt beräkna mätvärden för nya taggar.
- I Unify Inputs slår ni ihop output från Clean Hashtag Output och Retrieve Cached Hashtags.
- I Determine Cache Status behåller ni JavaScript-koden som märker varje tagg som
cacheellernewbaserat på tillgängliga mätvärden. - I Branch Cache vs New bekräftar ni att villkoret kontrollerar att source är lika med
cachemed{{$json.source}}. - I Batch Items Splitter behåller ni standardinställningarna för batch för att processa nya taggar sekventiellt.
- I Fetch Hashtag Lookup ställer ni in Node till
ig_hashtag_search, Graph API Version tillv18.0och query-parametrar: user_id →YOUR_INSTAGRAM_BUSINESS_ACCOUNT_ID, q →{{ $('Batch Items Splitter').item.json.tag }}. - Inloggning krävs: Anslut era facebookGraphApi-credentials i Fetch Hashtag Lookup.
- I Validate Tag Presence behåller ni villkoret
{{$json.data && $json.data.length > 0}}för att undvika ogiltiga ID:n. - I Fetch Hashtag Metrics ställer ni in Edge till
top_media, Node till{{ $json.data[0].id }}och query-parametrar: fields →like_count, comments_count, user_id →YOUR_INSTAGRAM_BUSINESS_ACCOUNT_ID. - Inloggning krävs: Anslut era facebookGraphApi-credentials i Fetch Hashtag Metrics.
- I Compute Average Metrics behåller ni JavaScript-koden som beräknar
average_likesochaverage_comments. - I Map Fresh Tag Metrics ställer ni in tag till
{{ $('Batch Items Splitter').item.json.tag }}, average_likes till{{ $json.average_likes }}och average_comments till{{ $json.average_comments }}. - I Throttle Pause ställer ni in Unit till
secondsoch Amount till2för att strypa API-anrop.
Steg 5: Konfigurera rankning och slutlig output
Slå ihop cachad och ny data, ranka kandidater och be modellen välja de fem bästa hashtagsen.
- I Combine Cache and New slår ni ihop den cachade grenen från Branch Cache vs New med nya items från Batch Items Splitter.
- I Rank Candidate Tags behåller ni JavaScript-koden som sorterar på
average_likesoch byggercandidates-arrayen. - I Choose Top Five Tags ställer ni in prompten till
=You are an Instagram Professional. Analyze the following post caption and the candidate hashtag list (with average likes). Select the **5 best hashtags** that balance **"Relevance to the post"** and **"High Engagement (Likes)"**. [Selection Criteria] 1. Must accurately reflect the post content (Prioritize Relevance). 2. Do NOT select irrelevant tags even if they have many likes. 3. Include niche tags (fewer likes) if they are perfect for the content. Caption: {{ $json.caption }} Candidate List: {{ JSON.stringify($json.candidates) }} Output Format (JSON Only): ["tag1", "tag2", "tag3", "tag4", "tag5"]och behåller Prompt Type som Define. - Säkerställ att Choose Top Five Tags är ansluten till AI Model Picker; lägg till OpenAI-credentials i föräldranoden AI Model Picker.
- Inloggning krävs: Anslut era openAiApi-credentials i AI Model Picker (modell
gpt-5-mini). - I Assemble Hashtag String ställer ni in hashtags till
{{ JSON.parse($json.text.replace(/```json/g,'').replace(/```/g,'')).map(t => '#' + t.replace('#','')).join(' ') }}.
Steg 6: Testa och aktivera ert workflow
Validera hela flödet från inmatad caption till slutlig hashtag-sträng.
- Klicka på Execute Workflow och starta från Manual Execution Start för att köra en test-caption genom flödet.
- Bekräfta att Create Initial Hashtag List returnerar en JSON-lista och att Clean Hashtag Output returnerar tag-items.
- Verifiera cachelogiken genom att kontrollera output från Determine Cache Status med source satt till
cacheellernew. - Säkerställ att Assemble Hashtag String returnerar en enda
hashtags-sträng som#tag1 #tag2 #tag3 #tag4 #tag5. - När allt ser korrekt ut växlar ni workflödet till Active för att ta emot indata från Subworkflow Input Trigger i produktion.
Vanliga fallgropar
- Facebook Graph API-uppgifter kan gå ut eller sakna behörigheter. Om det strular: kontrollera först dina Meta-appinställningar och den anslutna credentialen i n8n.
- Om du använder Wait-noder eller externa anrop varierar processeringstiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera output för alltid.
Vanliga frågor
Cirka 30–60 minuter när din API-åtkomst är redo.
Nej. Du kopplar konton och klistrar in två ID:n och kör sedan en test-caption.
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 med OpenAI API-användning (oftast några cent per körning) och din Meta-/Instagram API-åtkomst.
Två alternativ: n8n Cloud (managerat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. De flesta anpassar prompten som används för att skapa den initiala hashtag-listan så att den alltid inkluderar platsmodifierare (stad, område, typ av venue) och exkluderar orelaterade branschtaggar. Du kan också justera rankningslogiken i kodnoden “Rank Candidate Tags” för att ranka ner alltför generiska taggar, och sedan hålla dina föredragna taggar varma i Google Sheets så att de återanvänds utan extra uppslag.
Oftast är det en behörighetsfråga i kalkylarket eller en utgången Google-credential i n8n. Bekräfta att det anslutna Google-kontot kan redigera arket och autentisera sedan om Google Sheets-credentialen. Dubbelkolla också att du har ersatt spreadsheet ID-placeholdern i stegen “Retrieve Cached Hashtags” och “Save to Cache/Append Cache Records”.
I praktiken kan den hantera så många som din n8n-plan/server kan processa, men den officiella hashtag search-endpointen är begränsad till cirka 30 unika queries per 7 dagar, vilket är varför Google Sheets-cachen är viktig.
Ofta, ja, eftersom det här workflowet behöver branching, batching och caching för att respektera Instagrams API-gräns, och n8n hanterar det utan att göra det till en hög av betalda “tasks”. Det gör det också enklare att lägga in kod där det gör skillnad, som att strukturera hashtag-output och ranka kandidater efter genomsnittliga gilla-markeringar/kommentarer. Zapier och Make kan fortfarande fungera om du håller det enkelt, men du kan stöta på friktion när du lägger till cache-logiken och rate control. Om du vill kan du prata med en automationsexpert och rimlighetskontrollera bästa upplägg för din publiceringsvolym. Målet är driftsäkerhet, inte verktygslojalitet.
Du sätter upp det här en gång, och din publiceringsrutin blir lättare. Workflowet sköter den repetitiva kontrollen och sorteringen så att du kan fokusera på själva innehållet.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.