Tiingo
Tiingo
REST API for stocks, ETFs, crypto, and financial news. Flat-rate pricing with no hidden usage charges.
Coverage
80,000+ tickers: US equities, ETFs, mutual funds and Chinese A-shares (NYSE, NASDAQ, NYSE Arca, NYSE American, Cboe, IEX, OTC, Shanghai, Shenzhen); end-of-day history back to 1962 where available, updated daily; plus IEX real-time, crypto, forex and news. Free Starter gets the same price history (pricing page: 30+ years) but only 500 unique symbols/month, 5 years of fundamentals history in the screener, 3 months of queryable news, internal use only.
Verdict
Building custom portfolio dashboards combining EOD prices, fundamental metrics, and real-time news sentiment.
Get the free weekly email
Free weekly email of newly verified free data. Unsubscribe by emailing us.
By entering your email and clicking Subscribe, you agree to receive the Signal Lab weekly email from Quantum Data Technologies Ltd., 3200-650 West Georgia Street, Vancouver, BC V6B 4P7, Canada (signal-lab@qdt.ai). You can unsubscribe at any time: reply "unsubscribe" to any email or write to signal-lab@qdt.ai. See our Privacy Policy.
Use in your agent
Analyze Tiingo end-of-day prices in memory on the Starter plan. Checked against the provider's documentation on Oct 29, 2026.
Access
- A Starter account and API token are required. Put the token in TIINGO_API_KEY.
- Starter data may be processed only in volatile memory or a temporary non-persistent cache.
Request
curl -H 'Authorization: Token '$TIINGO_API_KEY 'https://api.tiingo.com/tiingo/daily/AAPL/prices?startDate=2026-10-01&endDate=2026-10-29'Format
JSON array with date, OHLC, volume, adjusted OHLC and adjusted volume fields.
Load into pandas (in memory)
Needs Python 3 with requests and pandas. The provider's terms limit storage or leave it unclear, so this snippet does not write a file.
"""Tiingo Starter end-of-day prices -> pandas in memory. Do not persist Starter data."""
import os
import requests
import pandas as pd
headers = {"Authorization": f"Token {os.environ['TIINGO_API_KEY']}"}
params = {"startDate": "2026-10-01", "endDate": "2026-10-29"}
r = requests.get("https://api.tiingo.com/tiingo/daily/AAPL/prices",
headers=headers, params=params, timeout=30)
r.raise_for_status()
df = pd.DataFrame(r.json())
df["date"] = pd.to_datetime(df["date"], utc=True)
print(len(df), "rows", df["date"].min().date(), "to", df["date"].max().date())
del df # Starter terms require deletion before this process, job or session endsNeeds a personal API key; not run.
Limits
- Starter: 50 requests per hour, 1,000 requests per day, 500 unique symbols per month and 1 GB per month.
Quirks
- The snippet intentionally writes no file.
- Delete the response and derived results before the process, job or session ends.
- Dates are ISO timestamps; parse them as UTC.
Terms and attribution
- Starter and trial users may not retain Tiingo data or derived products in persistent or durable storage.
- API data is for internal consumption; organizational use requires a commercial plan.
- Redistribution requires permission and additional fees.
Sources
- https://app.tiingo.com/tos/: “you may not write, save, archive, back up, or otherwise retain Tiingo Data in any persistent or durable storage”
- https://app.tiingo.com/tos/: “only transiently in volatile memory or in a temporary, non-persistent cache”
- https://app.tiingo.com/tos/: “All data via the API is for internal consumption only”
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