Poslovna automatizacija
n8nAutomatizacijaIzvještavanjeGA4StripePostgreSQLSlackE-mailKvaliteta podataka

Automatizirano izvještavanje s n8n: izradite tjedne KPI sažetke iz GA4, Stripea i Postgresa

AO
Adrijan Omićević
·17 min čitanja

# Što ćete izgraditi#

Ovaj vodič prikazuje produkcijski spreman pristup automatiziranom izvještavanju s n8n: tjedni KPI sažetak koji povlači podatke iz GA4, Stripea i Postgresa, agregira metrike, generira sažet narativ i šalje ga u Slack i e-mail prema rasporedu.

Fokus je na dijelovima koji dugoročno čine reporting workflowe uspješnima: stabilne definicije metrika, provjere kvalitete podataka, ponovni pokušaji, idempotentnost i struktura koju kolega može sigurno mijenjati.

# Preduvjeti i pretpostavke#

Možete pratiti vodič i ako se vaši KPI-jevi razlikuju, sve dok možete dohvatiti temeljne podatke.

ZahtjevPreporučenoNapomene
n8n1.40 ili novijiNovije verzije poboljšavaju rukovanje greškama i UX za credentials
GA4 pristupOmogućen Analytics Data APIKoristite OAuth2 ili service account ovisno o pravilima organizacije
Stripe pristupRestricted API keyPreferirajte restricted ključeve umjesto punih secret ključeva
Postgres pristupRead-only korisnik za reportingDodajte zasebnu shemu za reporting tablice ako spremate agregate
SlackIncoming webhook ili Slack credentialWebhook je najjednostavniji za jedan kanal
E-mailSMTP credential ili provider nodeKoristite zajednički mailbox za poslovno izvještavanje

ℹ️ Napomena: GA4 podaci često dolaze s odgodom. Mnogi timovi “tjedne” sažetke pokreću u utorak ujutro za prethodni prozor ponedjeljak–nedjelja kako bi izbjegli nepotpune brojke.

# Korak 1: Dizajnirajte KPI ugovor prije nego taknete n8n#

Najbrži način da napravite nepouzdano izvještavanje je krenuti spajati nodeove bez definiranih metrika. Definirajte KPI ugovor koji za svaku brojku odgovara na tri pitanja.

  1. 1
    Koja je točna definicija i izvor istine.
  2. 2
    Koji je izvještajni prozor i vremenska zona.
  3. 3
    Koje su prihvatljive granice i načini neuspjeha.

Dobar početni set KPI-jeva za SaaS ili pretplatnički proizvod izgleda ovako:

KPIIzvorDefinicijaNapomene
SessionsGA4Sessions u izvještajnom prozoruOsigurajte istu vremensku zonu pri svakom izvođenju
ConversionsGA4Broj ključnih eventova ili kupnjiKoristite eksplicitnu listu naziva eventova
New customersStripeBroj kreiranih customersRazmislite o deduplikaciji ako importate customers
Gross revenueStripeZbroj plaćenih invoices ili chargesOdlučite uključujete li refunds
RefundsStripeZbroj kreiranih refundsUključite djelomične refunds
Active usersPostgresKorisnici s eventom aktivnosti u prozoruOvisi o vašoj shemi proizvoda
Trial to paidPostgres plus StripePokrenuti trialovi naspram prve uplateČesto zahtijeva spajanje sustava

🎯 Ključna poruka: Održivost počinje stabilnim definicijama metrika. Tretirajte KPI-jeve kao API: verzionirajte ih, dokumentirajte i mijenjajte namjerno.

# Korak 2: Arhitektura workflowa za održivost#

Tjedni sažetak lakše je održavati kada je workflow podijeljen u predvidljive faze.

Preporučene faze#

FazaSvrhaIzlaz
Schedule and windowDefinirati početne i završne datumereportContext objekt
FetchPovlačenje sirovih podataka iz svakog sustavaSirovi odgovori spremljeni ili logirani
NormalizePretvaranje u zajedničku shemu metrikaKonzistentna numerička polja
ValidateProvjere kvalitete i potpunosti podatakaProlaz/pad s jasnim razlozima
AggregateIzračun totala, delta i omjeraFinalni KPI objekt
SummarizeGeneriranje kratkog narativaTekst spreman za Slack i tijelo e-maila
DeliverSlanje u Slack i e-mailID-ovi poruka, status isporuke
PersistOpcionalno: spremanje rezultata u PostgresTjedni snapshot za trendove

Predloženi raspored n8n nodeova#

Koristite jedan glavni workflow koji orkestrira sub-workflowe ili sve držite u jednom workflowu s jasno označenim sekcijama.

UzorakKada koristitiPrednostiNedostaci
Single workflowRana faza, manje metrikaLakše debugirati na jednom canvasuMože postati neuredno kroz mjesece
Orchestrator plus sub-workflowsViše izvora podataka, više timovaPonovna upotreba, razdvajanje odgovornostiTraži disciplinu u inputima i outputima

Ako tim očekuje širenje reportinga, krenite s pristupom temeljenim na predlošku i ponovno koristite obrasce. To se dobro nadopunjuje s n8n predlošcima workflowa kako bi automatizacije ostale konzistentne dok dodajete nove sažetke.

# Korak 3: Kreirajte robustan tjedni izvještajni prozor#

Izvještajni prozor treba biti deterministički i siguran s obzirom na vremenske zone. Koristite ISO datume i izračunajte zadnji puni tjedan na jednom mjestu tako da svaki izvor podataka koristi isti prozor.

Logika prozora#

Čest izbor je zadnji puni ponedjeljak do nedjelje u poslovnoj vremenskoj zoni, a pokretanje u utorak u 08:00.

ParametarPrimjerZašto je važno
Poslovna vremenska zonaEurope ZagrebUsklađuje se s time kako dionici tumače “tjedno”
Početak tjednaMondayOdgovara uobičajenom EU reportingu
Vrijeme pokretanjaTuesday 08:00Daje vremena za GA4 i Stripe processing lag
ProzorPrior Mon 00:00 to Sun 23:59:59Sprječava podatke iz djelomičnog tjedna

Evo sažetog isječka za Code node za izračun prozora zadnjeg punog tjedna (ponedjeljak–nedjelja). Držite ga među prvim nodeovima i proslijedite dalje.

JavaScript
// n8n Code node
const tz = 'Europe/Zagreb';
 
function toISODate(d) {
  return d.toISOString().slice(0, 10);
}
 
// Use UTC dates to avoid local runtime differences, but keep business logic consistent.
const now = new Date();
 
// Find last Monday 00:00:00 for the previous full week.
const day = now.getUTCDay(); // Sun=0..Sat=6
const daysSinceMonday = (day + 6) % 7; // Mon=0..Sun=6
// Go to this week's Monday, then subtract 7 days to get last week's Monday.
const thisMonday = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() - daysSinceMonday));
const start = new Date(thisMonday.getTime() - 7 * 24 * 60 * 60 * 1000);
const end = new Date(thisMonday.getTime() - 1); // last millisecond of Sunday
 
return [
  {
    reportContext: {
      timezone: tz,
      windowStartISO: toISODate(start),
      windowEndISO: toISODate(end),
      windowStartUTC: start.toISOString(),
      windowEndUTC: end.toISOString(),
      weekLabel: `${toISODate(start)} to ${toISODate(end)}`,
    },
  },
];

⚠️ Upozorenje: Izbjegavajte prozore tipa “zadnjih 7 dana” za tjedne izvještaje. Pomaknu se po danima i usporedbe tjedan-na-tjedan postaju varljive.

# Korak 4: Dohvatite GA4 KPI-jeve s konzistentnim dimenzijama i filterima#

Za GA4 koristite Analytics Data API. Odlučite unaprijed želite li metrike na razini cijelog propertyja ili filtrirane na određene hostnames, paths ili conversion eventove.

Primjeri GA4 metrika za povlačenje#

MetrikaGA4 metric nameTipična dimenzijaNapomene
SessionssessionsdateBazni promet
UserstotalUsersdateKorisno za provjeru smislenosti sessions
Key eventseventCounteventNameFiltrirajte na ključne eventove
PurchasespurchasesdateAko koristite GA4 ecommerce

Koristite HTTP Request node za poziv GA4 runReport endpointa. Držite request i mapping odvojene kako promjene metrika ne bi razbile parsiranje.

Bash
# GA4 Analytics Data API endpoint
POST https://analyticsdata.googleapis.com/v1beta/properties/PROPERTY_ID:runReport
JSON
{
  "dateRanges": [{ "startDate": "2026-05-19", "endDate": "2026-05-25" }],
  "metrics": [{ "name": "sessions" }, { "name": "totalUsers" }],
  "dimensions": [{ "name": "date" }]
}

Normalizirajte GA4 odgovor#

U Code nodeu pretvorite GA4 string vrijednosti u brojeve i proizvedite jedan objekt.

JavaScript
// Input: GA4 API JSON
const rows = $json.rows || [];
let sessions = 0;
let users = 0;
 
for (const r of rows) {
  const m = r.metricValues || [];
  sessions += Number(m[0]?.value || 0);
  users += Number(m[1]?.value || 0);
}
 
return [{
  ga4: { sessions, users }
}];

💡 Savjet: Kad validacija padne, uvijek logirajte i request payload i sirovi GA4 odgovor. Znatno skraćuje debugging kad GA4 vrati sampled ili prazne podatke zbog filtera.

# Korak 5: Dohvatite Stripe KPI-jeve s jasnim definicijama prihoda#

Prihod u Stripeu može značiti različite stvari. Odaberite jednu definiciju i kodirajte je kao KPI ugovor.

Opcije definicije prihoda#

OpcijaŠto mjeriNajbolje zaČesta zamka
Charges paidNaplaćeni iznosJednokratna plaćanjaIzostavlja invoices i neke subscription tokove
Invoices paidPrihod od pretplataSaaS naplataTreba prilagodbe za credits i proration
Balance transactionsNeto kretanje novcaUsklađenje s financijamaSloženije za tjedno usklađivanje

Za tjedne KPI sažetke, “paid invoices” je često najbolji kompromis za SaaS jer prati lifecycle pretplate.

Dohvatite plaćene invoices u datom prozoru, zbrojite amount_paid, zatim povucite refunds u istom prozoru. Koristite auto-pagination kako ne biste propuštali zapise kad volumen poraste.

Stripe node je ok, ali HTTP Request vam daje eksplicitnu kontrolu. Držite svaki poziv mali i ograničen.

Bash
# List invoices paid during window
GET https://api.stripe.com/v1/invoices?limit=100&status=paid&created[gte]=START_TS&created[lte]=END_TS

Normalizirajte u svoju KPI shemu:

JavaScript
const invoices = $json.data || [];
const gross = invoices.reduce((sum, inv) => sum + (inv.amount_paid || 0), 0);
 
return [{
  stripe: {
    invoiceCount: invoices.length,
    grossRevenue: gross / 100
  }
}];

Provjere kvalitete podataka za Stripe#

Stripe je uglavnom konzistentan, ali svejedno želite zaštitne ograde.

ProvjeraPraviloZašto
Konzistentnost valuteSve invoices u istoj valutiSprječava zbrajanje EUR i USD
Razumnost iznosagrossRevenue veći ili jednak 0Otkriva bugove u parsiranju
Razumnost volumenainvoiceCount u očekivanom rasponuOtkriva greške u API paginaciji

# Korak 6: Povucite produkt KPI-je iz Postgresa#

Postgres je mjesto gdje možete izračunati metrike korištenja proizvoda i lifecycle metrike koje ne postoje u GA4 ili Stripeu, poput weekly active users, signups po planu ili usvajanja featurea.

Koristite Postgres node s parametriziranim upitima. Držite SQL u zasebnim nodeovima i dodajte komentare kako bi promjene bile sigurne.

Primjeri KPI-jeva iz tipične produkt sheme#

KPIPrimjer mete upitaNapomene
Weekly active usersevents tablicaBroj jedinstvenih user ID-jeva u prozoru
New signupsusers tablicaFiltrirajte po created_at
Trials startedsubscriptions tablicaFiltrirajte po trial start
Activation rateizvedenoActivated podijeljeno sa signups

Primjer upita za weekly active users:

SQL
SELECT
  COUNT(DISTINCT user_id) AS wau
FROM events
WHERE occurred_at >= $1
  AND occurred_at <= $2;

U n8n proslijedite windowStartUTC i windowEndUTC iz reportContext.

ℹ️ Napomena: Ako vaša baza sprema timestamps bez vremenske zone, standardizirajte konverzije na granici upita. Bugovi u reportingu često nastaju miješanjem UTC-a i lokalnog vremena u usporedbama.

# Korak 7: Normalizirajte sve u jedan KPI objekt#

Kad svaki izvor vrati metrike, spojite ih u jedan objekt s konzistentnim imenovanjem i jedinicama.

Praktična normalizirana shema:

PoljeTipPrimjerIzvor
weekLabelstring2026-05-19 to 2026-05-25Kontekst
sessionsnumber12450GA4
usersnumber8920GA4
grossRevenuenumber18350.25Stripe
refundsnumber320.00Stripe
waunumber1560Postgres
signupCountnumber210Postgres

U n8n koristite Merge node u “merge by position” ako imate jedan item po grani, zatim Code node za finalni objekt.

JavaScript
const ctx = $json.reportContext;
const ga4 = $json.ga4 || {};
const stripe = $json.stripe || {};
const pg = $json.pg || {};
 
const kpis = {
  weekLabel: ctx.weekLabel,
  sessions: Number(ga4.sessions || 0),
  users: Number(ga4.users || 0),
  grossRevenue: Number(stripe.grossRevenue || 0),
  invoiceCount: Number(stripe.invoiceCount || 0),
  wau: Number(pg.wau || 0),
};
 
return [{ kpis, reportContext: ctx }];

# Korak 8: Dodajte provjere kvalitete podataka koje sprječavaju loše izvještaje#

Automatizirano izvještavanje tiho podbaci kad upstream sustavi vrate djelomične podatke. Dodajte eksplicitne provjere i zaustavite workflow prije slanja bilo čega obmanjujućeg.

Praktična validacijska pravila#

PraviloPrimjer pragaRadnja ako padne
Obvezna polja prisutnasessions, grossRevenue, wauFail i alert
Nenegativne metrikesvi numerički KPI-jevi veći ili jednaki 0Fail
GA4 potpunostusers veći od 0 u tjednima bez praznikaWarn ili fail
Stripe potpunostinvoiceCount konzistentan s povijesnim baselineomWarn
Detekcija skokovapromjena tjedan-na-tjedan veća od 50 postoPošalji s warning bannerom
Svježina podatakakraj prozora je barem 24 sata iza sadaFail ako je previše recentno

Implementirajte validaciju u Code nodeu koji emitira ili status: ok ili baca grešku. Greške trebaju ići kroz centraliziranu logiku ponovnih pokušaja i alertinga.

JavaScript
const k = $json.kpis;
 
const errors = [];
if (k.sessions <= 0) errors.push('GA4 sessions is 0 or missing');
if (k.grossRevenue < 0) errors.push('Stripe grossRevenue is negative');
if (k.wau <= 0) errors.push('Postgres WAU is 0 or missing');
 
if (errors.length) {
  throw new Error(`KPI validation failed: ${errors.join(' | ')}`);
}
 
return [{ ...$json, validation: { status: 'ok' } }];

⚠️ Upozorenje: Ne “šaljite svejedno” kad validacija padne. Dionici brzo gube povjerenje kad distribuirate pogrešne brojke, a povjerenje je teško vratiti.

Za dublji obrazac oko ponovnih pokušaja i notifikacija, uskladite ovaj workflow sa svojim standardnim pristupom za n8n rukovanje greškama, ponovne pokušaje i alerting.

# Korak 9: Dodajte ponovne pokušaje i idempotentnost kako bi tjedna izvođenja bila sigurna#

Tjedni reporting je idealan kandidat za strukturiranu logiku ponovnih pokušaja jer su padovi obično prolazni: GA4 API zastoji, Stripe rate limits ili kratki prozor održavanja Postgresa.

Preporučena strategija retryja po izvoru#

IzvorČest problemRetry pristupBackoff
GA4 API429 rate limit, 5xxRetry 3 puta30s, 2m, 5m
Stripe429, network timeoutsRetry 3 puta30s, 2m, 5m
Postgresconnection timeoutRetry 2 puta30s, 2m
Slack ili e-mailprolazni network problemRetry 2 puta30s, 2m

Ako retryje implementirate u n8n na razini nodea, osigurajte da također pratite je li izvještaj već isporučen.

Idempotency obrazac#

Spremite zapis tjednog izvještaja u Postgres s jedinstvenim ključem za tjedan. Isporučite samo ako zapis nije označen kao isporučen.

StupacTipPrimjer
week_startdate2026-05-19
week_enddate2026-05-25
payloadjsonbnormalizirani KPI-jevi i sažetak
delivered_attimestamptznull ili timestamp
delivery_channeltextslack, email

Zatim workflow može raditi ovako:

  1. 1
    Izračunaj prozor.
  2. 2
    Provjeri postoji li zapis i je li delivered.
  3. 3
    Ako je delivered, stani.
  4. 4
    Ako nije delivered, izračunaj KPI-jeve i sažetak, upsertaj zapis.
  5. 5
    Isporuči.
  6. 6
    Ažuriraj delivered_at.

To sprječava duple Slack poruke kad ponovno pokrećete executions.

# Korak 10: Generirajte sažet pregled koji ljudi stvarno čitaju#

Executives i product leadovi žele priču, ne zid brojeva. Sažetak treba stati u jednu Slack poruku bez scrollanja na mobitelu.

Struktura sažetka koja radi#

SekcijaSadržajMaks. duljina
HeaderOznaka tjedna, high-level ishod1 linija
GrowthTjedan-na-tjedan delte za ključne KPI-jeve3 do 5 bulleta
RisksAnomalije ili napomene o nedostajućim podacima1 do 2 bulleta
Next actionsJedan prijedlog temeljen na podacima1 bullet

Delte računajte ako spremate KPI-jeve od prošlog tjedna u Postgres. Ako ne spremate, usporedbe i dalje možete dobiti tako da paralelno povučete prošlotjedni prozor, ali spremanje agregata je jednostavnije i brže.

Primjer Code nodea za izradu Slack teksta:

JavaScript
const k = $json.kpis;
const week = k.weekLabel;
 
const lines = [];
lines.push(`Weekly KPI Digest: ${week}`);
lines.push(`Sessions: ${k.sessions.toLocaleString()} | Users: ${k.users.toLocaleString()}`);
lines.push(`Revenue: €${k.grossRevenue.toFixed(2)} from ${k.invoiceCount} invoices`);
lines.push(`WAU: ${k.wau.toLocaleString()}`);
lines.push(`Notes: Reply to this message to request a breakdown by channel or plan.`);
 
return [{ ...$json, message: { slackText: lines.join('\n') } }];

💡 Savjet: Držite jedan “metric formatting” helper u jednom Code nodeu kako ne biste duplicirali logiku formatiranja između Slacka i e-maila.

# Korak 11: Šaljite u Slack i e-mail prema rasporedu#

Koristite Schedule Trigger node za tjedna pokretanja. Zatim šaljite poruke kroz Slack i e-mail nodeove paralelno, ali tek nakon što validacije prođu.

Isporuka u Slack#

Za Slack preferirajte jedan kanal poput #weekly-kpis i konzistentan format poruke. To olakšava pretragu i usporedbe.

Detalj isporukePreporukaZašto
Kanaljedan namjenski kanalsmanjuje šum drugdje
Threadingopcionalno, otvorite thread za drilldownoveodržava kanal urednim
Attachmentsizbjegavajte teško formatiranjesmanjuje probleme s renderiranjem
Linkoviuključite linkove na dashboardeomogućuje self-serve follow-up

Isporuka e-mailom#

E-mail je koristan za leadove koji ne žive u Slacku. Neka bude kratak, s linkom na dashboarde ili dulji report.

E-mail poljePreporuka
Fromops ili analytics mailbox
Togroup alias
SubjectWeekly KPI Digest: YYYY-MM-DD to YYYY-MM-DD
Bodyisti tekst kao Slack plus linkovi

# Korak 12: Observability i prakse održavanja#

Razlika između demo workflowa i produkcijskog workflowa je observability: trebate znati kada je pao, zašto je pao i je li poslao duplikate.

Minimalna operativna checklista#

PodručjeŠto implementiratiTrud
Logovispremati sirove API odgovore samo za neuspjela izvođenjanizak
Alertingposlati sažetak greške u ops kanalnizak
Verzijedržati KPI definicije na jednom mjestusrednji
Vlasništvododati polje “owner” i link na runbook u opis workflowanizak
Higijena tajnirestricted ključevi, rotacija credentialssrednji
Drift podatakatjedne provjere anomalijasrednji

Dobar sljedeći korak je standardizirati reporting workflowe s predlošcima i konvencijama iz n8n predložaka workflowa, tako da svaki novi sažetak prati iste faze i kontrole kvalitete.

Ako želite implementaciju od početka do kraja za vaš stack, uključujući dashboarde i governance, to je upravo ono što isporučujemo u Samioda Automation.

# Ključne poruke#

  • Prvo definirajte KPI ugovor: izvor, prozor, vremenska zona i definicija za svaku metriku.
  • Gradite workflow u fazama: fetch, normalize, validate, aggregate, summarize, deliver i opcionalno persist.
  • Dodajte eksplicitne provjere kvalitete i “fail fast” umjesto slanja nepotpunih ili obmanjujućih brojki.
  • Implementirajte retryje s backoffom po izvoru i dodajte idempotentnost kako biste spriječili duple isporuke.
  • Sažetci neka budu kratki i konzistentni: jedna Slack poruka, jedan e-mail, s linkom za dublje drilldownove.
  • Poboljšajte održivost centralizacijom definicija metrika, helpera za formatiranje i ponovo iskoristivih predložaka workflowa.

# Zaključak#

Automatizirano izvještavanje s n8n najbolje funkcionira kada ga tretirate kao produkcijski sustav: deterministički prozori, stabilne definicije KPI-jeva, validacijske “gate” točke i sigurna isporuka s retryjima i idempotentnošću. Kad je tjedni sažetak pouzdan, isti obrazac možete proširiti na dnevne alerte anomalija, cohort reporting i nadzor pipelinea bez gradnje ispočetka.

Ako želite održiv reporting workflow prilagođen vašoj GA4, Stripe i Postgres shemi, možemo ga brzo dizajnirati i implementirati, uključujući rukovanje greškama, alerting i handover dokumentaciju. Javite se putem Samioda Automation i pomoći ćemo vam isporučiti reporting kojem vaš tim može vjerovati.

FAQ

Share
A
Adrijan OmićevićSamioda Team
All articles →

Više iz kategorije Poslovna automatizacija

Sve
·16 min čitanja

n8n + Supabase/Postgres obrasci automatizacije: webhooks, RLS-sigurni upisi i pouzdana sinkronizacija

Praktičan vodič kroz obrasce automatizacije n8n + Supabase Postgres: ingestija webhooks događaja, idempotency ključevi, upserts, RLS-sigurni upisi i pouzdana dvosmjerna sinkronizacija za SaaS back-office tijekove rada.

n8nSupabasePostgresAutomatizacijaWebhooksSinkronizacija podatakaSaaS
Adrijan OmićevićPročitaj članak
·17 min čitanja

Izgradnja workflowova AI agenata u n8n-u: RAG, korištenje alata i zaštitne ograde za produkciju

Praktičan end-to-end vodič za n8n AI agent RAG workflow: unos dokumenata, segmentiranje i izrada embeddinga, pohrana u vektorsku bazu, upit s LLM-om te sigurno puštanje u rad uz PII kontrole, obranu od prompt-injectiona, ograničenja troškova i ljudska odobrenja.

n8nAI agentiRAGAutomatizacijaLLMVektorska baza podatakaSigurnostUpravljanje
Adrijan OmićevićPročitaj članak
·14 min čitanja

n8n web scraping i detekcija promjena: pouzdano pratite stranice, otkrivajte ažuriranja i pokrećite workflowe

Praktičan vodič za 2026. o n8n monitoringu detekcije promjena pri web scrapingu: dohvat i parsiranje HTML-a, normalizacija sadržaja, otkrivanje smislenih promjena uz hashing i diffing, izbjegavanje lažnih pozitivnih rezultata te pouzdano slanje upozorenja u Slack ili Email.

n8nAutomatizacijaWeb scrapingNadzorDetekcija promjenaSlackEmail
Adrijan OmićevićPročitaj članak

Trebate pomoć s projektom?

Gradimo prilagođena rješenja koristeći tehnologije iz ovog članka. Senior tim, fiksne cijene.