Free Stock Data: Quotes, History & APIs
Find free quotes, history, fundamentals, and exports, then verify coverage, delay, and licensing.

Which free stock data do you actually need?
Start with the decision or product you are building. A watchlist needs current quotes; a backtest needs adjusted history; a screener needs fundamentals; an agent workflow needs stable schemas and source metadata.
The phrase free stock data covers several products that behave very differently. A quote endpoint may return only the latest traded price, while an end-of-day dataset can provide years of bars but no intraday updates. Fundamental feeds often follow company reporting cycles, and regulatory filings may arrive as documents rather than tidy rows. Define the market, asset class, frequency, history depth, and acceptable delay before comparing providers.
For research, price fields alone are rarely enough. You may also need trading calendars, symbol changes, delistings, currency, exchange identifiers, and corporate actions. These reference fields prevent survivorship bias and make it possible to join prices with fundamentals correctly. A smaller dataset with explicit lineage and consistent identifiers is often more useful than a larger feed whose origin and adjustment rules are unclear.
Last price, change, bid/ask, session status, and timestamp. Confirm whether values are real-time, delayed, indicative, or end-of-day.
Open, high, low, close, and volume by interval. For return calculations, verify splits, dividends, and adjusted-close methodology.
Income statements, balance sheets, cash flow, ratios, and company facts. Check reporting periods, currencies, and restatements.
Ticker mappings, exchanges, time zones, data lineage, and provider identity make downstream results easier to explain and audit.
Quick Summary
Free tiers commonly expose delayed quotes, daily OHLCV history, company profiles, and selected fundamentals.
Check exchange coverage, timestamps, adjustment rules, request limits, redistribution rights, and commercial-use terms.
CSV is convenient for spreadsheets and research; JSON APIs are better for apps, agents, and repeatable pipelines.
Free does not always mean real-time or unrestricted. Never assume demo data is suitable for live trading decisions.
Understand stock data fields before comparing values
“Stock price” may mean the last eligible trade, the midpoint of the best bid and ask, an official auction close, a delayed consolidated value, or a vendor-calculated snapshot. Those values can all be valid and still disagree. Store the event type, venue or consolidated-feed indicator, market session, currency, timestamp, and delay status together with the number. A bare price without this context is unsafe for alerts, charts, valuation inputs, or execution decisions.
| Record | Meaning | Required context | Common mistake |
|---|---|---|---|
| Trade | An executed transaction with price and size. | Venue, conditions, event time, sequence, and correction status. | Treating one odd-lot or late report as the current market. |
| Quote | Displayed bid and ask prices and sizes. | Bid/ask venue, size, timestamp, and whether it is consolidated. | Calling the midpoint an executable trade price. |
| OHLCV bar | Aggregated open, high, low, close, and volume for an interval. | Interval, session, time-zone rule, eligible events, and adjustments. | Combining bars built from different sessions or trade conditions. |
| Snapshot | A provider’s packaged view of current or latest fields. | Field-level timestamps, delay, source, and session state. | Assuming all fields in the response share one timestamp. |
Use durable identifiers alongside tickers
Tickers can change, be reused, vary by exchange, and represent different share classes. A reliable security master stores the provider symbol, exchange or MIC, currency, instrument type, company identity, and effective date range. Where available, retain CIK, FIGI, ISIN, or another stable identifier. For historical joins, resolve the identifier that was valid on the observation date; joining every old row to today’s ticker table creates survivorship and identity errors.
How free stock data sources compare
No single source is best for every workflow. Exchanges and regulators are closest to primary records, but their files may require more cleaning. Market-data APIs make common fields easier to query, although free plans usually trade convenience for lower request limits, delayed prices, shorter history, or narrower exchange coverage. Broker feeds can be useful for personal execution workflows, while downloadable files are efficient for reproducible analysis.
| Source | What it offers | Best for | Watch for |
|---|---|---|---|
| Exchange or regulator | Authoritative listings, notices, and filings. | Verification and primary-source research. | May be fragmented or not API-friendly. |
| Free market-data API | Normalized quotes, history, and fundamentals. | Apps, agents, prototypes, and repeatable research. | Rate limits, delays, and license restrictions. |
| Broker data | Account-linked quotes and trading context. | Personal portfolio and execution workflows. | Access may require an eligible account. |
| CSV or bulk dataset | Portable files for analysis and archival. | Spreadsheets, notebooks, and backtests. | Often less current than a live API. |
Compare sources with the same small test set rather than relying on feature lists. Request a liquid stock, a thinly traded security, a symbol that changed, and a date containing a split or dividend. Compare timestamps, missing records, precision, adjustment behavior, and error messages. This test quickly reveals whether two providers use different sessions or definitions even when their column names look identical.
Match each source to its proper role
A convenient provider and a primary source solve different problems. Alpha Vantage offers a free API key and currently states that most free datasets allow up to 25 requests per day; it also states that U.S. real-time and 15-minute delayed market data are premium-only. Financial Modeling Prep requires an API key and documents normalized quote, history, company, statement, symbol-change, and corporate-action endpoints. Massive (formerly Polygon.io) documents U.S. stock data sourced from exchanges, securities information processors, FINRA facilities, and OTC markets, with actual feed access controlled by the user’s plan and entitlement. These services simplify application access, but free-tier scope and licensing must be checked at integration time.
SEC EDGAR is a primary source for U.S. company filings and structured XBRL facts, not a stock-price feed. Its public data APIs require no authentication key, update throughout the day, and include nightly bulk archives. Combining a market-data source for prices with EDGAR for filings is often more defensible than treating one aggregator as the authority for both. For a critical value, retain the provider, endpoint, retrieval time, and any upstream source attribution so a reviewer can trace it.
Build historical stock datasets without silent bias
A clean chart is easier to build than a defensible backtest. Historical research needs the securities that existed at each date, not only companies that survive today. It also needs delistings, symbol changes, listing dates, trading calendars, corporate actions, and point-in-time fundamentals. Otherwise the dataset can exclude failed companies, use revised information too early, or join prices to the wrong issuer.
Raw OHLC reflects observed session prices; adjusted series may restate history for splits and dividends. Store both, plus factors, events, method, and retrieval date.
Track listing, delisting, exchange, symbol, share class, and index-membership effective dates so historical screens only use eligible securities.
Market events, company disclosures, provider delivery, and your own database load occur at different times. Preserve each timestamp to prevent look-ahead.
Record calendar filters, currency conversion, adjustment logic, deduplication, outlier rules, code commit, and upstream dataset version.
In a QVeris workflow, start with the required dataset and decision: a delayed quote for a watchlist, adjusted history for research, company facts for valuation, or corporate actions for reconciliation. Discover a matching capability, inspect its provider, schema, delay, limits, and provenance, then call it with explicit identifiers and dates. Store the raw response beside the normalized table. QVeris can assist with capability discovery and routing, but it does not grant market-data entitlements or replace validation of accuracy, timeliness, and license terms.
A practical API and CSV workflow
A reliable workflow separates discovery from production use. First inspect the provider documentation and a sample response. Then make a small request, save the raw payload, and transform it into your own stable schema. Add validation before the data enters a chart, model, spreadsheet, or agent. This makes it easier to replace a source later without rewriting the rest of the product.
Start with a ticker and the required dataset: quote, history, fundamentals, corporate actions, or filings. Avoid choosing a provider before you define the need.
Review schema, exchange coverage, delay, sample response, request cost, limits, source lineage, and commercial-use rules.
Send the symbol, interval, start and end dates, adjustment mode, and output format. Store the provider timestamp with every result.
Check missing sessions, duplicates, time zones, split adjustments, null values, and unexpected schema changes before analysis.
For API access, cache responses that do not need second-by-second freshness, apply exponential backoff to temporary failures, and log the request time, parameters, status code, and provider timestamp. For CSV, preserve the original file separately from the cleaned table and record its download date, delimiter, encoding, and time zone. Both approaches need a repeatable update policy so old and new observations are not silently mixed.
Request and validate a daily time series
The example below requests daily IBM data from Alpha Vantage with a user-supplied key. It validates the response before trusting the time-series object because quota messages and API errors may also arrive as JSON. The example is for research ingestion, not a claim that the free response is real-time.
import os
import requests
params = {
"function": "TIME_SERIES_DAILY",
"symbol": "IBM",
"outputsize": "compact",
"apikey": os.environ["ALPHA_VANTAGE_API_KEY"],
}
response = requests.get(
"https://www.alphavantage.co/query",
params=params,
timeout=20,
)
response.raise_for_status()
payload = response.json()
series = payload.get("Time Series (Daily)")
if not isinstance(series, dict):
raise RuntimeError(payload.get("Note") or payload.get("Error Message") or payload)
rows = [
{"date": date, **values, "provider": "Alpha Vantage"}
for date, values in series.items()
]Before loading the rows, convert numeric strings deliberately, preserve the provider’s raw field names in the archive, sort by date, and test for duplicates and gaps against the relevant trading calendar. Do not interpret a missing calendar date as missing data until holidays and market closures are considered. If you later switch to adjusted data, keep raw and adjusted series separate and record the adjustment method.
Free stock data quality checklist
A useful source makes coverage, freshness, provider identity, request limits, pricing, and licensing visible before you depend on it.
Data quality is not only about whether a number looks plausible. Confirm that every observation refers to the intended venue, session, currency, and time zone. Check whether timestamps represent trade time, bar close, or provider delivery time. When building indicators or backtests, document how missing sessions, zero volume, duplicate rows, outliers, splits, dividends, and restated fundamentals are handled.
- Confirm the market, exchange, asset class, interval, and historical depth.
- Record whether prices are raw or adjusted and how corporate actions are handled.
- Preserve source, timestamp, currency, time zone, and request parameters with every result.
Finally, read the license as carefully as the schema. Free access may permit personal analysis but restrict public display, redistribution, automated extraction, model training, or commercial products. Keep a link or copy of the applicable terms with the project and review them when the provider changes plans. If the data supports trading, compliance, or customer-facing decisions, validate critical values against an authoritative source.
Inspect a concrete source in the Financial Modeling Prep provider details, then use the QVeris REST API reference for integration.
FAQ
Start with exchanges and regulators for primary records, then compare free API or broker tiers for normalized quotes, history, and fundamentals.
Sometimes, but often it is delayed or limited to specific venues. Always read the timestamp, entitlement, and exchange-coverage notes.
Many providers support CSV export. Verify the interval, time zone, missing sessions, and whether close prices are adjusted.
It depends on the license. API access does not automatically grant display, redistribution, derived-data, or commercial rights.
JSON is usually easier for applications that request data repeatedly and need structured metadata. CSV is simpler for spreadsheets, bulk downloads, notebooks, and portable archives. Choose based on the workflow, then normalize field names, date formats, numeric types, and null-value rules before combining files or providers.
Test several symbols and dates against an exchange, regulator, issuer filing, or another independent source. Check timestamps, decimal precision, corporate actions, missing sessions, and update frequency. Accuracy should be monitored continuously because provider coverage and schemas can change.
