Methodology and data practices
Last updated 2026-08-26
This page describes how the numbers on this site are produced, who produces them, and where they stop. It is written to be checked, so it names cadences, counts and limits rather than adjectives.
What FullStockData is
FullStockData is a descriptive equity analysis product. Every page is built from one market data snapshot that we assemble, normalise and refresh ourselves, and from measurements computed directly on that snapshot. Nothing on a ticker page is sourced from a general web crawl or from a model's memory of the company.
A ticker page reads the same way for every company, because it is assembled the same way for every company. It carries the price chart and the technical picture, volume and accumulation, fundamentals and valuation, market context and correlations, catalysts and evidenced risks, a bull case and a bear case argued from the same figures, and a summary of what is being said about the company in public posts. Each block states what the numbers are and what they mean together.
The covered universe is browsable in full at Browse stocks. Free pages show a reduced version of the same structure; paid access opens the written sections and the computed signals.
The data pipeline and refresh cadence
The snapshot is rebuilt on a fixed schedule, Monday through Saturday, at 03:30 UTC, which is early morning in central Europe. Each run publishes the previous trading day's close, so a Saturday run carries Friday's close.
Sunday is skipped on purpose rather than by omission: every venue we cover trades Monday to Friday, so a Sunday run would only republish Friday's bars. The Monday run is kept even though the bar dates alone would not justify it, because weekly upstream processing lands over the weekend and Monday is what pulls it through.
Coverage is about 22,000 companies across 23 listing venues in the Americas, Europe and Asia-Pacific. Each company carries up to 90 values grouped into 6 bundles, and every one of those values is defined, field by field, in the data dictionary.
Every page that shows snapshot data carries a visible date. The browse and calendar pages stamp the date the snapshot was built. A ticker page stamps the date of the last close it is showing and says that it is an end-of-day snapshot. When a refresh run fails, the stamp goes stale in public rather than being quietly hidden, and the failure is alerted to the operator so it can be re-run.
How the signals are computed
The signals on a ticker page are computed, not written. They are arithmetic over that company's own measured price and volume history, implemented as fixed rules in our own code, and they run before any language model is involved. The same inputs always produce the same signals.
The method is a banded study of what happened next. The range of prices the stock has actually traded in is cut into bands. For each band we count how many sessions really closed inside it, then measure the median move over the following one month and three months. A signal is raised only where a magnitude condition and a hit-rate condition both hold, and only where the band has enough observations behind it, because either condition alone is satisfiable by a single lucky outlier.
The thresholds themselves are ours and we do not publish them. The evidence is published: every signal is printed with the counts and the median moves that produced it, so a reader can check the claim against the figures rather than trust it.
Two properties are deliberate and are not going to change quietly.
- Nothing is inferred. A signal the rules did not measure cannot appear on the page, and the written sections may only restate what the rules produced.
- Disagreement is not resolved. When one rule fires on the buy side and another on the sell side, both are shown. There is no combined score, no net verdict and no overall rating, because that single number would be the recommendation this design exists to avoid.
A signal is a statement about a measured past window, in the form of how often something happened and what typically followed. It is not a forecast, and the page says so where it renders.
How the written analysis is generated
The written sections are generated per company by a language model, as several focused calls rather than one call producing the whole page. Each block on the page is labelled as an automated read where it appears.
The model is handed a data block and works from it alone: that company's snapshot values, its price history, the computed signals and the study behind them. Copying the figures from that block is required. Inventing a figure is forbidden, as is drawing on any outside knowledge of the company. Where a section argues a case, both a bull case and a bear case are structurally required, because a read carrying only one side is an implied recommendation whatever its wording.
One section is different and the page says so. The sentiment section summarises public posts about the company from the last 90 days, so it reports what other people said rather than what the snapshot measured. Voices are quoted with their public handle and a link to the post. If that search does not actually run, the section is dropped rather than written from memory.
Analyses are regenerated, not archived and forgotten. When a page is opened and the snapshot behind it is newer than the stored analysis, or the stored analysis has aged past its refresh floor, the saved version is shown immediately and a fresh one is generated in the background. A page whose underlying data has not moved is not rewritten, so the text you read is tied to a specific state of the data rather than to the hour you happened to visit.
What we deliberately do not do
The list below is policy enforced in code, not a tone of voice. Each item is a rule the generation pipeline carries and the output is checked against before it is stored.
- No recommendations. No page tells a reader to buy, sell or hold a security, and nothing on the site is tailored to any reader's circumstances, holdings or objectives.
- No price targets and no probabilities. We do not state where a price is going, and we do not attach a likelihood to an outcome.
- No ratings and no scores. There is no grade, star count or composite number that ranks one company against another, and no such field exists in the payload a page renders from.
- No valuation verdicts. A section may report what a multiple is and how it sits against the company's own history. It may not declare the result undervalued or overvalued.
- No instructional language. Words that direct a reader, should and must among them, are excluded from generated text by rule, and the text is scrubbed again on the way to the page.
What is left is description: what the numbers are, how they compare with that company's own record, and which observable conditions would confirm or undercut the current picture. Everything on the site is information rather than investment advice, and using it creates no advisory or fiduciary relationship. The binding statement is in our Terms of Sale.
Data sources and known limitations
Prices, corporate data and fundamentals are drawn from established market data infrastructure and normalised into a single schema by pipelines we build and operate. We do not name our upstream providers, and we do not present anyone else's product as our own work. What we claim authorship of is the normalisation, the derived measures and the analysis layer on top.
The limits below are the ones that actually affect what you see on a page.
- Values are end-of-day closes. The site carries no live quotes and no intraday prices, and the date stamp on each page tells you which close you are looking at.
- Coverage is uneven by design of the world, not by choice. Identifiers, company profile, performance and most technical and volume measures are populated across the whole universe. Fundamentals depend on what each company files, so they vary by market and by measure: company size, trailing revenue and trailing earnings have the broadest coverage, while valuation ratios are thinner and sit mainly with larger companies in the United States and Europe. The per-field coverage figures are published in the data dictionary.
- Long moving averages need a long history. A recently listed company carries none of them, and its technical picture is correspondingly thinner.
- A value we do not have is left empty. We do not impute, interpolate, carry forward or estimate a missing figure, so an empty cell means absence rather than zero.
- Venue labels are names, not codes. A listing venue reads as NYSE, London or Tokyo. It is a human-readable label for where a company trades, and it is not a machine identifier for the exchange.
- Mainland China, Hong Kong and India are outside the covered universe. So is anything not listed on one of the covered venues.
Who runs FullStockData
The site is operated by fullstockdata.com. Responsibility for the content published here sits with the operator of fullstockdata.com, reachable at the support address below. Provider identification is published in full on the Imprint page.
The operator sets and maintains the parts that decide what a page says: the signal rules, the prompts behind the written sections and the compliance constraints on both. The written sections are machine-generated against those rules and are labelled as automated reads on the page rather than attributed to a named author, because attributing them to a person would misdescribe how they are produced.
FullStockData is an independent data product. We do not take payment for coverage, we do not accept placement in any ranking, and no company can influence what its own page says.
Reporting a data error
If a figure looks wrong, tell us and we will check it against the snapshot. Email the support address in the footer of every page, and include four things: the ticker symbol, the page you were on, which value looks wrong, and the date stamp shown on that page. The date stamp is what lets us reproduce exactly what you saw.
Two outcomes are usual. Where the snapshot itself is wrong, the correction arrives with the next refresh, normally the following morning, and the written analysis regenerates against the corrected data the next time the page is opened. Where a value is empty rather than wrong, it is a coverage gap, and we will say so rather than fill it in.
General questions about method go to the same address, and a person answers them.