Nahuel D'Elias · Product engineer

(S01)Study · 2026Concept

Sourceline

A comps builder where every number opens the filing line it came from.

Role
Solo: research, product, design, and engineering
Dates
2026-10 – present
Stack
Preact · Framer Motion · TypeScript
Status
Concept with a live demo

A concept I designed and built on my own. I haven't built comps myself. What I know about the work comes from training guides, analyst forums, and public case studies, and I've listed what I'm assuming. The numbers come from public filings.

The decision

The AI can't always trace a number to a filing. I had to decide what the table shows when that happens.

Chose
Leave the cell blank and ask the analyst.
Rejected
Fill every cell with a best guess and a confidence score.
Cost
The first table looks less finished, and the AI seems to do less. Analysts fill some cells by hand. In return, every number on the screen has a source.

The problem

Checking an AI-built comps table takes as long as building one.

Comps compare a company with its peers. An analyst picks the peers, pulls each one’s numbers from its filings, adjusts them so they line up, and works out the multiples. By hand, ten companies take hours. AI tools can fill the same table in seconds. But a VP won’t send a number to a client without knowing where it came from, so the analyst still checks each one against the filing. That check is the slow part, and it’s the part I wanted to design for.

Who it's for

The analyst builds it. The VP checks it.

Two people touch a comps table before a client sees it. The analyst builds it, usually in their first or second year. A VP or associate reviews it before it goes into a pitch book or a research note. The analyst needs to fill it fast. The VP needs to trust it without redoing it.

The fill

The builder fills the table and leaves blanks it can't source.

When the analyst names the company, the builder fills the table one row at a time. Each number comes from a filing. When it can’t find a line for a number, it leaves the cell blank and marks it Needs you. The multiples next to it stay empty too, so a missing number never turns into a wrong multiple.

Trading comps · LTM to Sep 30, 2026 · prices as of Nov 5, 2026

Toast, Inc. and four peers

Comps for Toast and four peers, in billions of dollars.
CompanyMarket cap$bnEV$bnLTM revenue$bnLTM adj. EBITDA$bnEV / revenueEV / EBITDA
ToastTOST
BlockXYZ
FiservFISV
Global PaymentsGPN
Shift4FOUR
Peer median
Peer mean
  1. 1 Toast's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  2. 2 Block's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  3. 3 Global Payments' revenue includes Worldpay from January 9, 2026, when the deal closed. The three months before that don't.
  4. 4 Shift4's EV adds about $1.0 billion of preferred stock, from its Q3 2026 10-Q.
  5. 5 Shift4's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  • 12.3 sourced from a filing
  • 12.31 has a footnote
  • Needs you no line found, left blank

The trace

Every number opens the line it came from.

Pick any number to see where it came from. The panel shows the filing, highlights the line, and shows how the number was built, like last year plus this year to date, minus the same months last year. A VP can check any number without asking the analyst.

Trading comps · LTM to Sep 30, 2026 · prices as of Nov 5, 2026

Toast, Inc. and four peers

Comps for Toast and four peers, in billions of dollars. Use the arrow keys to move between numbers, and Enter to open one.
CompanyMarket cap$bnEV$bnLTM revenue$bnLTM adj. EBITDA$bnEV / revenueEV / EBITDA
ToastTOST2.7x23.9x
BlockXYZ1.9x11.2x
FiservFISV2.9x—
Global PaymentsGPN3.7x—
Shift4FOUR1.7x7.5x
Peer median2.4x9.3x
Peer mean2.5x9.3x
  1. 1 Toast's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  2. 2 Block's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  3. 3 Global Payments' revenue includes Worldpay from January 9, 2026, when the deal closed. The three months before that don't.
  4. 4 Shift4's EV adds about $1.0 billion of preferred stock, from its Q3 2026 10-Q.
  5. 5 Shift4's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  • 12.3 sourced from a filing
  • 12.31 has a footnote
  • Needs you no line found, left blank

The correction

Fixing a number updates everything that depends on it.

Fiserv and Global Payments report adjusted operating income, not adjusted EBITDA, so the builder left both blank. Pick another line or enter a number. The multiples, the median, and the mean count to their new values, and a footnote records that you set it.

Trading comps · LTM to Sep 30, 2026 · prices as of Nov 5, 2026

Toast, Inc. and four peers

Comps for Toast and four peers, in billions of dollars. Use the arrow keys to move between numbers, and Enter to open one.
CompanyMarket cap$bnEV$bnLTM revenue$bnLTM adj. EBITDA$bnEV / revenueEV / EBITDA
ToastTOST2.7x23.9x
BlockXYZ1.9x11.2x
FiservFISV2.9x—
Global PaymentsGPN3.7x—
Shift4FOUR1.7x7.5x
Peer median2.4x9.3x
Peer mean2.5x9.3x
  1. 1 Toast's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  2. 2 Block's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  3. 3 Global Payments' revenue includes Worldpay from January 9, 2026, when the deal closed. The three months before that don't.
  4. 4 Shift4's EV adds about $1.0 billion of preferred stock, from its Q3 2026 10-Q.
  5. 5 Shift4's adjusted EBITDA as it reports it, from its Q3 2026 earnings release.
  • 12.3 sourced from a filing
  • 12.31 has a footnote
  • Needs you no line found, left blank

The motion

How it moves.

Everything uses one easing curve, the same one as the rest of this site. Numbers fade up 6 pixels over a third of a second. Multiples count instead of jumping, so you can see which way they moved. The source panel slides in 16 pixels the first time and only crossfades after that, so switching between numbers doesn’t feel like opening something new. A changed number gets a light tint that fades over a second. With reduced motion turned on, nothing moves or counts.

Under the hood · Records

Every number is a record, not a cell.

Only the demo on this page is built. The rest of this section is how I’d build the real thing. Each number in the table is a record. It holds the value, the unit, the period, and the company. It also holds where it came from, how it’s built from other numbers, its state, and who changed it and why. Multiples aren’t stored. They’re worked out from their inputs every time, so they can’t drift.

Under the hood · Sources

Each number keeps the place it was read from.

Numbers from the 10-K and 10-Q come from EDGAR’s XBRL data, where each fact is tagged with its period and filing. Adjusted EBITDA comes from the earnings release, and that table isn’t tagged. Toast’s Q3 2026 release has no tags at all, so the builder reads it like a page. Either way, each number keeps the exact place it was read from, so the panel can highlight it. A number without one stays blank.

Under the hood · Checks

The model suggests a number, and code checks it.

The AI reads the earnings release and suggests a number with its line. Plain code then checks it. The line has to contain the number. The twelve-month math has to add up. EV has to equal market cap plus debt minus cash. Units have to match, thousands or millions. Where XBRL has the same number, the two have to agree. If any check fails, the cell becomes Needs you. A set of tables I’d check by hand would measure how often a filled number is right and how many blanks the builder leaves.

Under the hood · First

I'd build the trace first, with no AI.

The first version would only use XBRL numbers for one set of peers, with records and the source panel. No model would fill anything. That proves the part people have to trust, and every number can be checked from day one. Then the AI comes in to read earnings releases, under the checks.