Alert on GA4 anomalies from Google Analytics to Slack and email
## Who’s it for
Teams that monitor traffic, signups, or conversions in Google Analytics 4 and want automatic Slack/email alerts when a channel suddenly spikes or drops.
## What it does
This n8n template pulls daily GA4 metrics, detects outliers with a rolling mean and z-score, and sends alerts with a sparkline chart. It supports per-channel analysis (e.g., sessionDefaultChannelGroup) and consolidates multiple anomalies into a single email while posting each one to Slack.
## How it works
* **HTTP Request (GA4 Data API)** fetches sessions, newUsers, conversions, bounceRate by date + channel.
* **Code** calculates 7-day moving average and z-scores, flags anomalies, and builds QuickChart links.
* **If** filters on alert === true and optional ALERT_ME toggle.
* **Slack** posts an alert + chart.
* **Email** sends one summary email (subject + HTML table + charts).
## Requirements
* GA4 OAuth2 credential in n8n.
* Slack API credential (bot with chat\:write).
* Email credential (SMTP or service).
* GA4 property ID and at least several recent days of data.
## Where to find your GA4 Property ID
* **In the GA UI:**
1. Open **Google Analytics** → bottom-left **Admin** (gear).
2. In the **Property** column, click **Property settings**.
3. Copy **Property ID** — it’s a **numeric** value (e.g., 481356553).
* **From the URL (quick way):**
When you’re inside the GA4 property, the URL looks like:
…/analytics/web/#/p123456789/… → the digits after **`p`** are your **Property ID** (`123456789` in this example).
* **What not to use:**
* **Measurement ID** (looks like G-XXXXXXX) — that’s the data stream ID, **not** the property ID.
* **Universal Analytics IDs** (`UA-XXXXX-Y`) — those are legacy and won’t work with GA4 Data API.
* **In this template:**
Put that numeric ID into the **Set → PROPERTY_ID** field. The HTTP node path properties/{{ $json.PROPERTY_ID }}:runReport expects **only the number**, no prefixes.
## How to set up
1. Open the **Set (Define variables)** node and fill: PROPERTY_ID, LOOKBACK_DAYS, ALERT_PCT, Z_THRESHOLD, CHANNEL_DIM, ALERT_ME.
2. Connect your **Google Analytics OAuth2**, **Slack**, and **Email** credentials.
3. In **Email Send**, map Subject → {{$json.emailSubject}} and **HTML** body → {{$json.emailHtml}}. Keep **Execute once** enabled.
4. Run the workflow.
## How to customize
* Change the moving-average window (`WINDOW/MA_WINDOW`) and chart range (`LAST_N_DAYS_CHART`).
* Swap CHANNEL_DIM (e.g., source/medium) to analyze different dimensions.
* Add/remove metrics in the GA4 request and the metrics list in the Code node.
* Tweak thresholds to reduce noise: raise Z_THRESHOLD or ALERT_PCT.
## Output Example
You'll get an n8n workflow