🎮War Thunder Stats

Upload stats

Currently 1,061 entries in the DB. CSV format: Date,Vehicle,Type,BR,Spawns,Deaths,Kills Air,Kills Ground,... (header row required; date as YYYY.MM.DD).

Upload CSV

CSV replaces matching rows. StatShark JSON uses its source snapshot date, records BR as 0 (unknown in export), uses AB/RB + stable ID as legacy vehicle identity, and is deduplicated by source hash.

Download StatShark profile JSON

Pass StatShark verification first. In a logged-in statshark.net tab, open DevTools Console, copy this script, then run it. Do not share or modify any Turnstile token.

Copy only. This app never executes the script.

(() => {
  const playerId = prompt("StatShark numeric player ID")
  if (!/^\d+$/.test(playerId ?? "")) throw new Error("A numeric player ID is required")
  const turnstileToken = globalThis.turnstile?.getResponse?.()
  if (!turnstileToken) throw new Error("Complete StatShark verification first")
  fetch(
    "/api/stat/MakeStatRequestById/" + playerId + "?update=true",
    {
      method: "POST",
      body: JSON.stringify({ turnstile_token: turnstileToken }),
    },
  )
    .then(async (response) => {
      if (!response.ok) throw new Error("StatShark export request failed")
      const profile = await response.json()
      if (!profile || typeof profile !== "object" || Array.isArray(profile)) {
        throw new Error("StatShark returned invalid JSON")
      }
      const blob = new Blob([JSON.stringify(profile)], { type: "application/json" })
      const url = URL.createObjectURL(blob)
      const link = document.createElement("a")
      link.href = url
      link.download = "statshark-" + playerId + "-" + new Date().toISOString().replaceAll(":", "-") + ".json"
      link.click()
      URL.revokeObjectURL(url)
    })
})()

Add a single entry

Use this when you want to record one (date, vehicle) row by hand. For bulk imports, prefer CSV upload above.

+ Add entry manually