# 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

```python
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:

```python
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:

```bash
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](./watch-your-own-data-quality.md) ·
[a weekly revenue brief your LLM writes](./a-weekly-revenue-brief-your-llm-writes.md)
