Doppler/Dashboard Docs

Dashboard Reference

Doppler Dashboard

Everything you need to understand what Doppler is tracking, what each number means, and how to act on it.

What is Doppler?

Doppler is an automated user recovery engine. It watches your users in real-time and automatically sends them personalized emails when they go quiet — before they churn. You install the SDK in your app, Doppler monitors the lifecycle signals, and the engine decides when and what to send.

Think of it as a growth co-pilot that never sleeps: it monitors every user, scores their engagement, detects drop-offs, and sends recovery messages tailored to exactly where they dropped off in your product.

Doppler does thisSo you don't have to
Monitor every user's lifecycleManually reviewing user dashboards
Score engagement and detect drop-offsBuilding churn prediction models
Send personalized emails at the right timeWriting and scheduling email campaigns
Capture cancellation feedbackExit survey tools
Report how much revenue was recoveredConnecting analytics + CRM + revenue data

How it works

Doppler works in three layers — your app sends signals, the engine processes them, and the dashboard shows you results.

1

You install the SDK

Two lines of code in your app. doppler.init() at startup, doppler.identify() after login, doppler.coreAction() when something important happens. That's it.

2

Doppler classifies each user

Every user gets placed into a lifecycle flow based on their behavior. Signed up but never did the core action? Flow A. Did it once then disappeared? Flow B. Trial ending soon? Flow C. Usage dropped? Flow E.

3

The engine decides what to send

Based on each user's flow type, health score, and inactivity window, Doppler crafts and sends recovery emails. No templates — the AI writes copy tailored to your product description and each user's state.

4

Dashboard shows you the results

You see recovered users, opened emails, revenue recovered, churn feedback, and trend graphs in real time. Every number is actionable.

Overview tab

The Overview is your command center. It loads automatically when you open a workspace. Every key metric about your users, emails, and recovery performance is visible here.

Top metric cards

Six cards at the top give you the health of your workspace at a glance. Each card has a sparkline showing 14-day trend.

  • Total Users — Total number of users Doppler has ever seen (all identify() calls).
  • Inactive Users — Users who haven't been seen within the project's inactivity threshold (configurable in Settings).
  • At Risk — Users whose engagement score has dropped to a warning level. These are pre-churn signals.
  • Emails Sent — Total recovery emails dispatched by the Doppler engine.
  • Recovered — Users who became active again after receiving a Doppler email. The gold metric.
  • Reactivation Rate — Recovered ÷ Inactive × 100. Tells you how effective Doppler's engine is for your product.

Activation Gap section

Below the metric cards, you'll see an Activation Gap breakdown if Doppler detects users who haven't reached key milestones:

  • Signed up but never set up — Users who have never called onboardingStarted() or later milestones. These users haven't engaged at all.
  • Set up but never hit core action — Users who completed onboarding but never called coreAction(). They started but didn't get real value.

These percentages are of total inactive users — not all users. A 100% in "Set up but never hit core action" means every inactive user went through onboarding but stalled before the AHA moment.

Doppler Engine status panel

A notification panel shows you what the engine is actively doing right now — how many inactive users were detected, how many have been recovered so far, and the current engine status. This refreshes automatically.

Recovery trend graph

An SVG line chart showing daily recovery counts over the last 14 days. Each point is a day; the Y axis scales to your peak recovery day. Use this to see if your recovery rate is growing or flattening.

Metrics explained

Every number on your dashboard has a specific definition. Here's exactly what each one means and how to act on it.

Total Users
Count of unique emails ever passed to doppler.identify(). This never decreases — it's a running total of everyone Doppler has ever seen.
Inactive Users
Users whose last_seen_at is older than your project's inactivityDays setting. Default is 7 days. Configurable in Settings.
At Risk
Users whose churnScore has crossed the 'at_risk' threshold. Doppler calculates churn score from a decay model — the longer since their last core event, the higher the risk.
Emails Sent
Total emails sent by the Doppler engine across all recovery flows. Includes Flow A, B, C, D, and E.
Recovered
A user is marked recovered when they become active again after having been inactive. Specifically: last_seen_at was older than the inactivity threshold and then a new event was received.
Reactivation Rate
(recoveredUsers / inactiveUsers) × 100. The higher this is, the better your recovery emails are working. Industry benchmark: anything above 10% is excellent for automated emails.
Auth Drop-Off
Percentage of users who never completed identify() properly — i.e., sessions where init() ran but identify() was never called. High values mean your SDK setup has a gap.
Setup Friction
Rate of users who started onboarding (onboardingStarted) but never completed it (onboardingCompleted). High setup friction = your onboarding UX needs work.
Weak Value Signal
Rate of users who completed onboarding but never hit coreAction(). If this is high, users understand your product but can't find the payoff — the core action path may be unclear.
Revenue Recovered
Estimated revenue from recovered users, calculated as: recoveredUsers × avgRevenuePerUser. Set avgRevenuePerUser in doppler.init() or in Settings to make this accurate.
Revenue at Risk
atRiskUsers × avgRevenuePerUser. The money you stand to lose if Doppler doesn't intervene.
💡
Set avgRevenuePerUser in Settings to unlock Revenue Recovered and Revenue at Risk. Without it, these show as N/A.

Activity feed

The right side of the Overview shows a live activity feed — a chronological list of everything Doppler has done and everything users have done.

Event types in the feed

  • email_sent — A recovery email was sent to a user. Shows subject line, flow type, and recipient.
  • churn_feedback — A user submitted a cancellation reason via captureChurnFeedback(). Shows their reason and optional comment.
  • revenue — A revenue event was tracked via trackRevenue(). Shows amount and label.
ℹ️
Activity items are sorted newest-first. The feed auto-refreshes. You can see a full email log in the Emails tab.

Recovery graph

The recovery graph on the Overview is an SVG trend line showing daily recovery counts over the last 14 days. It's built from the project_daily_metrics table which is updated by a trigger every time a user's status changes.

What counts as a recovery

A "recovery" is recorded when a user who was previously inactive sends any new event — a heartbeat, a milestone, a revenue event. Doppler marks reactivatedAt and increments that day's recovery count.

Reading the graph

A flat line near zero means no inactive users are coming back. A rising line means your recovery emails are working. A spike followed by a drop often means a one-time broadcast email went out — check the Broadcast tab for the date.

Users tab

The Users tab lists every user Doppler is tracking in this workspace. It's a searchable, filterable table with real-time health scores.

Columns

  • User — Email address of the user. Avatar is their initial.
  • Flow — Which recovery flow they're in. See the Flows section for what each flow means.
  • Last Seen — Time since Doppler last received any event from this user (heartbeat or SDK call).
  • Core Event — Time since their last coreAction() call. "Never" means they've never hit the AHA moment.
  • HealthHealthy / At Risk / Critical based on the decay score model.
  • StatusActive (seen recently) or Inactive (beyond inactivity threshold).

Health vs Status — what's the difference?

Status is binary: active or inactive based purely on time since last seen vs your inactivity threshold.

Health is a gradient: it measures core event decay. A user can be "Active" (seen recently) but "At Risk" (their core event cadence has slowed). This is how Doppler catches early-stage churn before the user fully disappears.

Filters

You can filter by flow type: All, No AHA, Drifted, Trial End, Returning, Usage Drop. Use the search box to find a specific user by email.

What you can do

Currently: view and inspect. Individual user recovery actions (manual email, suppression, unsubscribe override) are coming in a future release. Unsubscribed users are visible but marked — Doppler will never email them.

⚠️
A user marked Inactive + Healthy means: they haven't been seen in a while, BUT their core event history was strong enough that the decay model hasn't degraded their health yet. This is common for users who only use your product weekly.

Flows tab

The Flows tab shows you how many users are in each recovery flow and what that flow means. Each flow has a different recovery strategy and email sequence.

Flow AActivation Nudge

Trigger: User signed up but never called coreAction()

Strategy: Gets them to try the core thing — the AHA moment. Emails focus on value proposition and ease of getting started.

"Hey, you signed up 3 days ago but haven't tried [core feature] yet. Here's how to get your first [result] in 2 minutes."

Flow BRe-engagement

Trigger: User was engaged (hit coreAction or projectCreated) but went quiet

Strategy: Reminds them of their existing progress and pulls them back. Emails reference what they've already built.

"You set up your [thing] but haven't been back in a while. Here's what you left off."

Flow CTrial Expiry

Trigger: User's trial is ending soon (planDaysLeft passed to identify())

Strategy: Urgency-based. Creates FOMO around losing access. May include an upgrade prompt.

"Your trial ends in 2 days. Here's everything you'll lose access to."

Flow DWin-back

Trigger: User reactivated after being inactive (came back on their own)

Strategy: Welcoming and forward-looking. Celebrates their return and shows what's changed or improved.

"Welcome back! Here's what's new since you were last here."

Flow EUsage Drop

Trigger: User was previously active but core event cadence has declined

Strategy: Gentle check-in. Acknowledges their history and asks if something changed. Often highest-value recovery.

"You used to [core action] every week — we noticed it's been a while. Is everything okay?"

ℹ️
A user can only be in one flow at a time. Doppler assigns the most relevant flow based on their latest milestone state.

Emails tab

The Emails tab is a full log of every recovery email Doppler has sent through its engine for this workspace.

What you'll see

  • Subject — The subject line of the email as sent.
  • Flow — Which recovery flow triggered this email (A, B, C, D, E).
  • Type — The email type within the flow (e.g. initial nudge, follow-up, final reminder).
  • Sent to — The recipient's email address.
  • Sent at — Exact timestamp of when the email was dispatched.
  • Recovered? — Whether this specific email resulted in a user becoming active again.

What you can do

Currently view-only. Email editing, A/B testing, and per-user suppression are on the roadmap.

💡
If a user has a green Recovered badge next to their email row, that specific email is what brought them back. This is powerful evidence for ROI reporting.

Broadcast tab

Broadcast lets you send a one-time manual message to a segment of your users. Unlike the recovery engine (which is automated), Broadcast is for deliberate, human-initiated outreach — product announcements, changelogs, special offers.

Broadcast vs Recovery Emails — what's the difference?

  • Recovery Emails — Sent automatically by the engine. Triggered by user behavior. Personalized per-user based on their flow state.
  • Broadcast — Sent manually by you. Not behavior-triggered. Same message to a filtered audience segment.

Audience options

  • All Users — Every tracked user in this workspace.
  • Active Users — Users seen in the last 7 days.
  • Inactive Users — Users with no activity beyond the inactivity threshold.
  • At-Risk Users — Users whose health score is "at_risk" or "critical".

Broadcast types

  • Email — Sends an email to each user in the selected segment. Requires a subject and body.
  • In-App — Sends an in-app notification (requires in-app SDK integration — coming soon).

AI Draft button

The AI Draft button (coming soon) will generate a subject and body for your broadcast based on your product description and the selected audience. Saves you from starting with a blank page.

What you cannot do

  • Send to unsubscribed users — Doppler enforces this automatically.
  • Schedule broadcasts for a future time (coming soon).
  • Create recurring broadcasts (use the engine's automated flows for that).
⚠️
Broadcast emails are sent immediately on submit. There is no undo. Double-check your audience filter and content before hitting Send Broadcast.

Feedback tab

The Feedback tab shows all cancellation and churn reasons submitted by your users via the captureChurnFeedback() SDK call.

Feedback reasons

When a user cancels or downgrades, you can call captureChurnFeedback(reason, comment) in your cancel flow. The reason must be one of:

  • too_expensive — Price was the blocker
  • too_complex — Too hard to use or learn
  • found_alternative — They switched to a competitor
  • not_needed — They solved the problem a different way
  • other — Catch-all, requires a comment

Using feedback data

This is your qualitative churn signal. If 60% of feedback says "too expensive", that's a pricing problem. If it's "too complex", that's an onboarding/UX problem. Combine this with the Flows data to see which flow type correlates with which churn reason.

Settings tab

Per-workspace configuration. Changes here affect how Doppler classifies and recovers users in this workspace.

Configurable fields

  • Product description — Used by the AI to generate more relevant, contextual recovery emails. Be specific: what does your product do, who uses it, what's the core action.
  • Inactivity threshold (days) — How many days of silence before a user is classified as "inactive". Default: 7. Adjust based on your product's natural usage cadence (a daily tool = 2 days, a weekly tool = 10 days).
  • Avg. Revenue Per User (ARPU) — Monthly revenue per user in USD. Used to calculate Revenue Recovered and Revenue at Risk on the Overview.

Danger zone

The Settings tab also has a Delete Workspace option. This permanently deletes all users, emails, activity, and metrics for this project. Type the workspace name to confirm. This is immediate and irreversible.

Client key vs Server key

Doppler gives each workspace two API keys with different permission levels. Using the wrong one is a common setup mistake.

Client KeyPublic

Starts with pk_client_

  • ✅ Safe to embed in browser JavaScript
  • ✅ Used in doppler.init()
  • ✅ Cannot write to sensitive data
  • ✅ Cannot access other workspaces
  • ❌ Cannot delete users or projects
  • ❌ Cannot read your full user list
Server KeySecret

Starts with sk_

  • ❌ Never put this in browser code
  • ❌ Never commit to git
  • ✅ Use in server-side API calls only
  • ✅ Can access admin APIs
  • ✅ Use in environment variables
⚠️
If your Server Key is ever exposed, go to Settings and regenerate it immediately. All existing SDK integrations using the old key will need to be updated.

Finding your API keys

Your API keys are workspace-scoped — each workspace has its own key pair.

1

Open any workspace from the main app screen.

2

Look at the top bar — you'll see a "Developers" dropdown button.

3

Click "Developers" → select "Client Keys" to copy your public client key for the SDK.

4

Click "Developers" → select "API Keys" to access your secret server key for backend use.

Trial & Plans

Every new Doppler account includes a 14-day free trial with full access to all features, including the recovery engine, broadcast, and analytics.

What's included in the trial

  • ✅ Unlimited user tracking
  • ✅ All 5 recovery flows (A–E)
  • ✅ Broadcast emails
  • ✅ Dashboard analytics and metrics
  • ✅ Churn feedback collection
  • ✅ Full API access

What happens when the trial ends

After 14 days, if you haven't upgraded to a paid plan, the Doppler engine is paused. Your data is preserved — no users or emails are deleted. You can upgrade at any time from the Billing page in your account settings to resume the engine immediately.

Cancelling a plan

You can cancel your subscription at any time from Account → Billing. Your access continues until the end of the current billing period. After that, the engine pauses and you return to a read-only view of your data.

ℹ️
Need more time or a custom plan for high-volume usage? Email doppler@arinten.com.

Looking for SDK docs? View the SDK reference →