StockVS

Resources

Methodology

How StockVS Works

StockVS is produced by an automated pipeline: data collection, a nightly build, automated checks and publication, each described below.

Data Collection

Market data comes from Yahoo Finance through the open-source yfinance library: daily prices and volume, dividends, company and fund profiles with key statistics, annual income statements for stocks and top holdings for ETFs. The securities covered come from public listings of U.S. and Canadian exchanges; news headlines come from the Finnhub news service. For depositary receipts (ADRs), market capitalization is the ADR price multiplied by the ADR-equivalent share count, as Yahoo Finance reports it; it can differ from the company's value on its home market when the ADR trades at a premium (for example TSM and SKHY).

The Data Pipeline

Collection jobs write each security's prices and profile, and news headlines for stocks, to a PostgreSQL database. Each night a static-site build renders every page from that database, and automated checks inspect the result; if any check fails, nothing is uploaded and the previous version stays online. A build that passes is uploaded to static hosting behind Cloudflare's network, and a random sample of the new pages is then loaded to confirm they respond.

Update Schedule

Prices are collected each trading day after the market close, and the nightly build starts once collection finishes, so pages normally show that day's closing prices the same evening; weekend builds use the last session's data. Company profiles and key statistics are refreshed each weekday, ETF holdings and full ETF price histories weekly, and each company's income statements about once a quarter, a new listing's within a week. News headlines for stocks are refreshed daily for the largest companies, every few days for smaller ones. If a weekday collection fails, that evening's build does not run, the previous version stays online and a monitor raises an alert.

How Figures Are Calculated

Returns for trailing periods, calendar years and months are computed from the stored daily closes, as adjusted by Yahoo Finance for splits and dividends when each was downloaded; volatility is the annualized standard deviation of daily returns. Market capitalization, valuation ratios, margins, earnings per share and dividend yields are shown as Yahoo Finance reports them, and a value outside a plausible range is not shown. Figures keep their reporting currency, U.S. or Canadian dollars, and are never converted; totals spanning both are given per currency. Industry comparisons use the industry median, and gaps between percentages are stated in percentage points.

How the Analysis Is Written

The analysis on stock and ETF pages is assembled from pre-written sentence templates in each supported language, filled in with figures from the database. Missing data drops a sentence rather than leaving a placeholder. The templates describe the data and how it compares with industry medians, without ratings, recommendations or predictions. No language model runs when the site is built, and no model writes text about any individual stock or fund. The abstract illustrations beside some news headlines were generated once by an image model and do not depict the stories.

Quality Controls

During collection, prices are stored only for days the security's own market was open, a current-day price only after the session closes, and the daily update cannot overwrite a stored close with a live quote. A truncated name from the data feed cannot replace a stored full name, and securities that stop returning prices are flagged in the run report. On the pages, a price that is no longer current shows the date of its last trade, and dual-listed companies are counted once.

Before each nightly publication, automated checks read the finished site, page by page or by sample. The build must be close in size to the last published version, contain at least as many pages as its sitemaps list and carry prices as recent as the schedule requires. Structured data must be well formed, price dates must fall on trading days and never in the future, each page must carry a single data date, and counts and totals must agree across pages. No table may list a company twice or add up different currencies. The analysis and listing summaries must use the writing system of the page's language.

Known Limitations

StockVS does not provide real-time quotes: data is end-of-day, and some pages can fall a session or more behind when Yahoo Finance publishes a close late or a collection run fails. Figures are only as accurate as Yahoo Finance's data. Not all financial metrics are available for every stock or ETF. Historical data availability varies by ticker. Most price histories are extended day by day, so a later split or dividend adjustment may not reach older prices, and long-term returns can differ from other sources. Securities that stop trading keep their pages, with the last price marked as no longer current, and company descriptions appear only on English stock pages.

Corrections

Errors are found by the automated checks above and by reviews of the published pages. Each is corrected where it originates, in the data, a calculation or a template, and the next nightly rebuild carries the correction to every affected page; corrections are recorded in the project's internal issue tracker. There is currently no public channel for reporting errors.