Private beta

Sports betting data, priced to be built on.

Odds, line-movement history, betting splits, and the derived signals computed from them — a REST API and a Python SDK, billed per request with no credit multipliers and no surcharge on historical queries.

What is here

The line-movement archive

A time-ordered price series per selection, priced the same as any other request. Set pregame_only for any backtest — in-play points know part of the result.

Closing lines, de-vigged

The last price each book showed before kickoff, with a fair probability and how many seconds before the start it was captured. Started events only — an upcoming game has no closing line, so it returns nothing rather than a price still moving.

Betting splits with divergence

Where money and ticket counts disagree, from three independent sources.

Prediction market versus the books

Where Polymarket disagrees with the de-vigged consensus of the sportsbooks, ranked by the size of the gap. Both sides de-vigged, so a bookmaker's margin is never reported as signal.

CLV-graded picks

A labeled record of claims with the price taken, the price the market closed at, the closing-line value between them, and the result — voids and pushes intact, and mean CLV reported next to ROI, because on this data the two disagree.

Ratings, consensus & bulk export

Point-in-time team ratings with leakage-safe lookups, de-vigged cross-book consensus, and CSV or Parquet export — pagination is the wrong shape for research.

Getting started

A key in two minutes, a DataFrame in three.

Sign up with an email in the portal, confirm it, and the key is shown once. The SDK returns typed pandas frames; the raw REST API is documented live at /docs.

pip install pycap

import pycap
client = pycap.Client(api_key="pycap_live_...")

closing = client.odds.closing(league="mlb", as_dataframe=True)
picks   = client.picks.to_dataframe(with_clv_only=True)
gaps    = client.signals.divergence(min_divergence=0.02)

Reference