The crypto theft dataset
The crypto theft dataset behind this site: what a release holds, what it covers, what changed, how to keep a copy in sync, and the licences that come with it.
3,337 incidents since 2011; $35.26B counted as stolen in 3,121 thefts.
This release 2026-11-01 13:39 UTC
| File | Size | Holds | sha256 (first 16) |
|---|---|---|---|
/hacks.json | 2.42 MB | every incident, all public fields (rows) and the release's checks (meta) | 34405f2133893f04 |
/hacks.csv | 1.35 MB | the same, flat, one row per incident | 24693b3e320ae2ef |
/data/fields.json | 0.01 MB | the data dictionary: type, meaning and how each field is made | c3fd5b8ea0e82760 |
/data/changelog.json | 0.05 MB | every release's changes: added, merged away, changed fields | 78234b75ef5bf941 |
/data/id-aliases.json | 0.00 MB | old id to the id that holds it now, for ids merged away | 64ad2817b0fffaf8 |
/data/controls.json | 0.11 MB | security controls per way in, and for each theft the controls that answer it | 9b2f548e96a98d7b |
Released daily at 21:20 UTC, and within the hour when a theft of $10M or more is new or newly confirmed. Ids are stable: an id is never reused, and one merged into another incident stays resolvable through /data/id-aliases.json.
Coverage, year by source
| Year | Incidents | Counted | Agreed $ | Target known | DefiLlama | SlowMist | W3IGG | rekt | ack3 |
|---|---|---|---|---|---|---|---|---|---|
| before 2016 | 20 | $507.3M | 95% | 100% | 18 | 10 | · | · | · |
| 2016 | 5 | $135.7M | 46% | 100% | 5 | 3 | · | · | · |
| 2017 | 14 | $289.9M | 46% | 71% | 8 | 10 | · | · | · |
| 2018 | 84 | $1.21B | 74% | 54% | 31 | 83 | · | · | · |
| 2019 | 132 | $323.9M | 83% | 39% | 26 | 132 | · | · | · |
| 2020 | 129 | $4.57B | 4% | 64% | 46 | 123 | · | 11 | · |
| 2021 | 289 | $5.77B | 79% | 61% | 127 | 237 | 89 | 60 | · |
| 2022 | 529 | $4.82B | 52% | 48% | 185 | 312 | 280 | 50 | · |
| 2023 | 690 | $2.46B | 54% | 43% | 197 | 464 | 199 | 62 | · |
| 2024 | 588 | $2.31B | 79% | 44% | 218 | 411 | 162 | 45 | · |
| 2025 | 382 | $3.86B | 68% | 43% | 147 | 202 | 93 | 48 | · |
| 2026 | 475 | $9.02B | 93% | 76% | 325 | 344 | 82 | 53 | 134 |
Agreed $: share of the year's counted dollars that two or more sources report with the same date and loss. Target known: share of incidents whose target a source states or DefiLlama's protocol list matches (not estimated). DeFiHackLabs, a source with a reproduced exploit for each incident, is counted but not linked. ack3 covers January to June 2026 only.
What changed 12 releases with changes
| Release (UTC) | Incidents | Counted | Why |
|---|---|---|---|
| 2026-11-01 13:39 | -21 | −$74.3M | 21 merged into the incident they repeat; 21 with changed fields |
| 2026-11-01 08:57 | +0 | +$0 | 16 with changed fields |
| 2026-11-01 08:44 | +0 | −$1.23B | 28 with changed fields; Coinbase accused by crypto sleuth zachxbt of allowing more than $300 million per year in social engineering attacks on its customers −$300M (left the count); Arrests made in $300 million Indian crypto scam −$300M (now followup); Myanmar-based romance scam operation pulls in $100 million in less than two years −$100M (left the count) |
| 2026-11-01 07:26 | +6 | +$5.1M | added Alchemix yvWETH user position drained via malicious unverified-contract approval $1M, Gyroscope $807K, XPlayer_Media $717K and 3 more; 129 with changed fields |
| 2026-11-01 02:20 | -3 | −$721K | 3 removed (merged or dropped before ids were aliased); 1 with changed fields |
| 2026-11-01 01:44 | +0 | −$1.19B | 3 with changed fields; BeautyChain −$1.00B (left the count); SmartMesh −$140M (left the count); Nesa −$50M (left the count) |
| 2026-10-31 21:20 | +3 | +$680K | added Troves $667K, Vara Bridge $13K, b14g |
| 2026-10-31 17:11 | +2 | +$4K | added VergeX $4K, Flap |
| 2026-10-31 16:43 | -13 | −$49.9M | added Network of fake Twitter accounts impersonating crypto security firms phish panicked victims $300K, NFT collector files $6 million lawsuit against OpenSea, LooksRare, and the company behind Bored Apes for not doing more to discourage thefts $300K, Another $1 million lawsuit is filed against OpenSea for stolen apes $165K and 1 more; 17 removed (merged or dropped before ids were aliased); 98 with changed fields |
| 2026-10-31 16:32 | +0 | +$0 | 2 with changed fields |
| 2026-10-31 16:12 | +0 | +$0 | 2 with changed fields |
| 2026-10-31 15:57 | -9 | +$318.5M | added DEOSBET $20K, 7Tron $2K; 11 removed (merged or dropped before ids were aliased); 241 with changed fields; Babel Finance +$224.6M (figure revised); Akutars +$34M (figure revised); Bitmarket +$28.1M (figure revised) |
The full log: /data/changelog.json. Each entry lists every incident added (id, date, name, kind, loss, grade), every id merged away with the id it points to now (into), and for each changed incident the old and new value of date, name, kind, loss, grade, source count, target class and whether it is counted.
Keeping a copy in sync
# Python: apply the releases you have not seen yet to a local copy keyed by id
import requests
base = "https://swan-hack-tracker.pages.dev"
log = requests.get(base + "/data/changelog.json").json()
new = [x for x in log if x["released"] > last_seen] # last_seen: the release you synced last
full = {r["id"]: r for r in requests.get(base + "/hacks.json").json()["rows"]}
for x in new:
for m in x["removed"]:
mine.pop(m["id"], None) # merged away: m["into"] holds it now
for r in x["added"] + x["changed"]:
mine[r["id"]] = full[r["id"]] # take the current row
aliases = requests.get(base + "/data/id-aliases.json").json() # resolve ids you stored before a merge
last_seen = log[-1]["released"]
The log covers releases from 2026-10-31 15:57 UTC, when ids took their current form; for anything older take the full file. One incident by id, with merged ids resolved: /api/incidents?id=<id>.
Licences and citation
| Source | Terms |
|---|---|
| DefiLlama | Public API, cited per incident |
| SlowMist Hacked | Public list, cited per incident |
| Web3 Is Going Great | Public list, cited per incident |
| rekt.news | Leaderboard figures and links, cited per incident |
| DeFiHackLabs | Apache 2.0; counted as a source, not linked |
| ack3 H1 2026 | CC BY 4.0: credit ack3 when you reuse |
| US DOJ, US Treasury OFAC | US government work, public domain |
Kept out of the public files: attack transactions, attacker and contract addresses, and exploit code. The merged figures, grades, classes and checks are this site's work; cite them as below.
SwanBluechip, "The crypto theft dataset", Crypto hack history, https://swan-hack-tracker.pages.dev/history/data/ (data as of 2026-11-01).