Metrics & Money Framework

Pre-work for Session 8 | Prepared: 2026-02-18


Summary (3 sentences for Danny)

We are pre-revenue with zero production data, so the metrics system needs to be dead simple: one North Star metric (properties under active management), a weekly dashboard Danny checks in 5 minutes, and a monthly review that the engineering team runs from Stripe + Supabase data — no analytics platform until we hit 50 paying customers. The unit economics look strong on paper (GBP 0.43-0.99 cost per property, GBP 3-5 revenue per unit, 67-86% gross margin) but every assumption needs validation from the first 10 customers, so the framework includes a concrete validation plan with specific data points to collect and when. Stripe handles billing with per-unit pricing and 14-day free trials, ChartMogul (free tier) gives us MRR/churn dashboards from day one, and we track LLM costs per customer using Langfuse or a simple Supabase logging table — total tooling cost: GBP 0-80/month.


The Metrics That Matter

For a pre-revenue SaaS, what should we actually track? The answer is not everything — it is the smallest set of numbers that changes decisions. If a metric does not cause you to do something different, stop tracking it.

North Star Metric

Properties under active management (PAM) — defined as properties where at least one tenant has sent a message through Envo in the last 30 days.

Why this and not MRR?

MRR is a lagging indicator — it tells you what happened. PAM is a leading indicator — it tells you whether the product is delivering value. A landlord who pays but whose tenants never use the system will churn. A landlord whose tenants are actively messaging will stay. PAM correlates with retention, expansion (landlords add more properties when it works), and referrals (they tell other landlords).

At our stage, growing PAM from 0 to 100 is the only thing that matters. Revenue follows.

Target trajectory:

  • Month 1-3: 0 to 50 PAM (first 5-8 customers)
  • Month 4-6: 50 to 200 PAM (product-market fit signal)
  • Month 7-12: 200 to 500 PAM (scaling signal)

Weekly Dashboard

What does Danny look at every Monday morning? What do Bilal and Deen look at?

Danny’s Monday Dashboard (5 minutes, no login required — delivered via email or Slack)

MetricTargetSourceWhy It Matters
New sign-ups this week3-5/week by month 3Supabase AuthIs the top of funnel working?
Active trialsTrack trendSupabase (trial_started_at)How many people are evaluating us right now?
Trial-to-paid conversions this week>15% of expiring trialsStripeAre trials turning into revenue?
Hot leads in pipeline3-5 at any timeNotion lead trackerIs there enough to close this month?
Properties added this week (new + existing customers)Increasing week-on-weekSupabaseAre customers expanding?
Customer health flagsZero red flagsSupabase (no login >5 days, zero issues >14 days)Who is about to churn?

Engineering Dashboard (5 minutes, from Supabase + provider dashboards)

MetricTargetSourceWhy It Matters
Total AI conversations this weekTrack trendSupabase conversation logsIs usage growing? Are we approaching cost thresholds?
AI resolution rate (conversations that did not need landlord intervention)>60%Supabase (issue status)Is the AI good enough? This is our core product quality metric
LLM spend this week (GBP)< 50% of revenueAnthropic/OpenAI dashboardsAre costs tracking to plan?
System uptime99.5%+UptimeRobotDid anything break?
Support tickets opened<1 per customer/monthCrisp or email inboxIs the product confusing?
Error rate (Sentry)<0.1% of requestsSentryStability check

Monthly Review Metrics

The team sits down for 30 minutes on the first Monday of each month.

MetricFormulaBenchmark (Early Stage B2B SaaS)Our Target
MRRSum of all active subscription valuesN/A pre-revenue; 10-20% MoM growth once live15% MoM growth after month 3
MRR Growth Rate(MRR this month - MRR last month) / MRR last month10-20% MoM for early stage15% MoM
Logo Churn RateCustomers lost / customers at start of month<5% monthly for early B2B SaaS; 3.5% is average<5% monthly
Revenue Churn RateMRR lost from churned + contracted / MRR at start<3% monthly (best-in-class B2B SaaS)<5% monthly
Net Revenue Retention(MRR at start + expansion - contraction - churn) / MRR at start>100% is the gold standard>100% by month 6
CAC Payback PeriodCAC / (ARPU x Gross Margin %)<12 months; early stage median is 4.8 months<6 months
Gross Margin(Revenue - COGS) / Revenue70-85% for B2B SaaS>70%
Trial-to-Paid ConversionPaid conversions / trial starts in same cohort10-25% for B2B SaaS free trials>15%
Properties per CustomerTotal properties / total customersN/AIncreasing trend (expansion signal)
Tenant Adoption RateTenants who messaged / total tenants in systemN/A (our unique metric)>30% within 30 days of go-live

Revenue Metrics

MetricDefinitionHow to CalculateTool
MRRMonthly Recurring Revenue — the predictable revenue normalised to a monthly amountSum of all active subscriptions’ monthly value. Annual plans divided by 12Stripe Dashboard or ChartMogul
ARRAnnual Recurring RevenueMRR x 12ChartMogul
ARPUAverage Revenue Per User (per customer)MRR / number of paying customersStripe + spreadsheet
ARPAAverage Revenue Per AccountSame as ARPU for us (1 account = 1 org)Stripe
Revenue per propertyRevenue generated per property under managementMRR / total properties across all paying customersSupabase + Stripe
MRR Growth RateMonth-on-month percentage increase in MRR(Current MRR - Previous MRR) / Previous MRRChartMogul
New MRRMRR from brand new customers this monthSum of first-month subscriptionsChartMogul
Expansion MRRMRR increase from existing customers (added properties, upgraded tier)Sum of MRR increases from existing accountsChartMogul
Contraction MRRMRR decrease from existing customers (removed properties, downgraded)Sum of MRR decreases from existing accountsChartMogul
Churned MRRMRR lost from customers who cancelledSum of MRR from cancelled subscriptionsChartMogul
Net New MRRTotal MRR change this monthNew MRR + Expansion MRR - Contraction MRR - Churned MRRChartMogul

Customer Metrics

MetricDefinitionTargetHow to Measure
Total paying customersOrganisations with an active, non-trial subscriptionGrowing month-on-monthStripe active subscriptions
Total properties under managementAll properties across all paying orgsThis is our scale metric — target 500 by month 12Supabase properties table, filtered to paying orgs
Trial-to-paid conversion ratePercentage of trial sign-ups that convert to a paid plan within 30 days>15% (industry benchmark 10-25%)Stripe: count conversions / count trial starts per cohort
Activation ratePercentage of sign-ups who complete the aha moment (first real tenant conversation)>60% within 7 days of sign-upSupabase: first non-test message timestamp exists within 7 days of account creation
Time to activationDays from sign-up to first real tenant conversation<3 days (Solo Landlord), <7 days (Portfolio)Supabase: timestamp diff between account creation and first tenant message
Logo churn ratePercentage of customers who cancel per month<5% monthlyStripe cancelled subscriptions / active at start of month
Revenue churn ratePercentage of MRR lost to cancellations and downgrades<5% monthlyChartMogul
Net Revenue Retention (NRR)Whether existing customers generate more or less revenue over time>100% (means expansion outweighs churn)ChartMogul
Properties per customerAverage number of properties per paying orgTrack trend — increasing means expansionSupabase
NPS / CSATCustomer satisfactionNPS >40, CSAT >4.0/5.0Manual survey (Typeform or Google Form) at day 30 and quarterly
Customer concentrationRevenue from top customer / total MRR<25% (risk flag if one customer is too large)Stripe

Product Metrics

MetricDefinitionWhy It Matters
AI conversations handledTotal conversations where the AI responded to a tenant without human interventionCore product value metric — proves the automation thesis
AI resolution ratePercentage of conversations resolved without landlord intervention (issue created, information provided, or troubleshooting completed by AI alone)The single best measure of product quality. If this is low, landlords are still doing the work manually
Tenant adoption ratePercentage of imported tenants who have sent at least one messageIf tenants do not use it, landlords see no value. Track per-property and per-customer
Average response timeTime from tenant message to AI first responseShould be <30 seconds. If degraded, indicates system performance issues
Conversations per property per monthAverage number of AI conversations per active propertyDrives cost calculations. Our model assumes ~2/property/month. Validate this urgently
Channel distributionPercentage of conversations by channel (web chat, WhatsApp, voice, email)Determines cost mix (voice is 5-10x more expensive). Informs channel investment decisions
Issue creation ratePercentage of conversations that result in a new issue being createdNot all conversations are issues (some are information queries). Track the split
Document AI queriesNumber of times the AI retrieves information from uploaded property documentsMeasures whether the RAG pipeline is being used. Low numbers mean either documents are not uploaded or the AI is not retrieving well
Onboarding completion ratePercentage of sign-ups that complete all activation milestonesPer the onboarding matrix: >85% should reach fully-live status
Feature adoption breadthNumber of features used per customer in first 30 days (issue management, vendor assignment, compliance tracking, document upload, reporting)Customers using 3+ features in the first month are significantly less likely to churn
Vendor assignment ratePercentage of issues that get a vendor assignedMeasures whether landlords are using the full workflow or just using Envo as a notification system

Cost Metrics

MetricDefinitionTarget
Cost per property per monthTotal infrastructure costs / total active properties<GBP 1.00 (from capacity analysis: GBP 0.43-0.99 at scale)
Cost per conversation(LLM cost + messaging cost) / total conversations<GBP 0.20 (from estimates: GBP 0.06-0.18 LLM + GBP 0.06-0.18 WhatsApp)
LLM cost per customer per monthTotal Anthropic + OpenAI spend / paying customersTrack and ensure it stays <30% of ARPU
Twilio cost per customer per monthTotal Twilio spend (WhatsApp + SMS) / paying customersTrack and ensure it stays <20% of ARPU
Voice cost per customer per monthTotal VAPI spend / customers using voiceThis is the wildcard — voice is 5-10x more expensive per interaction
Total COGS per customerAll variable costs attributable to serving one customer (LLM + Twilio + VAPI + SendGrid + allocated Supabase/Vercel)<30% of ARPU to maintain 70%+ gross margin
Gross margin(Revenue - COGS) / Revenue>70% (SaaS industry norm for B2B vertical software is 70-85%)
Infrastructure cost (fixed)Supabase + Vercel + SendGrid base fees<GBP 150/month until 500+ properties
Infrastructure cost per propertyFixed infra costs / total propertiesDecreasing as we scale (economies of scale on fixed costs)
Support cost per customerDanny + Bilal/Deen time on support x hourly rate / customers<GBP 10/customer/month (otherwise hire a support person)
Burn rateTotal monthly spend (infra + tools + any contractor costs, excluding salaries)Track monthly; target <GBP 500/month pre-revenue

Unit Economics

The Model

VariableEstimateSourceConfidence
ARPU (per customer)GBP 150-250/month (assumes 30-50 units at GBP 3-5/unit)Pricing analysis — GBP 3/unit Basic, GBP 5/unit ProfessionalMedium — untested with real customers
Revenue per propertyGBP 3-5/monthPricing analysisMedium
COGS per propertyGBP 0.43-0.99/month (all-in, Envo pays everything)Capacity analysisMedium — based on 2 conversations/property/month
COGS per property (BYOAK Premium)GBP 0.25-0.55/monthCapacity analysisMedium
Gross margin per property67-86% at GBP 3/unit; 80-90% at GBP 5/unitCalculated: (price - cost) / priceMedium
Gross margin per customerGBP 100-215/monthARPU x gross margin %Medium
CACGBP 200-500 (estimated: Danny’s time + demos + content)Estimate: 5-10 hours of Danny’s time per closed customerLow — no data yet
LTVGBP 1,800-5,100 (at 12-18 month average lifetime)ARPU x gross margin x average customer lifetime in monthsLow — no retention data
LTV/CAC ratio3.6-25.5xLTV / CACLow — both inputs are estimates
CAC payback period1-3 monthsCAC / (ARPU x gross margin %)Low — optimistic because early adopters convert easily
Monthly burn rate (infra only)GBP 100-200 pre-customersCurrent Supabase + Vercel + domain costsHigh
Break-even customer count1-2 customers (infra only, excluding salaries)Burn rate / gross margin per customerHigh

Key Assumptions in the Model

  1. 2 conversations per property per month — This is the biggest cost assumption and the least validated. HMOs with 6+ tenants could be 3-5x this.
  2. 30-50 units per customer — Based on ICP (15-50 property HMO operators, averaging 2-3 units per property). Could be lower if we attract smaller landlords.
  3. 12-18 month customer lifetime — Industry average for SMB B2B SaaS is 12-24 months. We have zero data.
  4. GBP 200-500 CAC — Assumes founder-led sales (Danny’s time). No paid acquisition. This is low by SaaS standards but realistic for a warm-network-first GTM.
  5. 70%+ gross margin — Requires costs per property to stay under GBP 1.00. If voice adoption is high or conversation volume per HMO exceeds estimates, margin compresses.

Validation Plan

What data do we need from the first 10 customers to validate or invalidate the model?

AssumptionWhat We AssumedHow to MeasureWhen We Will KnowAction if Wrong
Conversations per property per month~2Count distinct conversations per property per month from Supabase logsAfter 30 days of live usage per customerIf >4: raise per-unit price or introduce conversation caps. If <1: investigate tenant adoption
Channel mix (WhatsApp vs voice vs web chat)70% WhatsApp, 10% voice, 20% web chatCount conversations by channel from SupabaseAfter 60 days of usageIf voice >25%: cost model breaks, must either cap voice minutes or increase price
Tenant adoption rate>30% of tenants use system within 30 daysCount unique tenant senders / total tenants per org30 days after each customer go-liveIf <15%: onboarding problem — tenants are not being told about Envo. Fix welcome message and landlord communication
Average units per customer30-50Average property count across paying customers from SupabaseAfter 10 paying customersIf <15: ARPU is lower than modelled, need more customers to reach same MRR. Consider lowering minimum commitment
CAC (Danny’s time to close)5-10 hoursDanny tracks hours per closed customer in NotionAfter 10 closesIf >15 hours: sales process is too heavy. Invest in self-serve. If <5 hours: scale outreach
Trial-to-paid conversion>15%Stripe: conversions / trial startsAfter 20 trial sign-upsIf <10%: aha moment is not landing. Review onboarding flow, sandbox demo, and Danny’s follow-up timing
Churn (monthly)<5%Stripe cancellations / active at month startAfter 6 months (need enough data)If >8%: product-market fit problem. Conduct exit interviews. Check if AI quality is the issue
LLM cost per conversationGBP 0.06-0.18Anthropic/OpenAI billing / conversation countAfter 30 daysIf >GBP 0.25: optimise prompts, reduce token usage, consider cheaper model for simple queries
Expansion revenueExisting customers add propertiesTrack unit count changes per org in Supabase over timeAfter 90 daysIf zero expansion: product is not sticky enough or landlords have fixed portfolios. Adjust growth model
Gross margin>70%(Revenue - all variable costs) / RevenueAfter 3 months of billingIf <60%: pricing is too low or costs are higher than modelled. Review per-customer cost breakdown

Billing Setup

Stripe Configuration

Based on ADR-004 (Billing Integration Strategy), Stripe is the assumed provider. Here is how to configure it for per-unit billing with tiers.

TierStripe ProductPrice ModelTrialNotes
StarterProduct: “Envo Starter”Per-unit recurring price: GBP 3/unit/month. Use recurring[usage_type=licensed] with quantity set to number of units. Minimum 10 units enforced via checkout logic14-day free trial, no card required at sign-up. Card collected at day 12 via email promptQuantity updated when landlord adds/removes properties via dashboard. Use Stripe subscription_items.update to change quantity
ProfessionalProduct: “Envo Professional”Per-unit recurring price: GBP 5/unit/month. Same licensed model with quantity. Minimum 20 units14-day free trial, no card required. Premium features active during trialHigher conversation cap (8/unit/month vs 4). Voice channel included
EnterpriseProduct: “Envo Enterprise”Custom pricing: GBP 2-3/unit/month negotiated. Manual Stripe subscription creation with custom amountPilot programme (30 days, bespoke)BYOAK means lower Envo costs. Manual invoicing may be needed for large accounts. Minimum GBP 500/month
Add-onsSeparate Stripe ProductsOne-time or recurring: Extra conversation packs (GBP 15/50 conversations), extra voice minutes (GBP 10/30 minutes), extra team seats (GBP 10/seat/month)N/AAttached as additional subscription items

Stripe setup steps (practical):

  1. Create a Stripe account (if not already done). Activate in the UK with GBP as default currency
  2. Create Products for each tier (Starter, Professional, Enterprise)
  3. Create Prices on each Product: per-unit, monthly recurring, GBP denominated
  4. Set up a Customer Portal (Stripe hosted) so landlords can update payment methods, view invoices, and cancel
  5. Implement Stripe Checkout for sign-up conversion (trial end card collection)
  6. Set up webhooks to sync subscription status back to Supabase (organisations.plan and external_billing_id)
  7. Enable Smart Retries for failed payments (Stripe’s built-in dunning — recovers up to 25% of failed charges)
  8. Configure Stripe Tax for automatic UK VAT calculation

Integration pattern (from ADR-004):

Stripe Webhook --> Supabase Edge Function --> billing_events table
                                          --> Update subscriptions table
                                          --> Update organisations.plan

Billing Flows

EventWhat HappensStripe Mechanism
Sign-up (trial start)Customer creates account. Stripe Customer created with external_billing_id stored in Supabase. Subscription created with trial_period_days: 14. No card requiredstripe.customers.create + stripe.subscriptions.create with trial
Trial day 12Automated email: “Your trial ends in 2 days. Add a payment method to continue.” Link to Stripe Customer PortalStripe Billing automatic trial-ending emails (configurable in Dashboard)
Trial end (card on file)Subscription transitions to active. First invoice generated and charged. organisations.plan updated via webhookAutomatic Stripe trial-to-active transition. Webhook: customer.subscription.updated
Trial end (no card)Subscription moves to past_due or canceled (configurable). Dashboard becomes read-only. Data preserved 30 daysStripe subscription_schedule or manual cancellation logic. Webhook: customer.subscription.deleted
Upgrade (Starter to Professional)Subscription updated to Professional price. Prorated amount charged for remainder of billing periodstripe.subscriptions.update with proration_behavior: 'create_prorations'
Downgrade (Professional to Starter)Subscription updated at end of current billing period. Features restricted immediately or at period end (decision needed)stripe.subscriptions.update with proration_behavior: 'none', effective at current_period_end
Property count change (add units)Quantity on subscription item increased. Prorated charge for added unitsstripe.subscriptionItems.update with new quantity. Proration automatic
Property count change (remove units)Quantity decreased. Credit applied to next invoicestripe.subscriptionItems.update with reduced quantity
Failed paymentStripe Smart Retries kick in (up to 4 retry attempts over ~3 weeks). Customer emailed automatically. After final failure: subscription moves to past_due, then canceled after grace periodStripe Smart Retries + configurable dunning emails. Webhook: invoice.payment_failed
Successful retrySubscription restored to active. No customer action neededAutomatic. Webhook: invoice.paid
Voluntary cancellationCustomer cancels via Customer Portal or contacts Danny. Subscription set to cancel at end of billing period. Access continues until period endstripe.subscriptions.update with cancel_at_period_end: true. Webhook: customer.subscription.updated
ReactivationPreviously cancelled customer resubscribes. New subscription created (or existing one uncancelled if within grace period)stripe.subscriptions.update to remove cancel_at_period_end, or new subscription creation
Annual billing20% discount applied. Single annual charge. Subscription with interval: 'year'Separate annual Price on same Product. Or use Stripe Coupons for the discount

Invoice and Tax

UK VAT requirements for SaaS:

  • VAT registration threshold: GBP 90,000 taxable turnover. Below this, VAT registration is optional but not required
  • VAT rate on SaaS: 20% standard rate for UK customers
  • When to register: When you anticipate reaching GBP 90K in the next 30 days, or when you have exceeded it in the previous 12 months. At our projected pricing, this is roughly 150-250 paying customers
  • Recommendation: Do NOT register for VAT at launch. You are pre-revenue. Register when you approach the threshold. This keeps pricing simple (no VAT to add or absorb)
  • When you do register: Use Stripe Tax for automatic VAT calculation and collection. Stripe handles the rate determination and adds VAT to invoices automatically

What needs to be on invoices (once VAT-registered):

  1. Your business name and address
  2. Your VAT registration number
  3. Invoice date and unique invoice number
  4. Customer’s name and address
  5. Description of the service (“Envo property management platform — [X] units, [Tier] plan”)
  6. Quantity and unit price
  7. Total amount excluding VAT
  8. VAT rate and VAT amount
  9. Total amount including VAT

Pre-VAT registration: Stripe invoices will include all the above except VAT fields. Still include your business details and a clear description of the service.

B2B reverse charge: If you sell to VAT-registered businesses (letting agencies), the reverse charge mechanism may apply. Stripe Tax handles this automatically when the customer provides their VAT number.

Record keeping: HMRC requires you to keep records for at least 6 years. Stripe retains all invoice and payment data indefinitely. Additionally, the UK will require mandatory B2B e-invoicing from April 2029 — Stripe is expected to support this.


Financial Tooling

NeedToolCostWhy
Payment processing + subscriptionsStripe Billing1.5% + 20p per transaction (UK cards) + GBP 0 monthlyIndustry standard. Handles subscriptions, trials, dunning, invoices, tax. Per-unit pricing supported natively. No monthly fee — just transaction costs
SaaS metrics dashboard (MRR, churn, LTV)ChartMogul (free tier)GBP 0 (free up to GBP 96K ARR / ~$120K)One-click Stripe integration. Automatic MRR, ARR, churn, LTV, cohort analysis. Free tier includes unlimited users and core reports. Upgrade to paid only when ARR exceeds threshold
LLM cost trackingLangfuse (open source, self-hosted) OR simple Supabase logging tableGBP 0 (self-hosted) or GBP 0-25/month (Langfuse cloud)Tag each LLM call with org_id and conversation_id. Aggregate daily cost per customer. Essential for validating unit economics. Alternative: log token counts and costs to a llm_usage table in Supabase and query with SQL
Uptime monitoringUptimeRobot (free tier)GBP 050 monitors free, 5-minute checks. Status page included. Alerts via email/Slack/webhook. Upgrade to paid (GBP 6/month) for 1-minute checks if needed
Error trackingSentry (free tier)GBP 05K errors/month free. Catches bugs before customers report them. Critical for product quality metrics
API cost dashboardsAnthropic Console + OpenAI Usage + Twilio ConsoleGBP 0Each provider has its own usage dashboard. Check weekly. No additional tooling needed until costs are complex enough to warrant aggregation
Spreadsheet for manual trackingGoogle SheetsGBP 0For anything that does not yet justify a tool: CAC tracking, Danny’s time per customer, manual cohort analysis, board reporting. One shared sheet, updated monthly
Lead trackingNotion (free tier)GBP 0As defined in the lead tiers playbook. Not a CRM — a structured database. Upgrade to paid when >200 leads
Customer feedback / NPSTypeform or Google FormsGBP 0Send at day 30 and quarterly. 3-5 questions max. Do not overthink this — a simple “How likely are you to recommend Envo?” with a free-text “Why?” is enough
AccountingXero (Starter) or FreeAgentGBP 15-25/monthNot needed until revenue starts. When it does: connect Stripe to Xero for automatic invoice reconciliation. Essential for VAT returns when you register
ForecastingGoogle SheetsGBP 0A simple model: current MRR x growth rate = forecast. No tool needed. Baremetrics has forecasting but costs GBP 80+/month — premature

Total tooling cost at launch: GBP 0-25/month (Langfuse cloud is the only possible non-zero cost, and even that can be self-hosted for free).

When to upgrade:

TriggerActionEstimated Cost
ARR exceeds GBP 96K (~80 customers at GBP 100/month)ChartMogul paid tierGBP 80-100/month
>50 customers and cost attribution becomes complexDedicated cost tracking (Portkey or LiteLLM proxy)GBP 0-50/month
Revenue starts and VAT registration approachesXero or FreeAgent for accountingGBP 15-25/month
>100 customersBaremetrics (adds dunning, forecasting, cancellation insights)GBP 80-200/month

Reporting Cadence

ReportFrequencyAudienceContains
Danny’s DashboardWeekly (Monday morning, automated email)DannyNew sign-ups, active trials, conversions, pipeline count, customer health flags, properties added
Engineering DashboardWeekly (Monday morning, Supabase query or script)Bilal, DeenAI conversations, resolution rate, LLM spend, uptime, errors, support tickets
Monthly Business ReviewMonthly (first Monday)Danny + Bilal + DeenFull metrics: MRR, growth, churn, CAC, unit economics, cost per property, product metrics, NPS. 30-minute meeting
Customer Health CheckMonthly (alongside business review)DannyPer-customer: properties, usage, last login, issues handled, support tickets, expansion/contraction signals
Cost AuditMonthly (Bilal or Deen runs, 15 minutes)Bilal, DeenProvider-by-provider spend: Anthropic, OpenAI, Twilio, VAPI, Supabase, Vercel, SendGrid. Per-customer attribution where possible
Quarterly Board/Investor Update (when relevant)QuarterlyExternal stakeholdersARR, growth rate, customer count, churn, LTV/CAC, gross margin, product highlights, next quarter goals
Validation ReportAfter 10 customers (one-time, then quarterly)Whole teamComparison of assumed vs actual: conversations/property, channel mix, tenant adoption, CAC, churn. The “were we right?” report

How to Build the Dashboards (Practically)

For a 3-person team, do not build dashboards. Query data and send it somewhere people already look.

Danny’s weekly email: Write a Supabase Edge Function or a simple cron job (n8n workflow) that runs every Monday at 8am, queries key metrics from Supabase + Stripe API, and sends a formatted email to Danny. Total build time: 2-4 hours.

Engineering weekly check: A SQL script saved in the repo that Bilal or Deen runs against Supabase. Returns a table of key metrics. Takes 5 minutes to run and read. Build time: 1-2 hours.

Monthly review: Google Sheets template with manual data entry from ChartMogul, Stripe, Supabase, and provider dashboards. Pre-built formulas calculate derived metrics (gross margin, CAC payback, NRR). Build time: 2 hours initially, 30 minutes to update monthly.

Do not build a custom analytics dashboard. It is a trap. Use existing tools (ChartMogul, Stripe Dashboard, provider consoles) and a spreadsheet. Build a custom dashboard only when you have 100+ customers and the manual process takes >1 hour per week.


Open Questions for Session

  1. Per-property or per-unit billing in Stripe? The pricing analysis recommends per-unit (per room in HMOs). This affects how we set up Stripe Products and Prices. If per-property, the quantity on the subscription = number of properties. If per-unit, quantity = total rooms/units. This must be decided before Stripe setup. Danny — what did prospects respond to?

  2. When do we start charging? The first 3-5 customers are arguably pilots, not paying customers. Do we offer “founding customer” pricing (e.g., 50% off for 12 months in exchange for feedback and testimonials)? Or do we charge full price from day one to validate willingness to pay? There is a strong argument for charging from day one — free pilots do not validate demand.

  3. Conversation caps — do we enforce them or just track them? The pricing matrix includes 4 conversations/unit/month on Starter, 8 on Professional. Do we actually cut off AI responses when the cap is hit, or do we track usage and use overages as an upgrade trigger? Hard caps create bad experiences. Soft caps with alerts are gentler. Decision needed.

  4. Who owns the metrics? Proposed: Danny owns customer and revenue metrics (he is closest to the money). Bilal and Deen own product and cost metrics (they are closest to the system). All review together monthly. Does this split work?

  5. LLM cost tracking — build or buy? Option A: Log token usage to a Supabase table on every LLM call (add org_id, tokens_in, tokens_out, cost, model columns). Zero cost, fully custom, but we have to build the aggregation queries. Option B: Use Langfuse (purpose-built LLM observability). More features but another tool to manage. Recommendation: Option A for launch (15 minutes to build), migrate to Langfuse when we need deeper analysis.

  6. How do we handle the HMO cost problem? A 6-bed HMO generates roughly 6x the conversations of a single-let but might pay the same under per-property pricing. The validation plan will tell us the actual numbers, but we need a contingency plan now. Options: per-unit pricing (recommended), conversation caps, or an HMO surcharge. What feels right to Danny from a sales perspective?

  7. Do we need Xero from day one? If we are pre-revenue and below the VAT threshold, a spreadsheet tracking income and expenses might suffice for the first 6 months. Xero adds ongoing cost and complexity. Counter-argument: connecting Stripe to Xero from day one means clean books from the start with no retrospective data entry. Worth the GBP 15-25/month?

  8. What is our burn rate tolerance? The infrastructure costs are low (GBP 100-200/month), but total burn including tools, domain, and any contractor work needs a number. How long is our runway, and does that affect how aggressively we price or how many free trials we offer?

  9. Annual billing from launch? 20% discount for annual payment improves cash flow and reduces churn (customers are committed for 12 months). But we have no retention data — what if the product is not good enough and we have to issue refunds? Recommendation: monthly-only at launch, introduce annual option after 6 months of retention data.

  10. When is the first “were we right?” review? Proposed: after 10 paying customers have been live for 30+ days. This gives us enough data to validate the unit economics model. Target date should be agreed in the session.


Appendix: Metric Definitions Quick Reference

For anyone unsure about what a metric means:

TermPlain English
MRRHow much money comes in every month from subscriptions
ARRMRR times 12 — the annualised version
ARPUAverage revenue per customer per month
ChurnThe percentage of customers (or revenue) you lose each month
NRRWhether your existing customers are paying you more or less over time. Above 100% = growing from existing customers
CACHow much it costs to acquire one new paying customer
LTVHow much total revenue one customer generates over their entire lifetime
LTV/CACHow many times over a customer pays back their acquisition cost. 3:1 is the benchmark
Payback PeriodHow many months until a customer has paid back their acquisition cost
Gross MarginRevenue minus the direct costs of serving customers, as a percentage. The money left over to pay salaries and grow
COGSCost of Goods Sold — for SaaS, this is infrastructure costs (LLM, hosting, messaging)
PAMProperties under Active Management — our North Star metric

Research Sources


Prepared for Session 8: Metrics & Money. All benchmarks are from 2025-2026 industry data. All cost estimates reference the Capacity Analysis and Pricing Analysis prepared for earlier sessions. No production usage data is available yet — the validation plan is designed to fix that with the first 10 customers.