FinnHub financial data API integration for stocks, forex, crypto, news, and fundamentals. Use when fetching real-time quotes, company profiles, financial statements, insider trading, earnings calendars, or market news.
Scanned 9/4/2026
Install to Claude Code
npx -y skills add NeverSight/skills_feed --skill finnhub-api --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Finnhub Api?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/neversight-finnhub-api)More formats (shields.io, HTML) on the badges page.
---
name: finnhub-api
description: FinnHub financial data API integration for stocks, forex, crypto, news, and fundamentals. Use when fetching real-time quotes, company profiles, financial statements, insider trading, earnings calendars, or market news.
version: 1.0.0
---
# FinnHub API Integration
Complete integration with FinnHub's financial data API providing access to stocks, forex, crypto, company fundamentals, news, and real-time market data.
## Quick Start
### Authentication
```bash
# Environment variable (recommended)
export FINNHUB_API_KEY="your_api_key"
# Or in .env file
FINNHUB_API_KEY=your_api_key
```
### Basic Usage (Python)
```python
import requests
import os
API_KEY = os.getenv("FINNHUB_API_KEY")
BASE_URL = "https://finnhub.io/api/v1"
def get_quote(symbol: str) -> dict:
"""Get real-time quote for a symbol."""
response = requests.get(
f"{BASE_URL}/quote",
params={"symbol": symbol, "token": API_KEY}
)
return response.json()
# Example
quote = get_quote("AAPL")
print(f"AAPL: ${quote['c']:.2f} ({quote['dp']:+.2f}%)")
```
### Using Official SDK
```python
import finnhub
client = finnhub.Client(api_key="your_api_key")
# Get quote
quote = client.quote("AAPL")
# Get company profile
profile = client.company_profile2(symbol="AAPL")
# Get financials
financials = client.company_basic_financials("AAPL", "all")
```
## API Endpoints Reference
### Stock Market Data
| Endpoint | Description | Free |
|----------|-------------|------|
| `/quote` | Real-time quote | ✅ |
| `/stock/candle` | Historical OHLCV | ✅ |
| `/stock/profile2` | Company profile | ✅ |
| `/stock/peers` | Similar companies | ✅ |
| `/company-news` | Company news | ✅ |
| `/stock/metric` | Basic financials | ✅ |
| `/stock/financials` | Financial statements | ✅ |
| `/stock/insider-transactions` | Insider trades | ⚠️ Premium |
| `/stock/insider-sentiment` | Insider sentiment | ⚠️ Premium |
### Fundamental Data
| Endpoint | Description | Free |
|----------|-------------|------|
| `/stock/financials-reported` | SEC reported | ✅ |
| `/stock/earnings` | Earnings history | ✅ |
| `/stock/recommendation` | Analyst ratings | ✅ |
| `/stock/price-target` | Price targets | ✅ |
| `/stock/revenue-estimate` | Revenue estimates | ⚠️ Premium |
| `/stock/eps-estimate` | EPS estimates | ⚠️ Premium |
### Forex & Crypto
| Endpoint | Description | Free |
|----------|-------------|------|
| `/forex/rates` | Exchange rates | ✅ |
| `/forex/candle` | Forex OHLCV | ✅ |
| `/crypto/candle` | Crypto OHLCV | ✅ |
| `/crypto/exchanges` | Crypto exchanges | ✅ |
| `/crypto/symbol` | Crypto symbols | ✅ |
### News & Sentiment
| Endpoint | Description | Free |
|----------|-------------|------|
| `/company-news` | Company news | ✅ |
| `/news` | Market news | ✅ |
| `/press-releases` | Press releases | ⚠️ Premium |
| `/news-sentiment` | News sentiment | ⚠️ Premium |
### Calendar Events
| Endpoint | Description | Free |
|----------|-------------|------|
| `/calendar/earnings` | Earnings calendar | ✅ |
| `/calendar/ipo` | IPO calendar | ✅ |
| `/stock/dividends` | Dividend history | ✅ |
| `/stock/splits` | Stock splits | ✅ |
## Rate Limits
| Tier | Calls/Minute | Notes |
|------|--------------|-------|
| Free | 60 | US stocks, forex, crypto |
| Paid | 300+ | Per-market pricing |
**Rate limit headers:**
- `X-Ratelimit-Limit`: Max calls per minute
- `X-Ratelimit-Remaining`: Calls remaining
- `X-Ratelimit-Reset`: Reset timestamp
## Common Tasks
### Task: Get Stock Quote with Change
```python
def get_stock_info(symbol: str) -> dict:
"""Get comprehensive stock info."""
quote = requests.get(
f"{BASE_URL}/quote",
params={"symbol": symbol, "token": API_KEY}
).json()
profile = requests.get(
f"{BASE_URL}/stock/profile2",
params={"symbol": symbol, "token": API_KEY}
).json()
return {
"symbol": symbol,
"name": profile.get("name"),
"price": quote["c"],
"change": quote["d"],
"change_percent": quote["dp"],
"high": quote["h"],
"low": quote["l"],
"market_cap": profile.get("marketCapitalization"),
"industry": profile.get("finnhubIndustry")
}
```
### Task: Get Historical Candles
```python
import time
def get_candles(symbol: str, resolution: str = "D", days: int = 30) -> dict:
"""
Get historical OHLCV data.
Resolutions: 1, 5, 15, 30, 60, D, W, M
"""
end = int(time.time())
start = end - (days * 24 * 60 * 60)
response = requests.get(
f"{BASE_URL}/stock/candle",
params={
"symbol": symbol,
"resolution": resolution,
"from": start,
"to": end,
"token": API_KEY
}
)
return response.json()
```
### Task: Get Earnings Calendar
```python
def get_earnings_calendar(from_date: str, to_date: str) -> list:
"""Get upcoming earnings releases."""
response = requests.get(
f"{BASE_URL}/calendar/earnings",
params={
"from": from_date,
"to": to_date,
"token": API_KEY
}
)
return response.json().get("earningsCalendar", [])
# Example: Get next week's earnings
earnings = get_earnings_calendar("2025-12-05", "2025-12-12")
```
### Task: Get Company News
```python
def get_company_news(symbol: str, days: int = 7) -> list:
"""Get recent company news."""
from datetime import datetime, timedelta
end = datetime.now()
start = end - timedelta(days=days)
response = requests.get(
f"{BASE_URL}/company-news",
params={
"symbol": symbol,
"from": start.strftime("%Y-%m-%d"),
"to": end.strftime("%Y-%m-%d"),
"token": API_KEY
}
)
return response.json()
```
### Task: Get Financial Metrics
```python
def get_financials(symbol: str) -> dict:
"""Get key financial metrics."""
response = requests.get(
f"{BASE_URL}/stock/metric",
params={
"symbol": symbol,
"metric": "all",
"token": API_KEY
}
)
data = response.json()
metrics = data.get("metric", {})
return {
"pe_ratio": metrics.get("peBasicExclExtraTTM"),
"pb_ratio": metrics.get("pbQuarterly"),
"ps_ratio": metrics.get("psAnnual"),
"roe": metrics.get("roeTTM"),
"roa": metrics.get("roaTTM"),
"debt_equity": metrics.get("totalDebt/totalEquityQuarterly"),
"current_ratio": metrics.get("currentRatioQuarterly"),
"gross_margin": metrics.get("grossMarginTTM"),
"operating_margin": metrics.get("operatingMarginTTM"),
"52w_high": metrics.get("52WeekHigh"),
"52w_low": metrics.get("52WeekLow"),
"beta": metrics.get("beta")
}
```
## WebSocket Real-Time Data
```python
import websocket
import json
def on_message(ws, message):
data = json.loads(message)
if data["type"] == "trade":
for trade in data["data"]:
print(f"{trade['s']}: ${trade['p']:.2f} x {trade['v']}")
def on_open(ws):
# Subscribe to symbols
ws.send(json.dumps({"type": "subscribe", "symbol": "AAPL"}))
ws.send(json.dumps({"type": "subscribe", "symbol": "MSFT"}))
ws = websocket.WebSocketApp(
f"wss://ws.finnhub.io?token={API_KEY}",
on_message=on_message,
on_open=on_open
)
ws.run_forever()
```
## Error Handling
```python
def safe_api_call(endpoint: str, params: dict) -> dict:
"""Make API call with error handling."""
params["token"] = API_KEY
try:
response = requests.get(f"{BASE_URL}/{endpoint}", params=params)
response.raise_for_status()
# Check for rate limit
remaining = response.headers.get("X-Ratelimit-Remaining")
if remaining and int(remaining) < 5:
print(f"Warning: Only {remaining} API calls remaining")
return response.json()
except requests.exceptions.HTTPError as e:
if response.status_code == 429:
print("Rate limit exceeded. Waiting 60 seconds...")
time.sleep(60)
return safe_api_call(endpoint, params)
raise
except Exception as e:
print(f"API error: {e}")
return {}
```
## Free vs Premium Features
### Free Tier Includes
- Real-time US stock quotes
- Historical data (1 year)
- Company profiles & peers
- Basic financials & metrics
- Earnings calendar
- Company news
- Forex & crypto data
- WebSocket (US stocks, forex, crypto)
### Premium Required
- Insider transactions & sentiment
- SEC filings
- ESG scores
- Patent data
- Congressional trading
- International markets
- Revenue/EPS estimates
- Lobbying data
- Extended historical data
## Best Practices
1. **Cache static data** - Company profiles, metrics rarely change
2. **Use WebSocket** - For real-time quotes instead of polling
3. **Batch where possible** - Reduce API calls
4. **Handle rate limits** - Implement exponential backoff
5. **Store API key securely** - Use environment variables
## Installation
```bash
# Python SDK
pip install finnhub-python
# JavaScript SDK
npm install finnhub
```
## Related Skills
- `twelvedata-api` - Alternative market data source
- `alphavantage-api` - Technical indicators focus
- `fmp-api` - Fundamental analysis focus
## References
- [Official Documentation](https://finnhub.io/docs/api)
- [Python SDK](https://github.com/Finnhub-Stock-API/finnhub-python)
- [Pricing](https://finnhub.io/pricing)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!