Python client for the Financial Modeling Prep API with DuckDB caching
Project description
jaymd96-fmp
Python client for the Financial Modeling Prep API with automatic DuckDB caching.
Features
- 150+ endpoints covering quotes, financials, charts, news, SEC filings, insider trades, and more
- DuckDB cache with configurable TTLs per endpoint category — avoid redundant API calls
- Concurrent fetching —
fetch_many()pulls data for hundreds of symbols in parallel - Auto-pagination —
paginate_all()walks through paginated endpoints automatically - Rate limiting — built-in token-bucket rate limiter, thread-safe for concurrent use
- Context manager support for clean resource cleanup
Installation
pip install jaymd96-fmp
Quick Start
from fmp import FMPClient
# API key from argument or FMP_API_KEY env var
client = FMPClient(api_key="your-api-key")
# Real-time quote
client.quote("AAPL")
# Financial statements
client.income_statement("AAPL", period="quarter", limit=4)
# Historical prices
client.historical_price_eod_full("AAPL", from_date="2024-01-01", to_date="2024-12-31")
# Stock screener
client.screener(sector="Technology", market_cap_more_than=1_000_000_000)
# Technical indicators
client.sma("AAPL", period_length=20, timeframe="1day")
Concurrent Fetching
# Fetch quotes for many symbols in parallel
results = client.fetch_many(client.quote, ["AAPL", "MSFT", "GOOG", "AMZN"], max_workers=10)
# Returns: {"AAPL": [...], "MSFT": [...], ...}
Auto-Pagination
# Fetch all pages of stock news
all_news = client.paginate_all(client.stock_news_latest, limit=100, max_pages=50)
Cache
All responses are cached in a local DuckDB database (~/.fmp/cache.db by default). TTLs are set per endpoint category (e.g., 60s for quotes, 7 days for financial statements).
# In-memory cache (no persistence)
client = FMPClient(api_key="...", cache_path=None)
# Custom TTLs
client = FMPClient(api_key="...", ttl_overrides={"realtime_quotes": 30})
# Force refresh (bypass cache)
client.quote("AAPL", force_refresh=True)
# Run SQL queries on cached data
client.sql("SELECT * FROM _raw_cache WHERE endpoint = 'quote'")
# Clear cache
client.clear_cache()
client.clear_cache(endpoint="quote")
Rate Limiting
# Limit to 5 requests per second (for free-tier plans)
client = FMPClient(api_key="...", rate_limit=5)
Context Manager
with FMPClient(api_key="...") as client:
data = client.quote("AAPL")
# Connections closed automatically
Configuration
| Parameter | Default | Description |
|---|---|---|
api_key |
FMP_API_KEY env var |
Your FMP API key |
cache_path |
~/.fmp/cache.db |
DuckDB file path, None for in-memory |
ttl_overrides |
{} |
Override TTLs by category name |
timeout |
30.0 |
HTTP timeout in seconds |
max_retries |
3 |
Retry count on 429 responses |
rate_limit |
None |
Max requests/second |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jaymd96_fmp-0.4.0.tar.gz.
File metadata
- Download URL: jaymd96_fmp-0.4.0.tar.gz
- Upload date:
- Size: 62.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.3 cpython/3.13.0 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d6759eb5ce4264876d79553f0e5ea480a8258442b516635c880c86e22a7f5cc
|
|
| MD5 |
fc70d6a5cee363a8692325bcc3cd7cb1
|
|
| BLAKE2b-256 |
125b94a5b058110dd6ed7533d4d62debd2896a32eaacb9bc57c33ab0dc0d9c30
|
File details
Details for the file jaymd96_fmp-0.4.0-py3-none-any.whl.
File metadata
- Download URL: jaymd96_fmp-0.4.0-py3-none-any.whl
- Upload date:
- Size: 67.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.3 cpython/3.13.0 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72c8a98e9a5239433022f44926fcbeb8216d209d5bbdfdac7119beccfb376279
|
|
| MD5 |
b8b448f27e7f5fb85ab19839d2ebef6e
|
|
| BLAKE2b-256 |
e301a105c7b17acd42ba7d2f2c649fcc85d42fc0559b65d9af377e060d728c67
|