prices.minute

Overview

The prices.minute table provides the most granular price data for tokens across multiple blockchains, with minute-level precision. This is the highest resolution price data available in the Dune platform.

Table Schema

ColumnTypeDescription
blockchainvarcharBlockchain identifier (e.g., ‘ethereum’, ‘arbitrum’)
contract_addressvarbinaryToken contract address (fixed address for native tokens)
symbolvarcharToken symbol (e.g., ‘ETH’, ‘USDC’)
timestamptimestampMinute timestamp
pricedoubleToken price in USD (volume-weighted average)
decimalsintToken decimals
volumedoubleTrading volume in USD (from price source)
sourcevarcharData source (‘coinpaprika’ or ‘dex.trades’)

Implementation Details

The minute prices are built through these steps:
  1. Collect sparse price observations from different sources
  2. Fill missing minutes with the previous minute’s price (forward filling)
  3. Set an expiration time of 48h for forward filling to avoid stale data

Usage

This table is ideal for high-frequency analysis and examining short-term price movements. It’s particularly useful for studying price impacts of specific events or transactions with high temporal precision. Note: While the table provides minute-level granularity, the underlying data sources are aligned to 5-minute intervals for consistency and improved data quality.

Latency and Update Frequency

The prices.minute table is updated hourly based on the upstream data pipeline. As a result, prices typically have a latency of approximately 1 hour from real-time.

Usage Examples

Here are some examples of how to use the prices tables.

Get minute-by-minute ETH prices during a specific event:

SELECT
  timestamp,
  price
FROM prices.minute
WHERE
  blockchain = 'ethereum'
  AND contract_address = 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -- WETH
  AND timestamp >= NOW() - INTERVAL '2' HOUR
  AND timestamp <= NOW() - INTERVAL '1' HOUR
ORDER BY timestamp

Analyze price volatility within short time frames:

SELECT
  date_trunc('hour', timestamp) as hour,
  max(price) - min(price) as price_range,
  (max(price) - min(price)) / min(price) * 100 as volatility_pct
FROM prices.minute
WHERE
  blockchain = 'ethereum'
  AND contract_address = 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -- WETH
  AND timestamp >= NOW() - INTERVAL '1' DAY
GROUP BY 1
ORDER BY 1

Data Quality Notes

  • Due to its high granularity, queries on this table may be more resource-intensive
  • Consider using prices.hour or prices.day for longer time ranges if minute-level precision is not required
  • Native tokens (like ETH, BNB) are assigned fixed addresses for consistency
  • Always use contract_address and blockchain for precise token identification, never use symbol for joins or filters
  • Prices are calculated using volume-weighted averages for more accurate representation
  • Quality Filtering: The system includes filtering mechanisms to reduce the impact of anomalous trades
  • Data Limitations: While filtering helps improve data quality, users should always validate prices for critical applications