> ## 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><code>address</code></td><td>STRING</td><td>Address that initiated the transactions: lowercase hex on <code>ethereum</code>, <code>base</code> and <code>robinhoodchain</code>, base58 and case-sensitive on <code>solana</code>.</td></tr>
    <tr><td><code>chain\_id</code></td><td>STRING</td><td>Chain the address transacted on.</td></tr>
    <tr><td><code>chain\_family</code></td><td>STRING</td><td>Chain family the chain belongs to: <code>evm</code> or <code>svm</code>; joins <code>dimensions.chains</code>.</td></tr>
    <tr><td><code>activity\_date</code></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><code>hour\_utc</code></td><td>INT64</td><td>Hour of day, 0 through 23, UTC.</td></tr>
    <tr><td><code>tx\_count</code></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><code>native\_value</code></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.
</Warning>

<Tabs>
  <Tab title="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
    ```
  </Tab>

  <Tab title="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
    ```
  </Tab>

  <Tab title="Attributed senders, one day">
    Joining `dimensions.accounts` on `address` and `chain_id` 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 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
    ```
  </Tab>

  <Tab title="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
    ```
  </Tab>
</Tabs>
