Du lanserar. Folk börjar stjärnmarkera, forka, rösta och installera. Sedan börjar grovjobbet: logga in på fyra plattformar, kopiera siffror till ett kalkylark och försöka minnas hur “bra” såg ut förra veckan.
Det här problemet med en GitHub Sheets-dashboard drabbar produktmarknadsförare först (veckouppdateringar tar aldrig slut). Men grundare som jagar tidig traction och byråteam som rapporterar till kunder känner av det också. Du vill ha en vy som alltid är aktuell utan att du behöver vaka över den.
Det här arbetsflödet hämtar live-mätvärden från GitHub, Docker Hub, npm och Product Hunt enligt schema, formaterar dem korrekt och skickar dem till en kalkylarksanpassad dashboard. Du får se vad det gör, vad du behöver och var folk oftast kör fast.
Så fungerar den här automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: GitHub + Google Sheets: en levande traction-översikt
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Scheduled Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Dashboard Settings", pos: "b", h: 48 }
n2["<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 Docker Metrics"]
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/>Post Docker Pulls"]
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 Docker Stars"]
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/>Fetch npm Metrics"]
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/>Post GitHub Watchers"]
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 GitHub Forks"]
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/>Post GitHub Issues"]
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/>Post GitHub Stars"]
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 npm Maintenance"]
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/>Post npm Popularity"]
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/>Post npm Quality"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Post npm Final"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Post Product Hunt Rating"]
n15["<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 Product Hunt Reviews"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Post Product Hunt Votes"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Post Product Hunt Comments"]
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/github.dark.svg' width='40' height='40' /></div><br/>Fetch GitHub Repo"]
n19["<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 Product Hunt Data"]
n20@{ icon: "mdi:code-braces", form: "rounded", label: "Transform npm Metrics", pos: "b", h: 48 }
n21@{ icon: "mdi:code-braces", form: "rounded", label: "Format Product Hunt Data", pos: "b", h: 48 }
n22@{ icon: "mdi:code-braces", form: "rounded", label: "Format Docker Metrics", pos: "b", h: 48 }
n23@{ icon: "mdi:code-braces", form: "rounded", label: "Format GitHub Metrics", pos: "b", h: 48 }
n0 --> n1
n18 --> n23
n20 --> n10
n20 --> n12
n20 --> n11
n20 --> n13
n5 --> n20
n22 --> n4
n22 --> n3
n23 --> n9
n23 --> n6
n23 --> n7
n23 --> n8
n2 --> n22
n1 --> n19
n1 --> n5
n1 --> n2
n1 --> n18
n21 --> n14
n21 --> n15
n21 --> n16
n21 --> n17
n19 --> n21
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n19 api
class n20,n21,n22,n23 code
classDef customIcon fill:none,stroke:none
class n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19 customIcon
Utmaningen: traction-mätvärden utspridda över flera plattformar
Traction är brusigt, och datan finns på de sämsta ställena. GitHub har stjärnor, forks, watchers och öppna issues. Docker Hub har pulls och stjärnor. npm har signaler för kvalitet, popularitet och underhåll. Product Hunt har röster, kommentarer, recensioner och betyg. När de siffrorna ligger i fyra olika flikar hamnar du i samma loop om och om igen: “kolla, kopiera, klistra in, formatera”, oftast precis innan ett möte. Och ärligt talat är det då misstagen smyger sig in: du klistrar in i fel cell, glömmer att uppdatera en källa och plötsligt stämmer inte berättelsen du drar med verkligheten.
Det blir snabbt mycket. Här är var det faller isär i det dagliga arbetet.
- Du slösar ungefär 30 minuter per uppdatering bara på att samla in siffrorna, och det är innan du gör dem läsbara.
- Manuella ögonblicksbilder döljer momentum, så du missar när ett lanseringsinlägg faktiskt gav effekt.
- Olika källor använder olika etiketter och format, vilket gör att din “dashboard” blir ett skört kalkylarksprojekt.
- Om två personer uppdaterar samma rapport driver siffrorna isär och ingen litar på arket längre.
Lösningen: En schemalagd traction-dashboard som uppdaterar sig själv
Det här arbetsflödet gör din traction-uppföljning till en bakgrundsprocess. Enligt schema (varje minut i standardupplägget) anropar n8n API:erna för GitHub, Docker Hub, npm och Product Hunt. Varje källa kommer tillbaka i sitt eget format, så arbetsflödet formaterar om svaren till konsekventa, dashboard-klara fält. Sedan skickar det mätvärdena till din dashboard-destination, där Google Sheets (och valfritt Microsoft Excel 365) kan visa siffrorna live. Resultatet är enkelt: i stället för att jaga mätvärden öppnar du ett kalkylark och ser aktuellt läge över alla fyra kanaler, formaterat på samma sätt varje gång.
Arbetsflödet börjar med en Cron-trigger och ett block för “dashboardinställningar” så att du kan definiera vad som ska spåras. Därefter hämtar det råa mätvärden, gör snabba transformationer i Function-noder och skickar de rensade värdena till utsteg (noderna “Post …”). Ditt kalkylark blir den enda vyn som alltid är uppdaterad.
Vad som förändras: före vs. efter
| Det här eliminerar du | Effekten du kommer att se |
|---|---|
|
|
Effekt i verkligheten
Säg att du gör en traction-uppdatering tre gånger i veckan. Manuellt kollar du fyra plattformar, plockar 10–12 siffror och städar arket, vilket är ungefär 30 minuter per uppdatering (cirka 1,5 timmar i veckan). Med det här arbetsflödet är “jobbet” i princip att öppna arket och skriva din sammanfattning. Datainsamlingen blir en snabb överblick, och automatiseringen sköter hämtningen varje minut i bakgrunden.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- GitHub för att hämta repo-stjärnor, forks, watchers och issues.
- Google Sheets för att lagra och visa dashboard-mätvärdena.
- Product Hunt API-token (hämta den i dina Product Hunt-utvecklarinställningar).
Svårighetsnivå: Medel. Du kopplar konton, lägger in API-uppgifter och säkerställer att fälten matchar din arklayout.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet i arbetsflödet
En schemalagd trigger kör automatiskt. Cron-noden triggar varje minut som standard, så din dashboard kan vara “live” utan att någon behöver klicka på en knapp.
Inställningar definierar vad som spåras. Ett steg för dashboardinställningar samlar repo-/paketidentifierare och eventuella ID:n som behövs för Product Hunt, vilket gör resten av arbetsflödet rent och återanvändbart.
Varje plattform hämtas och normaliseras. GitHub använder en dedikerad GitHub-nod för att hämta repodata, medan Docker Hub, npm och Product Hunt hämtas via HTTP Request-anrop. Function-noder formaterar sedan de råa svaren till konsekventa mätvärden (till exempel genom att göra npm:s multi-score-utdata till fält för underhåll/kvalitet/popularitet).
Mätvärden skickas till utdata som du kan rapportera från. Noderna “Post …” skickar de rensade värdena till din dashboard-destination, som kan vara Google Sheets och, om du behöver det, Microsoft Excel 365 för team som arbetar i Microsoft 365.
Du kan enkelt ändra vilka mätvärden som spåras så att de matchar dina KPI:er utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-implementeringsguide
Steg 1: konfigurera cron-triggern
Det här arbetsflödet körs enligt ett återkommande schema för att uppdatera er instrumentpanel med mätvärden.
- Öppna Scheduled Trigger och ställ in schemat i Trigger Times.
- För den nuvarande konfigurationen, låt Mode vara inställd på
everyMinuteom ni vill ha täta uppdateringar. - Koppla Scheduled Trigger till Dashboard Settings som första steg i flödet.
Steg 2: anslut Dashboard Settings
Definiera kärnparametrarna som alla API-anrop kommer att återanvända.
- Öppna Dashboard Settings och sätt dashboardHostname till
http://0.0.0.0:8080. - Sätt dashboardAuthToken till
n8n-rocks!(ersätt med er riktiga token). - Fyll i produktidentifierarna: product_hunt_post_id =
170391, npm_package =n8n, docker_name =n8nio, docker_repository =n8n, github_owner =n8n-io, github_repo =n8n. - Säkerställ att Dashboard Settings skickar utdata till Fetch Product Hunt Data, Fetch npm Metrics, Fetch Docker Metrics och Fetch GitHub Repo parallellt.
Steg 3: konfigurera datahämtning (parallella grenar)
Dessa noder hämtar mätvärden från externa tjänster samtidigt efter att inställningarna är definierade.
- I Fetch Docker Metrics sätter ni URL till
=https://hub.docker.com/v2/repositories/{{$node["Dashboard Settings"].json["docker_name"]}}/{{$node["Dashboard Settings"].json["docker_repository"]}}och behåller värdetn8ni headern User-Agent. - I Fetch npm Metrics sätter ni URL till
=https://api.npms.io/v2/package/{{$node["Dashboard Settings"].json["npm_package"]}}och behåller värdetn8ni headern User-Agent. - I Fetch Product Hunt Data sätter ni URL till
https://api.producthunt.com/v2/api/graphql, Request Method tillPOSToch lägger till frågeparametern query med det angivna GraphQL-uttrycket. - I Fetch Product Hunt Data sätter ni headern authorization till
Bearer [CONFIGURE_YOUR_TOKEN]och ersätter med er Product Hunt-token. - Öppna Fetch GitHub Repo och sätt Resource till
repository, Operation tillget, Owner till={{$node["Dashboard Settings"].json["github_owner"]}}och Repository till={{$node["Dashboard Settings"].json["github_repo"]}}. - Autentisering krävs: anslut era githubApi-uppgifter i Fetch GitHub Repo.
[CONFIGURE_YOUR_TOKEN] med en giltig token i Fetch Product Hunt Data.Dashboard Settings skickar utdata till Fetch Product Hunt Data och Fetch npm Metrics och Fetch Docker Metrics och Fetch GitHub Repo parallellt.
Steg 4: formatera och transformera mätvärden
Normalisera och formatera råa mätvärden innan ni skickar dem till era dashboard-widgets.
- Öppna Format Docker Metrics och behåll Function Code som formaterar
star_countochpull_countmed tusentalsavgränsare. - Öppna Transform npm Metrics och behåll avrundningslogiken för poängen
maintenance,popularity,qualityochfinal. - Öppna Format GitHub Metrics för att formatera
stargazers_count,subscribers_count,forks_countochopen_issues_countmed tusentalsavgränsare. - Öppna Format Product Hunt Data för att formatera
commentsCount,votesCountochreviewsCountmed tusentalsavgränsare. - Säkerställ att Fetch Docker Metrics → Format Docker Metrics, Fetch npm Metrics → Transform npm Metrics, Fetch GitHub Repo → Format GitHub Metrics och Fetch Product Hunt Data → Format Product Hunt Data är kopplade.
Format Docker Metrics skickar utdata till både Post Docker Stars och Post Docker Pulls parallellt, och Transform npm Metrics skickar utdata till Post npm Maintenance, Post npm Quality, Post npm Popularity och Post npm Final parallellt.
Format GitHub Metrics skickar utdata till både Post GitHub Stars och Post GitHub Watchers och Post GitHub Forks och Post GitHub Issues parallellt, och Format Product Hunt Data skickar utdata till Post Product Hunt Rating, Post Product Hunt Reviews, Post Product Hunt Votes och Post Product Hunt Comments parallellt.
Steg 5: konfigurera utdata-/åtgärdsnoder
Posta alla mätvärden till era dashboard-widgets med HTTP Request-noderna.
- För Post Docker Stars och Post Docker Pulls, sätt URL till
={{$node["Dashboard Settings"].json["dashboardHostname"]}}/widgets/docker_starsrespektive={{$node["Dashboard Settings"].json["dashboardHostname"]}}/widgets/docker_pulls, med Request Method =POST, och body-parametrar auth_token =={{$node["Dashboard Settings"].json["dashboardAuthToken"]}}och current =={{$node["Format Docker Metrics"].json["star_count"]}}/={{$node["Format Docker Metrics"].json["pull_count"]}}. - För Post npm Maintenance, Post npm Quality, Post npm Popularity och Post npm Final, behåll Request Method =
POSToch sätt varje URL till dess widget-endpoint, till exempel={{$node["Dashboard Settings"].json["dashboardHostname"]}}/widgets/npm_quality, med body-parametern value som använder motsvarande poäng frånTransform npm Metrics. - För Post GitHub Stars, Post GitHub Watchers, Post GitHub Forks och Post GitHub Issues, sätt varje URL till dess widget-sökväg och body current till motsvarande fält i
Format GitHub Metrics. - För Post Product Hunt Rating, Post Product Hunt Reviews, Post Product Hunt Votes och Post Product Hunt Comments, sätt varje URL till dess widget-endpoint och body till
reviewsRating,reviewsCount,votesCountochcommentsCountfrån den formaterade Product Hunt-datan. - Eftersom det finns 17+ HTTP request-noder, verifiera att fälten URL och auth_token är konsekventa i alla noder som postar till dashboarden.
Steg 6: testa och aktivera ert arbetsflöde
Kör en manuell exekvering för att validera dataflödet och aktivera sedan schemat.
- Klicka på Execute Workflow för att trigga Scheduled Trigger manuellt och observera de parallella hämtningarna och postningarna.
- En lyckad körning ser ut som slutförda körningar på alla postningsnoder, till exempel Post Docker Stars, Post npm Final, Post GitHub Stars och Post Product Hunt Comments, utan fel.
- Kontrollera er dashboard för att bekräfta att widgetvärdena har uppdaterats med formaterade antal och poäng.
- När ni är redo för produktion, slå på reglaget Active för arbetsflödet för att aktivera schemalagda körningar från Scheduled Trigger.
Saker att se upp med
- Product Hunt-uppgifter kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera först statusen för din token i Product Hunts utvecklarinställningar.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om noder längre fram misslyckas på grund av tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att sitta och redigera utdata för alltid.
Vanliga frågor
Vanligtvis ungefär en timme när du har API-uppgifterna.
Ja, men någon behöver vara bekväm med att koppla konton och testköra ett flöde. Ingen kodning, bara noggrann konfiguration.
Ja. n8n har ett gratis alternativ för egen drift 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 API-kostnader för betalda endpoints du anropar (GitHub och Product Hunt kan vara gratis beroende på användning).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger obegränsade körningar men kräver grundläggande serverhantering.
Du kan byta vad som spåras i steget “Dashboard Settings” och sedan justera noderna “Format GitHub Metrics”, “Format Docker Metrics” och “Format Product Hunt Data” så att de matchar dina kolumner i arket. Vanliga justeringar är att spåra flera repos, lägga till fler GitHub-fält som antal releaser och ändra schemat från varje minut till en gång per timme. Om du vill ha narrativa sammanfattningar behåller du AI Agent/OpenAI Chat Model-noden och låter den skriva en veckoblurb i en separat flik i arket.
Oftast beror det på att tokenen har löpt ut eller att tokenen inte har åtkomst till repot du frågar efter. Anslut GitHub-uppgiften på nytt i n8n och kör sedan om noden “Fetch GitHub Repo” för att bekräfta att den returnerar data. Om du slår i rate limits vid frekventa uppdateringar, sänk Cron-frekvensen och undvik att hämta extra fält du inte använder.
Om du kör egen drift finns ingen körningsgräns (din server är begränsningen). På n8n Cloud har Starter-planen en månatlig körningskvot och högre nivåer klarar mer. I praktiken är det här arbetsflödet lätt: det är en handfull API-anrop per körning, så de flesta små team kan uppdatera varje timme eller dagligen utan att behöva tänka på kapacitet.
Ofta, ja, eftersom det här upplägget kräver flera HTTP-anrop, formateringslogik och utskick till flera mätvärdesfält. n8n hanterar förgreningar och transformationer utan att du behöver betala per “gren”, och egen drift gör högfrekventa uppdateringar kostnadseffektiva. Zapier och Make är fortfarande bra för en enkel tvåapps-synk, men de kan bli klumpiga när du normaliserar data från fyra källor. Dessutom innehåller det här arbetsflödet redan formateringssteg (Function-noderna) så att ditt ark håller sig korrekt formaterat. Om du vill ha hjälp att välja, prata med en automationsexpert så mappar vi det mot din rapporteringsrytm.
En live traction-dashboard förändrar hur du driver lanseringar. Arbetsflödet hanterar den repetitiva insamlingen och formateringen, så att du kan fokusera på vad siffrorna faktiskt säger.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.