Prices (Token Price Data)
Dune provides comprehensive, reliable token price data for use in your queries across 40+ blockchains. Our price system combines external market data with on-chain trading activity to deliver accurate pricing for both major tokens and the long tail of emerging assets. Whether you’re building dashboards, conducting research, or powering applications, you can access consistent price data at multiple time granularities with transparent sourcing and quality controls.
Key Features
- Multi-blockchain support: Prices for tokens across 40+ blockchains
- Multiple time granularities: minute, hourly, daily, and latest price data
- Source transparency: Each price point includes its data source
- Data quality: Comprehensive filtering to ensure price reliability
- Standardized native token addresses: Native tokens (like ETH, BNB) have fixed contract addresses for consistency
- Volume-weighted pricing: Prices are calculated using volume-weighted averages for more accurate representation
- Enhanced outlier detection: Multi-layered filtering system to reduce impact of anomalous trades
Available Tables
The prices
schema exposes these main tables:
Table | Description |
---|
prices.latest | The most recent price for each token |
prices.day | Daily token prices using hybrid approach |
prices.hour | Hourly token prices using hybrid approach |
prices.minute | Minute-by-minute token prices using hybrid approach |
Methodology
Hybrid Pricing Approach
All tables use the same methodology combining two data sources:
-
Coinpaprika (~2,000 major tokens)
- External market data from aggregated exchanges
- Available at 5-minute intervals
- Aggregated to hourly/daily, interpolated for minute-level
-
DEX-derived (long tail tokens)
- On-chain trading activity from
dex.trades
- Quality filtering to reduce anomalous trades:
- VWMP Outlier Detection: Prices deviating >3x from 7-day rolling median
- MAD Outlier Detection: Prices deviating >2x median absolute deviation
- Transfer Outlier Detection: Token amounts exceeding max transfer amounts
- Volume Outlier Detection: Trades <0.01 or >1M
- Aggregated into 1 hour intervals using volume-weighted averages
- Minimum $10k volume thresholds
-
Forward-filling when no activity exists:
- Daily: 30 days max | Hourly: 7 days max | Minute: 2 days max
Token lists are defined in dbt spellbook.
While the dex-derived data filtering improves quality, users should validate prices for critical applications. There is no guarantee that the dex-derived data is always correct.
Coverage
- 900,000 unique tokens
- 40+ blockchains
- tokens are automatically added when they exceed a $10k volume threshold
Schema
All price tables share the following schema:
Column | Type | Description |
---|
blockchain | varchar | Blockchain identifier (e.g., ‘ethereum’, ‘arbitrum’) |
contract_address | varbinary | Token contract address (fixed address for native tokens) |
symbol | varchar | Token symbol (e.g., ‘ETH’, ‘USDC’) |
price | double | USD price |
timestamp | timestamp | Timestamp (start of minute, hour, or day) |
decimals | int | Token decimals |
volume | double | Trading volume in USD (from price source) |
source | varchar | Data source (‘coinpaprika’ or ‘dex.trades’) |
Technical Notes
- Token identification: Requires both
contract_address
AND blockchain
(symbols are not unique)
- Native tokens: Use standardized addresses from
dune.blockchains
table. We mostly set native tokens to 0x000...
- Pricing independence: Calculated separately per blockchain
- Volume-weighted: Uses volume-weighted averages for accuracy
Source-Specific Variants
For specialized analysis, each granularity offers source-specific tables:
Coinpaprika-only tables:
prices_coinpaprika.day
, prices_coinpaprika.hour
, prices_coinpaprika.minute
, prices_coinpaprika.latest
DEX-derived tables:
prices_dex.day
, prices_dex.hour
, prices_dex.minute
, prices_dex.latest
See individual granularity pages for detailed documentation on these variants.
Performance tip: Use the coarsest granularity that meets your needs. Minute-level queries over long periods are resource-intensive.
Usage Examples
Here are some examples of how to use the prices tables.
Basic query to get the latest ETH price:
SELECT price
FROM prices.latest
WHERE blockchain = 'ethereum'
AND contract_address = 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -- WETH
Getting historical price data:
SELECT
timestamp,
price
FROM prices.day
WHERE blockchain = 'ethereum'
AND contract_address = 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 -- UNI
AND timestamp >= NOW() - INTERVAL '30' DAY
Finding the right native token address:
-- Query to get the native token address for a specific blockchain
SELECT
name,
token_address,
token_symbol
FROM dune.blockchains
WHERE name = 'arbitrum'
Legacy Tables
The following tables are maintained for historical compatibility:
prices.usd
- View of prices_coinpaprika.minute
(maintains legacy schema)
Note: prices.usd
is a view of prices_coinpaprika.minute
while preserving the legacy schema for backward compatibility.