Harper Operating Model

Loading…
Start MRR
-
End MRR
-
End Platform ARR
-
Net MRR Change
-
MRR Growth Rate
-
MonthPlatform MRROn-Premise MRRServices BillingsTotalPlatform ARRMoM %YoY %

Monthly MRR by Customer

Snapshot: —
Customer MRR ARR % of Total Customer Since Channel Trend

Monthly MRR by Channel

Snapshot: —
Channel MRR ARR % of Total Trend

Cash & Cash Runway

Cash Burn vs Net Burn

ARR Growth

Platform MRR (Net) vs OpEx

Live Model
Editable (click to edit) Manual override (clear to revert to auto) Inherited from default scenario Tab to move between cells | Enter to save | Escape to cancel | Empty = auto-compute

How It Works

This operating model pulls MRR and revenue data from Salesforce, applies configurable filters, and computes a financial model. Here's how each piece works.

Data Source

MRR and revenue data come from three Salesforce sources: OpportunityLineItemSchedule records (monthly schedules attached to each deal), Opportunity metadata (close date, billing effective date, term length, and amount), and a separate query for unscheduled opportunities (deals with no line items). If SOQL fails, the system falls back to the Salesforce Reports API. Sync is triggered manually via Admin → Settings (see the sync indicator in the header).

Deals without any line items are included by extrapolating the total Amount evenly across the deal's term length (defaulting to 12 months if no term is specified).

Revenue Streams

Deals are split into three streams based on the Salesforce Product Family:

  • Platform — Cloud/SaaS product MRR (the core recurring business)
  • On-Premise — Legacy on-premise deployments (e.g., Lumen, Verizon), shown as monthly amounts but typically billed up-front
  • Services — Professional Services billings (one-time implementation fees, non-recurring)

Use the Revenue Streams filter to include/exclude any combination.

MRR vs gMRR (Akamai Rev-Share)

gMRR (gross MRR) is the full schedule amount from Salesforce.

MRR (net MRR) applies a 20% revenue share deduction for deals sourced through Akamai. For Akamai partner deals, MRR = gMRR × 0.8. All other deals are unaffected.

An Akamai deal is identified when Lead Source = "Partner" AND Primary Partner contains "Akamai" (case-insensitive). When Primary Partner data is unavailable (SOQL mode), Lead Source = "Partner" alone is used as a proxy.

Weighted by Probability

When enabled, each deal's MRR is multiplied by its Salesforce probability (0-100%). Closed Won deals are 100%, while Pipeline deals might be 10-20%. This gives a probability-weighted MRR view.

When disabled, all included deals count at face value regardless of probability.

Forecast Categories & Slip Months

Salesforce assigns each deal a Forecast Category: Closed, Commit, Most Likely, Best Case, or Pipeline. The filter controls which categories to include.

Slip Months push MRR forward in time to account for deal timing uncertainty. These values are configurable per scenario in the Filters panel and default to 0 for all categories. A typical conservative configuration might be:

  • Closed & Commit: 0 months (firm deals)
  • Most Likely: 1 month
  • Best Case: 2 months
  • Pipeline: 3 months

Important: Renewals are never slipped regardless of forecast category — they're expected to close on schedule.

Deal Types

Filter by Salesforce Opportunity Type to focus on specific deal categories:

  • New — First-time deals with a new customer or product
  • Expansion — Upsells or additional products for existing customers
  • Renewal — Contract renewals for existing customers

Uncheck a type to exclude it from all computations (MRR dashboard, ARR bridge, detail views, Live Model). This is useful for isolating just renewals to evaluate retention, or just new business to evaluate pipeline strength.

Accounts to Exclude

Some accounts should be excluded from the model (e.g., churned customers with residual schedules). Use the multi-select to exclude specific accounts by name.

Opportunity Overrides

Override the probability for specific deals, or exclude them entirely from all computations. Overrides are stored per-scenario, so different scenarios can model different assumptions about the same deal.

Probability override sets a different probability than what Salesforce shows. For example, if you know a Best Case deal is closing, override its probability to 100% to model it as committed MRR. This only affects weighted mode.

Exclusion removes an opportunity from ALL computations — MRR dashboard, ARR bridge, detail views, and the Live Model — regardless of weighted or unweighted mode. Exclusion takes precedence over a probability override.

Access opportunity overrides via the Manage Overrides button in the Data Filters section. The modal lets you search by account or opportunity name, filter by All / Overridden / Excluded tabs, and view key deal details (TCV, close date, term, SF probability). Account and opportunity names link to Salesforce.

Overrides do NOT modify any data in Salesforce — they only affect how this model computes MRR.

Renewals to 100%

The "All renewals → 100%" toggle in the Opportunity Overrides modal sets all renewal-type deals to 100% probability for MRR calculations. This is applied automatically at computation time — new renewals synced from Salesforce are included without re-toggling. You can still manually override a specific renewal's probability; manual overrides always take priority over the bulk toggle.

Growth Projections

When enabled, the model can project MRR growth beyond the Salesforce pipeline using a trailing growth rate.

Auto-detect analyzes each month's deal composition. When high-confidence deals (Closed + Commit) drop below 75% of total MRR for 2+ consecutive months, projections start there.

The growth rate is either manually specified or auto-computed from trailing months of actual data.

Renewal Projection

The renewal projection engine automatically extends open Platform opportunities past their natural Salesforce schedule end, preventing customers from appearing to mass-churn at term expiry.

How it works: For each open Platform opportunity where Billing_Frequency != "One-Time", the engine projects the last month's MRR forward through the scenario end date, weighted by the opportunity's Salesforce probability. This synthetic MRR is additive to whatever the schedule already covers.

Which opportunities qualify:

  • Open stage (not Closed Won or Closed Lost)
  • Platform product family (Cloud/SaaS)
  • Billing frequency is Monthly, Annual, Quarterly, Custom, or null — anything except "One-Time"

Type=New toggle: By default, Type=New opportunities are also extended (a pipeline deal that hasn't closed yet may still represent committed future MRR). Turn off "Extend Type=New opportunities forward" in the scenario edit modal for a conservative view that only extends existing customers (Renewal and Expansion types).

Visual indicator: In the Live Model, renewal-projected cells render in italic gray (Platform MRR (Net) row only). In the Account Detail and Opportunity Detail modals, projected rows get a light-blue row background plus a Projected badge. In the Revenue Dashboard chart, renewal-projected months are dashed and marked with "~" in the axis label.

Renewal Hygiene: Accounts with active MRR but no open Renewal or Expansion opportunity will NOT be extended — the engine has no open opp to project from. The Renewal Hygiene report (under Admin → Settings) surfaces these gaps so RevOps can create the missing renewal opportunities in Salesforce.

Modeled MRR Additions

The "Modeled MRR Additions" row in the Live Model lets you layer per-month MRR assumptions on top of computed Platform MRR. This is a modeling tool — useful for scenarios like "BigCustomer closes Q3 2027 at $500K MRR" without modifying Salesforce data.

How to use it: In the Live Model, click any cell in the "Modeled MRR Additions" row and enter a dollar amount. The value is additive to Platform MRR for that month and can be set for any month (past or future — no future-only restriction, since this is a modeling tool, not actuals). Leave the cell blank (null) to exclude it.

What it flows into:

  • Platform MRR (Net) display is unaffected — you can see base MRR separately
  • Platform ARR (Net) = (Platform MRR (Net) + Modeled MRR Additions) × 12
  • AR Invoiced includes Modeled MRR Additions
  • Net Burn → Cash → Cash Runway all flow through naturally

Bridge classifier note: Modeled MRR Additions are aggregate per-month entries — they are not attributed to specific customers or opportunities. They raise the total MRR baseline the Bridge classifier sees but do not generate New Business, Expansion, or Churn events. The Bridge detail rows and per-customer amounts in the Customers tab are unaffected. This is by design: the Bridge reflects real account-level movements; the narrative total includes your model.

Actuals vs Forecast

The system distinguishes past actuals from forward-looking forecasts:

  • Actual — Strictly past months (month is before the current calendar month). In the dashboard, this means realized Salesforce data; in the Live Model, the column header shows ACTUAL beneath the month label.
  • Projected — The current in-flight month and all future months. In the Live Model, the column header shows PROJECTED. For example, on May 12, May reads as PROJECTED until the month closes — because we're only partway through it.
  • Default (no badge) — In the dashboard, months computed from Salesforce pipeline data (forecast categories, weighted by probability, with slip applied) sit between Actual and Projected.
  • Projected (growth projection) — When growth projections are enabled, this label is also used for months extrapolated beyond where the Salesforce pipeline has high confidence.
  • Italic gray — In the Live Model's Platform MRR (Net) row, cells that include renewal projection (synthetic continuation of open SF opps past schedule end) render in italic gray. The same class is used for apportioned OpEx forecast defaults — hover the cell to see which signal applies. In the Account Detail and Opportunity Detail modals, projected rows additionally get a light-blue row background plus a Projected badge.

Live Model Formulas

The Live Model computes a full financial picture for each month:

Total RevenueNon-GAAP composite. Sum of Platform MRR (Net) + On-Premise MRR + Services Billings. Used as the denominator for OpEx ratios. Does not equal GAAP revenue: On-Premise is typically billed up-front (not ratable), Services is shown as billings (not recognized revenue), Platform MRR is run-rate (not booked revenue). Click ▼/▸ to collapse/expand the streams.
On-Premise MRRSelf-hosted deployment MRR. Excluded from ARR and AR Invoiced because it's typically billed up-front, not monthly.
Services BillingsConsulting and implementation revenue. Non-recurring; included in AR Invoiced but excluded from MRR/ARR.
Platform MRR (Net)Platform MRR from the MRR Dashboard, or manual override for actuals. Net of Akamai partner revenue share. Includes synthetic continuation of open recurring Platform opps past natural SF schedule end (renewal projection). Projected-continuation cells render in italic gray.
Modeled MRR AdditionsManual per-month additive overlay on Platform MRR (Net). Use this to model specific future bets (e.g., "BigCustomer closes Q3 2027 at $500K MRR") without touching Salesforce. Editable any month (past or future). Null = no addition. Flows into Platform ARR (Net), AR Invoiced, Net Burn, Cash, and Runway.
Platform ARR (Net)= (Platform MRR (Net) + Modeled MRR Additions) × 12. Includes renewal projection for open recurring opps and any Modeled MRR Additions you have entered. Platform-only by definition; On-Premise and Services are non-recurring and excluded. Net of Akamai partner revenue share.
AR InvoicedManual override if set, otherwise Platform MRR (Net) + Modeled MRR Additions + Services Billings + AR Adjustment. On-Premise is not included.
Total Operating Expense= Linode Expense + Cost of Sales + Sales & Marketing + R&D + G&A + Interest/Depr/Taxes + Projected Expenses. Accrual basis. Computed, not directly editable. Click ▼/▸ to collapse/expand sub-rows; click % to toggle the % of Revenue rows under each P&L line. For forecast months with no explicit P&L values, the total grows as prior non-Linode OpEx + 30% × (this month's non-Akamai net MRR − prior month's), floored at $0 — so projected OpEx scales with modeled revenue (including Modeled MRR Additions) at the same rate as organic MRR growth. That total is then apportioned across the 5 sub-rows using trailing-3-month ratios from prior actuals (or FY2025 ratios if fewer than 3 months of trailing data exist); apportioned cells render in italic/gray.
Linode ExpenseAccrual Linode/Akamai infrastructure bill. Forecast: prior + 30% × new Akamai MRR coming online this month.
Cost of SalesCost of Sales from the P&L, excluding Linode/hosting (broken out above).
  · % of Revenue (COS)= (Cost of Sales + Linode Expense) ÷ Total Revenue.
Sales & MarketingSales & Marketing operating cost from the P&L.
  · % of Revenue (S&M)= Sales & Marketing ÷ Total Revenue.
Research & DevelopmentR&D operating cost from the P&L.
  · % of Revenue (R&D)= R&D ÷ Total Revenue.
General & AdministrativeG&A operating cost from the P&L.
  · % of Revenue (G&A)= G&A ÷ Total Revenue.
Interest, Depreciation & TaxesInterest, Depreciation & Taxes from the P&L.
  · % of Revenue (IDT)= Interest/Depr/Taxes ÷ Total Revenue.
Projected ExpensesForward-looking cost projections (R&D ramp, headcount, etc.). Future months only.
AdjustmentsManual lever applied at Net Burn level. Positive = credit/savings; negative = additional expense.
Net Burn (Accrual)= AR Invoiced + Adjustments − Total Operating Expense. Accrual basis.
Linode Payment PlanActual cash sent to Linode/Akamai this month per the negotiated payment plan. Defaults to the full Linode Expense.
Cash Burn= Net Burn (Accrual) + Linode Expense − Linode Payment Plan. Cash basis.
Cash= Previous Cash + Total Funding + Cash Burn.
Total Funding= Funding - BreakTrail + Funding - Serent + Funding - Other. Sum of the three investor sub-rows. Click ▼/▸ to collapse/expand the breakdown.
Cash RunwayMonths until cash runs out (forward-looking). 0 = out of money (cash already ≤ $0). When the model foresees cash hitting $0 → the interpolated months to that crossing (so a lumpy upcoming outflow pulls runway down immediately, instead of a trailing average masking it). When it doesn’t → cash ÷ trailing-3-month avg Cash Burn (the standard VC runway, projected past the model’s last month). = cash-flow positive (adding cash each month — “default alive,” no runout).

Cells with a blue left border have manual overrides. Click any editable cell to enter a value; clear it to revert to auto-computation.

Navigation: Use the year pills (All / 2024 / 2025 / …) to filter the visible columns to a single year, or click Today to jump to the current month. Row labels stay pinned horizontally as you scroll across months. When you scroll down past the column headers, a floating copy of the month-header row (and its horizontal scrollbar) pins to the top of the viewport so you can keep your bearings deep in the table.

Keyboard Navigation (Editable Cells)

The Live Model supports Excel-style keyboard navigation in editable cells. Each keystroke saves the value before moving on; downstream computed cells (Net Burn, Cash Burn, % of Revenue, etc.) refresh in the background a moment later.

TabMove right to the next editable cell in the same row.
Shift + TabMove left to the previous editable cell in the same row.
EnterMove down to the next editable cell in the same column.
Shift + EnterMove up to the previous editable cell in the same column.
EscapeCancel the current edit and revert the cell to its prior value.
Click outside the cellSave the current value and exit edit mode (full refresh of downstream cells).

Scenarios

A Scenario is a saved set of filter configurations plus manual input overrides for the Live Model. The default scenario (typically "Base Case") represents the canonical view with all the actuals from the books. Additional scenarios let you explore alternative forecast assumptions (e.g., aggressive growth, conservative pipeline, different slip months) without disturbing the base case.

Use the Scenario dropdown in the header to switch between scenarios. The gear icon opens the scenario manager where you can create, clone, edit, or delete scenarios.

Inheritance: how non-default scenarios share actuals with the default

Past months in the Live Model contain actuals (operatingExpense, cashBalance, AR Invoiced override, Linode bill, etc.) sourced from the general ledger. These are facts — they don't change across scenarios. Future months contain forecast assumptions — those can differ per scenario.

To keep this clean, non-default scenarios inherit ModelInput values from the default scenario at read time. When an actual is updated on the default scenario, every other scenario instantly reflects the change — unless that scenario has its own explicit override for that field.

  • On the default scenario — every editable cell is "yours." Edits save directly. No inheritance machinery applies.
  • On a non-default scenario — cells with a "↪" prefix and gray background are inherited from the default scenario. Cells with a teal border are this scenario's specific overrides. Editing an inherited cell creates an override (turns teal); clearing an override (Esc to empty, then Enter) reverts the cell to inherited.
  • Cloning a scenario — the new scenario copies the source's filter configuration but does not duplicate ModelInputs. The clone inherits everything from the default scenario automatically. This means a fresh clone tracks default-scenario updates until you start overriding things in it.

Implementation note: scenario-specific override records only contain the fields you explicitly changed; everything else falls through to the default scenario at read time. This keeps non-default scenarios light and avoids "actual drift" across scenarios over time.

Setting a scenario as default

Promoting a non-default scenario to default is more than a flag flip — that scenario stops inheriting from the previous default, so it would lose every value it was visually inheriting (past actuals, OpEx detail, etc.). To prevent this, the system runs an inheritance migration before flipping the flag: every value the new default would have inherited from the old default is copied into the new default's own records first. The new default's view is identical pre- and post-swap.

Where the new default already has its own value for a field, that value is preserved (the old default's value is not overwritten). The confirmation modal shows you exactly how many values will be copied and how many disagreements will be kept.

Each swap is one-way, not an undo. If you swap defaults back later, the same copy happens in reverse — values unique to the now-default scenario will be copied into the previous default. So while swapping is always available, the previous default may not end up identical to its pre-swap state.

Live Model Charts

Four charts appear above the Live Model table to visualize key financial metrics:

  • Cash & Cash Runway — Cash balance (left axis) and months of cash runway remaining (right axis). Cash Runway is cash-basis and forward-looking: 0 when out of money (cash ≤ $0); the interpolated months to the projected cash-zero crossing when the model foresees one (so a lumpy upcoming outflow like the Linode AP paydown pulls runway down right away); otherwise cash ÷ trailing-3-month avg Cash Burn (projected past the model). Cash-flow-positive months have no runout — the runway line drops out (∞).
  • Cash Burn vs Net Burn — Bars show Cash Burn (cash actually leaving the bank), color-coded green/red. Dashed purple line shows Net Burn (Accrual) — the operating loss from the GL. The gap between them is the Linode payment-plan effect.
  • ARR Growth — Platform ARR (Net) over time. Hover for month-over-month growth rate.
  • Platform MRR (Net) vs OpEx — Recurring SaaS MRR against operating expense. The gap between them is the monthly operating margin on the SaaS business.

Dashed chart segments indicate projected months. In the ARR and MRR charts, dashes mark months extrapolated by growth-rate projections; solid lines are actuals or Salesforce-backed data. In the Cash & Cash Runway chart the runway line is always dashed — it's inherently forward-looking.

ARR Bridge

The ARR Bridge tab shows month-over-month Platform MRR changes (On-Premise and Services excluded) decomposed into their underlying drivers using account-level MRR transitions. For each account, this month's total unweighted MRR is compared to last month's. Classifications are based on unweighted deal movements; displayed values are weighted when probability weighting is enabled:

  • New — Accounts with $0 last month that now have MRR (brand new customers)
  • Expansion — Existing accounts with higher unweighted MRR (upsell, cross-sell, price increase)
  • Contraction — Existing accounts with lower unweighted MRR (deal value decreased)
  • Churn — Accounts that had MRR last month but $0 this month (lost customers)
  • Prob. Shift — The residual from retained accounts whose probability changed without any deal movement. For example, a deal moving from Commit at 90% to Best Case at 60% changes weighted MRR but has no unweighted movement, so the difference appears here.

Click any cell to see account-level detail. When an account has multiple Salesforce opportunities, sub-rows show each deal's individual contribution with new, ended, or changed badges to clarify what drove the movement.

Why Forecast Categories and Deal Types are constrained on this view

The classifier compares each account's full MRR month-over-month, so two soundness conditions must hold:

  • Deal Types → all 3 (locked). Deal types are taxonomic; filtering to a subset categorically hides existing customers. For example, a "Renewal-only" filter erases everyone whose only deals are renewals — when their next renewal kicks in, the classifier sees prevMRR = 0 and incorrectly labels them as New Business. Locking to all three ensures the classifier sees the full customer history.
  • Forecast Categories → Closed always included. Closed-Won deals form the realized customer base. As long as that base is present, you can layer additional categories on top — Commit, Most Likely, Best Case, Pipeline — to construct forward-looking bridges. The Closed checkbox is locked on; the other 4 are user-toggleable.

This gives you both views:

  • Closed only — the canonical realized-ARR walk reported in public-company 10-Q filings (Snowflake, MongoDB, Datadog, Cloudflare), the KeyBanc Capital Markets Annual SaaS Survey, and a16z/Bessemer benchmarks. Use this for board decks and investor reporting.
  • Closed + selected forecast layers — e.g. Closed + Commit answers "what does the bridge look like if our high-confidence pipeline closes?" Useful for internal forecasting; not a published metric.

Other filters — date range, account exclusions, opportunity overrides, weighting, slip months — are honored as-is.

Account & Opportunity Detail

Click any account name or opportunity name throughout the app (bridge detail, MRR drilldown, opportunity overrides) to open an in-app detail modal. No Salesforce access required.

Account Detail shows:

  • Summary cards: current MRR, runrate ARR (Platform × 12), health trend, active opportunity count, and revenue streams
  • MRR tab: stacked bar chart and table of monthly MRR by stream (Platform, On-Premise, Services)
  • Opportunities tab: all deals for the account with type, stage, forecast category, probability, and scheduled totals. Click an opportunity name to drill further.
  • Bridge History tab: month-over-month Platform MRR classification (new, expansion, contraction, churn, retained). Like the global ARR Bridge view, this tab uses the same soundness conditions: Deal Types is locked to all 3, and Forecast Categories always includes Closed (with whatever other categories the user has selected layered in). The MRR and Opportunities tabs continue to honor your sidebar filters as-is.

Opportunity Detail shows deal metadata (type, stage, forecast, probability, close date, term length) and the full monthly schedule.

Internal users (@harperdb.io) see an "Open in Salesforce" link in both modals. External viewers do not.

Customers

The Customers tab decomposes monthly Platform MRR into per-customer contributions, with a stacked bar chart over time and a concentration table snapshot anchored to today's calendar month (or the last month in your date range with realized data, if today is outside it).

  • Stacked bar chart — each customer is a separate segment of the monthly bar; total height is total Platform MRR. A secondary line shows total customer count over time. A vertical "Today" reference line marks the current month.
  • All Customers mode (default) — every customer is its own segment, useful for showing the full customer base growth over time.
  • Top 15 + Other mode — the 15 largest customers by latest-month MRR are shown individually; remaining customers roll up into "Other". Cleaner view when you want to focus on the largest accounts.
  • Concentration table — sorted by % of total revenue, showing each customer's MRR, ARR, % of total, customer-since date, and trend. Click a customer name to open the Account Detail modal.
  • Trend column uses a rolling 3-month window: compares the recent 3-month average to the prior 3-month average. Growing (+10%), Stable (±10%), Declining (-10%), Churned (had MRR, now $0), Pending (first MRR is in the future — they haven't started yet), New (no prior history to compare).
  • Filters — all standard filters apply (date range, account exclusions, deal types, forecast categories, weighting, slip months, MRR vs gMRR). Use the Excluded Accounts filter to model "what if we lose customer X" scenarios directly.

This view surfaces customer concentration while letting viewers see the underlying customer-acquisition trend independent of any single large customer.

Note: per-customer growth projection is not applied in v1 (current projection logic extrapolates aggregate revenue). If your date range extends past the last month with realized data, the chart and table truncate at that month with a hint banner. For projected forward views, use the MRR Dashboard.

Channels

The Channels tab is the diversification view: it groups Platform MRR by sales channel instead of by customer. A channel is the deal's Salesforce partner (e.g. Akamai Technologies, Cloudflare Inc) or Direct — it's pure sales attribution and is independent of rev-share economics (the Akamai 0.8× net-MRR discount is applied per-deal regardless of how a channel is labeled).

  • Stacked chart — monthly Platform MRR split by channel, with a secondary line tracking the top channel's share of total MRR: a falling line means the revenue base is diversifying. A Mix % toggle switches to a 100%-stacked share view.
  • Concentration table — each channel's MRR, ARR, % of total, and trend, with a snapshot-month picker to re-anchor it to any realized month. Click a channel name to open the Channel detail modal (summary, monthly chart, and its accounts + opportunities, which cross-link to the Account/Opportunity modals).
  • Channel filter (Filters panel & scenario editor) — narrow the whole app to one or more channels. It applies on every view including the ARR Bridge. On the Revenue Dashboard the filter is exact (per-channel revenue sums to the Salesforce total; clearing all shows $0). On the Live Model the hand-entered MRR layers (Modeled MRR Additions / overrides) are always included because the cash math needs them — so a channel subset there won't sum to the unfiltered total, and a banner explains it.
  • Real data resolves to Akamai Technologies + Direct; new partners appear automatically as they show up in Salesforce.

Ask the Model — AI Q&A on Harper

The floating chat button (bottom-right) opens Ask the model: ask plain-English questions about whatever scenario you have selected — "How much cash runway do we have?", "What's driving Net Burn in September 2026?", "Who are our top 5 customers?", "What's our net revenue retention?" — and get a prose answer grounded in the live model. You can also right-click any cell in the Live Model (including computed cells like Net Burn, Cash, and Runway) and choose "Ask about this cell" to ask about that exact figure.

It's intentionally a read-only sidecar: it can read and explain the model but can never edit data, change scenarios, or run actions — so it's safe to point at production numbers.

Three answer tiers — two are served entirely by Harper

Every question is resolved by the cheapest path that can answer it correctly. The chip on each answer tells you which tier handled it, how long it took, and what it cost:

⚡ Exact cacheYou (or anyone) asked this exact question before. Served straight from Harper's cache table — milliseconds, $0, no AI call.
🧠 Semantic matchA reworded version of a question already answered ("hit zero" vs "hit 0", "lowest cash" vs "when is cash at its minimum"). Harper recognizes it by comparing question vectors and returns the existing answer — $0, no AI call — with a similarity score. This is the showcase path (see below).
✨ AI generatedA genuinely new question. The system pulls the relevant structured numbers from the live model, then Claude (Haiku) writes the prose explanation. This is the only tier that calls an external model and incurs a (small) cost — and its answer is then cached so the next person asking it, however worded, lands on one of the free tiers.

A running tally at the bottom of the panel shows how many AI calls have been avoided and the cumulative cost saved by the two Harper tiers.

What Harper is doing under the hood

  • Local embedding model, on-node. The semantic tier turns each question into a vector using a small open embedding model (nomic-embed-text) running inside Harper itself — no external API, no data leaving the box. This is the "small language model as a sidecar on Harper Fabric" pattern: lightweight AI co-located with your data.
  • Harper is the vector store. Each question's embedding is stored alongside its answer in a Harper table — the same database serving the model also holds the semantic cache. To find a semantically-similar prior question, the cache pulls the active scenario's cached entries and ranks them by cosine similarity in the app, returning the nearest match within a strict distance threshold. (Vectors live in Harper; the similarity math runs co-located with the data.)
  • Correctness guard. Numbers carry meaning, so two near-identical questions that differ on a value are not treated as the same: "when does cash hit zero?" and "when does cash hit $50K?" look almost identical by vector distance, but a numeric/temporal guard keeps them apart so a cached answer is never served for a different question.
  • Self-healing cache. Editing the model (overrides, exclusions, filters, manual inputs) invalidates the affected cached answers automatically, so the chat never serves a stale number after you change an assumption.

It understands your scenario's configuration

The answers aren't just lookups — the Q&A is aware of the same levers documented above. When a number is what it is because of how the scenario is configured, it says so: it will cite a specific excluded opportunity (and the MRR it would have contributed), a probability override (e.g. a renewal forced to 100%, and the dollar effect), slipped deals, or a filter difference from the default scenario (e.g. "this scenario excludes Renewals"). So "why is Net Burn higher here than in the Base Case?" gets an attributed answer, not just a restated figure.

All answers are grounded strictly in the model's own computed values — the AI is instructed to cite only real figures from the data, never to invent numbers.

Snapshots

Capture the current state of all scenarios for auditability and time-travel review. Nightly snapshots are taken automatically at 04:15 ET.

Salesforce Sync

Scenarios

NameDefaultMRR BasisWeightedActions

User Management

EmailRoleEnabledAI ChatActions

Renewal Hygiene

Accounts with Platform MRR in the last 3 months but no open Renewal or Expansion opportunity.

Impact: Accounts in this list will NOT have their MRR extended into future months — the renewal projection engine requires an open Renewal or Expansion opportunity. Creating renewal opportunities in Salesforce for these accounts will immediately restore forward MRR in the model. Click an account row to see its current open opportunities (often these are Type=New deals that should be Type=Renewal in Salesforce).

History

Date Scenario Trigger Label Actions