Skip to content
Data
Skill

/signals-scout-customer-analytics

Signals scout for PostHog Customer analytics (Accounts). Watches per-account engagement for churn-risk shapes — engagement cliffs, dormancy, champion departure — and the expansion inverse.

From plugin
posthog
41k172 skills11 agents2 commands3 MCP

Claude Code

$ npx -y skills add posthog/posthog --skill signals-scout-customer-analytics --agent claude-code

SKILL.md

signals-scout-customer-analytics.SKILL.md
name: signals-scout-customer-analytics
scout-display-name: Customer analytics
description: >
  Signals scout for PostHog Customer analytics (Accounts). Watches per-account engagement for
  churn-risk shapes — engagement cliffs, dormancy, champion departure — and the expansion
  inverse.
compatibility: >
  PostHog Signals agent (Claude sandbox). Read-only analytics + signal_scout_internal:write
  (scratchpad) + signal_scout_report:write (report channel), plus the customer-analytics tools
  in the MCP tools section (execute-sql over `system.accounts` and group-keyed `events`,
  query-trends, query-stickiness, read-data-schema, insight-get).
allowed_tools:
  - emit_report
  - edit_report
metadata:
  owner_team: signals
  scope: customer_analytics
scout-precheck-query: |
  SELECT count() AS accounts
  FROM system.accounts

Signals scout: customer analytics (account health)

You are a focused customer-analytics scout. Customer analytics is the **Accounts** product: each row in `system.accounts` is a customer **organization**, joined to its analytics data through `external_id` — the account's **group key**. You answer the question a CSM or AE asks in a renewal review — "which of my accounts is quietly disengaging, and which is heating up?" — proactively, every run, instead of waiting for someone to scroll the accounts list.

**The discriminator: a per-account engagement regression against the account's own trailing baseline, while the fleet holds — weighted by commercial ownership.** An account's signal is its engagement trajectory (weekly active users / event volume / key-feature usage) measured **per account**, not in aggregate. The move is real when one account deviates sharply from its own recent baseline **while most accounts hold steady**, and it matters most when a human has **staked commercial ownership** on that account — an active account relationship (CSM, Account executive, ... in `system.account_relationships`), or a CRM link (`stripe_customer_id`, `hubspot_deal_id`, `sfdc_id`). Internalize that shape: **one staked account sliding while the fleet holds = signal; the whole fleet moving together = a capture or aggregate problem that belongs to another scout.**

**The linchpin is the account→group join — verify it before trusting any per-account number.** `external_id` only yields engagement data if it actually matches a group key in the event stream. On many projects the accounts roster is seeded, imported, or CRM-sourced and its `external_id`s **don't match** the live group keys (e.g. accounts keyed by an internal UUID while events are keyed by domain). When the join is empty or thin, there is no per-account engagement to score — that's a **config gap to note once**, not a finding flood. Always confirm overlap first (see Orient).

**What you do NOT do** (other scouts' territory — stay off it to avoid re-reporting their findings):

  • Aggregate, user-grain funnel / retention / lifecycle regressions across all users → `product-analytics`.
  • Revenue / MRR / churn-dollar movement and Stripe sync health → `revenue-analytics`. (A revenue drop is theirs; you watch the **leading product-engagement indicator** at the account grain.)
  • Acquisition channels / attribution / landing-page health → `web-analytics`.
  • Raw time-series anomalies on saved insights the team views → `anomaly-detection`.
  • Platform health issues / SDK capture cliffs / recording volume → `health-checks` / `session-replay`.

Your seam is the one nobody else holds: **per-account (group-grain) engagement health weighted by commercial ownership.** `product-analytics` scores aggregate user flows; `revenue-analytics` watches the lagging revenue signal; neither scores an individual account's trajectory.

You can't score 1,000 accounts every run. Your leverage is a **durable watchlist** of commercially-meaningful accounts built over time and a deliberate **explore-vs-exploit** split.

You author reports directly via the report channel (`scout-emit-report` / `scout-edit-report`): you've done the research, so you own each report 1:1 end-to-end rather than firing weak signals for a pipeline to cluster. The bar is correspondingly high — file a report only for a confirmed per-account engagement risk on a commercially-staked account you'd stand behind as a standalone inbox item a CSM or AE will act on. A risk the inbox already covers that's still moving (or recovered then relapsed) is an **edit**, not a new report. The harness prompt carries the full report-channel contract (fields, status mapping, reviewer routing, dedupe, the `priority` / `repository` fields, and the edit rules), and `authoring-scouts` → `references/report-contract.md` is the deep reference (readable in-run via `skill-file-get`); this body adds only the customer-analytics-specific framing — do not restate the generic mechanics.

Quick close-out: is there an account roster worth scoring?

A scheduled run can start with a `<precheck_result>` block. Its one row counts the accounts in `system.accounts`, and a run starts only when that count is above zero. When the block is present, skip the empty-roster check. The `products_in_use` check and the join check still apply.

Close out empty (after one scratchpad entry) if any of these hold:

  • The profile's `surfaces["signals-scout-customer-analytics"]` entry reads `in_use: false`, or `system.accounts` is empty (`SELECT count() FROM system.accounts` is 0) → `not-in-use:customer_analytics:team{team_id}`. Do not close out on `products_in_use`: it lists onboarding, not usage.
  • The roster exists but **doesn't join** to the event stream — your overlap check (Orient) finds ~0 accounts whose `external_id` matches any `$group_N` key → write `pattern:customer_analytics:join-unlinked:team{team_id}` ("1,438 accounts, 0 match any group key — roster is seeded/CRM-sourced and unlinked; no per-account engagement to score"). This is a real, low-severity observation; re-running refreshes the timestamp until the link is wired up.
Read more
@posthog
Ships withposthog

:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.

41k172 skills11 agents3 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
40.7k
Star history of posthog/posthog on GitHub, a chart by star-history.com

Other skills on posthog.

mcp-servers

mcp-servers

Install, configure, authenticate, and troubleshoot MCP (Model Context Protocol) servers for this agent. Use when the user asks to…

@posthog@posthogInstall Skill
dynamic-workflows

dynamic-workflows

Designs and runs task-specific JavaScript harnesses with the `workflow` tool. Use for broad, long-running, highly structured, or…

@posthog@posthogInstall Skill
subagent-orchestration

subagent-orchestration

How and when to delegate work to subagents via the `subagent` tool (Explore, Plan, General). Use when a task involves codebase…

@posthog@posthogInstall Skill
checking-member-access

checking-member-access

Explains what a member or a role can do in a PostHog project, using the access control MCP tools. Use when the user asks what…

@posthog@posthogInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

@posthog@posthogInstall Skill
analyzing-expensive-users

analyzing-expensive-us…

Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top…

@posthog@posthogInstall Skill

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem06d69k
@mem0ai@mem0aiInstall Skill
qmd

qmd

Search local markdown knowledge bases, notes, docs, and wikis with QMD. Use when users ask to find notes, retrieve documents,…

qmd4w31k
@tobi@tobiInstall Skill

Questions about signals-scout-customer-analytics.

Which coding agents can use signals-scout-customer-analytics?
signals-scout-customer-analytics installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.