Methodology
Last updated
Varamir's relationship graph is built in-house from public SEC filings, not licensed from a data vendor. This page describes exactly how an edge gets made, what has to be true before it is published, and what it does not mean.
Contents16 sections
Entity resolution
#entity-resolutionwho a ticker is
Companies are resolved against the SEC's own ticker registry, which maps a ticker to a CIK, the identifier the SEC uses for a filer. That CIK is what every filing on a company page is fetched by, so a relationship is always attached to a specific legal filer rather than to a name that happens to match.
Funds are resolved from their N-PORT filings, which carry the fund's CIK and, where one exists, its EDGAR series identifier. Single-fund trusts such as SPY and DIA file under a registrant CIK directly and have no series id.
Holdings inside a fund filing are matched to a US ticker either by the identifier the filing itself supplies or by normalising the holding's name against the SEC ticker registry. A holding that matches neither keeps its name and is shown without a link rather than being dropped or guessed at. Multiple share classes of one issuer are summed into a single position.
Relationship extraction
#tieshow an edge gets made
For each company we take the most recent annual report (a 10-K, or a 20-F for foreign private issuers) and slice out the sections where commercial relationships are actually disclosed: Business, Risk Factors (where customer and supplier concentration is normally stated), and Management's Discussion and Analysis. Filings that do not follow the standard item layout are read in overlapping full-document chunks instead, so an unusual format loses coverage rather than silently losing the company.
A language model reads those sections and proposes edges. It is not trusted.
Every proposed edge must clear all of the following before it is stored, and anything that fails is discarded rather than downgraded:
- The citation must be verbatim. The sentence the model returns has to appear literally in the filed text. This is a string containment check against the filing itself, and it is the single gate that makes a fabricated quote impossible to publish.
- Confidence floor. The model reports its own confidence in each extraction and anything below 0.8 is dropped.
- One party, not a category. Groups such as “customers in Europe”, “our top ten customers” or “original equipment manufacturers” describe who a company sells to in general, not a disclosed relationship with a counterparty, and are rejected.
- Tickers are validated, never inferred. A counterparty ticker is checked against the live SEC registry; if it does not resolve, the ticker is removed and the counterparty keeps only its disclosed name.
- Anonymised counterparties need materiality. Filings often say “one customer accounted for X% of revenue” without naming it. Those are kept only when the disclosed share is at least 25%, so an unnamed party has to be genuinely significant to earn a place on the map.
Direction
#directionwho disclosed what about whom
Direction is stored from the perspective of the filing. The subject of an edge is the company whose filing disclosed it, and the relationship type describes the counterparty's role relative to that subject. So when Apple's 10-K names a supplier, the edge is stored on Apple with the counterparty marked as a supplier.
The reverse view, seeing that same relationship on the supplier's own page, is derived when the page is read, and it is labelled as disclosed by the counterparty. Any revenue share attached to the original disclosure is deliberately dropped in that direction: a percentage disclosed in one company's filing describes that company's books, not the other party's, and carrying it across would silently invent a number nobody disclosed.
Evidence
#evidencewhat stands behind a claim
- Filing
- Directly supported by a cited public filing. The edge carries the verbatim sentence, a link to the filing document on SEC.gov, and the filing's date. Every relationship published today is filing-sourced.
- Call · Q&A
- Reserved for relationships disclosed in dated earnings-call transcripts. Varamir does not ingest transcripts today, so no published edge carries this tier.
- News
- Reserved for relationships reported by a named publisher with a source link and date. No published edge carries this tier today.
The last two tiers exist in the data model and in the interface's vocabulary, and they are how the graph will grow. They are listed here so that the tier vocabulary means what it says: filing is not one option among three in use, it is the only kind of evidence currently behind any edge.
Customer concentration
#customer-concentrationsnapshot · 2026-10-28
Customer concentration ranks every customer a company names at 10% of its revenue or more. It is read from the same graph as every supply-chain page, then held to a stricter rule, and published as a dated snapshot that does not change once written.
- Included
- A tie stands only when the filing's own sentence states the share as a share of the company's total revenue or net sales, for one named customer, in the latest fiscal year the company has filed, in a 10-K, 20-F or 40-F. A table row counts when its caption says what the percentages are of and which year each column is.
- Excluded
- Unnamed customers ("Customer A"), groups and categories ("top ten customers", "automotive OEMs", a region), app stores and marketplaces that collect payment for the real buyer, shares of a segment, product line, geography, gross sales or a single contract, prior years, the same customer listed twice, and any row whose sentence leaves the base or the year open. Every row was read against its sentence before publication; the excluded rows and the reason for each are kept with the snapshot.
- Nested buyers
- A contractor can name the U.S. government and one of its departments in the same filing. Each is a disclosure in its own right and both are listed, so a company's shares can add to more than 100%.
- Most-named customers
- Listed customers only, counted by ticker across the companies that name them, whatever name each filing used.
What the numbers mean
#numbersand what they do not
- Confidence
- The extraction model's own reported confidence in having read the sentence correctly, floored at 0.8 by the gate above. It measures reading, not truth: it is not a probability that the commercial relationship still exists, and it is not a statistical estimate.
- Weight
- A disclosed share of revenue or cost of goods sold, shown only when the filing states one. Most relationships are disclosed without a figure, and those carry no weight rather than an inferred one.
- ETF exposure
- A fund's position in a stock as a fraction of net asset value, taken from that fund's N-PORT filing, shown with the report period it belongs to.
- Implied move #implied-move
- The at-the-money straddle (the call and put mid-prices at the strike nearest the share price) for the first option expiry after a report, multiplied by 0.85 and shown as a ± percentage of the share price. The chain is priced at the close, and a report that has passed keeps the range priced before it, never a re-priced one. Where two expiries allow it, the part of the range attributable to the report itself is separated from ordinary day-to-day movement. It is a market-implied range, symmetric by construction: never a direction and never a forecast. A chain holding fewer than 500 contracts of open interest near the money whose at-the-money quote is wider than 50% of the straddle, or quoted on one side only, carries a thin chain label; under 200 contracts and wider than 75% (or one-sided), no range is shown at all.
- Rich and cheap
- The implied move for a coming report divided by the company's 8Q avg, the mean absolute close-to-close move on the reaction sessions of its last eight reports (at least four required). At 1.15× or more the report is priced rich; at 0.85× or less, cheap; in between, fair.
Three kinds of absence are kept apart everywhere on the site. Unavailable means a read failed on Varamir's side and says nothing about the company. No … or None means the read succeeded and there is genuinely nothing to show, such as a company with no disclosed suppliers. A dash means no figure exists yet: nothing priced so far, or too small a sample to measure.
Institutional holders
#holders13F-HR · quarterly
The holders table lists the positions institutional managers reported in a company on Form 13F-HR, as compiled by the licensed market-data vendor. Every row belongs to one quarter: the newest complete one. A quarter counts as complete three days after its filing deadline (45 days after the quarter ends, rolled to the next business day), because the largest managers file in the deadline week; until then the previous quarter stays. The lag beside the total is the number of days since that quarter ended.
A company's holders are read the first time its page is opened, then kept. They are read again after 14 days, or as soon as a newer quarter completes. The table shows the 25 largest managers by reported value, 10 on a phone.
- % 13F
- A manager's reported position value as a share of the summed value of every 13F position reported in the company for that quarter.
- QoQ
- Shares held against the same manager's share count for the prior quarter, as the vendor reports it. A position with no prior figure prints new, never 0.00%. The top-10 change sums the ten largest managers that have a prior figure, shares now against shares then, and is omitted when fewer than five do.
- Concentration
- How many managers, largest first, it takes to reach 80% of the total reported value: top N hold 80%. The curve is cumulative share by manager rank on a log scale. Past the listed rows only that 80% point is marked, and nothing between the two is printed as a figure.
- Index-like
- A named index or passive manager: the Vanguard entities, BlackRock, State Street, Geode, Northern Trust, Schwab Investment Management, BNY Mellon, Nuveen and Norges Bank, matched on the name each files under. The Active and Index-like filters read this one label.
- Common holders
- Other companies held by the same active managers. A manager counts when it is neither index-like nor broad (holding a position in at least half of the companies Varamir holds 13F data for), and its position is at least 0.25% of each company's reported value; the shared figure is the sum, over those managers, of the smaller of its two stakes. A company needs a shared figure of at least 0.5% to be listed, and six are shown. Below 12 covered companies the row reads Insufficient coverage.
13F holders unavailable. means the read failed. No 13F holders. means the vendor reported none for the company.
Revenue flow
#revenue-flowincome statement · 12 quarters
The revenue flow lays out one quarter's income statement: revenue less cost of revenue is gross profit; less operating expenses, operating income; with other income or expense, pre-tax income; less tax, or plus a tax benefit, net income. Each ribbon is as wide as the filed line it carries, so the picture is the statement's own arithmetic. A margin is a line divided by that quarter's revenue.
The figures are the licensed market-data vendor's standardized income statements (see sources). Each quarter is stored the first time it is read and is not read again, and each carries its basis: as filed when the figures come from the company's filing for that quarter, per later filing when they come from the prior-year column of a later filing, and derived from FY for a fiscal fourth quarter, which is filed only inside the annual report and is the year less the first three quarters. An as-filed quarter is never overwritten by a later filing's figures.
The quarter stepper reaches back up to 12 stored quarters. QoQ compares with the fiscal quarter immediately before; when that quarter is missing from the series, no QoQ figure is shown. YoY compares with the same fiscal quarter a year earlier, matched by period. A new quarter is looked for once the newest stored one ended more than 100 days ago.
- Operating expenses
- The filed total where the company files one, otherwise gross profit less operating income. Up to three filed components are drawn, largest first, from R&D, marketing, SG&A, exploration, depreciation and other operating; any part of the total they do not cover is drawn as Other operating when it exceeds 0.5% of the total.
- Segments
- Revenue by segment is read from the company's own inline XBRL filing at SEC, and drawn only when there are at least two segments and their filed total is within 1% of the quarter's revenue.
- Net of excise
- A few filers report revenue both including and excluding excise and sales taxes, and the vendor's top line is the gross figure (today STZ and both Brown-Forman share classes). For those, the net figure comes from the filer's own XBRL at SEC, and only for a period whose gap between the two equals the filed excise line and whose vendor revenue matches the filer's gross figure. Refreshed nightly.
- Drawn or listed
- A quarter is drawn only when revenue, cost of revenue, gross profit, operating income, pre-tax income and net income are all filed and none is negative, and a tax line is filed. An operating income of exactly zero is treated as a missing line. Any other quarter, including every loss, lists the same filed figures as ranked rows.
- Compare
- Each company's latest quarter is set side by side. Every bar is a share of that company's own revenue, so length is margin, not size; the size difference is the revenue multiple (×) under Revenue, and each later stage prints its margin gap in percentage points, named for the company ahead. The foot states how many days apart the two quarters end.
Unusual activity
#unusual-activityearnings ≤14d · intraday
Unusual activity scans a stated slice of the market, never all of it. The slice is up to 60 companies with an earnings report in the next 14 days (a confirmed date outranks an estimate, and a date a filing already covers is dropped), taken in this order: names on a reader's watchlist or portfolio, then the company's largest weight in any fund Varamir holds N-PORT data for, then the soonest report. Volume, prices and option chains are licensed market data.
- RVOL
- Today's cumulative volume divided by the volume expected so far: the average daily volume of the sessions in the last 21 calendar days, times the share of the 09:30 to 16:00 ET session elapsed (at least 5%; the whole day outside regular hours). Shown at ×2.0 or above. A name whose last trade is not on today's New York date is dropped, so a weekend or holiday shows none.
- OI Δ
- The change in total open interest for one ticker, expiry and side (calls or puts) between its two most recent daily captures. Option chains are captured hourly, 40 companies a run, for companies reporting in the next 14 days, soonest first. A change is shown only from a base of at least 1,000 contracts, with at least 500 contracts added or removed and a change of at least 8%. Lines are ranked by contracts changed, and each ticker keeps its largest.
- Order
- RVOL and OI Δ rows interleave by score: an RVOL row scores its multiple, an OI Δ row a tenth of its percentage change. At most six rows.
- Cadence
- The desk's scan is at most 10 minutes old. A separate scan runs every 20 minutes in the regular session; from 10:30 ET, a company's first RVOL of ×2.0 or above in a session enters its Changes, unless the company has had a trading halt in the last 30 days.
None means the whole slice was read and nothing crossed a threshold. N of top M means the vendor returned no complete figure for the other names. Unusual activity unavailable. means the volume or open-interest read failed, or fewer than half the slice could be read. A dash under Move means no quote for that name.
Co-movers
#co-moversdaily closes · 2 years
Co-movement is measured from Varamir's stored daily closes, loaded each night from the licensed vendor's end-of-day prices, over the last two years (about 500 trading days), on the days both companies traded. A pair is ordered: a base and a peer.
- × co-movement
- The regression slope (β) of the peer's daily % change on the base's: how far the peer moved, on average, per 1% move in the base. It is directional, so swapping the pair gives a different slope with the same r. On a company's co-mover map that company is the base.
- r
- The Pearson correlation of the same daily changes, from −1 to 1.
- Gates
- A pair is shown only with at least 120 shared trading days, r of 0.25 or more and a slope of at least 0.05. A stored pair is recomputed once it is more than 30 days old.
- Map
- The co-mover map splits a company's co-movers by whether either company's filing names the other as a supplier or customer. Each side is ordered by r, nine rows a side, and the rest of the undisclosed side is counted by industry. Bars run on a fixed scale, ×0 to ×1.50, never scaled to the strongest row. Pairs are measured when a filing names them and in a sweep across the coverage; until a company has been swept, its undisclosed side shows a dash.
- Compare
- The head figure is the slope of the second company on the first, with r and the shared days. Shared co-movers are companies that clear the gates against both, ranked by the weaker of the two correlations, never an average; their bars run to r 0.75. A pair that fails the gates prints its reason: Insufficient history (fewer than 120 shared days), Uncorrelated (r below 0.25) or Inverse (r below 0). Funds are not measured.
Event sensitivity
#event-sensitivitymacro release days · 3 years
Event sensitivity measures how much a stock has moved on past macro release days against its own average day. The inputs are the licensed vendor's daily price history for the last three years and the release dates on the macro calendar: FOMC, CPI, PPI, the jobs report, GDP, PCE and corporate profits (see sources). A release counts on its New York calendar date.
- |move|
- The average absolute daily % change on release days of one kind.
- Avg day
- The average absolute daily % change over every day in the same three years, release days included. One per company.
- ×base
- |move| divided by the avg day. FOMC ×1.18 means the stock's average FOMC-day move is 1.18 times its average day. Each company is measured against its own avg day, so equal multiples on two companies are equal sensitivities, not equal moves.
- up · n
- Release days the stock closed up, out of the release days measured.
- Sample
- A release kind is shown only with at least six release days in the company's price history, and nothing is computed from fewer than 60 daily bars. Figures are recomputed once they are more than 30 days old. The earnings page leads with the kind with the highest multiple.
- Compare
- The companies are joined on the release kind and ordered by the strongest multiple on either side. A dash means too few releases of that kind in that company's price history.
Dates and staleness
#dateshow current any of this is
Every relationship shows the date of the filing that disclosed it. That date is the honest answer to “how current is this?”: annual reports are annual, so a relationship disclosed in a 10-K reflects the company's position as of that filing, not as of today. Varamir does not re-verify edges independently between filings, and does not claim to.
Fund holdings lag further. Regulatory portfolio reports are quarterly and are published roughly sixty days after the period they describe, so the holdings shown are the most recent ones a fund has publicly reported, not what it holds today. Every holdings figure is labelled with its report period for that reason.
Earnings dates carry their own distinction: a date a company announced itself is marked confirmed, and any other date is marked est. An estimated date is projected from the company's SEC filing history (the same quarter's report a year earlier, plus 364 days) where that history supports one, and is otherwise a market-data provider's statistical estimate. Confirmed and estimated dates are never presented alike, and where they disagree the company's own announcement wins.
Notes and Implied vs realized
#noteshow a thesis is scored
- Notes
- Private to your account, shown only to you, and never read by a language model. A note is a thesis, a decision or an observation; only a thesis carries a side, bull or bear.
- Scoring
- A thesis is scored at the company's first earnings report after the note was written, timed by EDGAR's acceptance of the filing, by the sign of the close-to-close move on the report's reaction session (the first session after an after-close release, the report day's session otherwise). Hit when the move goes the way the side said; Miss otherwise, including a session that closed flat. Once that report is filed the note is locked, and the score reads Varamir's stored close, so it is never re-priced. A report with no stored reaction close reads n/a.
- Implied vs realized
- The line is Varamir's stored daily closes. The shaded range is the implied move priced before each of the last two reports, centred on the last close before the reaction session, and never re-priced. A thesis sits on the line where it was written. Because scoring is by sign, a move that stays inside the range can still be a Miss.
Limits
#limitswhat this does not cover
- The relationship vocabulary is deliberately narrow: customer and supplier relationships disclosed in filings, plus fund holdings. There are no competitor, partner, subsidiary or joint-venture edges.
- A relationship only exists here if a company disclosed it in writing. Filings disclose what regulation and materiality require, so absence of an edge is not evidence that no commercial relationship exists.
- Counterparties that are private companies, foreign issuers without a US listing, or anonymised in the filing have no Varamir page to link to.
Reading Varamir without an account
#visitorswhat a visitor gets
Quote pages and Earnings pages are public. A visitor with no account can read 5 ticker pages, or browse for 5 minutes, whichever comes first, with 2 of those pages being Earnings pages; after that Varamir asks you to sign in. Nothing on a page is hidden or truncated while you are within that allowance: it is a limit on how many companies a stranger can read, not a partial view of any one of them. Search-engine and AI crawlers are exempt from it entirely.
A free account raises that to 50 ticker views a month, not counting the up to 5 symbols on your watchlist. Full terms are on the pricing page.
Corrections
#correctionsif something here is wrong
Entity resolution and extraction both make mistakes, and a wrong edge on a public page is worth fixing quickly. The process for issuers, funds and readers is on the corrections page. Where each field comes from is listed on sources.