# Chainlink Price Feeds: Update Times, Heartbeats and Deviation

> Monitor Chainlink price feeds by chain: last update time, heartbeat, deviation threshold, stale feeds now and why each update fired, read from the aggregators.

Markdown copy of https://voltfincrypto.com/apps/chainlink-price-feeds

**Question:** When did each Chainlink price feed last update, and is any feed past its heartbeat right now?

- Kind: Dashboard in Voltfin Vantage
- Topic: [DeFi](https://voltfincrypto.com/topics/defi)
- Chains: Ethereum, Arbitrum, Base, OP Mainnet, Polygon, BNB Chain, Avalanche
- Status: Planned. The data is not published yet, so this page states no figure; each figure will open its receipt when it is.

Chainlink price feeds put reference prices on-chain for lending markets, perpetuals and stablecoins to read. A feed does not update on a clock alone: its oracle network writes a new answer when the price moves past the feed's deviation threshold, or when the heartbeat time passes without such a move. This dashboard reads every update on covered chains, so it shows how fresh each feed is and why it last changed.

Freshness matters because protocols act on what they read. A feed past its heartbeat may be stuck, a feed that updates every few blocks is tracking a volatile market and the same pair can have different settings on different chains. Each figure is read from the feed's proxy and aggregator contracts at a pinned block, so anyone can check the round behind it.

## Blueprint

### Feed health

Every covered feed's freshness right now, stalest first.

- **Feeds tracked** (count): Chainlink price feeds read on covered chains at the latest block.
- **Feeds past their heartbeat** (count): Feeds whose last update is older than their heartbeat at the latest block.
- **Updates, last 24 hours** (count): New rounds written across all tracked feeds in the last 24 hours.
- **Median time since update** (minutes): The median age of the latest answer across tracked feeds, at the latest block.
- **Feeds by freshness**: Each feed's chain, pair, heartbeat, deviation threshold, time since last update and whether it is past its heartbeat, stalest first.

### One feed

A single feed's settings, its updates and the reason each one fired.

- **Deviation threshold** (%): The share of the last answer the price must move before the selected feed writes a new round.
- **Heartbeat** (hours): The longest the selected feed may go without writing a new round.
- **Updates in the period** (count): Rounds the selected feed wrote over the selected period.
- **Longest gap between updates** (minutes): The longest time between two consecutive rounds of the selected feed in the period.
- **Answer at each update**: The selected feed's answer at every round in the period, each round marked as a deviation or a heartbeat update.

Filters: Feed (Every Chainlink price feed on covered chains); Chain (Every covered chain); Period (Last day, week or month).

## How it will be measured

- Each feed is read at its proxy: latestRoundData() gives the answer, the round id and updatedAt, and the proxy's current aggregator is recorded so that an aggregator upgrade does not break the history.
- Updates are decoded from each aggregator's AnswerUpdated events; an update counts as a deviation update when the answer moved past the feed's threshold since the last round, and as a heartbeat update otherwise.
- A feed is stale when the time since its last update is longer than its heartbeat; each feed's heartbeat and deviation threshold come from Chainlink's published feed parameters, recorded with the date read (off-chain).
- On rollups the sequencer uptime feed is shown beside each price feed, since protocols there are expected to check it before trusting a price.

## Data it needs

- `native_prices_daily` (to build): Reference prices of major assets read from on-chain oracle feeds (Chainlink latestRoundData) at each day's last block, with each round's update time.
- Source: latestRoundData() and aggregator() of each feed proxy at the latest block on each covered chain
- Source: AnswerUpdated events of each feed's current and past aggregators
- Source: L2 sequencer uptime feeds on covered rollups
- Source: Chainlink's published heartbeat and deviation threshold for each feed (off-chain, recorded with the date read)

## Questions

### How often do Chainlink price feeds update?

Whenever the price moves more than the feed's deviation threshold, or when the heartbeat time passes without such a move, whichever comes first. Thresholds and heartbeats differ by feed and by chain, so a volatile pair can update many times an hour while a stable one updates only on its heartbeat.

### What does it mean when a Chainlink feed is stale?

Its last update is older than its heartbeat, so the price on-chain may no longer match the market. Protocols usually check updatedAt from latestRoundData and refuse prices that are too old. The dashboard lists the feeds past their heartbeat now.

### What does latestRoundData return?

Five values: the round id, the answer, when the round started, when it was updated and the round in which the answer was computed. The answer is scaled by the feed's decimals, which the proxy also reports.

### Why does the same feed differ between chains?

Each chain has its own aggregator with its own deviation threshold and heartbeat, set for that chain's costs and uses. The same pair can therefore update at different times and with different precision on Ethereum and on a layer 2.

### What is the L2 sequencer uptime feed?

A Chainlink feed on rollups that reports whether the rollup's sequencer is up. When the sequencer has been down, prices may be outdated, so lending protocols on layer 2s typically check this feed and wait out a grace period after it recovers.

## Glossary

- **Deviation threshold**: How far a feed's price must move, as a share of the last answer, before the oracle network writes a new one.
- **Heartbeat**: The longest a feed goes without an update; when it elapses, a new answer is written even if the price has not moved.
- **Aggregator**: The contract that receives the oracle network's reports and stores each round's answer; a proxy points to the current aggregator.

## Related apps

- [Chainlink CCIP Tracker: Cross-Chain Messages and Token Transfers](https://voltfincrypto.com/apps/chainlink-ccip-tracker)
- [Pyth Price Updates: Feeds Pulled On-Chain by Chain and App](https://voltfincrypto.com/apps/pyth-network-price-updates)
- [DeFi Liquidations Tracker: Lending and Perp DEXs](https://voltfincrypto.com/apps/defi-liquidations-tracker)
- [ETH Liquidation Levels on DeFi Lending Markets](https://voltfincrypto.com/apps/eth-liquidation-levels)
- [Stablecoin Peg Tracker and Depeg History](https://voltfincrypto.com/apps/stablecoin-peg-depeg-tracker)
- [DeFi TVL by Chain: Total Value Locked Rankings](https://voltfincrypto.com/apps/defi-tvl-by-chain)

Build it in Voltfin Studio: https://app.voltfincrypto.com/signup?next=%2F
