Eulerpool — Financial Data API for Python
Eulerpool is The Financial Data Company. This is the official Python SDK for the Eulerpool Financial Data API: stocks, ETFs, forex, crypto, bonds, fundamentals, filings, and macro — one client, one key.
PyPI · Docs · API reference · Get a free API key · JavaScript SDK
pip install eulerpool
100,000+ securities · 90+ exchanges · 375+ endpoints · 100,000 free API calls/month · no credit card.
Why teams use this financial data API
Most “stock APIs” stop at a last price. Eulerpool is the production financial data API behind the Eulerpool terminal: statements, estimates, ownership, transcripts, options, and macro on the same key.
| Eulerpool | Typical free stock API | Bloomberg Terminal | |
|---|---|---|---|
| Free tier | 100,000 calls/month | tens–hundreds/day | none |
| Coverage | 100,000+ names, 90+ exchanges | US-heavy | deep, licensed |
| Fundamentals | Full statements + ratios | thin or paid extra | yes |
| Python | pip install eulerpool |
wrappers / scrape | none |
| Price to start | $0 | $0 with a ceiling | ~$24,000/yr/seat |
Get a key in 60 seconds: eulerpool.com/developers/register.
Install
pip install eulerpool
Requires Python 3.9+ and httpx. Typed (py.typed). Sync and async clients.
import eulerpool
client = eulerpool.Eulerpool("YOUR_API_KEY") # or EULERPOOL_API_KEY
profile = client.equity.profile("AAPL")
print(profile["name"])
client.close()
Quick start — Python stock API
Tickers and ISINs both work.
import eulerpool
with eulerpool.Eulerpool("YOUR_API_KEY") as client:
# Company profile (stock API)
profile = client.equity.profile("US0378331005")
# Income statement, cash flow, balance sheet
income = client.equity.income_statement("US0378331005")
cash = client.equity.cash_flow_statement("US0378331005")
balance = client.equity.balance_sheet("US0378331005")
# ETF holdings
holdings = client.etf.holdings("IE00B4L5Y983")
# FX, macro, calendar
rates = client.forex.rates("EUR")
calendar = client.macro.calendar()
Async
import asyncio
import eulerpool
async def main():
async with eulerpool.AsyncEulerpool("YOUR_API_KEY") as client:
profile = await client.equity.profile("AAPL")
print(profile)
asyncio.run(main())
Any path (escape hatch)
client.get("/equity/profile/AAPL", language="en")
What data you get
One financial data API. Official accessors (50+ resources, 400+ methods, generated from the public OpenAPI spec):
| Area | Examples |
|---|---|
| Equities | profile, quotes, candles, statements, ratios, estimates, dividends, splits, insider trades, SWOT, peers, segments, employees |
| ETFs & funds | holdings, sectors, countries, flows, mutual funds |
| Market data | quotes, movers, options, dark pool, holidays, status |
| Fixed income | bonds, yield curves, default probabilities |
| FX & crypto | rates, crypto quotes, on-chain / DeFi (extended) |
| Macro | FRED, ECB, IMF, World Bank, Eurostat, calendars, country risk |
| Alt / sentiment | 13F, congress trades, superinvestors, news & social sentiment |
| Research | transcripts, earning calls, news, press, upgrades |
Resources on the client include equity, equity_extended, etf, macro, forex, bonds, crypto, crypto_extended, market, alternative, sentiment, research, calendar, screener, mutual_fund, commodity, institutional, certificates, earning_calls, index, news, trends, ice_swap, fair_value, aaq, analytics, charting, energy, fundamentals, government, shipping, singapore, transcripts, and more.
Authentication
Pass the key to the constructor or set EULERPOOL_API_KEY. Every request sends Authorization: Bearer. By default the key is also sent as ?token= (some vendor routes redirect and drop the query string; the header survives). Header-only:
client = eulerpool.Eulerpool("YOUR_API_KEY", use_auth_header=True)
client = eulerpool.Eulerpool(
"YOUR_API_KEY",
base_url="https://api.eulerpool.com/api/1",
use_auth_header=False,
max_retries=2,
timeout=30.0,
)
Errors
from eulerpool import Eulerpool, AuthenticationError, RateLimitError
client = Eulerpool("YOUR_API_KEY")
try:
client.equity.profile("US0378331005")
except AuthenticationError:
print("Invalid API key")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after}s")
429 and 5xx are retried with backoff.
Financial data API vs Bloomberg, Alpha Vantage, Polygon, Yahoo Finance
Eulerpool is built as a developer financial data API, not a desktop terminal.
- vs Bloomberg — same institutional datasets you actually query (fundamentals, estimates, ownership, macro), as JSON, from
$0. Bloomberg is a $24k/year seat plus a sales cycle. Comparison: Eulerpool vs Bloomberg. - vs Alpha Vantage — Alpha Vantage’s free cap is tens of calls/day. Eulerpool’s free plan is 100,000/month with the same schema as paid. vs Alpha Vantage.
- vs Polygon.io — Polygon is excellent US ticks. Eulerpool is global fundamentals + statements + ETFs + macro on one key. vs Polygon.
- vs Yahoo Finance unofficial libs — unofficial scrapers break. This is a licensed REST API with an SLA.
More: best stock market APIs, pricing.
For AI agents and LLMs
Responses are typed, deterministic JSON. Pair the SDK with the Eulerpool MCP server so Claude, Cursor, ChatGPT, and custom agents call the same data instead of inventing a P/E.
# Agents: one call, one schema, cite the source
metrics = client.equity.metrics("AAPL")
FAQ
What is a financial data API?
A financial data API returns market and company data (prices, statements, FX, macro) as JSON over HTTP so you do not scrape HTML or buy a terminal seat. Eulerpool covers 100,000+ securities, 90+ exchanges, and 100+ years of history where the source publishes it.
Is there a free Python stock API?
Yes. pip install eulerpool, register, 100,000 requests/month, no credit card. Same endpoints as paid plans; paid plans raise volume and real-time.
Does this replace yfinance / Yahoo Finance?
For production, yes: licensed data, identifiers (ticker and ISIN), retries, and a ToS you can show legal. The unofficial Yahoo libraries are fine for a notebook; they are not a market-data contract.
Python, pandas, Jupyter?
Returns are dicts and lists — pd.DataFrame(...) works. Sync client for notebooks; AsyncEulerpool for asyncio.
Other languages?
npm install eulerpool (JavaScript/TypeScript), Go. REST from anything else.
Links
- Financial Data API: https://eulerpool.com/financial-data-api
- Python SDK docs: https://eulerpool.com/financial-data-api/sdks/python
- API reference: https://eulerpool.com/developers
- Pricing: https://eulerpool.com/financial-data-api/pricing
- Changelog: https://eulerpool.com/financial-data-api/changelog
- npm package: https://www.npmjs.com/package/eulerpool
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
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 eulerpool-1.0.1.tar.gz.
File metadata
- Download URL: eulerpool-1.0.1.tar.gz
- Upload date:
- Size: 28.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c00e3edfb0c6fc710495c55e36ed9b5c788108b7465abc229d74df2c95b9827
|
|
| MD5 |
9ece565278d5885f4617ac48fb8beb4e
|
|
| BLAKE2b-256 |
2e4a369b269cf55ff943690f0f6fc4a4525cacdeaa71da99757992161a849d4e
|
File details
Details for the file eulerpool-1.0.1-py3-none-any.whl.
File metadata
- Download URL: eulerpool-1.0.1-py3-none-any.whl
- Upload date:
- Size: 48.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c43e332a8fe81d9e8f58e4f3561609219a515d8748ad71f1c6dc731e4a1f2fb
|
|
| MD5 |
1940fc7dc04cb26b76e43d490e8bbbb9
|
|
| BLAKE2b-256 |
03bf6d4929e1ec7dd6628a1731ac328f35e70927119013ca5069d7c84f08a1a9
|