Skip to main content

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:
TableDescription
prices.latestThe most recent price for each token
prices.dayDaily token prices using hybrid approach
prices.hourHourly token prices using hybrid approach
prices.minuteMinute-by-minute token prices using hybrid approach

Methodology

Hybrid Pricing Approach

All tables use the same methodology combining two data sources:
  1. Coinpaprika (~2,000 major tokens)
    • External market data from aggregated exchanges
    • Available at 5-minute intervals
    • Aggregated to hourly/daily, interpolated for minute-level
  2. 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 &gt;1M
    • Aggregated into 1 hour intervals using volume-weighted averages
    • Minimum $10k volume thresholds
  3. 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:
ColumnTypeDescription
blockchainvarcharBlockchain identifier (e.g., ‘ethereum’, ‘arbitrum’)
contract_addressvarbinaryToken contract address (fixed address for native tokens)
symbolvarcharToken symbol (e.g., ‘ETH’, ‘USDC’)
pricedoubleUSD price
timestamptimestampTimestamp (start of minute, hour, or day)
decimalsintToken decimals
volumedoubleTrading volume in USD (from price source)
sourcevarcharData 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.
I