sickn33-antigravity-awesome-skills

alpha-vantage

Access 20+ years of global financial data: equities, options, forex, crypto, commodities, economic indicators, and 50+ technical indicators.
étoiles48451
forks7045
observateurs305
mise à jour2026-10-24 22:34:41

Alpha Vantage — Financial Market Data

Access 20+ years of global financial data: equities, options, forex, crypto, commodities, economic indicators, and 50+ technical indicators.

API Key Setup (Required)

  1. Get a free key at https://www.alphavantage.co/support/#api-key (premium plans available for higher rate limits)
  2. Set as environment variable:
read -rsp "Alpha Vantage API key: " ALPHAVANTAGE_API_KEY
echo
export ALPHAVANTAGE_API_KEY

Installation

uv pip install requests pandas

Base URL & Request Pattern

All requests go to:

https://www.alphavantage.co/query?function=FUNCTION_NAME&apikey=YOUR_KEY&...params
import requests
import os

API_KEY = os.environ.get("ALPHAVANTAGE_API_KEY")
BASE_URL = "https://www.alphavantage.co/query"

def av_get(function, **params):
    if not API_KEY:
        raise ValueError("Set ALPHAVANTAGE_API_KEY before requesting data")
    if "apikey" in params or "function" in params:
        raise ValueError("Reserved request parameters")
    try:
        response = requests.get(
            BASE_URL, params={**params, "function": function, "apikey": API_KEY},
            timeout=30,
        )
    except requests.RequestException:
        raise RuntimeError("Alpha Vantage transport failure; request URL redacted") from None
    # Avoid logging request URLs or raw HTTP exceptions: URLs contain the key.
    if not response.ok:
        raise RuntimeError(f"Alpha Vantage HTTP status {response.status_code}")
    try:
        data = response.json()
    except ValueError:
        raise RuntimeError("Alpha Vantage returned invalid JSON") from None
    if not isinstance(data, dict):
        raise RuntimeError("Alpha Vantage returned an unexpected response shape")
    if any(key in data for key in ("Error Message", "Note", "Information")):
        raise RuntimeError("API returned an error, quota, or entitlement message; inspect a redacted response")
    return data

Quick Start Examples

# Stock quote (latest price)
quote = av_get("GLOBAL_QUOTE", symbol="AAPL")
price = quote["Global Quote"]["05. price"]

# Daily OHLCV
daily = av_get("TIME_SERIES_DAILY", symbol="AAPL", outputsize="compact")
ts = daily["Time Series (Daily)"]

# Company fundamentals
overview = av_get("OVERVIEW", symbol="AAPL")
print(overview["MarketCapitalization"], overview["PERatio"])

# Income statement
income = av_get("INCOME_STATEMENT", symbol="AAPL")
annual = income["annualReports"][0]  # Most recent annual

# Crypto price
crypto = av_get("DIGITAL_CURRENCY_DAILY", symbol="BTC", market="USD")

# Economic indicator
gdp = av_get("REAL_GDP", interval="annual")

# Technical indicator
rsi = av_get("RSI", symbol="AAPL", interval="daily", time_period=14, series_type="close")

API Categories

CategoryKey Functions
Time Series (Stocks)GLOBAL_QUOTE, TIME_SERIES_INTRADAY, TIME_SERIES_DAILY, TIME_SERIES_WEEKLY, TIME_SERIES_MONTHLY
OptionsREALTIME_OPTIONS, HISTORICAL_OPTIONS
Alpha IntelligenceNEWS_SENTIMENT, EARNINGS_CALL_TRANSCRIPT, TOP_GAINERS_LOSERS, INSIDER_TRANSACTIONS, ANALYTICS_FIXED_WINDOW
FundamentalsOVERVIEW, ETF_PROFILE, INCOME_STATEMENT, BALANCE_SHEET, CASH_FLOW, EARNINGS, DIVIDENDS, SPLITS
Forex (FX)CURRENCY_EXCHANGE_RATE, FX_INTRADAY, FX_DAILY, FX_WEEKLY, FX_MONTHLY
CryptoCURRENCY_EXCHANGE_RATE, CRYPTO_INTRADAY, DIGITAL_CURRENCY_DAILY
CommoditiesWTI (crude oil), BRENT, NATURAL_GAS, COPPER, WHEAT, CORN, COFFEE, ALL_COMMODITIES
Economic IndicatorsREAL_GDP, TREASURY_YIELD, FEDERAL_FUNDS_RATE, CPI, INFLATION, UNEMPLOYMENT, NONFARM_PAYROLL
Technical IndicatorsSMA, EMA, MACD, RSI, BBANDS, STOCH, ADX, ATR, OBV, VWAP, and 40+ more

Common Parameters

ParameterValuesNotes
outputsizecompact / fullFor applicable time-series endpoints; depth and entitlement vary
datatypejson / csvDefault: json
interval1min, 5min, 15min, 30min, 60min, daily, weekly, monthlyDepends on endpoint
adjustedtrue / falseAdjust for splits/dividends

Rate Limits

  • Free tier: 25 requests/day (as of 2026)
  • Premium plans: higher limits, real-time data, intraday access
  • Quota or entitlement messages may arrive in JSON even with HTTP 200; check Note and Information as well as HTTP status.
  • A short delay cannot satisfy a daily quota. Cache results, track the account request budget, and stop when exhausted. Verify current limits and endpoint entitlements in official support and API documentation.

Error Handling

data = av_get("GLOBAL_QUOTE", symbol="AAPL")

# Check for API errors
if "Error Message" in data:
    raise ValueError(f"API Error: {data['Error Message']}")
if "Note" in data:
    print(f"Rate limit warning: {data['Note']}")
if "Information" in data:
    print(f"API info: {data['Information']}")

When to Use

Use this skill when tackling tasks related to its primary domain or functionality as described above.

Limitations

  • Quotes may be end-of-day or delayed depending on entitlement. Report timestamps and adjustment basis; market-data retrieval is not investment advice. API responses and empty reports need schema checks before indexing.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.