Use Factor Weave from where you already work
A dozen doorways into the same API and data. Pick the one that matches your workflow — the script, the agent, the spreadsheet, the chat tool, the shell. All driven by the same tier-gated quota and the same nightly-fresh data.
Hand-written SDKs: Python · TypeScript · R · CLI (fw) · Google Sheets ·
Auto-generated clients: Go · Rust · Ruby · PHP · Dart · (Java/C#/Kotlin/Swift on-demand) ·
Protocols: REST · OpenAPI 3.0 · MCP (12 tools) · webhooks · Web Push ·
Recipes & connectors: Jupyter notebooks · Postman collection · Slack/Discord/n8n transformers · drop-in MCP configs
🐍 Python SDK
pip install factorweave
The most-direct ergonomic for quant scripts and notebooks — typed methods over every endpoint, pandas/polars adapters, tier-aware exceptions you can catch.
import factorweave as fw
client = fw.Client(api_key="fw_live_…")
row = client.features("AAPL")[0]
hist = client.features("AAPL", start="2024-01-01", end="2024-12-31").to_polars()
top = client.top("mom", n=25).to_pandas()
card = client.report_card("AAPL") # HOBBY+
risk = client.risk_cluster("TSLA") # PRO+
Source: github.com/Blazing-Customs/factorweave-tools/python ·
PyPI: pypi.org/project/factorweave ·
Ships an fw CLI too (see below)
⌨️ fw CLI
pip install factorweave
The Python package also installs a fw command. Friendly tables by
default, --json for pipes. Reads FACTORWEAVE_API_KEY
from the environment. Useful for quick checks, cron jobs, shell pipelines.
export FACTORWEAVE_API_KEY=fw_live_…
fw features AAPL # latest factor row
fw top mom -n 25 # top 25 momentum names
fw similar AAPL --method cosine --limit 10
fw market-context
fw report-card NVDA # HOBBY+
fw embedding TSLA --json | jq .vector # QUANT
fw --help # full command list
Shipped as a console_scripts entry on the Python SDK — no separate install.
📘 TypeScript / JavaScript SDK
npm install @blazing-customs/factorweave
Server-side Node 18+ / Bun / Deno / serverless. Native fetch, dual ESM+CJS,
full TypeScript types, typed errors (AuthError, TierError,
RateLimitError, …), automatic backoff on 429 + 5xx. The right SDK
for Next.js API routes, Vercel/Cloudflare functions, and LangChain.js agents.
import { FactorWeave } from '@blazing-customs/factorweave';
const fw = new FactorWeave({ apiKey: process.env.FACTORWEAVE_API_KEY });
const row = await fw.latestFeatures('AAPL');
const top = await fw.top({ factor: 'mom', n: 25 });
const hits = await fw.similar('AAPL', { method: 'cosine', limit: 10 });
const ctx = await fw.marketContext(); // FREE+
const card = await fw.reportCard('AAPL'); // HOBBY+
const risk = await fw.riskCluster('TSLA'); // PRO+
const emb = await fw.embedding('NVDA'); // QUANT
Source: factorweave-tools/typescript · npm: @blazing-customs/factorweave
⚠ Server-side only — your fw_live_… key is a bearer credential. For
browser apps, proxy through your own backend.
📈 R package
install.packages("factorweave", repos = "https://blazing-customs.r-universe.dev")
For academic and finance work in R. Idiomatic data.frame returns,
httr2-based with retry on 429/5xx, tier-aware errors.
library(factorweave)
client <- fw_client(api_key = "fw_live_…")
row <- fw_latest_features(client, "AAPL")
hist <- fw_features(client, "AAPL", start = "2024-01-01", end = "2024-12-31")
top <- fw_top(client, "mom", n = 25)
hits <- fw_similar(client, "AAPL", method = "cosine", limit = 10)
ctx <- fw_market_context(client)
card <- fw_report_card(client, "AAPL") # HOBBY+
risk <- fw_risk_cluster(client, "TSLA") # PRO+
emb <- fw_embedding(client, "NVDA") # QUANT
Source: factorweave-tools/r
🤖 MCP Server — Claude · Cursor · any MCP client
HOBBY+Drop one block into your AI client and your agent gets 12 typed tools — factor lookups, similarity search, market context, risk clusters, report cards, embeddings, alerts, usage. Conversational quant research, no glue code.
{
"mcpServers": {
"factorweave": {
"url": "https://factorweave.com/api/mcp",
"transport": "streamable-http",
"headers": { "Authorization": "Bearer fw_live_…" }
}
}
}
→ Full MCP guide · Drop-in configs for Claude Desktop, Cursor, Continue, Cline, Windsurf: factorweave-tools/mcp-configs
📜 OpenAPI 3.0 spec
/api/openapi.json
A typed schema for every endpoint with both Bearer + X-API-Key auth declared.
Drop it into anything that consumes OpenAPI — LangChain OpenAPIToolkit,
LlamaIndex, OpenAI Function Calling, Anthropic tool use, ChatGPT Actions, or any
autogenerated client SDK.
# LangChain
from langchain_community.agent_toolkits.openapi.toolkit import OpenAPIToolkit
from langchain_community.tools.openapi.utils.openapi_utils import OpenAPISpec
spec = OpenAPISpec.from_url("https://factorweave.com/api/openapi.json")
toolkit = OpenAPIToolkit.from_llm_spec(llm, spec, headers={"X-API-Key": "fw_live_…"})
# ChatGPT Actions → paste the URL above into the Actions setup.
Clickable explorer: /api/docs/swagger
⚙️ Auto-generated clients — Go · Rust · Ruby · PHP · Dart
+ Java · C# · Kotlin · Swift on demandFor languages we don't (yet) ship a hand-written SDK in, we generate clients directly from the OpenAPI spec via openapi-generator. The five most-requested languages are committed; the rest are one shell command away.
# vendor a client into your project
git clone --depth 1 https://github.com/Blazing-Customs/factorweave-tools.git
cp -r factorweave-tools/generated/go ./internal/factorweave # Go
cp -r factorweave-tools/generated/rust ./crates/factorweave # Rust
cp -r factorweave-tools/generated/ruby ./lib/factorweave # Ruby
cp -r factorweave-tools/generated/php ./vendor/factorweave # PHP
cp -r factorweave-tools/generated/dart ./packages/factorweave # Dart
# need Java / C# / Kotlin / Swift? regenerate from the spec:
bash factorweave-tools-monorepo/scripts/regenerate_clients.sh java csharp kotlin swift
Source: factorweave-tools/generated · regenerated whenever the OpenAPI spec changes.
📊 Google Sheets add-on
=FACTORWEAVE("AAPL","rsi")
Apps Script project — paste once, then call from any cell. Four custom functions cover the common needs without leaving the spreadsheet.
=FACTORWEAVE("AAPL", "rsi") → 83.5
=FW_TOP("mom", 25) → 25 rows of top-momentum tickers
=FW_MARKET_CONTEXT() → today's regime / dispersion / breadth
=FW_REPORT_CARD("AAPL") → full per-ticker digest (HOBBY+)
Source + install guide: factorweave-tools/sheets · 2-minute paste into Extensions → Apps Script.
📡 Webhook alert delivery
Slack · Discord · Zapier · Make · n8n
Define a rule (e.g. "RSI > 80"); attach a delivery_url. Once a UTC day
after the nightly bundle, Factor Weave POSTs a JSON digest of every matching ticker
to that URL. Works with any HTTPS receiver — Slack/Discord incoming webhooks, a
Zapier/Make/n8n hook, or your own service.
POST https://hooks.slack.com/services/…
Content-Type: application/json
{
"source": "factorweave",
"rule": { "id": "...", "name": "RSI overbought", "indicator": "rsi",
"condition": ">", "value": 70 },
"as_of": "2026-05-22",
"count": 374,
"matches": [{ "ticker": "NVDA", "value": 88.3 }, ...]
}
→ Create rules at factorweave.com → Alerts · Drop-in Slack/Discord/n8n transformers + `fire-test-payload.sh`: factorweave-tools/webhooks
📓 Notebooks & Postman collection
research workflows · API explorationTwo more on-ramps for everyday work:
- 5 executable Jupyter notebooks walking through first request, screening, similarity / peer set, leak-free backtest, and regime conditioning. Every notebook runs with or without a key — the demo fallback covers 8 sample tickers so you can try things before signing up. factorweave-tools/notebooks
- Postman collection (v2.1) + environment file, auto-generated from the OpenAPI spec. 30 requests across 21 groups. Imports into Postman, Insomnia, Bruno, and Thunder Client. factorweave-tools/postman
🔔 PWA + browser push
HOBBY+Install Factor Weave as an app on iOS, Android, or desktop — and opt in to native browser notifications when an alert rule fires. The dashboard works offline; pushes arrive even when the tab is closed.
In the SPA: Alerts → Enable browser alerts · Install app (when offered by your browser).
250 calls/day, no card. The research note explains what the data does and doesn't do.