Factor Weave

Weave factors into actionable ranks. Advanced Financial Data API with Vector Search & AI-Powered Analytics

View All Plans

Not ready to sign up? Explore the factor data first → — no account needed.

Comprehensive Stock Data

Access historical stock features, rankings, and market data through our high-performance API.

Vector Search

Find similar stocks using advanced AI vector similarity search with multiple algorithms.

Backtest Labels

Access historical trading labels and forward-looking analytics for strategy development.

MCP Integration

Wire Factor Weave into Claude, Cursor, or any MCP client in 30 seconds for conversational quant research.

Market Regimes

Every factor and similarity result is regime-aware — know whether the market is in a low, mid, or high volatility state.

CSV Export

Export all data to CSV format for further analysis in your preferred tools and platforms.

Free

$0

Explore the API, no credit card

  • 250 API calls/day
  • Cosine vector search
  • Daily factor + Top-N + regimes
  • Market-context snapshot
  • 1 long-lived API key

Hobby

$19/mo

Indie devs, AI agents, hobby trading

  • 2,500 API calls/day
  • DTW pattern matching
  • MCP server (Claude / Cursor)
  • Point-in-time historical features
  • Market-context history + report cards
Most Popular

Pro

$79/mo

Real strategies, leak-free backtests

  • 25,000 API calls/day
  • Forward-return labels (1d/5d/20d)
  • Label-aware similarity
  • Risk-cluster tags
  • 48hr priority support

Quant

$199/mo

Everything, incl. supervised PLS

  • 100,000 API calls/day
  • Supervised PLS similarity
  • Embedding vectors (raw 32-D)
  • Unlimited API keys
  • 24hr priority support

Ready to Get Started?

Join thousands of developers using Factor Weave for their financial data needs

Profile & Subscription

Manage your account settings and subscription

Account Information

January 2025

Usage Statistics

API Calls Today
Total This Month
Vector Searches
This week
Active Alerts
Monitoring

API Access

Re-issued on every login. Best for browser code; rotate often.

Dev API Keys

For SDKs, MCP clients, cron, CI
⚠ Save this key now — it won't be shown again.
No API keys yet.

Quick Start

curl -H "Authorization: Bearer fw_live_…" \
  "https://factorweave.com/api/features/AAPL"

Current Plan

API Access:
Vector Search:
Backtest Labels:
MCP Server:

Upgrade Your Plan

Billing & Subscription

Billing Status:
Billing Cycle:
Subscription ID:

You don't have an active Stripe subscription. Upgrade to get started:

Login

Don't have an account? Sign up

Create Account

View detailed pricing comparison →

Already have an account? Login

Dashboard

Welcome to your Factor Weave dashboard

Subscription

Active since registration

API Usage

calls today · UTC day

Features

✓ API Access

✓ Vector Search

✓ Backtest Labels

✓ MCP Server

Quick Actions

Recent Activity

Features Explorer

Search and explore stock features and rankings

Top Rankings

Top Rankings Results

Rank Ticker Date

Results

Ticker Date Ret 1D Ret 5D Ret 20D Ret 60D RSI ATR% RV 20D RV 60D Beta SPY 52W Z-Score Gap% Comp Score Q Score

Vector Search

Find similar stocks using vector similarity search

Similar Setups

· query date · method
Rank Ticker Date Score

Backtest Labels

Search and analyze backtest trading labels

Forward-Return Labels

· labelled days ·

Forward returns measured from each date's close. Targets are leak-free binary labels: 1 if the forward return cleared the threshold (+1% / +3% / +10%), else 0.

Date 1d return 5d return 20d return 1d ≥ +1% 5d ≥ +3% 20d ≥ +10%

Market Analytics

Derived whole-universe and per-ticker analytics — factor dispersion, regime, risk clusters. What each means & how it works →

Market Context

Whole-universe factor dispersion, breadth and regime — data you can't compute from a few tickers. · as of

Loading…

Ticker Report Card

Per-ticker digest — factor snapshot, cross-sectional percentile ranks, risk cluster, market regime, and an unusualness score (vs the ticker's own 252-day history). HOBBY tier and above; the risk cluster needs PRO.

Raw 32-D embedding vectors (QUANT) are available via the REST API and MCP — GET /api/embedding/{ticker}.

Alert Rules · beta

Define indicator-threshold rules for tickers you care about.

Delivery is live via webhooks. Add a delivery URL to a rule and Factor Weave will POST a JSON payload of every matching ticker once a day — works with Slack/Discord incoming webhooks, Zapier/Make/n8n, or any custom receiver. Email and Telegram delivery channels are still on the roadmap.

App & browser alerts · install Factor Weave as an app, and get a native notification on this device whenever an alert rule fires.
browser does not support push

Create New Alert

When the rule fires, we POST JSON listing every matching ticker to this URL. Works with Slack/Discord incoming webhooks, Zapier/Make/n8n hooks, or any custom receiver. Leave blank to store the rule without delivery.

Your Alerts

No alerts created yet. Create your first alert above.
Name Indicator Condition Value Status Actions

Admin

Operator view — users, usage, invites, activity.

Users
paid · admin
Signups Today
Calls Today
Calls This Month
As Of

Tier Breakdown

Top Users Today

No usage today.

All Users

ID Email Tier Status Today / Limit Month Expires Admin

Mint Invite Codes

Just minted (copy now):

Outstanding Invites

CodeTierUsedExpires

Create User

Recent Activity (last 100)

TimeUserEndpointStatus

Documentation

Everything you need to use the Factor Weave REST API and MCP server.

Overview

Factor Weave is a quantitative-finance data API exposing factor scores, similarity search across ~12,000 tickers, forward-return labels, and a regime-aware market context. Two access surfaces are available:

  • REST API at https://factorweave.com/api — JSON over HTTPS, suitable for any HTTP client.
  • MCP Server at https://factorweave.com/api/mcp — stateless JSON-RPC 2.0, plug directly into Claude Desktop, Cursor, or any MCP-aware agent.

All bulk computation happens off-line nightly; request-time work is just a typed file or DB read, so latency is consistently sub-50 ms even on shared hosting.

What's in the box

Per-ticker features
~30 daily factor columns: rsi, mom, meanrev, comp_score, z_52w, atrp, beta_spy, regime quantiles, …
Top-N rankings
Latest-day winners and losers by any factor, with rank and quantile.
Vector similarity
Four similarity methods over 32-D regime-aware embeddings: cosine, label_aware, supervised, dtw.
Forward-return labels
1d / 5d / 20d ahead, with leak-free construction and binary classification targets — for backtesting setups.
Market regimes
SPY-realized-volatility regime classification (low / mid / high) with full daily history.
Alert rules (beta)
Define indicator-threshold rules; when a rule fires, we POST every matching ticker to a delivery webhook URL you provide (works with Slack/Discord incoming webhooks, Zapier/Make/n8n, or any HTTPS receiver). Evaluated once per UTC day after the nightly bundle build. Email/Telegram delivery channels remain on the roadmap.

Where to next

Stuck? Email support@factorweave.com.

Getting Started

Three steps: create an account, get a credential, make your first call.

1 — Sign up

Registration is currently invite-gated. Use the Sign Up form with the invite code you were sent. Once you have an account, sign in via Login. You're already signed in — skip ahead.

2 — Get a credential

Two equivalent options:

Option A — Session JWT (browser, ~24h lifetime)
curl -X POST https://factorweave.com/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"…"}'

# → {"access_token":"eyJ…","subscription_tier":"PRO",…}
Option B — Long-lived dev API key (recommended for SDKs / MCP / cron)

Mint one from your Profile → API Access page. Format: fw_live_….

# All endpoints accept either header form:
Authorization: Bearer fw_live_…
X-API-Key:     fw_live_…

3 — First request

curl -H "X-API-Key: fw_live_…" \
  https://factorweave.com/api/features/AAPL

# Python with requests
import requests
r = requests.get(
    "https://factorweave.com/api/features/AAPL",
    headers={"X-API-Key": "fw_live_…"},
)
print(r.json())
Tip: every authed call is rate-limited per tier and counted toward your daily usage. Track it on your Profile page.

Cookbook

Copy-paste workflows for the things people actually do with Factor Weave. A framing note worth stating plainly: this is a research substrate — clean, point-in-time, leak-free factor data and similarity tooling. It is not a return-prediction service, and none of these recipes claim to be. They assemble data; the thesis is yours.

1 · Pull a ticker's current factor state

The latest-day row — ~28 factor columns: returns, realized vol, RSI, momentum, beta, composite score, cross-sectional ranks.

curl -H "X-API-Key: fw_live_…" \
  https://factorweave.com/api/features/AAPL

# Python
import requests
H = {"X-API-Key": "fw_live_…"}
row = requests.get("https://factorweave.com/api/features/AAPL", headers=H).json()[0]
print(row["rsi"], row["mom"], row["comp_score"], row["q_comp_score"])

2 · Screen the universe by a factor

Top-N tickers ranked by any factor on the latest day — a starting watchlist, not a buy list.

# strongest momentum names today
curl -H "X-API-Key: fw_live_…" \
  "https://factorweave.com/api/top?factor=mom&n=25"

# Python — momentum names that aren't already overbought
import requests
H = {"X-API-Key": "fw_live_…"}
rows = requests.get("https://factorweave.com/api/top",
                    params={"factor": "mom", "n": 100}, headers=H).json()["rows"]
candidates = [r for r in rows if r["rsi"] < 70]
print(len(candidates), "momentum names with RSI < 70")

3 · Find factor-similar tickers

"What else looks like this?" — useful for building peer sets, diversifying a thesis, or finding substitutes. min_lookback_days=30 keeps it to genuine historical analogues rather than today's co-moving ETFs.

curl -H "X-API-Key: fw_live_…" \
  "https://factorweave.com/api/vector-search/similar/AAPL?method=cosine&limit=10&min_lookback_days=30"

# each neighbour carries its factor row + forward-return labels, pre-joined
import requests
H = {"X-API-Key": "fw_live_…"}
r = requests.get("https://factorweave.com/api/vector-search/similar/AAPL",
                 params={"method": "cosine", "limit": 10, "min_lookback_days": 30},
                 headers=H).json()
for n in r["neighbors"]:
    print(n["ticker"], n["date"], "rsi", n["features"]["rsi"])

Note: similarity finds setups that look alike on factor profile. Our own leak-free testing shows it does not forecast forward returns — treat it as a screening lens, not a signal. See the research note.

4 · Assemble a leak-free backtest dataset

Join point-in-time features to forward-return labels. The labels are constructed leak-free (price[t+h]/price[t]−1); the model is yours to build.

import requests, pandas as pd
H = {"X-API-Key": "fw_live_…"}
B = "https://factorweave.com/api"

# point-in-time features for a ticker over a date range
feats  = requests.get(f"{B}/features/AAPL",
                      params={"start_date": "2024-01-01", "end_date": "2024-12-31"},
                      headers=H).json()["rows"]
# matching forward-return labels (PRO tier+)
labels = requests.get(f"{B}/labels/AAPL",
                      params={"start_date": "2024-01-01", "end_date": "2024-12-31"},
                      headers=H).json()["labels"]

X = pd.DataFrame(feats).set_index("date")
y = pd.DataFrame(labels).set_index("date")["fwd_ret_20d"]
df = X.join(y).dropna()
# df is now a clean, leak-free (features → realised forward return) frame.
# Train / cross-validate your own model on it.

5 · Condition research on the market regime

Factor behaviour differs by volatility regime. Pull the current SPY-vol regime and split any study by it.

curl -H "X-API-Key: fw_live_…" \
  "https://factorweave.com/api/top?factor=comp_score&n=10"

# via MCP, conversationally (Claude / Cursor):
#   "What volatility regime is the market in, and show me the
#    top momentum names — then tell me how crowded that factor looks."

6 · Read the derived analytics

Whole-universe and per-ticker derivations — a market-state read, a per-ticker digest, the risk cluster, the raw embedding. Tier-gated (see Tiers).

# market state — factor dispersion, breadth, regime odds  (FREE = today)
curl -H "X-API-Key: fw_live_…" https://factorweave.com/api/market-context?latest=1

# per-ticker digest — ranks, risk cluster, regime, unusualness  (HOBBY+)
curl -H "X-API-Key: fw_live_…" https://factorweave.com/api/report-card/AAPL

# risk cluster — calm / normal / stressed  (PRO+)
curl -H "X-API-Key: fw_live_…" https://factorweave.com/api/risk-cluster/AAPL

# raw 32-D factor-state embedding — build your own models  (QUANT)
curl -H "X-API-Key: fw_live_…" https://factorweave.com/api/embedding/AAPL

All four are also MCP tools — get_market_context, get_report_card, get_risk_cluster, get_embedding.

7 · Use the Python SDK instead of raw HTTP

Typed, autocompleting client — handles auth, retries on 429, paginates the universe endpoint. Same endpoints as the REST docs, just cleaner.

pip install factorweave

from factorweave import FactorWeave
fw = FactorWeave(api_key="fw_live_…")   # or env: FACTORWEAVE_API_KEY

# point-in-time factors
row = fw.features("AAPL").latest()
print(row.rsi, row.mom, row.comp_score)

# similarity search
hits = fw.similar("AAPL", method="cosine", limit=10, min_lookback_days=30)
for h in hits:
    print(h.ticker, h.date, h.distance)

# market-context + report card
print(fw.market_context().regime)
print(fw.report_card("AAPL").risk_cluster)

Source: factorweave-tools/python · PyPI: pypi.org/project/factorweave.

7b · The fw CLI shipped with the Python package

The same pip install factorweave installs an fw command — friendly tables by default, --json for pipes. Useful for shell pipelines, cron jobs, or just kicking the tires from a terminal.

export FACTORWEAVE_API_KEY=fw_live_…

fw features AAPL
fw top mom -n 25
fw similar AAPL --method cosine --limit 10
fw market-context
fw report-card NVDA
fw embedding TSLA --json | jq '.vector | length'

fw --help

7c · TypeScript / Node from a Next.js or Vercel function

Same shape as the Python SDK. Native fetch, ESM + CJS, full types, retry on 429 + 5xx. Server-side only — don't ship your fw_live_… key to the browser.

npm install @blazing-customs/factorweave

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 card = await fw.reportCard('AAPL');     // HOBBY+

Source: factorweave-tools/typescript · npm: @blazing-customs/factorweave.

7d · R from RStudio

Returns idiomatic data.frames. httr2-based with automatic retry on 429/5xx, tier-aware errors.

install.packages("factorweave",
                 repos = c("https://blazing-customs.r-universe.dev",
                           "https://cloud.r-project.org"))

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)

Source: factorweave-tools/r.

7e · Other languages: auto-generated clients

Go, Rust, Ruby, PHP, and Dart clients are committed under generated/ on the umbrella repo. Java / C# / Kotlin / Swift live 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

# generate Java / C# / Kotlin / Swift on demand:
bash scripts/regenerate_clients.sh java csharp kotlin swift

8 · Pull factors straight into Google Sheets

A Google Apps Script add-on exposes Factor Weave as spreadsheet custom functions — type a formula, get a live factor. Paste your API key once in Script Properties.

# one factor, one cell
=FACTORWEAVE("AAPL", "rsi")

# many factors at once → spills across columns
=FACTORWEAVE("AAPL", "rsi,mom,vol_real,comp_score")

# top-N screen → spills down a column
=FACTORWEAVE_TOP("mom", 25)

# market regime in one cell
=FACTORWEAVE_REGIME()

Setup guide + Code.gs: sdk/sheets.

9 · Get factor alerts in Slack / Discord / Zapier

Create an alert rule on the Alerts page with a delivery URL. The nightly evaluator posts JSON to that URL whenever the rule fires — Slack/Discord incoming-webhooks accept it directly, Zapier and n8n consume the same payload.

# sample delivery payload
{
  "rule_id": 17,
  "name": "AAPL momentum strong",
  "ticker": "AAPL",
  "factor": "mom",
  "value": 1.83,
  "threshold": 1.5,
  "operator": ">",
  "fired_at": "2026-05-22T22:05:14Z"
}

# create rule via API
curl -X POST https://factorweave.com/api/alert-rules \
  -H "X-API-Key: fw_live_…" \
  -H "Content-Type: application/json" \
  -d '{"ticker":"AAPL","factor":"mom","op":">","threshold":1.5,
       "delivery_url":"https://hooks.slack.com/services/T.../B.../..."}'

Browser-push delivery (no webhook URL needed) is also wired up — see Integrations → PWA + push.

More

Integrations

REST API Reference

Base URL: https://factorweave.com/api. All authed endpoints accept either Authorization: Bearer <jwt-or-api-key> or X-API-Key: fw_live_….

A machine-readable summary is also available at /api/docs.

Example responses

GET /api/features/AAPL

[{
  "ticker":"AAPL","instrument_type":"stock","date":"2026-05-01",
  "open":278.86,"close":280.14,"volume":79915442,
  "ret_1d":0.0324,"ret_5d":0.0335,"ret_20d":0.0946,
  "rsi":69.31,"mom":0.0946,"meanrev":0.0067,
  "z_52w":1.31,"beta_spy":0.97,"comp_score":-0.18,
  "rank_mom":7844,"q_mom":71,"rank_comp_score":1232,"q_comp_score":11
}]

GET /api/features/AAPL?date=2025-09-15 (historical row at a specific date — for analogue-backtests, eliminates look-ahead bias)

{
  "ticker":"AAPL","count":1,"first_date":"2025-04-02","last_date":"2026-05-01",
  "filters":{"date":"2025-09-15","start_date":"2025-09-15","end_date":"2025-09-15"},
  "rows":[{"date":"2025-09-15","close":231.45,"rsi":56.2,"mom":0.034,…}]
}

GET /api/vector-search/similar/AAPL?method=supervised&limit=2 (each neighbor carries pre-joined features + forward-return labels)

{
  "query_ticker":"AAPL","query_date":"2026-05-01","method":"supervised",
  "neighbors":[
    {
      "ticker":"ACGL","date":"2017-01-10","rank":1,"score":1.0000,
      "features":{"close":28.77,"rsi":44.23,"mom":0.0014,"comp_score":0.136,"beta_spy":0.46,…},
      "labels":  {"fwd_ret_1d":0.0006,"fwd_ret_5d":0.0204,"fwd_ret_20d":0.0660,"target_5d_up3":0,"target_20d_up10":0}
    },
    {
      "ticker":"WNTR","date":"2025-09-05","rank":2,"score":0.9754,
      "features":{…},"labels":{…}
    }
  ]
}

POST /api/me/keys → fw_live_… (shown ONCE)

{
  "key":"fw_live_AbCd…",
  "prefix":"fw_live_AbCd",
  "expires_at":"2027-05-03T07:00:00+00:00",
  "warning":"This is the only time the full key will be shown. Save it securely."
}

Error shape

HTTP 401  { "detail": "Token invalid or expired" }
HTTP 403  { "detail": "method 'supervised' requires a higher tier" }
HTTP 404  { "detail": "no neighbors for FAKE" }
HTTP 429  { "detail": "Daily quota exceeded", "tier": "FREE", "used": 250, "limit": 250 }

MCP Server

The Model Context Protocol (MCP) endpoint lets agents like Claude Desktop, Cursor, or any MCP-aware client use Factor Weave directly as a set of tools. The transport is stateless streamable HTTP — every POST is one self-contained JSON-RPC 2.0 request, no session, no SSE.

Endpoint

POST https://factorweave.com/api/mcp
Content-Type: application/json
Authorization: Bearer fw_live_…       (or X-API-Key)
Accept: application/json
Protocol version: 2025-03-26

initialize, tools/list, ping, and the public get_manifest tool work without auth. Every other tool requires a credential.

Tool catalog

Tool Auth Purpose

Wire format

Discover tools:

curl -X POST https://factorweave.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Call find_similar:

curl -X POST https://factorweave.com/api/mcp \
  -H "Authorization: Bearer fw_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0","id":1,"method":"tools/call",
    "params":{
      "name":"find_similar",
      "arguments":{"ticker":"AAPL","method":"supervised","limit":5,"min_lookback_days":30}
    }
  }'

Claude Desktop / Cursor config

Drop into ~/Library/Application Support/Claude/claude_desktop_config.json (or the equivalent on your platform):

{
  "mcpServers": {
    "factorweave": {
      "url": "https://factorweave.com/api/mcp",
      "transport": "streamable-http",
      "headers": {
        "Authorization": "Bearer fw_live_…"
      }
    }
  }
}

Some clients only support a stdio bridge; in that case use @modelcontextprotocol/inspector or any HTTP→stdio shim, pointing it at the URL above.

Python SDK

from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async with streamablehttp_client(
    "https://factorweave.com/api/mcp",
    headers={"Authorization": "Bearer fw_live_…"},
) as (read, write, _):
    async with ClientSession(read, write) as s:
        await s.initialize()
        tools = await s.list_tools()
        result = await s.call_tool(
            "find_similar",
            {"ticker": "AAPL", "method": "dtw", "limit": 5},
        )

Vector Similarity Methods

Each ticker × date is embedded as a 32-dimensional regime-aware vector. The four similarity methods differ in which subset of the backbook is searched and what distance is used to rank it.

cosine — all tiers

Cosine similarity over the full 32-D embedding against every (ticker, date) in the backbook.

  • Score range: -1 to 1 (higher = more similar)
  • Use when: you want maximum recall and don't care about regime / time-shape
  • Caveat: top hits will often be same-day correlated tickers (ETFs of the underlying). Use min_lookback_days=30 to filter.

label_aware — PRO+

Cosine similarity, but the backbook is restricted to dates that share the query's SPY-volatility regime (low / mid / high).

  • Score range: -1 to 1
  • Use when: you want lookalikes from comparable market conditions
  • Caveat: if today's regime is the dominant one in history, results will overlap with plain cosine

supervised — QUANT

Embeddings are projected through a PLS regression fit on forward-return labels, then ranked by cosine — a return-weighted view of similarity.

  • Score range: -1 to 1 (in PLS-projected space)
  • Use when: you want a return-weighted similarity lens rather than plain factor-profile similarity
  • Caveat: it is not a return forecast — our leak-free testing shows factor similarity does not predict returns (research note). It's an alternative projection, not an oracle.

dtw — PRO+

Cosine top-200 shortlist, then re-ranked by Dynamic Time Warping distance over the rolling return window with a Sakoe-Chiba band.

  • Score range: negative DTW distance (higher / closer to zero = more similar)
  • Use when: you care about shape over time, even with phase shifts (e.g. "find tickers tracing the same arc, possibly lagged a week")
  • Caveat: the shortlist is only top 50 per query — narrower than cosine — so recall is lower by design

When to use which

GoalMethod
"What looks like AAPL today across all of history?"cosine + min_lookback_days=30
"Show me only matches from comparable market conditions"label_aware
"Rank similarity with a return-weighted projection"supervised
"Find time-warped shape matches, even with phase lag"dtw

Derived Analytics

Four products computed over the whole universe — things you can't reconstruct from the handful of tickers you hold, because they need the entire cross-section. All are pure derivations: no raw market data. Use them interactively in the Analytics tab.

Market Context — FREE (today) · HOBBY+ (252-day history)

GET /api/market-context — a daily, whole-universe read of market state. Three groups of metrics:

  • Factor dispersion — the 10th-to-90th percentile spread of momentum / composite score / RSI across every ticker. Wide = the cross-section is spreading out (more relative opportunity, often more stress); narrow = names moving together. disp_momentum_pctile says where today's dispersion sits vs its own trailing year (1.0 = widest in a year). It's a percentile spread, not a standard deviation, so a few penny-stock blow-ups can't distort it.
  • Breadth — the fraction of the universe with positive momentum, a positive trailing 20-day return, overbought (RSI>70) or oversold (RSI<30). Breadth below 0.5 means more than half the market is negative.
  • Regime — the current SPY-volatility regime (low / mid / high), how many trading days it has held, and regime_next_odds — the empirical P(next trading day's regime | current), counted over full history.

How to read it: rising dispersion + falling breadth is the classic "market getting choppy" signature; the regime odds quantify how sticky the current regime has been.

Factor Report Card — HOBBY+

GET /api/report-card/{ticker} — a per-ticker digest assembled from the rest of the dataset. Five parts:

  • Snapshot — the ticker's current factor values (return, momentum, RSI, realized vol, beta, …).
  • Percentile ranks — where it sits cross-sectionally today (e.g. q_comp_score = 87 → 87th percentile of the universe on composite score).
  • Risk cluster — the analogue-derived volatility regime (see below). PRO+; HOBBY sees it locked.
  • Market regime — the current SPY-volatility regime, for context.
  • Unusualness — a z-score of today's factor values against the ticker's own 252-day history. score is the largest absolute z across factors; verdict is typical (<1.5), somewhat unusual (1.5–2.5) or very unusual (≥2.5). It answers "is this ticker in a normal state for itself, or an outlier?"

Risk Cluster — PRO+

GET /api/risk-cluster/{ticker} — the volatility regime a ticker's factor analogues historically landed in.

  • How it works: take the ticker's cosine analogues, look at each analogue's realized forward 20-day volatility, average it (expected_fwd_vol), and rank cross-sectionally into a tercile — calm / normal / stressed.
  • How to read: vol_percentile places it 0–1 across the universe; n_analogues is how many historical analogues backed the tag.
  • What it is — and isn't: our leak-free probe found factor similarity clusters forward volatility at a real, significant level (cross-sectional IC +0.062, t +8.3 — see the research note). It's a risk-coherence / screening signal, not a volatility forecast for the stock — a ticker's own trailing vol predicts that far better.

Embedding Vectors — QUANT

GET /api/embedding/{ticker} — the raw 32-dimensional regime-aware factor-state vector for a ticker.

  • What it is: the exact representation the similarity search itself runs on — each ticker-day compressed to 32 floats.
  • Use when: you want to build your own models, similarity metrics or clustering on the representation rather than consuming our precomputed neighbors.
  • Caveat: it's a learned representation, not a signal — distance in this space is factor-profile similarity, which (per the research note) does not forecast returns.

When to use which

QuestionUse
"What state is the market in today?"market-context
"Give me a one-look profile of this ticker"report-card
"Is this setup historically calm or stressed?"risk-cluster
"I want the raw vectors to build my own models"embedding

SDKs & Integrations

Six ways to use Factor Weave — pick the one that matches your workflow. All hit the same API, share the same daily quota, and read the same nightly-fresh data. See the dedicated marketing page for a shareable overview.

🐍 Python SDK pip install factorweave

Typed client over every endpoint, with optional pandas / polars adapters and tier-aware error classes. Auth via API key (preferred for scripts) or JWT.

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()
nbrs   = client.find_similar("NVDA", method="cosine", min_lookback_days=30)
client.report_card("AAPL")     # HOBBY+
client.risk_cluster("TSLA")    # PRO+
client.embedding("AAPL")       # QUANT

Source: github.com/Blazing-Customs/factorweave-tools/python · PyPI

🤖 MCP Server — 12 tools · HOBBY+

Stateless streamable-HTTP MCP. 12 typed tools: factor lookups, similarity search, top-N, market context, report card, risk cluster, embeddings, labels, alerts, usage, regime, manifest.

// claude_desktop_config.json
{
  "mcpServers": {
    "factorweave": {
      "url": "https://factorweave.com/api/mcp",
      "transport": "streamable-http",
      "headers": { "Authorization": "Bearer fw_live_…" }
    }
  }
}

→ Full protocol on the MCP Server docs page · marketing /mcp.html

📜 OpenAPI 3.0 spec

Typed schema for every endpoint. Drop the URL into anything that consumes OpenAPI — LangChain OpenAPIToolkit, LlamaIndex, OpenAI Function Calling, Anthropic tool use, ChatGPT Actions, autogenerated SDKs.

# 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")

# ChatGPT Actions: paste the URL into the Action's "Import from URL" field.

Raw spec: /api/openapi.json · Clickable explorer: /api/docs/swagger

📊 Google Sheets add-on

Apps Script project — paste once, then use custom functions in any cell. Per-user API key stored via PropertiesService (not shared with the sheet).

=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+)

Install: paste sdk/sheets/Code.gs into Extensions → Apps Script. Then Factor Weave → Set API key… from the new menu.

📡 Webhook alert delivery — Slack · Discord · Zapier · Make · n8n

Create an alert rule, 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.

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 }, …]
}

Configure rules in the Alerts tab. One POST per rule per day (capped at 100 matches; truncated: true if more).

🔔 PWA + Web Push — HOBBY+

Install Factor Weave as an app on iOS / Android / desktop (the browser's "Add to home screen" / "Install" affordance); opt in to native browser notifications when an alert rule fires. Push arrives even when the tab is closed.

Toggle both from Alerts → App & browser alerts.

Tiers & Limits

All tiers share the same underlying data; what differs is daily quota and which advanced surfaces — vector methods, labels, MCP, and the derived analytics — are unlocked.

Tier Price Daily calls Vector methods Labels MCP
FREE$0250cosine
HOBBY$19/mo2,500cosine, dtw
PRO$79/mo25,000+ label_aware
QUANT$199/mo100,000all four (+supervised)

REST and MCP calls share the same daily quota. Quota counter resets at 00:00 UTC.

Derived analytics by tier

Whole-universe / per-ticker derivations — things you can't compute without the full cross-section.

FREE/market-context — today's reading only
HOBBY+ full 252-day market-context history · /report-card/{ticker}
PRO+ /risk-cluster/{ticker} — analogue-derived volatility regime
QUANT+ /embedding/{ticker} — the raw 32-D factor-state vector

Quota behaviour

  • Quota counter resets at 00:00 UTC.
  • Both REST and MCP calls count against the same daily total.
  • Exceeding quota returns HTTP 429 with { "detail": "daily quota exceeded for tier …" }.
  • An expired paid subscription soft-downgrades to FREE until renewed — no hard cutoff.