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

Alpha Vantage

Freemiumauth: free API keyProvider terms#market-data#technical-indicators✓ verified Oct 28, 2026

Alpha Vantage

REST API for stocks, forex, crypto, and technical indicators. Free tier limited to 25 requests per day.

Coverage

Global equities (daily, weekly and monthly series; weekly and monthly cover 25+ years), ETFs, mutual funds, indices, forex, crypto, commodities, fundamentals, economic indicators and technical indicators. Free key: 25 requests/day, and daily series return only the latest 100 data points (the full 25+ year daily history is premium); some endpoints are premium-only, including intraday stock series, adjusted daily series, forex/crypto intraday, realtime bulk quotes and index series.

Verdict

Suitable for lightweight backtesting and small projects. Rate-limited free tier requires premium for production use.

Get the free weekly email

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

Use in your agent

Load Alpha Vantage daily prices into pandas and Parquet for personal research. Checked against the provider's documentation on Oct 29, 2026.

Raw skill file (/skills/alpha-vantage.md)Also in our MCP server as get_ingestion_skill.

Access

  • A free API key is required. Put it in ALPHAVANTAGE_API_KEY.
  • The standard terms limit use to personal, non-commercial purposes unless Alpha Vantage agrees otherwise.

Request

bash
curl 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=IBM&outputsize=compact&apikey='$ALPHAVANTAGE_API_KEY

Format

JSON: metadata plus a Time Series (Daily) object keyed by date. OHLC and volume values are strings.

Load into pandas and Parquet

Needs Python 3 with requests, pandas and pyarrow.

python
"""Alpha Vantage daily prices -> pandas -> Parquet. Personal research; free API key."""
import os
import requests
import pandas as pd

params = {"function": "TIME_SERIES_DAILY", "symbol": "IBM", "outputsize": "compact",
          "apikey": os.environ["ALPHAVANTAGE_API_KEY"]}
r = requests.get("https://www.alphavantage.co/query", params=params, timeout=30)
r.raise_for_status()
body = r.json()
if "Time Series (Daily)" not in body:
    raise RuntimeError(body.get("Information") or body.get("Note") or body.get("Error Message") or "Unexpected response")
df = pd.DataFrame.from_dict(body["Time Series (Daily)"], orient="index").rename_axis("date").reset_index()
df["date"] = pd.to_datetime(df["date"])
for column in df.columns[1:]:
    df[column] = pd.to_numeric(df[column])
df.to_parquet("alpha_vantage_ibm_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 service limit: 25 requests per day.
  • The compact daily response contains the latest 100 data points; full daily history is premium.

Quirks

  • API errors can arrive as HTTP 200 JSON under Information, Note or Error Message; check those fields before parsing.
  • Column names contain numeric prefixes such as 1. open.
  • Adjusted daily data is a separate premium endpoint.

Terms and attribution

  • Standard access is for personal, non-commercial use. Commercial use requires a separate agreement.
  • Do not redistribute API data unless your agreement permits it.

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