> ## Documentation Index
> Fetch the complete documentation index at: https://tokenterminal.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To query the Token Terminal data catalog, read https://tokenterminal.com/docs/catalog/agents-manual.md first. It is the whole catalog as one page: table naming grammar, key columns, partition and cluster rules, units, additivity, and the tables that are documented but not served yet.
> Never query a catalog table on a time bound alone. Also filter its cluster key, which you read from INFORMATION_SCHEMA.COLUMNS; an empty result means the object is a view, whose pruning contract is on its page. Compute is billed to the caller's own Google Cloud project.

# Activity hours

> Transactions an address initiated, by chain and hour of day in UTC.

One row per address, chain, date and hour with at least one transaction. `native_value` sums the native value the address's transactions moved in that hour, in the chain's smallest unit; it is null on solana, where native value is not tracked per transaction.

## Columns

<table>
  <thead>
    <tr>
      <th width="200">Column</th>
      <th width="120">Type</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`address`</td><td>STRING</td><td>Address that initiated the transactions: lowercase hex on `ethereum`, `base` and `robinhoodchain`, base58 and case-sensitive on `solana`.</td></tr>
    <tr><td>`chain_id`</td><td>STRING</td><td>Chain the address transacted on.</td></tr>
    <tr><td>`chain_family`</td><td>STRING</td><td>Chain family the chain belongs to: `evm` or `svm`; joins `dimensions.chains`.</td></tr>
    <tr><td>`activity_date`</td><td>DATE</td><td>UTC calendar date of the hour. Partition column. Full history per chain from its first standardized block. The latest date is partial until the UTC day closes and is rewritten by the next run.</td></tr>
    <tr><td>`hour_utc`</td><td>INT64</td><td>Hour of day, 0 through 23, UTC.</td></tr>
    <tr><td>`tx_count`</td><td>INT64</td><td>Transactions the address initiated in that hour, whether or not the address is attributed. Rows on the evm chains include reverted transactions; solana rows are successful, non-vote transactions only.</td></tr>
    <tr><td>`native_value`</td><td>NUMERIC</td><td>Native value the address's transactions moved in that hour, summed, in the chain's smallest unit (wei on the evm chains). Null on solana, which has no transaction-level native value.</td></tr>
  </tbody>
</table>

## Sample queries

> [!WARNING]
>
> This table is large and split by day. Bound `activity_date` and filter `chain_id` on every query, or you read the whole table and the whole table is billed to you.

**One address, one day**

Pivots the day's rows into one, `hour_utc` becoming 24 columns. `tx_count` is 0 for an hour with no transactions.

```sql theme={null}
select
    address,
    activity_date,
    sum(if(hour_utc = 0, tx_count, 0)) as hour_00,
    sum(if(hour_utc = 1, tx_count, 0)) as hour_01,
    sum(if(hour_utc = 2, tx_count, 0)) as hour_02,
    sum(if(hour_utc = 3, tx_count, 0)) as hour_03,
    sum(if(hour_utc = 4, tx_count, 0)) as hour_04,
    sum(if(hour_utc = 5, tx_count, 0)) as hour_05,
    sum(if(hour_utc = 6, tx_count, 0)) as hour_06,
    sum(if(hour_utc = 7, tx_count, 0)) as hour_07,
    sum(if(hour_utc = 8, tx_count, 0)) as hour_08,
    sum(if(hour_utc = 9, tx_count, 0)) as hour_09,
    sum(if(hour_utc = 10, tx_count, 0)) as hour_10,
    sum(if(hour_utc = 11, tx_count, 0)) as hour_11,
    sum(if(hour_utc = 12, tx_count, 0)) as hour_12,
    sum(if(hour_utc = 13, tx_count, 0)) as hour_13,
    sum(if(hour_utc = 14, tx_count, 0)) as hour_14,
    sum(if(hour_utc = 15, tx_count, 0)) as hour_15,
    sum(if(hour_utc = 16, tx_count, 0)) as hour_16,
    sum(if(hour_utc = 17, tx_count, 0)) as hour_17,
    sum(if(hour_utc = 18, tx_count, 0)) as hour_18,
    sum(if(hour_utc = 19, tx_count, 0)) as hour_19,
    sum(if(hour_utc = 20, tx_count, 0)) as hour_20,
    sum(if(hour_utc = 21, tx_count, 0)) as hour_21,
    sum(if(hour_utc = 22, tx_count, 0)) as hour_22,
    sum(if(hour_utc = 23, tx_count, 0)) as hour_23
from `facts_accounts.activity_hours`
where address = '0x0000000000000000000000000000000000000000'
  and chain_id = 'robinhoodchain'
  and activity_date = date('2026-09-01')
group by address, activity_date
```

**Busiest hour over a month**

`chain_id` and a bounded `activity_date` range keep the scan to one chain and one month; `hour_utc` groups every address together.

```sql theme={null}
select
    hour_utc,
    sum(tx_count) as tx_count
from `facts_accounts.activity_hours`
where chain_id = 'robinhoodchain'
  and activity_date >= date('2026-08-01')
  and activity_date < date('2026-09-01')
group by hour_utc
order by hour_utc
```

**Attributed senders, one day**

Joining `dimensions.accounts` on `address` and `chain_id` and keeping the rows with a `label_source` narrows the hours to addresses somebody has attributed.

```sql theme={null}
select
    hours.address,
    hours.hour_utc,
    sum(hours.tx_count) as tx_count
from `facts_accounts.activity_hours` as hours
join `dimensions.accounts` as accounts
    on hours.address = accounts.address
    and hours.chain_id = accounts.chain_id
where accounts.label_source is not null
  and hours.chain_id = 'robinhoodchain'
  and hours.activity_date = date('2026-09-01')
group by hours.address, hours.hour_utc
order by hours.address, hours.hour_utc
```

**One address, two chains**

The same address key on two evm chains lets you line up its hour-of-day profile on each side by side.

```sql theme={null}
select
    chain_id,
    hour_utc,
    sum(tx_count) as tx_count
from `facts_accounts.activity_hours`
where address = '0x0000000000000000000000000000000000000000'
  and chain_id in ('ethereum', 'base')
  and activity_date >= date('2026-08-01')
  and activity_date < date('2026-09-01')
group by chain_id, hour_utc
order by chain_id, hour_utc
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.