Staff activity is included. Engagement, visits and login counts
will read high — switch back to customers-only before making decisions.
How the business is doing, in plain language — details live in the other two tabs.
Loading…
This Cycle vs Last
Daily active customers by day of cycle
View as table
Customer Journey
How many customers take each step
What Changed This Cycle
Written from the numbers — no chart-reading required
Subscription Opportunity
Average reserved value per customer, this catalog
Loading…
Customers Needing Attention
Inactive 30+ days — full list in Customer Intelligence
Loading…
Day-to-day store management — what's being reserved and cancelled.
Most Reserved Titles
Reserve events, last 30 days · color = distributor
LunarPRH
Most Subscribed Series
Net subscribers, last 30 days · color = distributor
LunarPRH
Most Cancelled Titles
Cancel events, last 30 days · color = distributor
Publisher Demand
Share of reserves, last 90 days — a guide for weighting shelf copies
Customer Activity
Per-customer counts, last 30 days · sorted by last seen
Loading…
Who your customers are, who's healthy, and who to reach out to.
Customer Segments
By visit frequency, last 30 days
Loading…
Weekly Cohorts — Who Came Back
Of customers active each week, % returning within 30 days
Deeper green = healthier cohort · *window still open, will keep rising
Win-back List
Active accounts with no activity in 30+ days
Loading…
Paper customers never log in — they're invite-to-app candidates, not lapses.
Metric definitions & data sources
Cycle start & day of cycle
A "cycle" begins when a catalog month's first row is imported (min(catalog.created_at) for
the current catalog_month) and runs until the next month's catalog is first imported. Day 1 =
the import day; "Day N" in the page subtitle counts elapsed local days since then. Weekly
reloads of the same month (new shipment invoices, corrected catalog rows) don't move day 1 —
only a new catalog_month does.
Source: catalog.created_at.
Customer Engagement Score
One number, 0–100, blending four components: customer retention (40%),
habit score (25%), visits per week (20%) and actions per visit (15%).
Retention and habit are already percentages; visits/week is normalized as min(visits ÷ 3, 1)×100
(3+ visits a week = full marks) and actions/visit as min(actions ÷ 3, 1)×100 (3+ distinct core
actions per visit = full marks). The delta compares this cycle's blend to the same point in the
prior cycle, on the same basis — reads "—" if the prior-cycle baseline isn't available.
Source: usage_events, derived client-side.
Customer Retention
Of customers active in the prior cycle (from that cycle's start up to this cycle's start), the
% with any activity so far this cycle — "Did last cycle's customers come back this cycle." The
delta's baseline cohort is approximated one cycle further back (prevPrevStart* =
prior cycle start minus the prior cycle's own length, since the real month-before-prior catalog
rows are typically purged by then) and is phase-capped to the same number of elapsed days as the
current cycle. Reads "—" when that approximation falls outside the 90-day usage_events window.
Source: usage_events.
Habit Score
Of customers active in the last 30 days, the % who were also active in the last 7 days
(WAU ÷ MAU) — how many monthly customers keep a weekly habit. The delta re-anchors both windows
at the same day-of-cycle point in the prior cycle, instead of a fixed "30-60 days ago" window.
Source: usage_events.
Visits per Week & Actions per Visit
A visit (session) is a burst of one customer's events with no gap > 30 minutes.
Visits/week = sessions ÷ active customers ÷ weeks, over the days elapsed so far this cycle.
Actions/visit = average distinct core actions (browse, reserve/cancel, my-list, subscriptions,
arrivals) per session. The delta compares the same number of elapsed days in the prior cycle.
Source: usage_events, session-clustered client-side.
New Customers
Non-admin, non-paper user_profiles created since this cycle began. The delta compares the same
number of elapsed days in the prior cycle. Profiles are never purged, so both sides are exact —
unlike the usage_events-based metrics above, this one isn't bounded by the 90-day window.
Source: user_profiles.created_at.
This Cycle vs Last (overlay chart)
Distinct active customers per day of cycle, current cycle overlaid on the prior cycle at the
same day offset. The prior line stops at that cycle's own length — a longer current cycle simply
has no prior line past that point. The dashed marker plots the order deadline's day-of-cycle
offset when it falls within the chart's range. Bursts (e.g. from a notify-customers email) don't
necessarily land at the same day offset every cycle — that email can be suppressed on a given
import, so the chart's job is a stable anchor, not a guaranteed aligned spike.
Source: usage_events (day-of-cycle bucketed) + catalog.created_at (cycle anchors).
Reserved value
Gross value of reserve actions logged for a catalog month (price × reserves), non-admin.
The month-over-month delta compares the current catalog month to the previous one on the
same basis — unlike the other Executive metrics above, this one stays anchored to the calendar
catalog month rather than the cycle, since it's already scoped to catalog_month. Per-customer
averages in Subscription Opportunity come from live preorders for the current catalog month
instead.
Source: usage_events (price_usd on reserve events) + preorders × catalog.price_usd.
Publisher Demand
Share of reserve events by publisher over the last 90 days. The trend note compares each
publisher's share in the most recent 45 days to the prior 45 days (a full 90-day-vs-prior-90
comparison isn't possible — usage_events are purged after 90 days).
Source: usage_events (publisher on reserve events).
Cancel timing
For each cancel, the time since that customer's most recent prior reserve of the same title.
Cancels within 24 hours read as second thoughts rather than lost sales.
Source: usage_events (reserve → cancel deltas).
Customer Segments
Customers bucketed by visits/week: Power user 5+/wk, Regulars 2–4/wk, Occasional under 2/wk.
The upgrade value compares average reserved value between the Regular and Occasional tiers.
Source: usage_events + reserve-event value.
Weekly Cohorts
For each of the last four weeks, the % of that week's active customers with any activity
in the following 30 days. Bar green deepens with the rate; * marks cohorts whose 30-day
window is still open.
Source: usage_events.
Win-back List & priorities
Active, non-admin accounts whose newest event is 30+ days old (or absent within the 90-day
retention). Priority: High value = prior reserved value above the customer median;
Paper = never logged in (invite-to-app candidates, not lapses); Medium = the rest.
Source: user_profiles + usage_events.
Admin filter
Excludes events whose user belongs to an is_admin profile. Client-side set-filter, default ON.
Admin self-actions ARE logged (only impersonated sessions are skipped).
Note: toggling includes/excludes admin users; the amber banner warns when included.
Retention window
usage_events are purged after 90 days by the monthly import. There is no "all time" view —
every metric here is bounded by that window, including cycle-anchored ones (a delta reads "—"
once its baseline window falls outside the 90 days). The Executive and Operations tiles above
compare equal-length cycle windows; the panels below (funnel, title bars, publisher demand,
activity table, segments, cohorts, win-back) use fixed 30-day/90-day trailing windows instead.