Historical esports data.
Without the scrape tax.

What does the historical esports data API return?

The historical esports data API returns closing lines, the quote tape for a contract, player map game logs and settled results, all on KashRock IDs. A match's closing lines come from GET /v6/esports/{sport}/matches/{slug}/lines/history on Builder and above, with an open and a close for each book and the time each was observed. Free Sandbox keys include 30 days of match history.

You needEndpointWhat comes back
Closing lines for a matchGET /v6/esports/{sport}/matches/{slug}/lines/historyOpening and closing winner, totals and spreads per book
The quote tape for a contractGET /v6/esports/history/contractLine, price and status over time for one market
A player's map historyGET /v6/esports/{sport}/players/{slug}/gamelogsVault-backed map rows to score a prop against
Settled resultsThe results feedProps and lines graded against what happened

Updated

Builders looking for historical lines hit the same wall: books hide the past, stats sites omit the offer, and scrapers rot. KashRock keeps the quote tape, closing mainlines, gamelogs, and settlements behind one key.

Why historical esports data is hard to find

If you searched for historical PrizePicks lines, CS2 kill tapes, or LoL prop backtests, you already know the gap. The pain is not "more scrapers." It is missing a vault that remembers what was offered and how it settled.

  • —Books do not sell you a history API — PrizePicks, Underdog, and the rest show today's board. Yesterday's line is gone from the app. Scrapers that worked last month break when the payload or CDN changes.
  • —Stats sites are not book-native — HLTV, VLR, and DatDota tell you what happened on the map. They do not tell you what line the DFS app posted at 2pm — so hit-rate models invent joins that never match production props.
  • —IDs drift across every source — One player, five spellings. One market, six stat strings. Without stable prop and player IDs, historical joins silently miss rows and your backtest looks better than live.

How KashRock solves it

Workers ingest live boards and match stats continuously. History endpoints read what was stored — so your backtest uses the same contract IDs as production.

  • —Quote tape per contract — GET /v6/esports/history/contract returns the vault tape for a market_key or prop_id+book — line, price, status — without live fan-out on the request.
  • —Closing mainlines by match — GET /v6/esports/{sport}/matches/{slug}/lines/history returns opening and closing match winner, totals, and spreads. Builder+. MCP get_lines_history.
  • —Player map gamelogs — GET /v6/esports/{sport}/players/{slug}/gamelogs pulls vault-backed map rows so you can score a prop against what the player actually posted.
  • —Settled results — The results feed grades props and line odds (moneyline, spread, total) against outcomes so you can measure hit / miss / push on the same IDs you used for the live board.

Start with one contract

Pull the vault tape for a market you already saw on the live board:

curl -H "X-API-Key: YOUR_KEY" \
  "https://kashrock.up.railway.app/v6/esports/history/contract?market_key=kr_mk_…"

curl -H "X-API-Key: YOUR_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/matches/{slug}/lines/history"

If you need a normalized feed instead of another UI wrapper, the Esports API exposes live boards, schedules, and history on one schema — with the IDs and outcome patterns that keep backtests and grading honest. Start free on Sandbox, or see published pricing.

Frequently asked questions

What historical esports data does KashRock return?

Quote tape for a prop contract (line, price, status over time), opening and closing match winner / totals / spreads by match, player map gamelogs, and settled prop results so you can measure hit rates against what was actually offered.

Is this live scraping on every request?

No. History endpoints read from the vault and Redis cache. Workers ingest books and match stats ahead of time — the request path does not fan out to upstream sites.

Which sports have historical coverage?

Props and results cover CS2, Valorant, LoL, Dota 2, COD, R6, MLBB, and Deadlock where books post lines. Deep map gamelogs are strongest on CS2, Valorant, LoL, and Dota 2.

Can I backtest PrizePicks or Underdog lines?

Yes. Pull the history contract for a market_key or prop_id+book, join player gamelogs, and use the results feed for grades — without rebuilding scrapers per book.

Is there a free tier to try historical endpoints?

Sandbox is $0 with an instant key for props, matches, players, and live REST on every sport — not the history vault. Quote tape, closing mainlines, gamelogs, and settled results need Builder or Pro. Call whoami / list_capabilities on your key to confirm.

Do historical rows share IDs with the live board?

Yes — the same kr_match_id, propId and market_key you read live are what the tape, gamelogs and results return, so a backtest joins on production IDs instead of a parallel id space.