Finnhub
Finnhub
REST and WebSocket API for stock prices, company fundamentals, estimates, news, and alternative data. Free tier with 60 API calls per minute.
Coverage
US and international stocks, forex (10+ brokers) and crypto (15+ exchanges); financial statements (30+ years), estimates, earnings, news, ETFs, indices, mutual funds, bonds, economic data and alternative data including congressional trading and social sentiment. Free plan: no historical price candles (premium-only), US-only fundamentals and estimates, 1 year of company news, last 4 quarters of EPS surprises, 1 month of earnings calendar, 50 WebSocket symbols, personal use. Global coverage and long history need the $3,500/mo All-In-One plan.
Verdict
Strong free tier for personal dashboards and prototypes: real-time US quotes, 50 WebSocket symbols, 1 year of company news, US fundamentals/estimates. Free plan has no historical OHLC candles (premium). Not suitable as a free backtesting price feed.
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
Load Finnhub US company profiles into pandas and Parquet for personal use. Checked against the provider's documentation on Oct 29, 2026.
Access
- A free API token is required. Put it in FINNHUB_API_KEY.
- Listed plans are for personal use unless explicitly stated otherwise.
Request
curl 'https://finnhub.io/api/v1/stock/profile2?symbol=AAPL&token='$FINNHUB_API_KEYFormat
JSON object with company profile fields including ticker, name, country, currency, exchange, ipo, marketCapitalization and shareOutstanding.
Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
"""Finnhub US company profiles -> pandas -> Parquet. Personal use."""
import os
import requests
import pandas as pd
rows = []
for symbol in ("AAPL", "MSFT"):
r = requests.get("https://finnhub.io/api/v1/stock/profile2",
params={"symbol": symbol, "token": os.environ["FINNHUB_API_KEY"]}, timeout=30)
r.raise_for_status()
rows.append(r.json())
df = pd.DataFrame(rows)
df["ipo"] = pd.to_datetime(df["ipo"], errors="coerce")
df.to_parquet("finnhub_company_profiles.parquet", index=False)
print(len(df), "companies;", ", ".join(df["ticker"]))Needs a personal API key; not run.
Limits
- Free: 60 API calls per minute.
Quirks
- Historical price candles are not included on the free plan.
- The free fundamentals and estimates coverage is US-only.
- Do not share data or derived results without written approval.
Terms and attribution
- Plans listed on Finnhub are strictly for personal use unless explicitly stated otherwise.
- A personal plan cannot be used by a business, even internally, without written approval.
- Redistribution or sharing data or derived results requires written approval.
Sources
- https://finnhub.io/terms-of-service: “All plan listed on Finnhub website is strictly for personal use unless explicitly stated otherwise.”
- https://finnhub.io/terms-of-service: “Personal plan can’t be used by any business even internally without a written approval.”
- https://finnhub.io/terms-of-service: “not redistribute or share access to data or derived results”
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