Veckorapportering låter enkelt tills du jagar siffror i GA4, Google Ads, Meta Ads och HubSpot och sedan ska förklara varför totalerna inte stämmer. Det är tidsödande. Och ärligt talat är det här som “snabba uppdateringar” blir till sena kvällar.
Den här GA4 KPI-automatiseringen träffar marknadschefer först, men byråägare och operationsansvariga känner av den också. Du får en återanvändbar rapport som hämtar mätvärden, beräknar KPI:er och mejlar en strukturerad sammanfattning utan att du bygger om samma kalkylark varje måndag.
Nedan ser du hur arbetsflödet körs veckovis och månadsvis, hur det samlar data över flera plattformar och vad du kan justera så att mejlen ser ut som om de kom från ditt team (inte en robot).
Så här fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutresultat:
n8n Workflow Template: GA4 + Google Sheets: KPI-rapporter via Gmail
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger2", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger3", 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/code.svg' width='40' height='40' /></div><br/>check month and week1"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Websites and Campaings1", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Websites1", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Send Weekly Marketing report2", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n7@{ icon: "mdi:message-outline", form: "rounded", label: "Send Monthly Marketing Report2", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Websites1", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Attach Run Flags1", 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/code.svg' width='40' height='40' /></div><br/>Filter Google Ads By Website1"]
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/>Filter Meta Ads By Website1"]
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/code.svg' width='40' height='40' /></div><br/>Build Website Dataset1"]
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/merge.svg' width='40' height='40' /></div><br/>Merge1"]
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/code.svg' width='40' height='40' /></div><br/>Calculate KPIs & Campaign In.."]
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/code.svg' width='40' height='40' /></div><br/>Filter Hubspot Leads"]
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/code.svg' width='40' height='40' /></div><br/>Summarize Hubspot Leads"]
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/code.svg' width='40' height='40' /></div><br/>Prepare Report Data2"]
n18@{ icon: "mdi:message-outline", form: "rounded", label: "Send Weekly Marketing report3", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch3", pos: "b", h: 48 }
n20@{ icon: "mdi:message-outline", form: "rounded", label: "Send Monthly Marketing Report3", pos: "b", h: 48 }
n21["<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/>Prepare Report Data3"]
n22@{ icon: "mdi:database", form: "rounded", label: "Append or update row in sheet2", 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/code.svg' width='40' height='40' /></div><br/>Code in JavaScript1"]
n24@{ icon: "mdi:database", form: "rounded", label: "Append or update row in sheet3", pos: "b", h: 48 }
n25@{ icon: "mdi:cog", form: "rounded", label: "Get a report", pos: "b", h: 48 }
n26@{ icon: "mdi:cog", form: "rounded", label: "Get many campaigns", pos: "b", h: 48 }
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/>Fetch Meta Ads"]
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/hubspot.svg' width='40' height='40' /></div><br/>Fetch1"]
n28 --> n15
n13 --> n12
n6 --> n5
n6 --> n7
n19 --> n18
n19 --> n20
n25 --> n13
n27 --> n11
n4 --> n22
n4 --> n25
n4 --> n26
n4 --> n27
n8 --> n9
n9 --> n4
n0 --> n2
n1 --> n2
n26 --> n10
n23 --> n24
n15 --> n16
n17 --> n6
n21 --> n19
n2 --> n3
n2 --> n28
n12 --> n14
n16 --> n21
n11 --> n13
n3 --> n8
n10 --> n13
n20 --> n23
n14 --> n4
n14 --> n17
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,n1 trigger
class n6,n19 decision
class n22,n24 database
class n27 api
class n2,n10,n11,n12,n14,n15,n16,n17,n21,n23 code
classDef customIcon fill:none,stroke:none
class n2,n10,n11,n12,n13,n14,n15,n16,n17,n21,n23,n27,n28 customIcon
Problemet: KPI-rapportering blir verktygshoppande
De flesta KPI-rapporter faller på tråkiga orsaker. Någon exporterar GA4. Någon annan hämtar Google Ads. Meta Ads klistras in från en dashboard-skärmdump. Sedan ligger leads i HubSpot, vilket betyder en andra omgång grävande och filtrering på datum. När siffrorna väl landar i ett ark har ni redan börjat diskutera attribuering, namnkonventioner och vilket datumintervall någon använde. Även när slutmejlet ser “okej” ut litar du inte helt på det, så du dubbelkollar ändå. Det är den dolda kostnaden.
Det eskalerar snabbt. Här är var det går snett i verkliga team.
- Varje webbplats eller kund innebär en extra runda exporter, filter och kopiera/klistra in som kan äta upp cirka 2 timmar i veckan.
- Datumintervall används inkonsekvent, så veckosiffror går inte att stämma av mot månadssummeringar.
- KPI-matten sitter i någons huvud (eller i ett skört kalkylark), vilket gör att “CTR” och “CPA” varierar beroende på vem som byggde rapporten.
- Rapportering är lätt att hoppa över när det är mycket, så ledningen får bara uppdateringar när resultatet redan spårat ur.
Lösningen: ett enhetligt KPI-mejl, genererat automatiskt
Det här arbetsflödet körs på ett veckoschema och ett månadsschema och avgör sedan vilken typ av rapport som ska skapas. Det loopar igenom varje webbplats du definierar, hämtar analysdata, hämtar annonsresultat och slår ihop strömmarna till en dataset per sajt. Därefter beräknar det KPI:er som spend, CTR, CPA, CPL och konverteringar och skriver resultaten till Google Sheets så att du får en historik utan extra jobb. Till sist skapar det strukturerade e-postsammanfattningar och skickar dem via Gmail, så att intressenter får samma format varje gång. Parallellt hämtar det också HubSpot-leads, filtrerar dem till samma rapportfönster, summerar livscykelmått och inkluderar den CRM-vyn i din rapportkörning.
Arbetsflödet startar med veckovisa och månatliga triggers och sätter sedan “periodflaggor” som styr datumfönster och vilka mejl som ska gå ut. Därefter bygger det en prestationsbild per webbplats genom att kombinera GA4-liknande analys, Google Ads och Meta Ads. Till sist skickar det två tydliga mejl (marknadsresultat plus CRM-leads) och sparar båda dataset i Sheets.
Det här får du: automatisering vs. resultat
| Det här automatiserar arbetsflödet | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du hanterar 3 webbplatser. Manuellt kanske du lägger cirka 20 minuter på att hämta GA-liknande analytics, 20 minuter på att exportera Google Ads, ytterligare 20 minuter på att kolla Meta Ads och sedan 30 minuter på att strukturera det och skriva ett mejl. Det är ungefär 3 timmar för veckorapporten, plus en timme till för att summera HubSpot-leads. Med det här arbetsflödet är “jobbet” i princip noll efter uppsättning: schemana triggar körningen, arbetsflödet processar varje sajt automatiskt, skriver till Sheets och skickar mejlen. Du kanske bara lägger 10 minuter på att skumma sammanfattningen innan du vidarebefordrar den.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Självhostat alternativ om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra mätvärden och historik.
- Gmail för att skicka veckovisa och månatliga KPI-mejl.
- HubSpot för lead- och livscykelrapportering.
- Google Ads för att hämta kampanjresultat per sajt.
- Meta Ads API-åtkomst för att hämta resultat för betald social.
- OpenAI API-nyckel (hämta den i din OpenAI-kontodashboard).
Kunskapsnivå: Mellan. Du kopplar konton, bekräftar property-ID:n och justerar några fält i Sheets.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Veckovis eller månadsvis start. Två schematriggers körs vid dina valda tider. Ett litet steg med “periodflaggor” avgör om körningen är veckovis eller månadsvis, så att datumfönster och mejlrutter förblir konsekventa.
Utökning av sajtlista. Du definierar webbplatserna (och deras ID:n och mappade kampanjer), och sedan expanderar arbetsflödet listan till enskilda items. Varje sajt bär med sig vecko-/månadsflaggorna så att den kan processas oberoende.
Datainsamling och KPI-beräkning. För varje sajt hämtar arbetsflödet analysmätvärden, Google Ads-kampanjresultat och Meta Ads-data via API. Det filtrerar annonsdatan till rätt sajt, slår ihop strömmarna och räknar sedan ut KPI:er och några prestationsinsikter i JavaScript.
E-post + lagring. Mätvärden på sajtnivå läggs till eller uppdateras i Google Sheets, därefter byggs ett enhetligt rapportobjekt som routas till rätt Gmail-meddelande (veckovis eller månadsvis). HubSpot-leads hämtas och summeras i samma körning och skrivs sedan till ett andra ark för tydlig historisk spårning.
Du kan enkelt ändra listan över webbplatser för att inkludera fler properties utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera schematriggern
Konfigurera vecko- och månadsscheman som startar rapportcykeln och utvärderar rapportperioden.
- Öppna Weekly Schedule Kickoff och ställ in schemaregeln så att den körs veckovis på måndag kl.
09:00med det konfigurerade intervallet. - Öppna Monthly Schedule Kickoff och ställ in schemaregeln så att den körs månadsvis kl.
10:00. - Bekräfta att både Weekly Schedule Kickoff och Monthly Schedule Kickoff är kopplade till Evaluate Period Flags.
- Verifiera att Evaluate Period Flags returnerar flaggorna
isWeeklyochisMonthlymed hjälp av den medföljande JavaScript-koden.
Evaluate Period Flags skickar utdata parallellt till både Define Sites and Campaigns och Retrieve HubSpot Leads.
Steg 2: Anslut Google Analytics, Ads, Meta och Sheets
Anslut datakällor för analys, annonsplattformar och Google Sheets-utdata som används i hela arbetsflödet.
- Öppna Retrieve Analytics Report och ställ in Property ID till
={{$json.siteId}}för GA4-platspecifika mätvärden. Inloggning krävs: Anslut era Google Analytics-inloggningsuppgifter. - Öppna Fetch Ads Campaigns för att hämta Google Ads-data. Inloggning krävs: Anslut era Google Ads-inloggningsuppgifter.
- Öppna Pull Meta Ads Data och ställ in URL till
your-meta-ads-api-endpoint-here. Lägg till Query Parameters förfieldsochtime_range, och ställ in rubriken Authorization tillBearer [CONFIGURE_YOUR_TOKEN]. - Öppna Update Site Metrics Sheet och välj mål-Document och Sheet. Säkerställ att Operation är
appendOrUpdate. Inloggning krävs: Anslut era Google Sheets-inloggningsuppgifter. - Öppna Update Leads Sheet och välj mål-Document och Sheet. Låt Operation vara inställd på
appendOrUpdate. Inloggning krävs: Anslut era Google Sheets-inloggningsuppgifter.
⚠️ Vanlig fallgrop: Pull Meta Ads Data kommer att misslyckas om Meta API-token inte är giltig eller saknar behörigheter för insights-data.
Steg 3: Sätt upp webbplatsdefinitioner och iterering
Definiera vilka webbplatser och kampanjer som ska behandlas och dela sedan upp dem i batchar per webbplats för insamling av analys- och annonsdata.
- Öppna Define Sites and Campaigns och ställ in arrayen websites till den angivna JSON-listan med webbplatser och kampanjer.
- I Define Sites and Campaigns, mappa isWeekly till
={{ $json.isWeekly }}och isMonthly till={{ $json.isMonthly }}. - Öppna Expand Site List och ställ in Field To Split Out till
websitesmed Include inställd påallOtherFields. - Öppna Attach Period Flags och mappa fälten med uttryck: isWeekly
={{$items("Evaluate Period Flags")[0].json.isWeekly}}, isMonthly={{$items("Evaluate Period Flags")[0].json.isMonthly}}, name={{ $json.websites.name }}, siteId={{ $json.websites.siteId }}, campaigns={{ $json.websites.campaigns }}. - Öppna Iterate Sites och ställ in Batch Size till
=1för att behandla varje webbplats sekventiellt.
Iterate Sites skickar utdata parallellt till Update Site Metrics Sheet, Retrieve Analytics Report, Fetch Ads Campaigns och Pull Meta Ads Data för varje webbplats.
Steg 4: Sätt upp bearbetning och KPI-beräkning
Filtrera annonsdata per webbplats, slå ihop strömmar, sätt ihop dataset och beräkna KPI-insikter för rapportgenerering.
- Öppna Filter Google Ads by Site för att bekräfta att den filtrerar kampanjer baserat på aktuellt webbplatsnamn från Iterate Sites.
- Öppna Filter Meta Ads by Site för att bekräfta att den filtrerar kampanjer baserat på aktuellt webbplatsnamn från Iterate Sites.
- Öppna Combine Ads Streams och behåll Number of Inputs inställd på
3så att den slår ihop Google Analytics-, Google Ads- och Meta Ads-data. - Öppna Assemble Site Dataset för att verifiera att den bygger en samlad payload per webbplats med analytics- och annonsarrayer.
- Öppna Compute KPI Insights för att säkerställa att KPI-fälten beräknas och returneras under
websiteKPIs,googleAdsInsightsochmetaAdsInsights.
Compute KPI Insights skickar utdata parallellt till både Iterate Sites och Compose Marketing Report.
Steg 5: Konfigurera HubSpot-leadbearbetning och export till Sheets
Hämta HubSpot-leads, filtrera dem per period, summera dem och exportera den detaljerade leadlistan till Google Sheets.
- Öppna Retrieve HubSpot Leads och behåll Operation inställd på
getAllmed Limit250. Inloggning krävs: Anslut era HubSpot-inloggningsuppgifter. - Öppna Filter HubSpot Leads och bekräfta att den refererar till Evaluate Period Flags för att filtrera på 7 eller 30 dagar.
- Öppna Summarize HubSpot Leads och bekräfta att den genererar objektet
hubspotSummarymed status- och livscykeluppdelningar. - Öppna Compose HubSpot Summary för att säkerställa att den matar ut
reportTypeochreportDatetillsammans med summeringsdatan. - Öppna Transform Leads for Sheets och bekräfta att den skapar fält som
Report Date,Lead IDochCreated At. - Öppna Update Leads Sheet och mappa den till målarket där de transformerade leadsen ska lagras.
Email Monthly Lead Summary skickar utdata till Transform Leads for Sheets för att lagra månatliga leaddetaljer efter att mejlet har skickats.
Steg 6: Konfigurera e-postutskick och routing
Konfigurera mejl för marknadsförings- och leadrapporter och routa dem baserat på vecko- eller månadskörningar.
- Öppna Compose Marketing Report för att verifiera att den aggregerar webbplats-KPI:er och HubSpot-summering till ett enda rapportobjekt.
- Öppna Route Marketing Report och behåll reglerna som routar
={{ $json.reportType }}tillWeeklyellerMonthly. - Öppna Email Weekly Marketing Report och bekräfta att Send To är
example.comoch att Subject använder={{ $json.reportType }} Marketing Performance Report – {{ $json.reportDate.split('T')[0] }}. Inloggning krävs: Anslut era Gmail-inloggningsuppgifter. - Öppna Email Monthly Marketing Report och spegla vecko-inställningarna med samma ämnesuttryck. Inloggning krävs: Anslut era Gmail-inloggningsuppgifter.
- Öppna Route HubSpot Summary och behåll reglerna som routar
={{ $json.reportType }}tillWeeklyellerMonthly. - Öppna Email Weekly Lead Report och verifiera ämnesuttrycket
={{ $json.reportType }} Marketing Performance Report – {{ $json.reportDate.split('T')[0] }}. Inloggning krävs: Anslut era Gmail-inloggningsuppgifter. - Öppna Email Monthly Lead Summary och bekräfta ämnet
={{ $json.reportType }} HubSpot Lead Summary. Inloggning krävs: Anslut era Gmail-inloggningsuppgifter.
Steg 7: Testa och aktivera ert arbetsflöde
Kör ett manuellt test och verifiera att rapporter genereras, att mejl levereras och att Sheets uppdateras.
- Klicka på Execute Workflow och kör Weekly Schedule Kickoff för att simulera en veckorapport.
- Verifiera att Compute KPI Insights matar ut webbplats-KPI-objekt och att Update Site Metrics Sheet lägger till eller uppdaterar rader.
- Kontrollera att Email Weekly Marketing Report och Email Weekly Lead Report skickar meddelanden utan fel.
- Kör Monthly Schedule Kickoff för att validera månadgrenen och säkerställa att Email Monthly Marketing Report och Email Monthly Lead Summary triggas.
- När resultaten ser korrekta ut, växla arbetsflödet till Active för produktionsschemaläggning.
Vanliga fallgropar
- Google Sheets-autentisering kan gå ut eller kräva specifika behörigheter. Om det skapar fel, kontrollera först åtkomsten för det anslutna Google-kontot och delningsinställningarna för målarket.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder misslyckas på grund av tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera utdata i all evighet.
Vanliga frågor
Cirka en timme om dina konton och ID:n är redo.
Nej. Du kopplar konton och justerar några fält i Google Sheets. Arbetsflödets JavaScript-steg är redan byggda åt dig.
Ja. n8n har ett gratis självhostat 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 OpenAI API-användning och eventuella krav från annonsplattformarnas API:er.
Två alternativ: n8n Cloud (hanterat, enklast uppsättning) eller självhosting på en VPS. För självhosting är Hostinger VPS prisvärd och hanterar n8n bra. Självhosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en vanlig justering. Uppdatera steget “Define Sites and Campaigns” för att lägga till fler webbplatser eller kundmappningar, och justera sedan innehållet i “Compose Marketing Report” som matar Gmail-stegen. Många team ändrar också KPI-definitionerna i “Compute KPI Insights” så att CPA/CPL matchar interna regler, och de byter namn på fält innan de skriver till Sheets för att hålla dashboards prydliga.
Oftast beror det på utgången Google-autentisering eller att du saknar åtkomst till målarket. Anslut Google-kontot på nytt i n8n och bekräfta sedan att kalkylarket är delat med det kontot och att rätt worksheet/flik fortfarande finns kvar. Om du nyligen duplicerade arket kan arbetsflödet fortfarande peka på det gamla fil-ID:t.
Dussintals, så länge dina API-gränser och n8n:s exekveringskapacitet hänger med.
Ofta, ja, eftersom arbetsflödet kräver förgrening (veckovis vs. månadsvis), loopning över flera webbplatser, sammanslagning av flera datakällor och konsekvent KPI-matematik i en och samma körning. Zapier och Make kan lösa delar av det, men det blir dyrt och skört så fort du lägger till fler sajter eller mer logik. n8n ger dig också möjligheten att självhosta, vilket är användbart när rapportvolymen växer. Om du bara behöver en enkel “skicka mig ett GA4-mejl varje måndag” kan enklare verktyg räcka. Prata med en automationsexpert om du vill ha hjälp att välja.
När detta väl rullar blir rapportering bara bakgrundsbrus. Arbetsflödet tar hand om det repetitiva, och du lägger tiden på beslut i stället för kalkylark.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.