← Docs

Third-Party Verifier Plan (Zero-Budget Revision 2026-04-21)

Directive: Zero paid verifiers during alpha. Our own immutable ledger IS the verifier.

What's shipped (foundation)

  • picks table with locked_at + picks_immutable_guard Postgres trigger. Rows cannot be retroactively edited or deleted once locked. This is the foundation of the claim "no cherry picking."
  • /api/record/export serves the full ledger as JSON or CSV. Anyone can scrape, audit, diff over time.
  • /record public page renders live metrics with empty-state + error-state handling and explicit honesty rules.
  • weekly_snapshots append-only table with DB trigger blocking UPDATE/DELETE. Once Sunday 11:59 PM ET freezes a week, it cannot be altered.

Those three pieces, without any third-party stamp, are more auditable than 90% of picks services in the market.

The self-verifier strategy

We do NOT pay CAPTRACKER, SharpRank, Action Network, or Pikkit. We also do NOT pay OddsJam or Pinnacle for closing-line data during alpha.

Instead:

  1. Publish the ledger publicly. Already live at nuropicks.com/record.
  2. Snapshot odds close to game start. Self-built. Use the same free The Odds API feed we already poll to capture a closing-line snapshot at commence_time - 5 minutes for every open pick. Store in picks.closing_odds + picks.closing_at (columns already exist).
  3. Compute CLV vs consensus-of-books. Not Pinnacle-specific. We average the closing American odds across all books The Odds API returns for a market, convert to decimal, and compute (posted_decimal / consensus_decimal) - 1. This is a slightly weaker CLV signal than Pinnacle-anchored CLV, but it's free and directionally the same for -EV detection.
  4. Weekly public post. Cron pulls the week's snapshot from weekly_snapshots and posts a text-only recap to X and a pinned Discord message. Build-in-public = ongoing receipt.
  5. Third-party audits come from the crowd. Anyone can pull /api/record/export and verify the math themselves. Sharp bettors on X LOVE doing this; invite them.

When to revisit paid verifiers

  • 100 paying members OR $3k MRR: budget permits OddsJam trial for Pinnacle CLV.
  • 250 paying members OR $7.5k MRR: budget permits CAPTRACKER enrollment (if still around in 2026+).

Until then, we win credibility by shipping the immutable record + not lying on it, not by paying for a stamp.

Implementation plan (week 1-2, zero-cost)

Step 1: Closing-line snapshot job (2-3 hours of work)

Add a new worker to src/bot/services/closing-snapshot.js:

Every 1 min:
  SELECT picks WHERE closing_at IS NULL
    AND posted_at < NOW() - INTERVAL '2 hours'
    AND result = 'pending'
  For each pick:
    Look up same game+market in odds-feed cache
    If game starts within next 5 min:
      Snapshot current best price across all books
      UPDATE picks SET closing_odds = X, closing_at = NOW()

Integrates with existing odds-feed.js which is already polling The Odds API (idle until ODDS_API_KEY set).

Step 2: Grading job (2-3 hours of work)

Add a new worker to src/bot/services/grading.js:

Every 15 min:
  SELECT picks WHERE result = 'pending' AND posted_at < NOW() - INTERVAL '4 hours'
  For each pick:
    Look up game result (The Odds API scores endpoint, FREE, or ESPN scoreboard scrape)
    If final:
      Determine win/loss/push based on market and pick text
      UPDATE picks SET result = X, graded_at = NOW()

Step 3: Weekly snapshot cron (2 hours of work)

Sunday 11:59 PM ET:

INSERT INTO weekly_snapshots (week_start, week_end, picks_count, wins, ..., clv_avg, by_sport, note)
SELECT (compute aggregates for last week from picks)

Once inserted, the append-only trigger prevents edits. Post the snapshot to X + Discord.

Step 4: Weekly public post automation (2 hours of work)

Script that reads latest weekly_snapshots row and:

  • Posts a tweet with the numbers + link to /record
  • Posts a Discord embed in #record channel
  • Pins if it beat the prior week

Zero-cost CLV math (for transparency on the site)

closing_decimal  = average of [american_to_decimal(b.closing_price) for b in books]
posted_decimal   = american_to_decimal(pick.odds_american)
clv_pct          = (posted_decimal / closing_decimal - 1) * 100

Published on /record FAQ + /methodology page so nobody can claim we're hiding the formula.

What an external auditor gets for free

  • Full ledger via /api/record/export?format=csv
  • Schema version header, immutability header
  • Per-pick CLV, grading timestamps, locked-at timestamps
  • Weekly snapshots as a separate dataset

Any sharp bettor or crypto-verification crowd member can build a verification bot on top of this and point their audience at it. That's the long play.

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

verifier integration plan - NuroPicks Docs