Notice an account going quiet

The job: a customer who used to read your site every week stops. That is a churn signal weeks before the renewal conversation, and nobody is watching for it.

Who this is for: anyone with renewals. It is the cheapest retention signal you have, because it needs no product telemetry.


Why absence is the signal

Churn analysis usually starts inside the product: logins, feature use, support tickets. All of that is downstream. A customer whose team stopped reading your docs and changelog has usually disengaged before usage drops — and a disengaged champion who has changed jobs shows up here first.

Finding the drop

customers = get_all("/accounts", classification="customer")

def weeks_quiet(a):
    last = datetime.fromisoformat(a["last_seen_at"])
    return (datetime.now(timezone.utc) - last).days / 7

quiet = [
    a for a in customers
    if a["visit_count"] >= 10        # they had a habit to break
    and weeks_quiet(a) >= 3          # and they have broken it
]

visit_count >= 10 is doing real work. Without it, every customer who visited twice at onboarding and never again is "going quiet", and the list is noise.

Ranking by what you would lose

An account list sorted by silence is not sorted by risk. Sort it by value, and you need your own revenue data for that — Signal knows who visits, not what they pay you. Join on company_domain against your billing system:

at_risk = sorted(
    ((a, mrr.get(a["company_domain"], 0)) for a in quiet),
    key=lambda pair: pair[1], reverse=True,
)

Asking the assistant what changed

Before a CSM calls, it helps to know whether the whole account went quiet or only one person:

curl -s https://app.signal.geysera.com/agent-api/signal/copilot/ask \
  -H "Authorization: Bearer $SIGNAL_COPILOT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"question": "Which people from acme.com visited in the last 90 days, and when did each of them last come?"}'

One person going silent while the rest continue is usually a job change, and the play is to find their replacement. The whole account going silent is a different conversation.

What will go wrong

Seasonality reads as churn. Nobody visits your site the week of a public holiday. Compare against the same account's own history, not a fixed window, or run this monthly rather than weekly.

Your pixel breaking reads as every account churning at once. If the list suddenly triples, check that identification is still running before you call anyone — ask the assistant "have we stopped identifying visitors?" It knows.

Silence is not always bad. A customer in steady-state use has no reason to read your marketing site. Weight this by how much the account used to visit, which is what visit_count is for.


Next: watch your own data quality · a weekly revenue brief your LLM writes

Markdown source: /developers/workflows/notice-an-account-going-quiet.md