Catalyst · Edge
US ScannerCatalyst EdgeLive US gappers + flow Global43 marketsCross-border tape ValuationDCF EngineAudited fair-value grades ConvergenceADR ↔ HomeForeign + US arb AlertsPro TapeLive triggers right now DevelopersJSON API22 endpoints OnboardQuickstartFirst DCF in 60 sec
🐍 Python · 🟢 Node · 📦 Coming this week — Reserve early access

Catalyst Edge in 1 import.

Type-safe, async-native, webhook-aware. Stop curl-piping JSON into jq. The same alpha you read on the scanner — embeddable into any Python or Node app, with a CLI bundled, in under 60 seconds.

🐍pip install catalyst-edge
🟢npm install @catalyst-edge/sdk
npx @catalyst-edge/cli scan --grade A

Code in 4 lines

Each example shows Python and Node side-by-side. Copy any block and run.

Top-graded DCF picks

GET /api/v1/dcf?grade=A
from catalyst_edge import Client

c = Client(api_key="ce_live_...")
picks = c.dcf.top(grade="A")
print(picks[:5])
# [DcfPick(ticker='META', upside=104.2, grade='A', wacc=0.09), ...]
import { Client } from '@catalyst-edge/sdk';

const c = new Client({ apiKey: 'ce_live_...' });
const picks = await c.dcf.top({ grade: 'A' });
console.log(picks.slice(0, 5));
// [{ ticker: 'META', upside: 104.2, grade: 'A', wacc: 0.09 }, ...]

Global catalyst tape

GET /api/v1/tape?country=ALL&limit=200
from catalyst_edge import Client

c = Client(api_key="ce_live_...")
tape = c.tape.list(country="ALL", kind="earnings", limit=50)
for evt in tape:
    print(f"{evt.ts} {evt.flag} {evt.ticker:6} {evt.headline}")
import { Client } from '@catalyst-edge/sdk';

const c = new Client({ apiKey: 'ce_live_...' });
const tape = await c.tape.list({ country: 'ALL', kind: 'earnings', limit: 50 });
for (const evt of tape) {
  console.log(`${evt.ts} ${evt.flag} ${evt.ticker} ${evt.headline}`);
}

Cross-border STRONG setups

GET /api/v1/crossborder?conviction=STRONG
from catalyst_edge import Client

c = Client(api_key="ce_live_...")
setups = c.crossborder.strong()
for s in setups:
    print(f"{s.adr} ↔ {s.home} | gap={s.gap_pct:+.2f}% | score={s.score}")
# BABA ↔ 9988.HK | gap=+2.40% | score=4
import { Client } from '@catalyst-edge/sdk';

const c = new Client({ apiKey: 'ce_live_...' });
const setups = await c.crossborder.strong();
for (const s of setups) {
  console.log(`${s.adr} ↔ ${s.home} | gap=${s.gapPct.toFixed(2)}% | score=${s.score}`);
}

Live alerts stream (async iterator)

GET /api/v1/alerts/live (SSE)
import asyncio
from catalyst_edge import AsyncClient

async def main():
    c = AsyncClient(api_key="ce_live_...")
    async for a in c.alerts.live(severity="urgent"):
        print(f"[{a.severity}] {a.ticker} → {a.message}")

asyncio.run(main())
import { Client } from '@catalyst-edge/sdk';

const c = new Client({ apiKey: 'ce_live_...' });
for await (const a of c.alerts.live({ severity: 'urgent' })) {
  console.log(`[${a.severity}] ${a.ticker} → ${a.message}`);
}

Why this SDK doesn't suck

Six things every modern API client should ship — and most don't.

🔁

Auto-retry with backoff

Exponential backoff on 429/5xx. Respects Retry-After. Configurable max attempts. You don't write retry loops anymore.

🛡️

Type-safe end-to-end

TypeScript types and Pydantic models generated from the OpenAPI spec. Autocomplete in your IDE for every field, every endpoint.

📡

Webhook receiver included

Express + FastAPI middleware verifies HMAC signatures and decodes events. Drop into your handler, ship.

CLI bundled

npx @catalyst-edge/cli scan --grade A prints results. Pipe to jq, awk, or your shell. No SDK code required.

🌀

Async/await native

Both SDKs ship sync and async clients. Stream live alerts via async iterator. No callback pyramids.

100% test coverage

Every endpoint has unit + integration tests. We dogfood the SDK on the production scanner. CI runs against the real API.

Roadmap

Public commitments. We ship daily — see changelog.

v0.1 — this week
📦 Initial release

Python + Node

  • Sync + async clients
  • 22 endpoint coverage
  • Webhook receiver middleware
  • CLI for shell pipelines
  • Pydantic v2 + TypeScript types
v0.2 — next month
🌐 Language expansion

Realtime + R + Go

  • Websocket feed (live tape)
  • R package on CRAN
  • Go module on pkg.go.dev
  • Server-Sent Events helpers
  • Streaming JSON parser
v1.0 — next quarter
🤖 Agent-ready

LangChain + Numerai

  • LangChain Tool wrappers
  • Numerai signal bridge
  • Composer Symphony export
  • Pandas + Polars dataframes
  • Stable v1 API contract

Get notified when SDK ships

One email when v0.1 lands. No drip campaign, no upsell sequence. Drop your address — we'll send a single message with install instructions and your starter API key.

No spam · 1 email when v0.1 ships · unsubscribe = ignore the email
SDK is free to install. Your API key requires Pro tier or higher ($39/mo). Free tier shows the SDK works against limited public endpoints (top 5 DCF picks, daily catalyst tape).
See pricing

You are one page deep in a scanner that grades its own picks in public, wins and losses alike.

$99 once — the full ranked console, before the open.

Tier 1 setups touched +2% intraday 49.5% of the time across 329 tracked calls. Baseline for everything else: 40.8%. That is a +8.7 point edge, measured from the NEXT OPEN — the first price you could actually pay, not the prior close. We publish the misses too: https://catalystedgescanner.com/trust/

  1. Click Become a Founding Member below.
  2. Pay $99 once — not monthly, not ever again.
  3. You keep every future release at that price. Tomorrow's ranked list lands at 3:30 AM ET, before the open.

29 of 30 founding seats left. The price goes up when they are gone.

Become a Founding Member — $99 once

One payment. Lifetime access. The free daily picks stay free — this is for people who want the full console. Not buying today? Get tomorrow's ranked list free →