Engagement Metrics 2026
Status: Implementation Complete - Pending Stakeholder Review Stakeholder: Lena Implementation: eli-kpi
Assumptions to Verify with Lena
These assumptions directly affect the accuracy of all metrics. Please confirm or correct.
1. Tests Per Pack
| Assumption | Value | Source |
|---|---|---|
| Tests per pack | 4 tests | Shopify product descriptions |
Evidence:
- "12 Cortisol tests" product description: "3 packs of 4 Cortisol tests"
- "Cortisol Pack - One-time Purchase" description: "4 tests"
- "Cortisol Pack - Subscription" description: "4 tests"
Question for Lena: Is 4 tests per pack correct for all product variants?
2. Subscription Quantity Data
The Loop subscription data includes a quantity field that varies by subscription:
| Plan Type | Most Common Quantity | Total Tests | Tests/Month (Amortized) |
|---|---|---|---|
| Monthly (1mo) | 1 pack | 4 | 4.0 |
| Monthly (1mo) | 3 packs | 12 | 12.0 |
| 6-month prepaid | 3 packs | 12 | 2.0 |
| 6-month prepaid | 6 packs | 24 | 4.0 |
| 12-month prepaid | 3 packs | 12 | 1.0 |
| 12-month prepaid | 9 packs | 36 | 3.0 |
Current Implementation: Uses actual quantity from each subscription, calculates:
tests_per_month = (quantity × 4) / interval_months
Question for Lena: Does this formula accurately represent how many tests a user should be using per month?
3. One-Hour Deduplication Window
When a user scans a test:
- The test takes ~20 minutes to develop
- Users may scan multiple times during this window
- All scans within the same hour are counted as ONE test attempt
Question for Lena: Is a 1-hour window appropriate, or should it be different (30 min, 2 hours)?
4. Eligibility Window for WAU/MAU
Currently using 3-month eligibility window (not 6 months):
- A user is "eligible" if they made a purchase within the last 90 days
- This affects the denominator for WAU and MAU calculations
Question for Lena: Confirm 3-month window is correct. Should we also track 6-month for comparison?
5. Subscription Types Included
Currently counting:
- Loop subscriptions (all types: monthly, 6-month prepaid, 12-month prepaid)
NOT currently counting:
- Shopify one-time purchases
- Partner samples
- Replacement orders
Question for Lena: Should one-time Shopify purchases be included in "tests delivered"?
6. Internal Account Exclusion
Excluding all accounts with @eli.health email addresses.
Question for Lena: Are there other internal/test accounts to exclude?
Metric Definitions
1. Monthly Test Completion Rate
Formula:
Completion Rate = Successful Tests / Tests Delivered × 100
Current Results (as of Jan 24, 2026):
| Month | Successful Tests | Tests Delivered | Completion Rate |
|---|---|---|---|
| January 2026 | 3,948 | 17,810 | 22.2% |
| December 2025 | 3,340 | 15,276 | 21.9% |
Interpretation: About 22% of the tests we're "delivering" (amortized) result in successful completions.
2. Weekly Active Users (WAU)
Formula:
WAU = Users with ≥1 completed test this week / Eligible users (purchased in last 90 days)
3. MAU Standard
Formula:
MAU Standard = Users with ≥1 completed test this month / Eligible users
4. MAU Power Users
Formula:
MAU Power = Users with ≥4 completed tests this month / Eligible users
Why 4 tests? One pack = 4 tests = expected monthly usage for fully engaged users.
Data Sources
Key Joins
- Loop → Firebase: Match by email address
- Firebase → App User: Match by
uid = accountId - App User → Readings: Match by
userId
SQL Implementation
Location: eli-kpi/src/sql/bigquery/loopwork/
| Metric | SQL File |
|---|---|
| Test Completion Rate | monthly-test-completion-rate-delivered.sql |
| WAU | weekly-engagement-rate-2026.sql |
| MAU Standard | mau-standard-2026.sql |
| MAU Power Users | mau-power-users-2026.sql |
API Endpoints
| Endpoint | Description |
|---|---|
GET /api/engagement-2026/test-completion-rate | Monthly completion rate |
GET /api/engagement-2026/wau | Weekly active users |
GET /api/engagement-2026/mau-standard | Monthly active users |
GET /api/engagement-2026/mau-power-users | Power users |
Questions Pending Resolution
-
Quantity verification: Does every subscription have the correct quantity in Loop? Are there data quality issues?
-
Prepaid delivery timing: For prepaid plans, all tests ship at once but we amortize for calculation. Is this the right approach?
-
Cancelled subscriptions: Should we count tests as "delivered" for the months before cancellation?
-
Subscription renewals: For monthly subscriptions, do they get new tests each month (which we should count)?
-
Historical backfill: Should we calculate these metrics historically, or only going forward?
Revision History
| Date | Author | Change |
|---|---|---|
| 2026-01-24 | Chip | Initial implementation with quantity-based amortization |