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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
jaymd96_fmp-0.9.2.tar.gz
(119.3 kB
view details)
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.9.2.tar.gz.
File metadata
- Download URL: jaymd96_fmp-0.9.2.tar.gz
- Upload date:
- Size: 119.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 |
2764d07869b42fec3f7b0e114157b20ed15025c088d95d066ed099efdeae5cb9
|
|
| MD5 |
44be76fd28b5cae39912749a668b05e4
|
|
| BLAKE2b-256 |
f2609c059bdd3c902f07b74e5557bb33c07bb17aa2d6fedf8af5214cd54f0796
|
File details
Details for the file jaymd96_fmp-0.9.2-py3-none-any.whl.
File metadata
- Download URL: jaymd96_fmp-0.9.2-py3-none-any.whl
- Upload date:
- Size: 81.8 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 |
c81e252994caa956a89409f59c8250b0ee18321dc120ca4872f8e76311b7c859
|
|
| MD5 |
c9e50a19466ffe7aaca826f0a0ac8e8a
|
|
| BLAKE2b-256 |
a7bba61b4b4585337390985ca387ec747653114d8e7c59ff326a0c888e81c129
|