xfinlink
Free financial data API for US equities — prices, fundamentals, metrics, entity resolution, index constituents, insider transactions, and institutional (Form 13F) holdings.
Install
pip install -U xfinlink
Quick start
import xfinlink as xfl
xfl.set_api_key("your-key") # or set XFINLINK_API_KEY env var
# Get a free key at https://xfinlink.com/signup
# Historical prices
df = xfl.prices("AAPL", start="2024-01-01", end="2024-12-31")
print(df[["date", "close", "adj_close", "volume"]].head())
# Multi-ticker
df = xfl.prices(["AAPL", "MSFT", "GOOGL"], start="2024-01-01")
# Financial statements
df = xfl.fundamentals("AAPL", period_type="annual")
# Computed metrics (P/E, ROE, margins, etc.)
df = xfl.metrics("AAPL", fields=["pe_ratio", "roe", "market_cap"])
# Entity resolution
info = xfl.resolve("GM")
# Search
df = xfl.search(q="apple")
# S&P 500 constituents
df = xfl.index("sp500")
# Institutional holdings — who held Apple at the end of 2026-Q1 (paid plans)
df = xfl.holdings("AAPL", quarter="2026-03-31")
# One manager's portfolio
mgrs = xfl.managers("berkshire")
df = xfl.manager_holdings(58, quarter="2026-03-31")
# Check usage
xfl.usage()
Defaults
startdefaults to 1 year ago if omitted.- Pagination stops at
max_rows(default 10,000). Increase if you need more. dateandperiod_endare regular DataFrame columns, not the index.
API endpoints
| Endpoint | Use case |
|---|---|
GET /v1/prices/{ticker} |
Historical prices, volume, dividends, splits |
GET /v1/fundamentals/{ticker} |
Financial statements |
GET /v1/metrics/{ticker} |
Pre-computed financial metrics |
GET /v1/resolve/{ticker} |
Entity resolution, corporate history |
GET /v1/search |
Find companies by name, sector, SIC, NAICS |
GET /v1/index/{name} |
Index constituents (current or historical) |
⮑ GET /v1/index/{name}/events |
Index additions and removals as a dated event log |
GET /v1/insiders/{ticker} |
Insider transactions (paid plans) |
GET /v1/holdings/{ticker} |
Institutional Form 13F holdings — who holds a security (paid plans) |
GET /v1/managers |
Institutional manager lookup by name (paid plans) |
⮑ GET /v1/managers/{manager_id}/holdings |
One manager's reported portfolio (paid plans) |
Ticker endpoints accept comma-separated symbols, for example /v1/prices/AAPL,MSFT,GOOGL. Tickers per call on data endpoints scale by plan: 1 (Free), 100 (Pro), 500 (Business), 1,000 (Redistribution); /v1/resolve supports up to 10.
Reaching a specific entity
A ticker always resolves to its current holder, so a company that held a ticker only in the past is not reachable by ticker. Pass an entity_id instead — on /v1/prices, /v1/fundamentals, /v1/metrics, /v1/insiders and /v1/holdings, as ?entity_id=3165 or a comma-separated list. Find ids with /v1/resolve/{ticker}, which lists every company that has used the ticker and when, or with /v1/search.
# The EDS ticker serves its most recent holder
xfl.fundamentals("EDS", period="max") # Exceed Company Ltd
# entity_id reaches the historical company the ticker cannot
xfl.fundamentals(entity_id=3165, period="max") # Electronic Data Systems
entity_id cannot be combined with a ticker, and N ids count as N tickers against the per-plan cap. An explicit id is served as itself, with no share-class-to-issuer aliasing, so a share-class id can return no rows on fundamentals, metrics and insiders — resolve to the issuer's id first.
Rate limits
Requests per day: Free 100 (40/hour burst), Pro 10,000, Business 50,000, Redistribution 100,000. Only the Free tier is throttled per hour. Paid plans also unlock full history (daily prices back to 1996, fundamentals back to 1950). See pricing.
Links
- Docs: https://xfinlink.com/docs
- Signup: https://xfinlink.com/signup
- LLM context: https://xfinlink.com/llms.txt
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 xfinlink-0.12.0.tar.gz.
File metadata
- Download URL: xfinlink-0.12.0.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3b8d62f4bf113f82cfb1f17c1f3971edeccfcc29facd94e50b7dec5bf4f51ba
|
|
| MD5 |
ec7f9efdac9f3978a619a1e4e57345e3
|
|
| BLAKE2b-256 |
9cb0b52c21c2b22d85ae88ff8e24899e15eb54ab2d0168ddf0745701ca5b8a2f
|
File details
Details for the file xfinlink-0.12.0-py3-none-any.whl.
File metadata
- Download URL: xfinlink-0.12.0-py3-none-any.whl
- Upload date:
- Size: 22.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c00432ea4ec7307c1b7aa8f78b7146b11148a0610d7aa5c7035335b1eba7d87c
|
|
| MD5 |
371318e889e4055e3f9be8b1cb412903
|
|
| BLAKE2b-256 |
8d6b8bff550b43e566c29d7076057e907084289cb213b7d0dfe9d735be1c2b52
|