API Documentation

⌘K

Cookbook

Ten copy-paste recipes. Each runs on the free tier with your API key.

01

Screen 42,000 stocks by fundamentals

Python

Find quality companies: P/E under 20, revenue growing, high AAQS quality score. One call against the screener endpoint, sorted by market cap.

screener.py
from eulerpool import Eulerpool  # pip install eulerpool

client = Eulerpool("eu_prod_...")

results = client.screener.screen(
    peRatio_max=20,
    revenueGrowth3Y_min=10,
    aaqs_min=7,
    sort="marketCap",
    order="desc",
    limit=25,
)

for stock in results:
    print(f'{stock["ticker"]:6} {stock["name"][:32]:34} P/E {stock.get("peRatio")}')

Endpoints used: Screener

02

DCF valuation in 30 lines

Python

Pull free cash flow history and shares outstanding, project 5 years, discount back. A full discounted-cash-flow model from two endpoints.

dcf.py
from eulerpool import Eulerpool

client = Eulerpool("eu_prod_...")
ISIN = "US0378331005"  # Apple

cashflows = client.equity.cashflowstatement(ISIN)
shares = client.equity.shares_outstanding(ISIN)

fcf = [y["freeCashFlow"] for y in cashflows[-5:]]        # last 5 years
growth = (fcf[-1] / fcf[0]) ** (1 / len(fcf)) - 1        # historic CAGR
growth = min(growth, 0.15)                               # cap at 15%

WACC, TERMINAL = 0.09, 0.025
value = 0.0
projected = fcf[-1]
for year in range(1, 6):
    projected *= 1 + growth
    value += projected / (1 + WACC) ** year
terminal = projected * (1 + TERMINAL) / (WACC - TERMINAL)
value += terminal / (1 + WACC) ** 5

per_share = value / shares[-1]["value"]
print(f"Intrinsic value: \u0024{per_share:,.2f} per share")

Endpoints used: Cash Flow Statement

03

Portfolio tracker with live quotes

JavaScript

Value a portfolio in real time. Fetches quotes for every holding in parallel and prints total value with day change.

portfolio.js
import Eulerpool from 'eulerpool'; // npm install eulerpool

const client = new Eulerpool('eu_prod_...');

const holdings = [
  { ticker: 'AAPL', shares: 25 },
  { ticker: 'MSFT', shares: 10 },
  { ticker: 'ASML', shares: 4 },
];

const quotes = await Promise.all(
  holdings.map(h => client.equity.quotes(h.ticker)),
);

let total = 0;
for (const [i, h] of holdings.entries()) {
  const { price, changePercent } = quotes[i];
  total += price * h.shares;
  console.log(`${h.ticker.padEnd(6)} ${String(h.shares).padStart(4)} × ${price.toFixed(2)}  (${changePercent > 0 ? '+' : ''}${changePercent.toFixed(2)}%)`);
}
console.log('Total:', total.toLocaleString('en-US', { style: 'currency', currency: 'USD' }));

Endpoints used: Quotes

04

Summarize earnings calls with an LLM

Python

Fetch the latest earnings-call transcript and have an LLM extract guidance, risks, and tone. The transcript endpoint returns full speaker-level text.

earnings_ai.py
from eulerpool import Eulerpool
from openai import OpenAI  # or anthropic

client = Eulerpool("eu_prod_...")
llm = OpenAI()

calls = client.earning_calls.list("AAPL", limit=1)
transcript = client.earning_calls.transcript(calls[0]["id"])

text = "\n".join(f'{t["speaker"]}: {t["text"]}' for t in transcript["segments"])

summary = llm.chat.completions.create(
    model="gpt-5",
    messages=[{
        "role": "user",
        "content": "Extract: 1) guidance changes 2) named risks 3) management tone "
                   f"(bullish/neutral/cautious). Be specific.\n\n{text[:100_000]}",
    }],
)
print(summary.choices[0].message.content)

Endpoints used: Earning Calls

05

AI research agent in Claude or Cursor (MCP)

JSON

One config block gives any MCP client — Claude Desktop, Claude Code, Cursor, Windsurf — 250+ financial data tools. Then just ask: "Compare the FCF margins of Apple, Microsoft and Google over 5 years."

mcp-config.json
{
  "mcpServers": {
    "eulerpool": {
      "url": "https://api.eulerpool.com/mcp",
      "headers": {
        "Authorization": "Bearer eu_prod_..."
      }
    }
  }
}

// Claude Desktop:  ~/Library/Application Support/Claude/claude_desktop_config.json
// Cursor:          ~/.cursor/mcp.json
// Claude Code:     claude mcp add --transport http eulerpool https://api.eulerpool.com/mcp \
//                    --header "Authorization: Bearer eu_prod_..."

Endpoints used: MCP Server docs

06

Congress trading monitor

Python

Politicians disclose trades with up to 45 days delay — but the disclosures are alpha. Pull the latest congressional trades and filter for large purchases.

congress.py
from eulerpool import Eulerpool

client = Eulerpool("eu_prod_...")

trades = client.alternative.congress_trading(limit=100)

buys = [t for t in trades
        if t["type"] == "purchase" and t.get("amountMin", 0) >= 50_000]

for t in buys:
    print(f'{t["transactionDate"]}  {t["politician"]:28} bought {t["ticker"]:6} '
          f'(\u0024{t["amountMin"]:,}+)')

Endpoints used: Congress Trading

07

Dividend calendar as .ics file

Python

Export upcoming ex-dividend dates for your watchlist straight into Google Calendar or Apple Calendar.

dividends_ics.py
from eulerpool import Eulerpool

client = Eulerpool("eu_prod_...")
WATCHLIST = ["US0378331005", "US5949181045", "NL0010273215"]

lines = ["BEGIN:VCALENDAR", "VERSION:2.0", "PRODID:-//eulerpool//dividends//EN"]
for isin in WATCHLIST:
    for div in client.equity.dividends(isin, upcoming=True):
        date = div["exDate"].replace("-", "")
        lines += [
            "BEGIN:VEVENT",
            f"DTSTART;VALUE=DATE:{date}",
            f"SUMMARY:{div['ticker']} ex-dividend {div['currency']} {div['amount']}",
            "END:VEVENT",
        ]
lines.append("END:VCALENDAR")

with open("dividends.ics", "w") as f:
    f.write("\n".join(lines))
print("Wrote dividends.ics — import into any calendar app")

Endpoints used: Dividends

08

Insider cluster-buying scanner

JavaScript

Multiple insiders buying the same stock within days is one of the strongest known signals. Scan recent SEC Form 4 filings for buy clusters.

insiders.js
import Eulerpool from 'eulerpool';

const client = new Eulerpool('eu_prod_...');

const tickers = ['NVDA', 'AMD', 'INTC', 'TSM', 'AVGO'];
const results = await Promise.all(
  tickers.map(t => client.equity.insiderTrades(t, { limit: 50 })),
);

for (const [i, trades] of results.entries()) {
  const recentBuys = trades.filter(t =>
    t.type === 'P' && Date.now() - new Date(t.date) < 14 * 864e5,
  );
  const uniqueInsiders = new Set(recentBuys.map(t => t.insiderName)).size;
  if (uniqueInsiders >= 2) {
    console.log(`CLUSTER: ${tickers[i]} — ${uniqueInsiders} insiders bought in 14 days`);
  }
}

Endpoints used: Insider Trades

09

Macro dashboard with pandas

Python

FRED, ECB, Eurostat, IMF and World Bank series through one interface. Build a rates-vs-inflation DataFrame in a few lines.

macro.py
import pandas as pd
from eulerpool import Eulerpool

client = Eulerpool("eu_prod_...")

series = {
    "fed_funds": client.macro.fred_observations(series_id="FEDFUNDS"),
    "us_cpi_yoy": client.macro.fred_observations(series_id="CPIAUCSL", units="pc1"),
    "ecb_depo": client.macro.ecb_observations(series_key="FM.D.U2.EUR.4F.KR.DFR.LEV"),
}

df = pd.DataFrame({
    name: pd.Series(
        {obs["date"]: obs["value"] for obs in data["observations"]}
    )
    for name, data in series.items()
})
df.index = pd.to_datetime(df.index)

print(df.resample("QE").last().tail(8))

Endpoints used: Macro

10

Google Sheets: =EULERPOOL() formula

Apps Script

Extensions → Apps Script, paste, save. Then use =EULERPOOL("AAPL", "price") or =EULERPOOL("US0378331005", "marketCap") in any cell.

Code.gs
const API_KEY = 'eu_prod_...';

/**
 * Fetch a field from a company profile or quote.
 * @param {string} idOrTicker ISIN or ticker, e.g. "AAPL"
 * @param {string} field e.g. "price", "marketCap", "peRatio", "sector"
 * @customfunction
 */
function EULERPOOL(idOrTicker, field) {
  const base = 'https://api.eulerpool.com/api/1';
  const cache = CacheService.getScriptCache();
  const key = idOrTicker + ':' + field;
  const hit = cache.get(key);
  if (hit != null) return isNaN(hit) ? hit : Number(hit);

  for (const path of ['/market/quotes/latest/', '/equity/profile/']) {
    const res = UrlFetchApp.fetch(base + path + encodeURIComponent(idOrTicker)
      + '?token=' + API_KEY, { muteHttpExceptions: true });
    if (res.getResponseCode() !== 200) continue;
    const value = JSON.parse(res.getContentText())[field];
    if (value !== undefined) {
      cache.put(key, String(value), 300); // 5 min — spreadsheets recalc a lot
      return value;
    }
  }
  return '#N/A';
}

Endpoints used: Excel & Sheets guide

Get a free API key

Every recipe above runs on the free tier — 10,000 requests/month, no credit card.

Create free account