The definitive open-source yfinance alternative — multi-source, failover-capable, fully normalized
Project description
findata
A multi-source, failover-capable Python financial data library.
findata delivers yfinance's beloved simplicity with 10× the reliability through automatic failover across multiple data sources, intelligent three-tier caching, and a community plugin architecture.
Why findata?
| Problem with yfinance | findata solution |
|---|---|
| Breaks 2–4×/year when Yahoo changes endpoints | Circuit-breaker failover to SEC, ECB, Binance |
| No built-in caching; hammers APIs on every call | Three-tier cache (memory → diskcache → Parquet) |
| No rate limiting; users get IP-blocked | Per-source adaptive rate limiters |
| Silent failures (empty DataFrames) | Rich exceptions with source provenance |
| Single unofficial API | 5+ sources, plugin architecture for more |
Quick start
pip install findata
import findata
# One line — works immediately, no API keys needed
df = findata.prices("AAPL", period="1mo")
# Multi-source with validation
client = findata.Client(sources=["yahoo", "sec", "ecb"])
df = client.prices("AAPL", start="2024-01-01", validate=True)
# Async batch fetching
import asyncio
async def main():
async with findata.AsyncClient() as client:
data = await client.prices(["AAPL", "GOOGL", "MSFT"], period="1y")
asyncio.run(main())
# Fundamentals from SEC EDGAR (free, no key needed)
info = findata.info("AAPL")
# Forex from ECB (free, no key, no rate limits)
fx = findata.forex("USD/EUR", period="1y")
# Crypto from Binance public API (free, no key)
btc = findata.prices("BTC/USDT", period="30d")
Optional extras
pip install findata[cache] # diskcache for persistent local caching
pip install findata[duckdb] # DuckDB + Parquet for historical storage
pip install findata[polars] # Polars DataFrame output
pip install findata[all] # Everything
Data sources (v0.1)
| Source | Data | Auth | Rate limit |
|---|---|---|---|
| Yahoo Finance | Prices, options, info | None (unofficial) | ~950 req/session |
| SEC EDGAR | Fundamentals, filings | None | 10 req/s |
| ECB / Frankfurter | Forex | None | No limit |
| Binance | Crypto OHLCV | None | 1200 req/min |
| CoinGecko | Crypto info | None (free tier) | 30 req/min |
See DATA_SOURCES.md for full terms-of-service details and risk tiers.
Community plugins
Add new sources as pip-installable packages:
# In your plugin's pyproject.toml
[project.entry-points."findata.sources"]
tradingview = "findata_tradingview:TradingViewSource"
A new source adapter can be implemented in under 100 lines by implementing the DataSource protocol.
Legal notice
findata fetches data on behalf of users as a client library. Users are responsible for complying with each data provider's terms of service. Government data (SEC EDGAR) is in the public domain. See DATA_SOURCES.md for source-specific guidance.
License
Apache 2.0
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 xfinance-0.3.0.tar.gz.
File metadata
- Download URL: xfinance-0.3.0.tar.gz
- Upload date:
- Size: 62.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7b132b3ada8ac2917a1fc9d0dee975884261cf43c67c9ff4a61cb1b942ec1df
|
|
| MD5 |
1b65087b588932fa54d20341b8f7382b
|
|
| BLAKE2b-256 |
5cbb8367c98e3361170c79cef9ebc09c4004605f4072558aaa53e43c23d4e145
|
File details
Details for the file xfinance-0.3.0-py3-none-any.whl.
File metadata
- Download URL: xfinance-0.3.0-py3-none-any.whl
- Upload date:
- Size: 66.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
635fcc70a70d53f36031584d4e049f716a88e5d60ce1354871bc204a12bb3563
|
|
| MD5 |
e6b161d69125a89846c497593f00fcc9
|
|
| BLAKE2b-256 |
1941f8c4a3094218c7bfb78b5c9c77790f9e5bbbb88f24918eb909b8b0db898c
|