checking…
OAuth —
— sites loaded
Today
—
7-day total
—
30-day total
—
—
Active members
—
—
Monthly recurring
—
—
Annualized revenue
—
projected
📊 Ops brief
Loading executive summary…
Daily revenue — last 30 days
Stacked: wash sales (blue) + membership recharges (green). Today's bar is partial.
Cumulative revenue
Solid = actual. Dashed = on-pace at trailing average. Above dashed = ahead.
Site leaderboard — last 30 days
Sorted by 30-day revenue. Trend column compares last 7 days to prior 7 days.
Site deep-dive
Click any site in the grid below for a detailed performance view.
Loading sites…
Date range & filter
Total revenue
—
Transactions
—
Sites with activity
—
Revenue over time
Revenue by site
Pick a date range and click Load.
Active members
—
Monthly recurring revenue
—
New (30d)
—
Churned (30d)
—
MRR by site
Subscriber revenue per location. Line overlay = active member count.
MRR fleet share
Each site's % contribution to total monthly recurring.
Member flow — last 30 days
New signups (green) vs churned plans (red), per site.
Members by site
Loading members…
Year-over-year comparison
Compare a calendar month against the same month in prior years. Useful for spotting seasonal patterns and YoY growth/decline beyond just last 30 days. Each historical month walks once and caches for 24 hours.
Pick a month and click Compare. First-time scans of historical months take ~3-5 min each; results cache for 24 hours.
Week selector
Pick a Saturday and click Generate.
Campaign analysis controls
Washes/mo comes from real DRB PlanUse transactions (last 24 months). Use the override for what-if scenarios (set to any positive integer to test a different assumption). First full run walks ~123K customers and ~500K+ transactions (15–25 min one-time). Wash data caches 4 hours; cohort data 10 minutes.
Pick a date range and click Analyze. Try Jan 2024 → today for full history, or Feb–Mar 2026 to focus on your most recent 99¢ campaign.
Estimated P&L — last 30 days, annualized
Revenue is pulled live. Enter your expense assumptions on the right and the P&L recomputes instantly. Numbers persist in your browser. Not GAAP-audited — for directional planning only. When QuickBooks sync ships, this tab will pull real expense data and the estimator becomes the audit baseline.
Profit & loss (GAAP-style)
| Revenue (TTM annualized) | — |
| Wash sales | — |
| Membership recharges | — |
| Gross revenue | — |
| Less: COGS (variable cost per wash × volume) | — |
| Gross profit | — |
| Gross margin | — |
| Less: Labor | — |
| Less: Rent | — |
| Less: Utilities | — |
| Less: Marketing | — |
| Less: Other OpEx | — |
| EBITDA | — |
| EBITDA margin | — |
| Less: D&A (depreciation + amortization) | — |
| Less: Interest | — |
| EBT (pre-tax income) | — |
| Less: Taxes (effective rate × EBT, if positive) | — |
| Net income | — |
Assumptions
Defaults are placeholder estimates. Replace with your actuals from QuickBooks. Inputs auto-save in the browser per assumption set.
EBITDA (annual)
—
—
Gross margin
—
% of revenue
Implied valuation
—
EBITDA × multiple
Rev / active member
—
annualized
Niche stats
Things you wouldn't think to ask but will want to know once you see them. Computed from the same 30-day window as the Dashboard.
Best day of week
—
—
Worst day of week
—
—
Top revenue site
—
—
Hottest streak
—
—
Recharge mix
—
% of revenue from members
Net member velocity
—
net adds per day, last 30d
Avg MRR / member
—
blended across plans
Site revenue spread
—
top vs bottom
Import DRB wash codes
Upload a CSV exported from the DRB SmartCodes portal. Codes are parsed, deduplicated against existing inventory, and imported into the rewards system. The standard DRB format is 3 columns (scan code, display code, base code) with no header row.