One row per LiquidationCall: borrower, liquidator, both assets, amounts scaled
by token decimals, oracle prices at that block, and two bonus figures.

The daily chart

Bars are the dollar value liquidated each day; the line is how many
liquidations there were. They diverge often: a handful of very large
liquidations and a swarm of small ones look identical on a count and nothing
alike in dollars, which is why both are plotted rather than one.

Three states the chart keeps distinct, because merging them would misread the
market:

  • A bar at zero: liquidations happened and totalled nothing meaningful, or
    the day was quiet. Either way, no debt was liquidated.
  • A gap in the bars with the line still above zero: liquidations happened
    that we cannot price, because their oracle family isn’t replicated. The count
    is real; the dollar figure doesn’t exist rather than being guessed.
  • Both at zero: nothing happened that day.

The chart obeys the collateral filter and date range applied to the table below
it. It opens on the last 90 days of the dataset: ending at the most recent
liquidation, not today, so a lagging dataset doesn’t open on empty axes, and
“All history” plots the whole table. Vertical dashed lines are
timeline events; liquidation spikes usually have a story.

Realized versus configured

Realized bonus is the seized collateral’s value over the repaid debt’s
value, at the liquidation block. Configured bonus is what governance had set
for that reserve at that same block.

The gap between them is the filter the literature wants: liquidations far above
the configured bonus are the “toxic” cases, and they are a query here rather
than a project.

Health factor either side

For a growing subset, we replay the position at the block before the
liquidation and derive where it landed after. The after value follows
arithmetically from the amounts the event reports: prices and risk parameters
cannot move inside a single transaction.

A ! marks liquidations that left the borrower closer to liquidation than
they started, which is the toxic-spiral case. A dash means not yet computed; it
never means “no change”.

Transaction context

  • Aave flash loan: whether the repayment was funded by one. Named narrowly:
    liquidators also use Balancer and flash swaps, so a false is “no Aave flash
    loan”, not “no leverage”.
  • Swaps in the transaction: the collateral dump.

Gas and priority fee are absent on purpose. The warehouse ingests logs, not
receipts, so there is no gas figure to read. We would rather show nothing than
an estimate you might publish.

How current the table is

The table is extended every night: Aave V3 at 03:15 UTC, Spark at 03:35,
each run resuming from the newest block already stored and stopping 64 blocks
behind the chain head, the same distance the bulk ingester keeps, so no row
comes from a block a reorg could still rewrite. A liquidation is therefore in
the table the morning after it happened; it is not a live feed.

One warehouse job runs at a time. The extractors are staggered so each finds
the box free; a run that finds another job holding it, or the warehouse
unhealthy, is recorded as skipped rather than queued, and the next night
covers both days. Reserve listings, risk parameters and oracle sources are
refreshed at 02:45 so tonight’s extraction can price a reserve listed today.
A new oracle source still needs classifying by hand before its asset is
priced; until then its liquidations carry a note rather than a number.
Webhooks and alerts fire from the nightly run, for the new
rows only.

Prices that are missing

19,272 of 27,193 events are fully priced. The rest carry a note naming the
oracle family we haven’t replicated. Aggregates count only priced rows, and a
group with none reports “not priced” rather than $0, because “we can’t price
this” and “nothing was seized” are different facts.

The exact figures are the coverage statement on the page and at the top of
the CSV, persisted with the last extraction rather than recounted: “N of M
liquidations computed; skipped: debt adapter oracle X, collateral no price Y”,
where the skip names the side of the event that could not be priced and why.