Manage PostHog subscriptions — scheduled email, Slack, or webhook deliveries of insight or dashboard snapshots, optionally with an AI-written summary attached to each delivery. Use when the user wants to subscribe to an insight or dashboard, get an AI summary attached to those deliveries, check existing subscriptions, change delivery frequency, add or remove recipients, or stop receiving updates.
Add this skill
npx mdskills install PostHog/managing-subscriptions@PostHog? Sign in with GitHub to claim this listing.Thorough subscription workflow with channel verification, AI summary support, and strong error handling.
1---2name: managing-subscriptions3description: 'Manage PostHog subscriptions — scheduled email, Slack, or webhook deliveries of insight or dashboard snapshots, optionally with an AI-written summary attached to each delivery. Use when the user wants to subscribe to an insight or dashboard, get an AI summary attached to those deliveries, check existing subscriptions, change delivery frequency, add or remove recipients, or stop receiving updates.'4---56# Managing subscriptions78This skill guides you through managing PostHog subscriptions.9Subscriptions deliver scheduled snapshots of insights or dashboards via email, Slack, or webhook.1011## When to use this skill1213Use this skill when the user:1415- Wants to "track", "follow", "subscribe to", or "get updates" about an insight or dashboard16- Asks for "daily updates", "weekly reports", or "send me this every morning"17- Wants an **AI-written summary** attached to each delivery of an insight or dashboard (see step 6)18- Wants to know what subscriptions they have19- Asks to stop, pause, or unsubscribe from something20- Wants to change who receives an update or how often2122## Subscriptions vs alerts2324Subscriptions and alerts serve different purposes:2526- **Subscriptions** deliver a snapshot on a fixed schedule (daily, weekly, etc.) regardless of the data27- **Alerts** fire only when a condition is met (threshold crossed, anomaly detected)2829If the user says "notify me when this drops below 100", use alerts.30If the user says "send me this every morning", use subscriptions.3132## Workflow3334### Listing existing subscriptions3536Before creating a new subscription, check if one already exists.3738Use `subscriptions-list` with optional filters:3940- Filter by insight: pass the `insight` query parameter with the insight ID41- Filter by dashboard: pass the `dashboard` query parameter with the dashboard ID42- Filter by channel: pass `target_type` as `email`, `slack`, or `webhook`4344### Creating a subscription4546#### Step 1: Ask the user how they want to receive it4748**Always ask the user whether they want email or Slack delivery** before creating a subscription.49Do not assume a channel — ask explicitly:5051> Would you like to receive this via **email** or **Slack**?5253If the user says Slack, you must verify the integration is available (see step 2).54If the user doesn't have a preference, suggest email as the simplest option.5556#### Step 2: Verify channel availability5758**Email** requires no setup — it works out of the box. You just need the user's email address.59Get it from the user context or from `org-members-list`.6061**Slack** requires a connected Slack integration. Before creating a Slack subscription:62631. Call `integrations-list` and look for an integration where `kind` is `"slack"`642. If a Slack integration exists, note its `id` — you'll need it as `integration_id`653. If **no Slack integration exists**, tell the user:66 > Slack isn't connected to this project yet. You can set it up in67 > [Project settings > Integrations](/settings/integrations).68 > In the meantime, would you like to receive this via email instead?6970Slack setup requires an OAuth flow in the browser — it cannot be done via MCP.7172**Webhook** requires the user to provide a URL. Verify it looks like a valid URL before submitting.7374#### Step 3: Identify the target7576Get the insight ID or dashboard ID. If the user provides a URL like `/project/2/insights/pKxzopBG`,77fetch the insight first with `insight-get` to get the numeric ID.7879#### Step 4: Determine delivery settings from the user's request8081| User says | Parameters |82| --------------------------------------- | ------------------------------------------------------------------------- |83| "every day" / "daily" / "every morning" | `frequency: "daily"` |84| "every week" / "weekly" | `frequency: "weekly"` |85| "every Monday" | `frequency: "weekly"`, `byweekday: ["monday"]` |86| "every month" / "monthly" | `frequency: "monthly"` |87| "twice a week" | `frequency: "weekly"`, `interval: 1`, `byweekday: ["monday", "thursday"]` |8889#### Step 5: Create with `subscriptions-create`9091For an insight subscription via email:9293```json94{95 "insight": 12345,96 "target_type": "email",97 "target_value": "user@example.com",98 "frequency": "daily",99 "start_date": "2025-01-01T09:00:00Z"100}101```102103For a dashboard subscription (requires selecting which insights to include, max 6):104105```json106{107 "dashboard": 67,108 "dashboard_export_insights": [101, 102, 103],109 "target_type": "email",110 "target_value": "user@example.com",111 "frequency": "weekly",112 "byweekday": ["monday"],113 "start_date": "2025-01-01T09:00:00Z"114}115```116117For Slack delivery, include the `integration_id` from step 2:118119```json120{121 "insight": 12345,122 "target_type": "slack",123 "target_value": "#general",124 "integration_id": 789,125 "frequency": "daily",126 "start_date": "2025-01-01T09:00:00Z"127}128```129130#### Step 6 (optional): Attach an AI summary131132For **insight and dashboard** subscriptions you can attach an AI-written summary to every133delivery — a short narrative that calls out what changed, outliers, and notable insights134alongside the snapshot. Set it at create time (or toggle later via `subscriptions-partial-update`):135136- `summary_enabled: true` — turns on the per-delivery AI summary137- `summary_prompt_guide: "..."` — optional steer, e.g. "focus on sign-up conversion and any new drop-off points"138139```json140{141 "dashboard": 67,142 "dashboard_export_insights": [101, 102, 103],143 "target_type": "email",144 "target_value": "user@example.com",145 "frequency": "weekly",146 "byweekday": ["monday"],147 "start_date": "2025-01-01T09:00:00Z",148 "summary_enabled": true,149 "summary_prompt_guide": "Call out outliers and new insights since last week"150}151```152153Enabling a summary requires the organization to have **approved AI data processing**154(`Org settings → Data → AI data processing`) and to be within its active-summary cap and AI155credit budget; otherwise the create/update is rejected. `summary_enabled` does not apply to156prompt subscriptions — those are AI-generated by definition (see `creating-ai-subscription`).157158### Updating a subscription159160Use `subscriptions-partial-update` with the subscription ID. Common updates:161162- **Change frequency**: `{"frequency": "weekly", "byweekday": ["monday"]}`163- **Add recipients**: Update `target_value` with the full comma-separated list164- **Change channel**: Update `target_type` and `target_value` together165- **Toggle the AI summary** (insight/dashboard subs): `{"summary_enabled": true, "summary_prompt_guide": "..."}` — same AI-data-processing and budget gates as step 6166167### Deactivating a subscription168169Subscriptions are soft-deleted. Use `subscriptions-partial-update`:170171```json172{173 "id": 456,174 "deleted": true175}176```177178## Defaults179180When the user doesn't specify details:181182- **Frequency**: `"daily"`183- **Channel**: email to the current user184- **Start date**: now (ISO 8601)185- **Title**: auto-generated from the insight/dashboard name if not specified186187## Error handling188189- **Duplicate check**: If a subscription already exists for the same insight/dashboard and channel, inform the user and offer to update it rather than creating a duplicate190- **Slack not connected**: If a Slack subscription is requested but no Slack integration exists, explain that Slack must be connected in [Project settings > Integrations](/settings/integrations) first, then offer email as an alternative. Do not attempt to create the subscription — it will fail with a validation error191- **Slack integration wrong team**: The Slack integration must belong to the same PostHog team. If `integrations-list` returns Slack integrations but creation still fails, the integration may be misconfigured192- **Dashboard insights**: Dashboard subscriptions require at least 1 and at most 6 insights selected via `dashboard_export_insights`. If the user doesn't specify which insights, fetch the dashboard with `dashboard-get` and select the first 6 insights from its tiles193
Full transparency — inspect the skill content before installing.