← Docs

Record export schema

NuroPicks publishes the full pick ledger as raw data so any third party (Pikkit, Pyckio, Action Network reviewers, quant Twitter, custom audit scripts) can compute their own ROI, yield, hit rate, and CLV without our cooperation. Raw data IS the credibility signal.

Endpoints

  • JSON: https://nuropicks.com/record/export.json
  • CSV: https://nuropicks.com/record/export.csv

Both endpoints return the same rows in two formats. Choose whichever is easier to pipe into your stack.

Query parameters

Param Type Default Notes
since ISO date string none Filter to picks posted on or after this timestamp.
sport string (lowercase) none Filter to a single sport key (e.g. nba, nfl).
limit integer 1000 Max rows. Capped at 5000.

Examples:

/record/export.json?since=2026-01-01&sport=nba&limit=500
/record/export.csv?since=2026-04-01&limit=2000

Fields

Field Type Notes
id integer Stable per-pick identifier. Permalinks at /record/{id}.
sport string NBA, NFL, MLB, NHL, NCAAF, NCAAB, WNBA, MMA, soccer, tennis.
game string Human-readable matchup, e.g. "BOS @ NYK".
market string spread, total, moneyline, prop, parlay-leg, etc.
pick string The actual selection text shown on the public permalink.
odds_american integer American odds at post time. Locked.
closing_odds_american integer or null Closing odds captured at game lock. Null if pre-close.
clv_bps integer or null Closing Line Value in basis points. Positive = beat close.
stake_units number Stake in units (1.0 base). Reflects model confidence sizing.
result string pending, win, loss, push, void.
posted_at ISO timestamp Server time the pick was locked into the ledger.
graded_at ISO timestamp or null Server time the pick was graded. Null if still pending.
permalink URL Public detail page for this pick.
source string (JSON only) Discord channel or web surface that originated the pick.

Append-only contract

Rows are locked at post time by a Postgres trigger. We do not retroactively edit or delete settled picks. Anything you read here today reads the same way next week. Schema columns are append-only too: new columns will be added at the end so existing scripts keep working.

CLV computation

CLV in basis points uses decimal odds:

opening_decimal = odds > 0 ? 1 + odds/100 : 1 - 100/odds
closing_decimal = same formula on closing_odds_american
clv_bps = round(((closing_decimal / opening_decimal) - 1) * 10_000)

A pick at +110 (decimal 2.10) that closes at +100 (decimal 2.00) has CLV of ((2.00/2.10) - 1) * 10_000 = -476 bps. Negative CLV means the line moved against you after you bet; positive means you beat the close.

Cache and rate limits

Both endpoints use Cache-Control: public, s-maxage=900, stale-while-revalidate=3600. Reviewers polling every 15 minutes will hit cached responses. CORS is wide open (Access-Control-Allow-Origin: *) so browser-based audit tools work without a proxy.

If the database is unreachable at request time, the JSON response sets db_reachable: false and the CSV body includes a comment row marking the outage after the header.

Stable contract

This endpoint and its schema are versioned by URL path. We will never make a breaking change to /record/export.json or /record/export.csv. Future schema versions land at /record/export.v2.json.

21+ only. Not financial advice. 1-800-GAMBLER.