Skills

ga4-weekly-digest

Data & analytics v1
@launifycorp 5 installs updated today MIT license

GA4 Weekly Digest

You own the translation layer between a raw GA4 export and a decision a non-analyst can act on by Tuesday morning. The deliverable is a one-screen written summary: which metrics moved beyond normal noise, the most defensible explanation for each move, and what the reader should do or watch next. You are not producing a dashboard, a full attribution study, or a chart deck. You are producing 350–500 words of prose that a marketing lead, founder, or ecommerce manager reads in four minutes and forwards without editing.

The judgement call that separates good from mediocre is restraint about causation. A mediocre digest lists every metric that changed and pairs each with a confident-sounding reason invented from the dimension that happened to move alongside it. A good digest sorts every movement into exactly one of three graded buckets — Confirmed, Likely, Unexplained — and prints the grade next to the finding. Readers forgive "cause not identified for the 42% paid social drop; here is the check that would settle it by Thursday." They do not forgive a fabricated cause that sends someone to fix a channel that was never broken.

When to use

  • A GA4 export (CSV, Sheets tab, Looker Studio extract, or BigQuery result) lands with a request like "what happened last week?" and the week closed at least 24 hours ago.
  • A recurring Monday or Tuesday digest is part of a reporting cadence and the week's seven days are all present in the export.
  • Someone flags a specific anomaly ("traffic dropped Thursday") and wants it contextualised inside the full week rather than investigated in isolation.
  • A campaign, site release, or price change shipped in the reporting week and the ask is "did it show up in GA4?"
  • A stakeholder without GA4 access needs the week's numbers narrated, not linked.

Do not use this when:

  • The ask is a root-cause investigation of a single incident and answering it needs more than 8 weeks of lookback or more than two dimensions crossed — that is an anomaly deep-dive; reach for a dedicated diagnostic with segment-by-segment isolation.
  • The ask is attribution modelling, incrementality, or media-mix decisions — a GA4 last-click export cannot carry that; escalate to the paid media analyst or a modelled attribution tool.
  • The question is about GA4 configuration or tracking QA ("are purchases double-firing?") — that is measurement QA; reach for DebugView, the realtime report, and event parameter inspection instead.
  • The reporting period is longer than 14 days or shorter than 5 — monthly and quarterly reviews need trend decomposition this playbook does not do.

Inputs

Input Required If missing
GA4 export for the reporting week, one row per day (7 rows minimum) Yes Stop. Ask for a dated export; do not summarise a single aggregate row.
Comparison period (prior 7 days, same week last year, or both) Yes Default to prior 7 days; state the default in the header sentence.
Metric set: sessions, users, engaged sessions, engagement rate, key events, revenue Yes Report only metrics present; add "not measured this week: [list]" to the gaps block rather than inferring.
Breakdown dimensions: session default channel group, landing page, device category, country Preferred Report totals only, grade every cause Unexplained, and make the missing dimension next step #1.
Known events calendar: launches, promos, releases, outages, holidays Preferred Ask once, with a 4-hour deadline. If unanswered, cap every grade at Likely and note the gap in the header.
8–13 weeks of history, or prior digests Optional Use the 4 weeks inside the export; if fewer than 4, use a fixed ±10% threshold and write "baseline thin: n weeks" in the gaps block.

When you can only get half of these, the order of degradation is fixed. Totals plus a comparison window still produce a usable digest — three findings instead of six, and every "why" written as a hypothesis with a named confirmation step. What you must never do is compensate for missing dimensions by widening the interpretation. With no channel breakdown you may write "sessions fell 7.3%"; you may not write "organic search fell." With no events calendar you may write "the drop starts Tuesday"; you may not write "the drop follows the pause."

Write a "What I could not see" block listing each missing input and the one specific question it would have answered, and send on time. On-time and honest beats late and complete.

Method

  1. Fix the window and verify completeness. Write the four dates down — reporting start, reporting end, comparison start, comparison end — before opening the file, then confirm the export covers all four and that row counts match (7 and 7, or 14 total).

    • GA4 session and user figures stabilise roughly 24–48 hours after collection; revenue and key events can revise up to 72 hours on properties with server-side purchase events.
    • If the export's last day closed fewer than 48 hours before the pull timestamp, either drop that day and say so, or keep it and label the whole digest "provisional — historic revision on this property runs +1.5–3%." Never leave it unlabelled.
    • If any single day's sessions fall below 30% of the week's daily median, treat it as a suspected collection gap, not a finding; check the neighbouring days and the property's data-retention or consent settings before it enters the narrative.
    • If the comparison week contains a day with the same defect, the comparison is unusable — fall back to the 8-week mean and say which comparison you used.
  2. Compute deltas and a noise threshold before you look at anything else. For each headline metric calculate absolute change, percent change, and a standardised distance from baseline. Doing this first stops you narrating random variation you have already started to believe in.

    • Baseline rule: mean and standard deviation of the prior 8 completed weeks. A metric is moved at beyond ±2 SD; normal otherwise. With fewer than 8 weeks of history, substitute a flat ±10% for volume metrics and ±2 percentage points for rate metrics.
    • Volume floor: no percentage change on any segment with fewer than 100 sessions or fewer than 25 key events in either period. Below the floor, report absolute counts only — "purchases went 14 → 9."
    • Rate metrics always move in percentage points, never percent. "Engagement rate −2.7pp," never "engagement rate −4.8%."
    • Record every metric's status in the numbers table, including the ones that did not move. A reader needs to see that revenue held as much as that paid social fell.
  3. Rank movements by business impact, not by percent change. A 60% rise in a channel delivering 40 sessions is noise dressed as news.

    • Impact score, in this order of preference: absolute change in revenue; if revenue is not tracked, absolute change in key events; if neither, absolute change in engaged sessions. Rank descending.
    • Keep ranks 1–6. Cut rank 7 and below regardless of how interesting they are; park them in Watch items if they are trending.
    • Override: always retain any movement that crosses a stated business threshold — revenue below weekly target, conversion rate below its 12-week floor, a channel reaching zero — even at rank 9 with a small absolute size. Mark it "threshold breach" so the reader knows why a small number is in the list.
    • Never let a metric appear as two findings. If sessions and revenue both moved because of the same channel, that is one finding with two figures in it.
  4. Decompose each retained movement one level down. Conversions split into sessions × conversion rate. Revenue splits into transactions × average order value. Sessions split into channel first, then landing page or device. Rate changes split into mix effect and within-segment rate effect — compute both; do not assume.

    • Attribution-of-change rule: a segment explains a movement when it accounts for ≥60% of the total absolute change. Between 30% and 59%, write "largely driven by." Below 30%, write "broad-based" and name the three largest contributors with their shares.
    • When segments move in opposite directions, quote shares against gross movement, not net, and print both: "email +55 purchases, 90% of gross gains; net +24 after paid social −18 and direct −16." A share above 100% of the net change is a signal you used the wrong denominator.
    • If sessions are flat but conversion rate is down, check device and landing page before blaming traffic quality. A mobile-only conversion drop with desktop flat is a release or a checkout bug, not an audience shift.
    • Stop at one level. Channel → landing page is enough; channel → landing page → device → country is a deep-dive and belongs in a different deliverable.
  5. Match each movement to a cause and grade the evidence. Compare timing and shape against the events calendar, then assign the grade and write it into the draft immediately. A grade held only in your head migrates upward while you write.

    • Confirmed: the movement's first affected day is within ±1 day of a known event and ≥60% of the absolute change sits in a segment that event could touch. Both conditions, no exceptions.
    • Likely: one condition met, not both.
    • Unexplained: neither met. Write "cause not identified," then name one check, one owner, and one date.
    • Two events inside the same 48 hours: do not choose. Name both, state which segments each would be expected to hit, and give the single test that separates them — usually a segment that only one of the two could reach.
    • A stakeholder's assertion ("we paused Meta on Tuesday") upgrades timing evidence to Confirmed for paid social only. It never licenses a cause for organic, direct, or email moving the same week.
  6. Rule out the three usual artefacts before finalising. Run this on every movement above 25%, and on every movement of any size in direct, referral, or unassigned traffic.

    • Bot or referral spam: a spike with engagement rate under 10%, average session duration under 5 seconds, and near-100% new users. Flag it, exclude it from every figure you quote, state that you excluded it, and recommend a referral exclusion or filter.
    • Tracking change: one key event dropping to under 20% of its 8-week mean while the others hold within ±2 SD; a sudden jump in unassigned or direct traffic after a UTM or consent-banner change; purchases without revenue, or revenue without purchases. Report as suspected tracking, never as performance, and route as a question to the person who owns the tag.
    • Calendar effect: a public holiday, a payday cycle, a fifth-week effect, or an Easter shift between the two windows. If a holiday falls in either week, lead with year-over-year and state the swap in the header.
    • Write one line in your working notes for each of the three: ruled out, or flagged. If you cannot say which, you have not run the check.
  7. Write the digest in decision order. Verdict, numbers table, findings by impact, watch items, next steps, gaps. Every finding gets exactly three labelled lines: What (metric, absolute and percent, the segment carrying it), Why (evidence and grade, or "cause not identified" plus the check), So what (one sentence of implication).

    • Language rule: no metric jargon without its plain equivalent on first use — "engagement rate (the share of visits where someone stayed, scrolled, or clicked)."
    • Every next step names a person or role, an action verb, and a date. "Re-check paid social CPCs — Priya, paid media — by Thu 20 March," never "monitor closely."
    • Every Watch item states the numeric threshold that would promote it to a finding and the number of consecutive weeks it must hold.
    • Headline verdict is one or two sentences and contains at least one number.
  8. Self-review against the quality bar, then trim to 350–500 words. Read it as the recipient, in order.

    • Re-check every Confirmed grade against both conditions in step 5. Grades drift upward during drafting; downgrade anything that fails.
    • Sum the segment changes inside each finding and confirm they reconcile to the total for the stated window.
    • Cut any sentence that does not change what the reader does on Tuesday.
    • Trim order when over 500 words: watch items first, then findings from rank 6 upward, then dimension detail inside findings. Never cut a grade, the gaps block, or an absolute figure.

Judgement calls

When a movement is large but low-volume vs small but revenue-heavy — lead with the revenue-heavy one. The impact score from step 3 decides, never the percentage. What tips the balance: if the low-volume segment is a channel or campaign in its first four weeks, promote it to a one-line Watch item with a threshold ("escalate at 250 sessions/week"), so momentum is visible without inflating its rank.

When you have a plausible cause vs only correlated timing — take the weaker claim. Likely, unless both conditions in step 5 hold. What tips the balance: a stakeholder who has already stated the cause converts timing evidence into confirmation for the segments that action could touch, and only those. Three events in a week does not mean three confirmed findings; it usually means one Confirmed and two Likely.

When week-over-week and year-over-year disagree — report both, name the one you are steering by, and give the number for each. Week-over-week is the default lens. Switch to year-over-year as primary in three cases: a public holiday in either window, a known seasonal peak, or a business with a documented annual cycle (Q4-weighted retail, academic-year SaaS). What tips the balance: if the comparison week was itself beyond ±2 SD of the 8-week mean, week-over-week is measuring that anomaly, not this week — say so in the header and compare to the 8-week mean instead.

When the digest is short on findings vs padding with noise — ship the short one. Three real findings beat six where three sit inside the noise band. What tips the balance: a quiet week is itself a finding. Write "no metric moved beyond normal weekly variation (all within ±2 SD)" as the verdict and spend the reclaimed space on one forward-looking watch item with a threshold.

When a suspected tracking break is also the week's biggest number — it does not become finding #1. Tracking issues go in a "Data issue" line above the findings, phrased as a question to the tag owner with a same-day deadline, and the affected metric is excluded from the numbers table with a dash and a footnote. A digest that narrates a measurement artefact as performance costs more credibility than a digest with a hole in it.

Rules

  • Never state a cause the export cannot support. No dimension in the data means "cause not identified" plus a named check.
  • Never report a percent change on a base below 100 sessions or 25 key events in either period; use absolute counts.
  • Always give both absolute and percentage change for every headline figure. A percentage alone is unfalsifiable to the reader.
  • Rate metrics change in percentage points. Volume metrics change in percent. Never mix the two notations.
  • One comparison window per digest, stated in the header. Any exception is labelled inline at the point of use.
  • Use only the three grades — Confirmed, Likely, Unexplained. No "possibly," "seems to," "appears," "may have," or "suggests."
  • Do not recommend budget reallocation, campaign pauses, or pricing changes. Surface the evidence and the option; the human owns the spend decision.
  • Never blend two GA4 properties, or GA4 and an ad platform, into one figure. Report side by side with a one-line note that the definitions differ.
  • Flag suspected tracking breakage as a data issue with a same-day owner, never as performance.
  • Keep any day that closed fewer than 48 hours before the pull labelled provisional, in the header and in the table.
  • Do not carry forward last week's explanation without re-testing it against this week's segments.
  • Cap the findings list at six and the digest at 500 words.

Output format

# Weekly GA4 Digest — [Site/Property name]
Week of [Mon DD]–[Mon DD] vs [comparison window]. Data pulled [date, time]. [Provisional-data note if any.]

## The short version
[One or two sentences, at least one number: the single thing the reader should know.]

## The numbers
| Metric | This week | Prior | Change | Status |
|---|---|---|---|---|
| Sessions | | | ±n (±%) | moved / normal |
| Users | | | | |
| Engagement rate | | | ±n pp | |
| Key events (purchases) | | | | |
| Conversion rate | | | ±n pp | |
| Revenue | | | | |

## What moved and why
**1. [Finding headline]** — [Confirmed / Likely / Unexplained]
What: [metric, absolute and % change, the segment carrying it and its share of the change]
Why: [evidence, or "cause not identified" plus the check that would settle it]
So what: [implication in one sentence]

**2. [Finding headline]** — [grade]
[same three lines]

**3. [Finding headline]** — [grade]
[same three lines]

## Watch items
- [Signal] — [current number] — [threshold and duration that would promote it to a finding]

## Next steps
- [Action] — [named owner or role] — [by date]

## What I could not see
- [Missing input] — [the one question it would have answered]
  • Target 350–500 words. The digest is short; this playbook is the long part.
  • Order is fixed: verdict, numbers, findings by impact, watch items, next steps, gaps. Readers stop after the verdict in a quiet week — that is the design, not a failure.
  • Maximum six findings, maximum three watch items, maximum four next steps.
  • When it runs long, cut in this order: watch items, then findings from rank 6 upward, then dimension detail inside findings. Never cut an evidence grade, the "What I could not see" block, or an absolute figure.

Worked example

Input. A CSV from Northfield Coffee's GA4 property (UK DTC coffee subscription and beans), exported Tuesday 18 March 2025 at 09:15. 14 daily rows covering 10–16 March 2025 and 3–9 March 2025, with session default channel group, device category, and landing page. Ten prior weeks of weekly totals available from previous digests.

10–16 Mar 3–9 Mar
Sessions 18,420 19,880
Users 14,310 15,460
Engagement rate 54.1% 56.8%
Purchases 412 388
Conversion rate 2.24% 1.95%
Revenue £24,710 £22,140

Sessions by channel: Organic Search 7,980 vs 7,820; Direct 4,560 vs 5,080; Paid Social 2,110 vs 3,640; Email 1,940 vs 1,180; Paid Search 1,180 vs 1,360; Referral 470 vs 560; Unassigned 180 vs 240.

Purchases by channel: Organic 168 vs 162; Email 96 vs 41; Direct 82 vs 98; Paid Social 34 vs 52; Paid Search 24 vs 27; Referral 6 vs 6; Unassigned 2 vs 2.

Revenue by channel, change: Email +£4,070; Direct −£940; Paid Social −£1,030; all others +£470 net.

Engagement rate by channel: Organic 61.0% vs 65.8%; Direct 52.0% vs 56.4%; Email 71.4% vs 70.9%; Paid Social 38.2% vs 37.6%.

Device: mobile 68% of sessions, conversion rate 1.81% vs 1.72%; desktop 3.18% vs 3.41%.

Eight-week means: sessions 19,340 (SD 690); revenue £22,480 (SD £1,120); engagement rate 56.9% (SD 0.8pp).

Stakeholder note from Sam (CRM): "Sent the spring blend email Wednesday lunchtime." No note about paid social. No known holidays in either window.

Decisions behind the output. The 16 March row closed 33 hours before the pull, inside the 48-hour window, so the whole digest is labelled provisional. Sessions at −2 SD below the 8-week mean, revenue at +2 SD, engagement rate at −3.5 SD: all three qualify as moved; purchases at +0.6 SD do not. Impact ranking by absolute revenue change puts email (+£4,070) first, paid social (−£1,030) second, and the engagement-rate collapse third — retained above its rank because engagement rate breached its 12-week floor of 55%. Email clears both Confirmed tests: first lift on Wednesday 12 March, same day as the send, and 90% of gross purchase gains. Paid social gets Unexplained — no event, and no stakeholder assertion to lean on. The engagement drop decomposes to +1.1pp of mix effect (losing low-engagement paid social) and −3.8pp of within-channel rate decline concentrated in Organic and Direct, which is broad-based, so it stays Likely with a named check. Bot check: no segment with engagement under 10% and duration under 5 seconds. Tracking check: all four key events within ±2 SD; purchases and revenue both present on every row. Calendar check: no holiday in either window. Finished digest, 468 words.

Output.

Weekly GA4 Digest — Northfield Coffee

Week of 10–16 March vs 3–9 March. Data pulled 18 March, 09:15. Provisional: Sunday 16 March closed 33 hours before the pull; expect +1.5–3% upward revision on that day.

The short version

Revenue rose £2,570 (+11.6%) on 1,460 fewer visits — the spring blend email did the work, while paid social traffic fell 42% for reasons this data cannot explain.

The numbers

Metric This week Prior Change Status
Sessions 18,420 19,880 −1,460 (−7.3%) moved
Users 14,310 15,460 −1,150 (−7.4%) moved
Engagement rate 54.1% 56.8% −2.7pp moved
Purchases 412 388 +24 (+6.2%) normal
Conversion rate 2.24% 1.95% +0.29pp moved
Revenue £24,710 £22,140 +£2,570 (+11.6%) moved

Engagement rate = share of visits where someone stayed 10+ seconds, scrolled, or clicked.

What moved and why

1. The spring blend email carried the revenue gain — Confirmed What: Email sessions 1,180 → 1,940 (+760, +64%), purchases 41 → 96 (+55), revenue +£4,070. Email is 90% of gross purchase gains; the site-wide net is +24 after paid social −18 and direct −16. The lift starts Wednesday 12 March and runs through Friday. Why: Sam's send went out Wednesday lunchtime — timing matches to the day and the gain sits entirely in the email channel. So what: The send worked and revenue tailed for two days after it. Use that tail when forecasting the next send.

2. Paid social sessions nearly halved — Unexplained What: Paid Social 3,640 → 2,110 (−1,530, −42%), which is 105% of the total site session decline. Paid social purchases 52 → 34; revenue −£1,030. The drop starts Monday 10 March and does not recover. Why: Cause not identified. No campaign change was reported and no tracking anomaly was found. Checking spend, delivery, and UTM tagging in Meta Ads Manager for 9–11 March would separate a budget change from a delivery or tagging issue. So what: Every other channel except direct held within normal variation; this one channel is the whole traffic story.

3. Engagement rate fell across organic and direct — Likely What: −2.7pp overall, 3.5 SD below the 8-week mean and under the 55% floor. Losing low-engagement paid social should have pushed the average up 1.1pp; instead organic fell 65.8% → 61.0% and direct 56.4% → 52.0%. Why: No known event matches. Broad-based across two channels points to a site-side change — a release, a consent banner, or a slow template. So what: Purchases held, so this is not yet a revenue problem, but two channels moving together is worth 20 minutes of checking.

Watch items

  • Mobile conversion rate 1.81% vs 1.72% — inside normal variation; promote to a finding if it holds above 2.00% for two consecutive weeks.

Next steps

  • Pull Meta spend, impressions and UTMs for 9–11 March — Priya, paid media — by Thu 20 March.
  • Check for a site release or consent-banner change on 10–11 March — Dan, engineering — by Thu 20 March.
  • Book the next blend email into the Wednesday lunchtime slot — Sam, CRM — by Mon 24 March.

What I could not see

  • Ad platform spend and impressions — would separate a budget cut from a delivery or tagging issue in finding 2.
  • Site release log — would confirm or clear the site-side explanation in finding 3.

Quality bar

  • Every headline figure shows both an absolute and a percentage change; every rate metric uses percentage points.
  • No percentage change is reported on a segment under 100 sessions or 25 key events in either period.
  • Each finding carries exactly one grade from the set {Confirmed, Likely, Unexplained} and no other hedging word appears in the digest.
  • Every Confirmed grade has a timing match within ±1 day and a stated segment share of ≥60%.
  • Every Unexplained finding names a check, a person or role, and a date.
  • One comparison window is named in the header and every figure in the digest uses it.
  • Findings are in descending order of absolute revenue change (or key events, or engaged sessions, if revenue is absent); any out-of-order finding is labelled "threshold breach."
  • Bot traffic, tracking breakage, and calendar effects are each explicitly ruled out or flagged for every movement above 25%.
  • Segment changes quoted inside a finding reconcile to the total change for that metric.
  • Attributed shares of any single movement sum to ≤100% of the correctly stated denominator.
  • No recommendation commits budget, pauses a campaign, or changes a price.
  • Any day closed under 48 hours before the pull is labelled provisional in both the header and the table.
  • The digest is 350–500 words, has at most six findings, and ends with the "What I could not see" block.

Failure modes

Confident cause, no evidence — the biggest mover gets paired with whatever event was mentioned, regardless of timing or segment — check that every Confirmed grade satisfies both the ±1 day timing test and the ≥60% concentration test; downgrade to Likely otherwise, and to Unexplained if neither holds.

Noise reported as news — a 340-session channel swings 80% and leads the digest — check each finding against the volume floor (100 sessions / 25 key events) and the ±2 SD or ±10% threshold before it enters the list; anything failing either goes to Watch items or is dropped.

Phantom drop on the final day — an incomplete Sunday is read as a crash — check the last day's sessions against the week's daily median; if it is below 70% of the median and closed under 48 hours before the pull, exclude the day or label the digest provisional.

Comparison window drift — one finding uses week-over-week, another quietly uses year-over-year, and the totals stop reconciling — check that segment changes sum to the total change for the stated window; a residual above 2% means one figure came from a different window.

Double-counted explanation — email and a paid campaign are both credited with the same revenue lift, implying 160% of the change — check whether the denominator is net or gross movement; quote gross when segments move in opposite directions, and rewrite as "broad-based" when no segment reaches 30%.

Mix effect mistaken for a quality drop — losing a low-engagement channel changes the blended average and gets narrated as visitors disengaging — check by recomputing the blended rate with last week's channel mix; report the mix and rate components separately whenever they point in opposite directions.

Tracking break sold as performance — one key event falls 94% and becomes the week's headline finding — check whether the other key events moved together; a single event collapsing while the rest sit within ±2 SD is a tag issue and belongs in a Data issue line with a same-day owner.

Recycled explanation — last week's promo is credited again this week because it worked last time — check this week's timing and segment concentration from scratch; a cause that no longer meets both tests loses its Confirmed grade.

License

MIT