fernanluyano172 downloadsCalculate WACC, DCF, Graham, and Ten Cap intrinsic value, and track saved valuations in a vault summary note.
An Obsidian plugin that calculates a stock's intrinsic value using five classic valuation methods, and keeps the results in your vault.
Open it from the ribbon icon (🏛️ landmark icon) or the Open calculator command. This opens a dedicated view with a saved-valuations table; + New valuation opens the calculator form, and Help opens the built-in help/methodology screen.
All five methods run from a single form and are computed together every time an input changes.
Each method also reports a margin of safety — how far below intrinsic value the current price trades, as a %. The results panel splits these into two tables: Margin of safety (DCF/Graham/Ten Cap/DDM — the methods that actually have a fair value and a MoS to show) and Other metrics (WACC, cost of equity, reverse DCF's implied growth, Ten Cap's owner-earnings yield, Payback Time — real numbers, but not a valuation with a MoS of their own; a ? icon next to a metric's name explains it). Open the built-in Help screen (below) for the exact formula behind each method and honest guidance on when it does and doesn't apply.
? button next to each input)Each method that has real judgment-call inputs gets its own grid, right on the calculator form, updating live as you type:
A grid only appears once at least one of Bull/Base/Bear has a fair value for that method — so a method you haven't filled in yet, or a non-payer's DDM, doesn't show an empty grid (and the whole Sensitivity section stays hidden until some method has a value). Every grid shows fair value across a small, fixed range of that method's key assumptions instead of one point estimate, and marks two cells: the one nearest your actual current inputs, and the one whose value lands closest to today's price — roughly, what the market is implicitly assuming right now. (WACC alone doesn't get a grid — it has no second independent assumption to pair it with, and DCF's own grid already covers it.)
Every explicit Save, and every price refresh (the table's "Refresh prices" button), appends a timestamped snapshot (price, DCF/Graham/DDM Bear/Base/Bull, Ten Cap, Reverse DCF) to that ticker's own history — a second table, paginated and sortable just like the saved-valuations table, at the bottom of that ticker's calculator form, along with a "fair value vs. price" chart per scenario. A refresh only ever moves price and what's derived from it (margin of safety, DCF IV) — never fundamentals — but that's exactly what this timeline exists to track. More than one Save or refresh on the same calendar day replaces that day's entry instead of piling up duplicates, and the header shows the date range (oldest to newest entry) at a glance.
The point is answering a value-trap question the current-state view can't: has this ticker actually looked cheap for a long stretch and never re-rated, or is a big margin of safety brand new? History only accrues going forward — there's no way to build it backwards, so a ticker saved before this feature existed starts with an empty table and fills in from your next Save or refresh on. Delete any entry (with confirmation) if it was a mistake, or use Compact history (also confirmed) to collapse everything older than ~6 months down to one entry per calendar month, keeping years of regular saves/refreshes from growing the file without bound. The saved-valuations table always reflects the latest save only; the full history is what each ticker's vault history note (below) mirrors.
Off by default (Settings → Optional features → Link research notes). When enabled, each row gets a Research link pointing at a vault note — nothing about that note's contents, headings, or frontmatter is read or required; it's a bare pointer, the same as a bookmark. From an unlinked row, Link note opens a menu to either pick any existing file in the vault (no naming convention required for a note you already have) or create a new, blank one named TICKER-research.md in the folder you configure — asks for confirmation first, and refuses (with an error) rather than silently overwriting if a file with that name already exists. Removing a link (the unlink icon) also asks for confirmation, and only clears the pointer; the note itself is untouched. The link is preserved across edits to that valuation, and across toggling the feature off and back on — the only way a link goes away for good is removing it explicitly, or deleting the row it's on.
Each saved ticker gets its own note, TICKER-history.md (e.g. ADBE-history.md), in a folder you configure in Settings (default Stock Valuations). It holds that ticker's whole valuation history as a markdown table — one row per saved valuation or price refresh (at most one per day, same as the history table above), newest first, with price, DCF/Graham/DDM Bear/Base/Bull, Ten Cap, and Reverse DCF. IV and MoS are packed into one cell (e.g. $164/-33%), with MoS measured against that row's own price.
Only the ticker that changed is ever rewritten: saving ADBE rewrites ADBE-history.md and nothing else; Refresh prices rewrites the note of each ticker whose price it actually updated; deleting or compacting history rewrites that ticker's note. A note is first written the next time its ticker is saved or refreshed — nothing is written in bulk. Each note is a mirror of the plugin's own data, rewritten in full when its ticker changes, so don't hand-edit it; edits there won't persist. Deleting a ticker's valuation leaves its history note in place as a record — remove it yourself if you don't want it.
Upgrading from 0.x? This replaces the single all-tickers summary note (
Stock Valuations/Stock Valuations.mdby default). That note is no longer updated, but it's left exactly as it was — delete it whenever you like. If you'd customized its path, history notes go in that same folder.
A built-in documentation screen, opened via the Help button in the table header or the Open help & methodology command. It covers, for each of the five methods (and Payback Time): the formula, its source(s), and explicit "does this method fit?" guidance — none of them suits every company (the DDM, for one, only applies to dividend payers), and it's on you to judge fit before trusting a number. It also lists standard valuation methods the plugin doesn't compute (EPV, RIM, NAV, SOTP, comparable company analysis) for when none of the five apply well. Opens with a disclaimer: this is a calculator, not investing advice.
| Setting | Description |
|---|---|
| History notes folder | Where each ticker's auto-generated TICKER-history.md note is written; folders are created automatically, and blank means the vault root. Changing it doesn't move notes already written |
| Default money scale | Pre-fills the unit dropdown for dollar figures (debt, market cap, FCF, OCF, capex, interest expense, net debt) |
| Default share count scale | Pre-fills the unit dropdown for diluted shares outstanding |
| Risk-free rate (%) | 10-year US Treasury yield, pre-filled into new calculations |
| Market risk premium (%) | Pre-filled into new calculations |
| Tax rate (%) | Effective tax rate, used as the WACC after-tax cost of debt default |
| Maintenance capex (%) | Default share of total capex treated as maintenance vs. growth capex, for Ten Cap |
| AAA corporate bond yield (%) | Default for the Graham formula |
| Link research notes | Off by default. Adds the Research link column/cell described above; the first entry under Optional features, a home for future opt-in additions |
| Research notes folder | Vault folder new research notes are created in. Required to activate the row above — has no default, and left blank the Research column stays hidden |
All rates are stored and entered as percentages (4 means 4%); the calculators divide by 100 internally. Everything here is a default — per-stock numbers (beta, EPS, shares, debt, price, growth rates, ...) are always entered fresh for each valuation and can override any default.
From within Obsidian: Settings → Community plugins → Browse, search "Stock Valuations", and install.
Manual:
main.js, manifest.json, and styles.css from a release<your vault>/.obsidian/plugins/stock-valuations/MIT