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.
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
This skill guides you through managing PostHog subscriptions. Subscriptions deliver scheduled snapshots of insights or dashboards via email, Slack, or webhook.
Use this skill when the user:
Subscriptions and alerts serve different purposes:
If the user says "notify me when this drops below 100", use alerts. If the user says "send me this every morning", use subscriptions.
When someone wants the key numbers from an existing dashboard or insight posted to a channel on a schedule — "post the top-line from this dashboard in #launch once a day", "send the team these metrics every morning", or even "set up a scout/bot to post this daily" — the right tool is a dashboard (or insight) subscription, and an AI summary is its natural companion:
dashboard (or insight) and deliver to Slack or email. For a dashboard subscription, pick the tiles via dashboard_export_insights — that field is dashboard-only, and an insight subscription is rejected if you send it (an insight subscription needs no tile list).summary_enabled: true once the user agrees — it has AI-consent, quota, and budget gates that can reject the create, so keep it opt-in.Usually a better fit than a prompt subscription (creating-ai-subscription) or a Signals scout.
A prompt subscription composes its own HogQL and can drift from the dashboard's numbers; a scout is for open-ended watching that decides what's worth surfacing, not scheduled delivery of a fixed, user-specified metric set.
Don't override a user who's certain they want one of those — but when the ask is ambiguous (e.g. "set up a scout to post this daily"), suggest the subscription and confirm before building: "A dashboard subscription is a better fit for a recurring message. Want me to set that up?"
Reach for a prompt subscription when the user specifically asks for a free-text AI report, or when no existing insight/dashboard covers the ask.
Before creating a new subscription, check if one already exists.
Use subscriptions-list with optional filters:
insight query parameter with the insight IDdashboard query parameter with the dashboard IDtarget_type as email, slack, or webhookAlways ask the user whether they want email or Slack delivery before creating a subscription. Do not assume a channel — ask explicitly:
Would you like to receive this via email or Slack?
If the user says Slack, you must verify the integration is available (see step 2). If the user doesn't have a preference, suggest email as the simplest option.
Email requires no setup — it works out of the box. You just need the user's email address.
Get it from the user context or from org-members-list.
Slack requires a connected Slack integration. Before creating a Slack subscription:
integrations-list and look for an integration where kind is "slack"id — you'll need it as integration_idSlack isn't connected to this project yet. You can set it up in Project settings > Integrations. In the meantime, would you like to receive this via email instead?
Slack setup requires an OAuth flow in the browser — it cannot be done via MCP.
Webhook requires the user to provide a URL. Verify it looks like a valid URL before submitting.
Get the insight ID or dashboard ID. If the user provides a URL like /project/2/insights/pKxzopBG,
fetch the insight first with insight-get to get the numeric ID.
| User says | Parameters |
|---|---|
| "every day" / "daily" / "every morning" | frequency: "daily" |
| "every week" / "weekly" | frequency: "weekly" |
| "every Monday" | frequency: "weekly", byweekday: ["monday"] |
| "every month" / "monthly" | frequency: "monthly" |
| "twice a week" | frequency: "weekly", interval: 1, byweekday: ["monday", "thursday"] |
subscriptions-createFor an insight subscription via email:
{
"insight": 12345,
"target_type": "email",
"target_value": "user@example.com",
"frequency": "daily",
"start_date": "2025-01-01T09:00:00Z"
}For a dashboard subscription (requires selecting which insights to include, max 10):
{
"dashboard": 67,
"dashboard_export_insights": [101, 102, 103],
"target_type": "email",
"target_value": "user@example.com",
"frequency": "weekly",
"byweekday": ["monday"],
"start_date": "2025-01-01T09:00:00Z"
}For Slack delivery, include the integration_id from step 2:
{
"insight": 12345,
"target_type": "slack",
"target_value": "#general",
"integration_id": 789,
"frequency": "daily",
"start_date": "2025-01-01T09:00:00Z"
}For insight and dashboard subscriptions you can attach an AI-written summary to every
delivery — a short narrative that calls out what changed, outliers, and notable insights
alongside the snapshot. Set it at create time (or toggle later via subscriptions-partial-update):
summary_enabled: true — turns on the per-delivery AI summarysummary_prompt_guide: "..." — optional steer, e.g. "focus on sign-up conversion and any new drop-off points"{
"dashboard": 67,
"dashboard_export_insights": [101, 102, 103],
"target_type": "email",
"target_value": "user@example.com",
"frequency": "weekly",
"byweekday": ["monday"],
"start_date": "2025-01-01T09:00:00Z",
"summary_enabled": true,
"summary_prompt_guide": "Call out outliers and new insights since last week"
}Enabling a summary requires the organization to have approved AI data processing
(Org settings → Data → AI data processing) and to be within its active-summary cap and AI
credit budget; otherwise the create/update is rejected. summary_enabled does not apply to
prompt subscriptions — those are AI-generated by definition (see creating-ai-subscription).
Use subscriptions-partial-update with the subscription ID. Common updates:
{"frequency": "weekly", "byweekday": ["monday"]}target_value with the full comma-separated listtarget_type and target_value together{"summary_enabled": true, "summary_prompt_guide": "..."} — same AI-data-processing and budget gates as step 6Subscriptions are soft-deleted. Use subscriptions-partial-update:
{
"id": 456,
"deleted": true
}When the user doesn't specify details:
"daily"integrations-list returns Slack integrations but creation still fails, the integration may be misconfigureddashboard_export_insights. If the user doesn't specify which insights, fetch the dashboard with dashboard-get and select up to the first 10 insights from its tilesbuilding-a-dashboard — assemble the dashboard worth subscribing to firstcreating-ai-subscription — schedule a free-text AI report instead of an insight/dashboard snapshotd293866
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.