Find a Free EOD Stock Data API
for Daily OHLCV
Evaluate free end-of-day stock APIs by market coverage, close-price definition, finalization time, corporate-action treatment, history depth, rate limits, and export format before you build.
Quick answer: what “free EOD stock data API” means
An EOD stock data API returns one daily observation for each completed trading session, usually as open, high, low, close, and volume (OHLCV). It is designed for nightly portfolio valuation, daily-factor research, screeners, reports, and backtests—not for intraday execution. A useful free tier must explain which exchanges and security types it covers, what its “close” represents, when a bar becomes final, and how splits, dividends, symbol changes, and late corrections affect history.
Do not assume that the first number published after the bell is an immutable official close. Depending on the market and provider, the value may be the last eligible trade, a closing-auction price, a consolidated close, or a vendor-calculated reference price. Futures and some other instruments may use a settlement price instead. For a production workflow, this definition matters more than whether the endpoint responds in 100 or 500 milliseconds.
Backtests, screeners, research notebooks, portfolio reports, and dashboards that do not require live ticks.
A bar may appear soon after the close but remain provisional until auctions, late reports, and corrections are processed.
Expect caps on requests, history, exchanges, symbols, bulk downloads, redistribution, or commercial use.
What a daily stock data response should include
| Field | What it tells you | What to verify |
|---|---|---|
| OHLC | Prices formed during the regular session or another documented session window. | Whether extended-hours trades are included and whether “close” means last trade, auction close, official close, or settlement. |
| Session identity | Trading date, exchange, timezone, currency, and session status. | Early closes, holidays, cross-listed securities, and date boundaries that differ from UTC. |
| Volume | Reported shares or contracts traded during the defined session. | Units, venue aggregation, odd lots, auction volume, and post-close corrections. |
| Raw and adjusted values | Unadjusted market observations plus a series normalized for splits and, sometimes, dividends. | Adjustment scope, factor effective date, dividend convention, and whether all OHLC fields or only close are adjusted. |
| Publication status | Whether the bar is provisional, corrected, or final, with source and update timestamps. | The provider’s correction window, restatement policy, and whether prior versions remain retrievable. |
| Security identity | Ticker, permanent identifier, listing venue, asset type, and active date range. | Delistings, ticker reuse, mergers, share-class changes, and point-in-time symbol mapping. |
Free EOD stock data API options worth testing
There is no single free endpoint that is best for every daily-data job. A small watchlist may fit a per-symbol API, while a global screener needs efficient multi-symbol access and a backtest needs more history than a recent compact response. The table below describes practical starting points using current official documentation; free-plan boundaries can change, so verify them again before deployment.
| Provider | Useful free starting point | Important boundary | Best first test |
|---|---|---|---|
| Alpha Vantage | The documented TIME_SERIES_DAILY endpoint returns raw daily OHLCV for global equities with JSON or CSV output and a free API-key path. | The free compact response is limited to the latest 100 data points; full 20+ year output and the Daily Adjusted function are documented as premium capabilities. | A small watchlist or nightly report that needs raw recent bars, not a full-universe historical backfill. |
| Twelve Data | Its individual pricing page lists EOD global equities and ETFs on the free tier, while the time-series API returns chronological OHLC and volume where applicable. | Credits are charged by symbol even when symbols are batched, and quotas reset by the documented credit window. Coverage, history, exchange access, and redistribution still depend on the plan. | A multi-asset or international prototype. Measure the credits required to update the entire universe once per session. |
| Marketstack | The official FAQ states that the free plan supports end-of-day data with up to 1,000 API requests per month and up to 12 months of history. | A 12-month window is not enough for long-horizon factor research, and a monthly request allowance can be exhausted quickly by one-request-per-symbol ingestion. | A recent-history dashboard or proof of concept with a deliberately small symbol list. |
Do not compare only the advertised history. Request the same split date, dividend date, early close, delisted symbol, and cross-listed security from every candidate. If the API cannot return the same security identity and explain why a bar changed, a larger headline symbol count will not make the dataset reliable.
A 30-minute acceptance sample
Start with ten securities rather than a random hundred: two liquid U.S. stocks, one ETF, one ADR or foreign listing, one low-volume small cap, one symbol that changed, one delisted security if supported, one recent split, one cash-dividend ex-date, and one early-close session. For each candidate, record returned sessions, timezone, currency, raw versus adjusted values, missing fields, response time, requests consumed, and whether a second fetch changes the latest bars. This small evidence set reveals more than a successful request for a single current mega-cap.
How to evaluate a free EOD stock data API
Check exchange timezone, early closes, auctions, late trades, and the provider’s publication window. Fetching at 16:01 local time may return a preliminary bar that is corrected later.
Require unadjusted OHLCV plus split and dividend events or clearly documented adjustment factors. Do not mix adjusted close with unadjusted open, high, and low in one return calculation.
Run after each market’s expected completion window, skip holidays and unscheduled closures, and treat a missing session differently from a legitimate zero-volume security.
Re-fetch a short trailing window, compare hashes, version changed bars, and record why a value moved. A daily pipeline needs controlled revision handling more than high request speed.
Sample an early close, a holiday boundary, a split ex-date, a special dividend, a trading halt, a late correction, and a delisted symbol. These cases reveal calendar, adjustment, and identity defects that a clean mega-cap week will hide.
Convert free-tier limits into the time and requests needed to load your universe, then check caching, derived-data, redistribution, and commercial-use terms. A no-cost endpoint can still be unusable for a production product.
Split and dividend example: if a stock closes at $100 before a 2-for-1 split and opens near $50 on the ex-date, the raw price series shows an apparent 50% fall even though one old share became two new shares. A split-adjusted history divides pre-split prices by two and multiplies pre-split share volume by two; applying the price factor to volume in the same direction would corrupt turnover. Dividends require a different return convention. If the stock closes at $50.00 before a $1.00 cash dividend and closes at $49.50 on the ex-date, the price return is $49.50 ÷ $50.00 - 1 = -1.0%, while the distribution-inclusive return is ($49.50 + $1.00) ÷ $50.00 - 1 = 1.0% before tax and reinvestment timing. Keep the raw bars, corporate-action records, adjustment factors, and return convention so users can reproduce either series.
A reliable EOD ingestion workflow
- Build the expected session list from the exchange calendar, including early closes, holidays, and unscheduled closures; do not infer sessions from returned rows alone.
- Wait for the provider’s documented publication window rather than scheduling from the nominal closing bell. Fetch the raw bar, adjustment inputs, and status metadata together.
- Validate OHLC relationships, non-negative volume, currency, session date, symbol identity, and completeness against the expected universe. Quarantine exceptions instead of silently forward-filling them.
- Store the raw response immutably, mark the first version provisional, and re-fetch a short correction window. Keep both old and new values when the source revises a bar.
- Apply split and dividend adjustments in a separately versioned layer so research can reproduce either the market-observed series or a chosen total-return convention.
- Publish a daily quality manifest with missing symbols, stale bars, source timestamps, adjustment version, and finalization state before downstream reports or backtests run.
Use QVeris to discover stock data capabilities
QVeris helps agents discover and inspect callable financial-data capabilities without hardcoding a single provider first. For an EOD workflow, inspect required symbol and date inputs, exchange coverage, raw-versus-adjusted fields, returned timestamps, and error behavior before calling a tool. Keep your own validation, source version, and license controls around the result: capability discovery does not make unlike provider definitions interchangeable.
FAQ
Availability depends on the exchange and provider. A bar may appear minutes after the close but remain provisional until auctions, late trades, and corrections are processed. Schedule from the documented publication window and re-check recent sessions.
Not necessarily. The close may come from a closing auction or an official exchange calculation, while the last reported trade may be late, off-exchange, or otherwise ineligible. Confirm the endpoint’s price definition.
Keep raw observations and corporate actions as the source of truth, then create a separately versioned adjusted series. This avoids mixing adjusted and unadjusted fields and lets you reproduce the chosen split or dividend convention.
It can support daily-frequency research when history, delisted securities, point-in-time symbol mapping, corporate actions, missing sessions, and licensing are adequate. A current-symbol-only dataset creates survivorship bias.
Store immutable raw versions, re-fetch a trailing window, compare changed fields, and record source and ingestion timestamps. Promote provisional bars only after your defined correction window.
