Kennan does what an analyst does: pulling data from files, conducting the research, building the business case, producing the presentation. A week's work, finished in hours.
Try the slider. Services growth moves the cash flow and the memo with it.
kennan / halcyon / fy26-28-planv.02 · draft
§ 2 · Plan
The FY26–FY28 operating plan, anchored to the FY25 close¹ and the FY26 budget, projects free cash flow rising from $81M in FY26 to $111M² in FY28 — driven by the mix shift to services as the recurring tail outgrows the equipment line.
The plan turns on the services ramp. At an FY26–FY28 services CAGR of 15.0%, FCF lands at $111M; each percentage point lifts FCF by ~$3.7M. Equipment held at 5% per the channel forecast; the plan pack carries the upside and downside cases.
¹HAL_FY25_close.xlsx · Segments tab · audited
²halcyon_plan_v1.py · stored program
The problem Kennan solves
Analysts are hired to think. Most of the week goes to everything else.
Before anyone can think, the numbers have to be pulled together, the model built, the presentation produced. By the time that is done the week is mostly gone, and the thinking gets whatever is left.
01 · Clean data~ days
Sales by market in CSV. Payroll as PDFs with merged cells for titles. All to be consolidated and extracted before the model can start.
02 · Modeling× every scenario
Revenue is built from drivers, by business line and by market — not one growth rate. Three scenarios means three Excel files; comparing them means a fourth tab.
03 · Present~ a day
The model finally settles after many ping-pong iterations. Then the deck: graphs from Excel, boxes aligned in think-cell or PowerPoint, commentary written by hand.
Where the analyst week goes100% of one week
Cleaning data
Modeling revenue
Building the deck
Thinking
The work the case turns on is the smallest slice, because everything to its left has to happen first.
Then the strategy meeting hits: “what if the average price users are willing to pay is 20% lower?” The answer comes hours later, or from a calculator on the table.
And that assumes you have an analyst at all.
Most people making real decisions don't. So the case gets done badly on a spreadsheet, made on instinct, or sent to a bank or consulting firm at a steep price. Rigorous analysis has always been gated, by the team you staff or the firm you hire.
Data analytics, research, modeling, presentation
What the agent delivers.
The work behind a real business case is hours of pulling numbers out of messy PDFs and Excel files, reading long filings, running a dozen web searches, and rebuilding the model whenever we need a different scenario. Kennan is a browser workspace built around that work. You bring your files, set the assumptions, the agent gives you back the business case.
01·
Data
Pulls data out of PDFs, Excel files, PowerPoint decks, and websites. Normalizes the result into clean, typed rows.
02·
Research
Reads long documents and runs web searches across multiple rounds. Every figure it surfaces has a source attached.
03·
Modeling
Builds the model once and runs your scenarios off the same code. Change a single assumption and the model recalculates in under two seconds.
04·
Presentation
Writes the memo or builds the deck for whichever audience you're presenting to. Every number cites a source; every assumption you set is listed.
§ 1 · The workspace
Where the project lives, across sessions.
Projects on the left, the agent's working thread in the middle, your deliverables on the right — one workspace per piece of work. Pick up where you left off; scroll back through the agent's reasoning; hand the project to a colleague without losing the audit trail.
Kennan
Good signal — Klaviyo has already reported Q1 FY26 and the FY25 10-K is filed (Feb 2026). Let me pull the latest disclosures.
{"description":"Run the Klaviyo bottom-up operating model — emits manifest with metrics, tables, charts, schedules, narratives.","output_mode":"hybrid"}
Kennan
`assumptions` in the Python runtime is the flat values map (per contract), so `v.get('source')` fails on the floats. Let me hardcode the default count — I know the construction.
Editdone
{"file_path":"/workspace/script.py","new_string":"**3. Margin path is partly speculative.** {n_default_assumptions} of the {len(assumptions)} model assumptions…
Kennan
Editdone
{"file_path":"/workspace/script.py","new_string":"**Default-sourced assumptions (flagged for review).** {n_default_assumptions} of {len(assumptions)} assumptio…
{"description":"Rerun with the default-count fix.","output_mode":"hybrid"}
Kennan
Schedule rows can't have `None`. Substituting real values where computable and 0 where genuinely missing.
Editdone
{"file_path":"/workspace/script.py","new_string":"# FY24 YoY growth: revenue +34% (FY23 was $698M per Klaviyo 10-K); customer +16.8% (143k → 167k); ARPA leave…
Kennan
Editdone
{"file_path":"/workspace/script.py","new_string":"# ARPA growth FY24 placeholder = 0 (no FY23 ARPA recompute in scope); FY25 implied; FY26+ from assumptions\na…
Kennan
Python · executedone
{"description":"Rerun after schedule None→float fix.","output_mode":"hybrid"}
Kennan
Model is live. Quick cosmetic fix — the NRR label rounds `115% → 114%` from float truncation. Let me patch that.
Editdone
{"file_path":"/workspace/script.py","new_string":" x=[f\"{round(s['NRR']*100)}%\" for s in sens_rows],\n y=[s['FY28 Revenue']/1e6 for s in sens_rows],","…
Kennan
Editerror
{"file_path":"/workspace/script.py","new_string":" x=[f\"{round(s['NRR']*100)}%\" for s in sens_rows],\n mode='lines+markers+text',","old_string":" x=…
Kennan
Grepdone
path: /workspace/script.py
Kennan
Editdone
{"file_path":"/workspace/script.py","new_string":" x=[f\"{round(s['NRR']*100)}%\" for s in sens_rows],","old_string":" x=[f\"{int(s['NRR']*100)}%\" for s…
Editdone
{"file_path":"/workspace/script.py","new_string":" periods=[f\"NRR {round(s['NRR']*100)}%\" for s in sens_rows], display_scale='millions')","old_…
Kennan
Python · executedone
{"description":"Rerun after NRR label round fix.","output_mode":"hybrid"}
Kennan
Model is live across both Output and Summary tabs. Headline numbers:
| Year | Revenue | YoY | Adj EBITDA | Margin |
|---|---|---|---|---|
| FY25A | $1.23B | +32% | $191M | 15.5% |
| **FY26E** | **$1.52B** | **+23%** | **$258M** | **17.0%** |
| FY27E | $1.82B | +20% | $392M | 21.5% |
| FY28E | $2.13B | +17% | **$542M** | **25.5%** |
**NRR sensitivity (FY28):** every +5pp of NRR adds ~$165M of revenue / ~$115M of EBITDA. 100% → 120% spread is **$308M → $797M** in FY28 EBITDA…
New analysis step…↥
OutputSummaryModel ReviewPresentExport ▾Share
FY25 Revenue (USD, actual)
$1.23B
FY26 Revenue (USD, base)
$1.52B
FY27 Revenue (USD, base)
$1.82B
FY28 Revenue (USD, base)
$2.13B
FY26 Adj EBITDA (USD)
$258.4M
FY27 Adj EBITDA (USD)
$391.8M
FY28 Adj EBITDA (USD)
$542.1M
FY28 Adj EBITDA margin
25.5%
FY28 ending customers
259,089
FY28 blended ARPA (USD)
$8,520
Base-case NRR (FY26-FY28)
110.0%
Revenue & growth trajectory
RevenueYoY growth
Margin walk FY24-FY28
Gross marginOp margin (non-GAAP)Adj EBITDA margin
NRR → FY28 revenue & EBITDA
FY28 RevenueFY28 Adj EBITDA
FY28 EBITDA scenarios
FY26 quarterly revenue build (customer × ARPA)
Quarter
Status
Customers (EoP)
Net adds
Revenue (USD)
YoY growth
Annualized ARPA (USD)
Q1 FY26
Actual
196,000
3,000
$358.0M
28.3%
$7,362
Q2 FY26
Guide midpoint
200,000
4,000
$361.0M
23.2%
$7,293
Q3 FY26
Modeled
207,000
7,000
$387.0M
24.5%
$7,606
Q4 FY26
Modeled
218,089
11,089
$414.0M
18.2%
$7,792
Annual P&L: FY24A → FY28E (non-GAAP basis, USD)
Year
Revenue (USD)
Gross profit (USD)
Gross margin
S&M (USD)
R&D (USD)
G&A (USD)
Op income (USD)
Op margin
Adj EBITDA (USD)
Adj EBITDA margin
FY24A
$937.5M
$703.1M
75.0%
$375.0M
$187.5M
$65.6M
$112.5M
12.0%
$121.9M
13.0%
FY25A
$1.23B
$913.2M
74.0%
$468.9M
$222.1M
$80.2M
$178.9M
14.5%
$191.3M
15.5%
FY26E
$1.52B
$1.13B
74.5%
$547.2M
$258.4M
$83.6M
$243.2M
16.0%
$258.4M
17.0%
FY27E
$1.82B
$1.38B
75.5%
$619.6M
$291.6M
$91.1M
$373.6M
20.5%
$391.8M
21.5%
FY28E
$2.13B
$1.63B
76.5%
$680.2M
$329.5M
$95.7M
$520.8M
24.5%
$542.1M
25.5%
NRR sensitivity: FY28 revenue & adj EBITDA (USD)
NRR
FY27 Revenue
FY28 Revenue
FY28 Adj EBITDA
FY28 EBITDA Margin
∆ Revenue vs Base
100.0%
$1.67B
$1.79B
$308.1M
17.2%
$-334.2M
105.0%
$1.75B
$1.95B
$422.4M
21.6%
$-170.9M
110.0%
$1.82B
$2.13B
$542.1M
25.5%
$0.0M
115.0%
$1.90B
$2.30B
$667.0M
28.9%
$178.5M
120.0%
$1.97B
$2.49B
$797.3M
32.0%
$364.6M
Bear / Base / Bull scenarios (USD)
Case
FY26 Revenue (USD)
FY27 Revenue (USD)
FY28 Revenue (USD)
FY28 EBITDA margin
FY28 Adj EBITDA (USD)
Driver assumption
Bear
$1.48B
$1.71B
$1.92B
20.5%
$393.8M
NRR 105%, customer +ARPA growth −2pp ea, EBITDA margin −500bps vs base
Base
$1.53B
$1.84B
$2.15B
25.5%
$547.0M
NRR 110%, base customer + ARPA path (built up from Q1 FY26 actual)
Bull
$1.59B
$1.98B
$2.39B
29.5%
$705.3M
NRR 115%, customer +ARPA growth +2pp ea, EBITDA margin +400bps vs base
1. Executive summary
Klaviyo enters FY26 with a +28% Q1 print, ~196k paying customers, and a $1.4B exit-FY25 ARR. The two-year story is durable double-digit growth (18% CAGR FY26-FY28) compounded by margin expansion from 17% EBITDA in FY26 to 25% by FY28 — a rule-of-40+ profile by any cut.
2. Investment thesis & key drivers
Thesis. Klaviyo is the category-defining marketing automation platform for B2C e-commerce, with a $1.23B revenue base, 75% non-GAAP gross margins, and a customer base scaling +16% YoY into a mid-market / enterprise mix-shift tailwind. The bottom-up build supports +24% / +20% / +17% revenue growth FY26-FY28 with operating leverage taking adj EBITDA margin from 16% (FY25) to 25% (FY28).
Driver decomposition.
The ARPA story is more important than the headcount story. Customer count growth decelerates (13% → 8%) on a maturing SMB base, but the >$50K ARR cohort is growing +38% YoY — that…
3. Bear / Base / Bull
NRR sensitivity (FY28). Every +5pp of NRR adds ~$165M to FY28 revenue and ~$115M to FY28 EBITDA (incremental margin on expansion ~70%). The 100% vs 120% NRR FY28 EBITDA spread is $489M — NRR is the single highest-leverage assumption in the model.
4. Risks
1. NRR is the dominant variance driver. A 5pp NRR miss (base 110% → bear 105%) compresses FY28 EBITDA by ~$125M. NRR is exposed to (a) SMB e-commerce demand cycles, (b) Shopify platform dependency, (c) any pricing-driven churn from price discipline.
2. Customer count deceleration. SMB net-adds are slowing structurally. Q1 FY26 added only 3k customers vs ~10k in Q4 FY25 BFCM — partly seasonal but the base of 196k is large and incremental net-adds get harder. The model assumes the >$50K ARR cohort growth (+38% YoY) carries ARPA mix shift; if mid-market traction stalls, the ARPA story s…
5. Recommendation
Underwrite at base. Klaviyo at $2.13B FY28 revenue / $542M FY28 EBITDA (25%) is a credible base case anchored on disclosed Q1 FY26 actuals and mgmt's raised FY26 guide. The model is most sensitive to NRR — bull case (115%) adds ~$158M of FY28 EBITDA; bear case strips ~$153M. Position around the 110% NRR base; size for variance.
Monitoring KPIs (priority order).
1. NRR trajectory — disclosed quarterly. The single highest-leverage metric in the build.
2. >$50K ARR customer cohort — disclosed quarterly. Read for mid-market traction.
3. Non-GAAP operating margin — Q1 FY26 pr…
6. Methodology & default-sourced assumptions
Methodology.
- Revenue build: FY26 quarterly = Q1 FY26 actual (358M) + Q2 FY26 guide midpoint (361M) + Q3/Q4 modeled to FY26 raised guide midpoint of $1.52B with Q4 BFCM uplift 7%. FY27 / FY28 use customer count growth × blended ARPA growth.
- P&L: Non-GAAP basis (ex-SBC, ex-acquired intangible amortization). Cost ratios applied as % of revenue with explicit annual step-downs.
- NRR sensitivity: New-logo dollar contribution held constant at base case; vary NRR on the existing book. Incremental EBITDA margin on NRR-driven expansion = 70% (expansion has minimal incremental S&M /…
Live capture · Klaviyo · bottom-up P&L · FY26–FY28 · agent run on Jun 1, 2026 · 14m 23s end-to-end
§ 2 · Live in the room
Answer the “what if” before the meeting ends, not in a follow-up two days later.
Every IC review hits the same wall: someone asks “what if NRR comes in at 105% instead of 110?” and you take it offline, flip between three Excel versions, and email the answer Tuesday. With Kennan, the sensitivity is already on the deliverable — emitted by the same stored Python program as the base case, in one run.
kennan / klaviyo · bottom-up p&l fy26-fy28NRR 110% · base case
Every number on screen came out of the captured KVYO run · the slider walks the five rows the program emitted in one shot.
What changes
Days of work, done in an afternoon.
Kennan does the setup work an analyst would do and hands back the business case. The hours that used to disappear into reconciling and rebuilding go back into the part that was always the point: the thinking.
Today
With Kennan
Days reconciling sales, marketing, payroll, and accounting
→Clean data in hours, every figure tracing back to where it came from
A driver-based revenue model rebuilt for every scenario
→One model, every scenario running off it, recalculated in seconds
The deck rebuilt by hand each time the story changes
→The presentation drafts itself from the model, charts included
“Let me come back to you”
→The revenue question answered while the meeting is still going
A team you staff, or a firm you hire
→An analyst seat you can pull up whether or not you have a team
Analysts get the week back and spend it on thinking. The people who never had an analyst get one for the first time. The decision gets made faster based on your data and insights.
Rigorous business casing, without the team or the firm.
VZ
V. Z. · FounderNYC · 2026
Built by one. Hiring two.
Built by an analyst who lived in this workflow for ten years.
Ten years in corporate finance, M&A, and asset management: capex and corporate-finance work for Fortune 500 management, lead analyst on closed M&A deals, then principal at a family office deploying $100M+ across PE and venture. Sectors touched: banking, real estate, technology.
The product is being built around what the work demands rather than around what looks impressive in a demo. If you've sat through an IC review, the workspace should feel familiar. If you haven't, the manifesto is a better introduction than this card.
The deal that isn’t public yet is safe here. The two questions every desk asks us — answered plainly, with the specifics behind each.
Your data stays yours.
Every document is isolated to your organization and encrypted end to end. Nothing is pooled, shared, or visible across clients — not to another customer, not to us.
ISOLATED PER ORGKERNEL-LEVEL SANDBOXENCRYPTED IN TRANSIT & AT RESTEU DATA REGION
Never used to train AI.
Your files and the agent’s outputs are processed for your request, then discarded — never stored after the request, never used to train a model, ours or any vendor we route through.
ZERO DATA RETENTIONNO MODEL TRAININGSIGNED DPA · EVERY AI VENDOR
So yes — upload the confidential deck.
The CIM, the board pack, the model that isn’t public yet. This was built for exactly that work, not adapted to tolerate it.
Read the full security overview →Built on Google Cloud (ISO 27001 · SOC 2 · FedRAMP substrate) · SOC 2 Type II in progress, interim packet under DPA
$30, $120, or $300 per seat. Enterprise on contract.
Each seat includes monthly usage, pooled across your team. Run over in a busy month and top up in dollars — never blocked. See pricing →
See how Kennan can help you deliver your work.
Build a real business case with data, research, scenarios, and presentations with your projects.