Weekly Product Metrics Digest: Mixpanel + Google Analytics → Slack via n8n

Every Monday at 8 AM, your team gets last week's activation, retention, and traffic numbers in Slack — without anyone opening a dashboard.

The flow
Mixpanel logo
Source
Mixpanel
Google Analytics logo
Process
Google Analytics
n8n logo
Process
n8n
Google Sheets logo
Process
Google Sheets
Slack logo
Destination
Slack

The stack in the order it runs — data flows from the source through to where it lands.

Why this stack

The problem isn't access to Mixpanel or GA4. Every founder has both open in a tab somewhere. The problem is nobody opens them on a schedule. Dashboards are pull. Slack is push. When the number appears in the channel where your team already makes decisions, it gets read, debated, and acted on. Without this, metrics get checked reactively — after something already broke.

Mixpanel's Query API (JQL or Insights API) and GA4's Data API are both straightforward REST endpoints. n8n hits both in the same workflow, no middleware needed. Use Mixpanel for behavioral funnel data — activation, feature adoption, retention cohorts. Use GA4 for acquisition and traffic. Combining them in one digest kills the split-brain problem: your PM quoting Mixpanel numbers and your growth person quoting GA numbers in the same meeting, neither of them wrong, both of them confused.

Use n8n over Zapier here. Zapier's GA4 integration as of 2024 is still limited to basic triggers — it doesn't expose the GA4 Data API's dimension+metric query interface. n8n's HTTP Request node gives you full API access. Slack is delivery. Google Sheets is optional but worth it as a historical log for week-over-week trend calculations.

Skip this if your team is already disciplined about opening Mixpanel and your Slack is noisy — one more automated message will get muted inside a week. Validate first that your team actually reads bot messages. Also skip GA4 if your product is a mobile app with no web component. Substitute Amplitude or PostHog instead — both have cleaner REST APIs than GA4.

The stack (5)

  1. Mixpanel logo

    Product analytics for events and funnels.

    The export/query API turns product metrics into scheduled reports you push to chat.

  2. Google Analytics logo

    Web analytics most teams already run.

    The Data API makes traffic a free input for weekly ops digests.

  3. n8n logo

    Self-hostable workflow automation.

    Own your data and run unlimited steps without per-task pricing.

  4. Google Sheets logo

    The universal data scratchpad.

    Still the fastest place to land tabular data everyone can read.

  5. Slack logo

    Team chat where most ops alerts and reports land.

    The default place a small team already lives — pipe reports here instead of email nobody opens.

How it runs

  1. 1

    Set up a Monday 8 AM Schedule Trigger in n8n

    Create a new n8n workflow. Add a Schedule Trigger with cron '0 8 * * 1' — every Monday at 8 AM. All date calculations in downstream nodes are relative to this trigger time: last week = the 7 days ending at midnight Sunday. Use n8n expressions $now.minus({days:7}).startOf('day') and $now.startOf('day') as your date range boundaries.

  2. 2

    Query Mixpanel Insights API for activation and retention

    Add an HTTP Request node. URL: 'https://mixpanel.com/api/2.0/insights' — or use the segmentation endpoint for event counts. Auth: Basic Auth with your Mixpanel Service Account username and secret. Build a JSON body requesting new user signups, activation event completions (e.g. 'project_created'), and DAU/WAU for the trailing 7 days. If you need funnel step data, use Mixpanel's JQL endpoint at 'https://mixpanel.com/api/2.0/jql' and pass your script as a 'script' POST param — it gives you more control. Parse the response in a Code node and pull out the 3–5 KPIs you actually care about.

  3. 3

    Query GA4 Data API for traffic and acquisition

    Add another HTTP Request node. URL: 'https://analyticsdata.googleapis.com/v1beta/properties/YOUR_PROPERTY_ID:runReport'. Auth: OAuth2 using a Google Service Account — generate a JSON key, add it to n8n's Google credentials. Request body: dimensions ['sessionSource', 'sessionMedium'], metrics ['sessions', 'newUsers', 'bounceRate', 'averageSessionDuration'], dateRanges [{ startDate: 'NdaysAgo', endDate: 'yesterday' }] where N=7. Limit to top 5 rows by sessions. Anything more and the digest stops being scannable.

  4. 4

    Transform both payloads in a single Code node

    Use n8n's Merge node to combine both API responses into one item, then feed that into a Code node. Compute: total sessions, new users, top acquisition source, Mixpanel WAU, activation rate (activations/signups as %), and week-over-week delta if you stored last week's numbers in Google Sheets. Output a clean object with human-readable labels — not raw API keys. Round all percentages to one decimal place.

  5. 5

    Log to Google Sheets for historical tracking

    Add a Google Sheets 'Append Row' node before you post to Slack. Store: week_start_date, sessions, new_users, top_source, wau, activation_rate, and all other KPIs. This sheet is your source of truth for WoW trend calculations on future runs. To get last week's row for comparison, add a Google Sheets 'Get Rows' node at the very start of the workflow and reference it inside the Code node.

  6. 6

    Build and post the Slack digest

    Add a Slack 'Send Message' node targeting your #product or #weekly-metrics channel. Use Block Kit: a header block ('📊 Weekly Product Metrics — Week of [date]'), a section block with a bullet list of each KPI and its WoW delta (green ↑ / red ↓ emoji based on direction), then a divider followed by a context block linking to your Mixpanel dashboard and GA4 property. Keep the total message under 10 bullets. If you're posting more than that, you've lost the plot on what actually matters.

  7. 7

    Add a WoW regression alert

    After the Slack digest node, add an IF node. Condition: activation_rate dropped more than 5 percentage points WoW, or WAU dropped more than 15%. If true, post a separate message to #alerts tagging your product lead: '⚠️ Activation rate dropped from X% to Y% this week. Check funnel.' The digest is for awareness. This alert is for action. Those are two different things and they belong in two different messages.

Want me to build this for you instead?

Product Audit and CTO Mode run out of this same thinking. If you’re reading this thinking “I want this, but in my product” — let’s talk.

See services

More like this