← Back to Sportsbook Pricing · Pilot packet · CSV spec

Settled-bet CSV — column spec

What we need from you to run a 30-day Shadow Pilot. One CSV per day, dropped to S3 / SFTP / shared inbox — your call.

Required columns

Each row is one settled bet on an esports market. We compute fair value per row, compare to your offered line, and aggregate for the weekly report.

ColumnTypeExampleNotes
operator_event_idstrthp-2026-9847 Your internal event ID — opaque to us, used to deduplicate
sportenumcs2 One of: cs2, dota, cod, rl
league_or_tournamentstrBLAST Premier Spring Free text; helps us cross-reference our match DB
start_time_utcISO 86012026-04-22T18:00:00Z Match scheduled start in UTC
team_1strVitality Home / first team name; we fuzzy-match to our DB
team_2strNatus Vincere Away / second team name
market_typeenummoneyline One of: moneyline, spread, total, correct_score
selectionstrteam_1 For moneyline: team_1 or team_2. For spread/total: include the line in the value (e.g. team_1_-1.5, over_2.5)
line_or_handicapfloat?-1.5 Numeric handicap line for spread/total markets; null for moneyline
offered_decimal_oddsfloat1.85 The decimal odds you offered at the moment of the bet
offered_timestamp_utcISO 86012026-04-22T17:42:11Z When the bet was struck — used to align with our pre-event quote
settlement_resultenumwin One of: win, lose, push, void
settlement_timestamp_utcISO 86012026-04-22T20:18:33Z When the bet settled
void_flagboolfalse True if the market was voided (we exclude these from leak metrics)

Optional but valuable columns

Including these lets us produce stake-weighted metrics instead of unit-weighted. A 7pp pricing miss on a $20 bet is noise; a 3pp miss on a high-handle CS2 final is real money. Without these, the report is unweighted and we say so explicitly.

ColumnTypeExampleNotes
stake_or_exposurefloat247.50 Stake taken on this side, in your reporting currency
currencystrUSD ISO 4217 currency code; needed if you mix currencies
closing_decimal_oddsfloat?1.78 Your own closing line — lets us compute internal CLV in addition to fair-value comparison
vendor_namestr?kambi-feed Source of the offered line if not your own model
market_statusenum?open Open / suspended / closed at the time of the bet
internal_limit_tierstr?tier_2 Your customer's segmentation tier (anonymized)
customer_segment_anonymizedstr?recreational Recreational / sharp / vip — DO NOT include actual customer IDs
Privacy: we never want customer-identifiable data. No real customer IDs, names, emails, IPs, or device fingerprints. Use opaque tier labels only. See /pilot/data-handling.

Format

Drop options

  1. S3 bucket — we'll provision a bucket with a unique IAM user and rotating access key. You drop daily; we pull. Cleanest for ops teams.
  2. SFTP — we provide a hostname + per-operator user/key pair. Drop to /incoming/; we sweep every 4 hours.
  3. Email attachment — for the first week only. Send to your assigned pilot-{slug}@ address. Attachments are auto-extracted to a private bucket and the email is deleted within 1 hour.
Download empty template (CSV)

Validation

The first file you send is sanity-checked end-to-end before we generate your sample report. We email back within 24 hours with one of: