Intent detection
Detect intent. Keep revenue.
Peeve turns your existing pricing and cancellation UI into passive intent signals, so you spot at-risk and upgrade-ready customers in the moment, without writing a single tracking event.
your pricing card: markup you already have
Growth
$99/yr
data-peeve-plan="Growth"
data-peeve-amount="$99.00"
data-peeve-currency="USD"
data-peeve-interval="yearly"
data-peeve-amount="$99.00"
data-peeve-currency="USD"
data-peeve-interval="yearly"
passive signal
→the signal Peeve captures
{
kind: "pricing_view",
plan: "Growth",
amount: 99,
currency: "USD",
interval: "yearly"
}
kind: "pricing_view",
plan: "Growth",
amount: 99,
currency: "USD",
interval: "yearly"
}
Most churn is silent
By the time a cancellation lands, the moment to help is gone.
The customers who quietly evaluate leaving never file a ticket. Catching that intent with hand-rolled event tracking is brittle, and it never gets prioritized over shipping features. So the signal you most need is the one you never collect.
How it works
Three steps, all from markup you already ship.
01
Annotate what you already have
Add a few data-peeve-* attributes to your pricing cards and cancel button. No JS calls, no event tracking to wire up.
02
Peeve captures intent passively
A pricing view emits a pricing_view signal; a click toward cancellation emits cancel_intent, fired via a lightweight beacon, even if the visitor never opens the assistant.
03
Every signal is revenue-aware
Plan, amount, currency and interval ride along with every signal, so intent is tied to the money at stake, not an anonymous pageview.
What Peeve understands
Intent, tied to revenue and to whether you actually helped.
Revenue context on every signal
Each pricing_view and cancel_intent carries { plan, amount, currency, interval }, so intent is tied to the money at stake, not an anonymous pageview.
Account Health for known contacts
A health read for identified contacts, surfaced in the agent's context panel so a human sees risk at a glance. Cold-starts after about a week of activity.
Outcome detection on every conversation
Peeve classifies each chat as solved, unsolved, partial or abandoned (including the sessions a visitor drops mid-way), so “did we actually help?” is measured, not guessed.
What's nextComing soon
The capture is shipped. These build on top of it.
At-risk view
Separate customers who reached out before canceling from those who canceled cold (never asked for help).
In-the-moment intervention
A retention prompt, an offer, or a real-time team alert at cancel-intent.
Upgrade nudges
Turn pricing-evaluation signals into a well-timed prod toward the right plan.
Signal capture that powers these is live today; the views and interventions above are on the roadmap.
Revenue metadata, not PII
Signals capture plan and pricing context (the revenue metadata around an action), not payment details or card data.
01Do I have to write tracking events?
No. You add data-peeve-* attributes to markup you already have (your pricing cards and your cancel button), and Peeve reads them straight from the DOM. There are no SDK event calls to write or maintain.
02Does a signal fire if the visitor never opens the assistant?
Yes. Both signals are passive: a plain pricing-page view emits pricing_view, and a click toward cancellation emits cancel_intent, sent via a lightweight beacon, whether or not the assistant is ever opened.
03What data rides with a signal?
Plan, amount, currency and interval: the revenue context around the action, so intent is tied to the money at stake rather than an anonymous pageview.
04Is any payment data captured?
No. Signals capture plan and pricing context (the revenue metadata around an action), not payment details or card data.
14-day trial, no cardInstalls in an afternoonRead-only until you widen itKill switch in one commandCancel anytime, no lock-in