Next free-source hunt
We check for new free financial data every Wednesday.
Datasets / Market Data
eodhd.com/

EODHD (EOD Historical Data)

Freemiumauth: free API keyProvider terms#market-data#historical-data✓ verified Oct 27, 2026

EODHD (EOD Historical Data)

REST API for end-of-day and intraday prices, fundamentals, news, and macro data across global markets.

Coverage

60+ exchanges and 150,000+ tickers worldwide (stocks, ETFs, funds, indices, forex, crypto, bonds); 30+ years of end-of-day history, fundamentals from 1985 for major US companies (2000 for non-US), US 1-minute intraday from 2004, macro data from 1960. Free plan: 1 year of end-of-day history, 20 calls/day.

Verdict

Light EOD experiments only (20 calls/day, 1 year history); no free fundamentals or intraday.

Get the free weekly email

Free weekly email of newly verified free data. Unsubscribe by emailing us.

Use in your agent

Load EODHD daily prices into pandas and Parquet for private analysis. Checked against the provider's documentation on Oct 29, 2026.

Raw skill file (/skills/eod-historical.md)Also in our MCP server: call get_ingestion_skill with {"slug": "eod-historical"}.

Access

  • A free personal API token is required. Put it in EODHD_API_KEY.
  • Free personal data is limited to private, non-commercial use.

Request

bash
curl 'https://eodhd.com/api/eod/AAPL.US?from=2025-10-29&fmt=json&api_token='$EODHD_API_KEY

Format

JSON array with date, open, high, low, close, adjusted_close and volume.

Load into pandas and Parquet

Needs Python 3 with requests, pandas and pyarrow.

python
"""EODHD daily AAPL prices -> pandas -> Parquet. Private, non-commercial use."""
import os
import requests
import pandas as pd

params = {"from": "2025-10-29", "fmt": "json", "api_token": os.environ["EODHD_API_KEY"]}
r = requests.get("https://eodhd.com/api/eod/AAPL.US", params=params, timeout=30)
r.raise_for_status()
df = pd.DataFrame(r.json())
df["date"] = pd.to_datetime(df["date"])
df.to_parquet("eodhd_aapl_daily.parquet", index=False)
print(len(df), "rows", df["date"].min().date(), "to", df["date"].max().date())

Needs a personal API key; not run.

Limits

  • Free: 20 API calls per day and one year of end-of-day history.
  • Published per-minute figures conflict across EODHD pages, so no numeric per-minute limit is stated here.

Quirks

  • Use the exchange-qualified symbol, such as AAPL.US.
  • The free plan does not include fundamentals or intraday data.
  • The API can also return CSV when fmt=csv.

Terms and attribution

  • Non-professional users may store, manipulate and analyze data only for private, non-commercial purposes.
  • Selling, retransmitting, redistributing or displaying data is prohibited on the personal license.

Sources

Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer