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