> ## 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.

# Geographic intelligence

> Region of activity for an address: a UTC-offset band derived from transaction timing, never a country.

Region of activity for an address, as a UTC-offset band derived from public transaction timing, never a country. The tables here serve the band, the hourly evidence behind it and how much of each chain it covers.

We publish region of activity, never country of a person. Region is a UTC-offset band derived from public transaction timing by a published rule: it is a statement about when an address is active, and it is wrong for bots, custodians and anyone who does not sleep. Issuer domicile stays where it is, on `dimensions.assets`. No country is ever derived from region.

`region` on [Accounts ▸ Registry](/docs/catalog/accounts/registry) is derived from [activity hours](/docs/catalog/accounts/activity-hours):

1. Sum the address's hourly transaction counts over the trailing 90 complete UTC days, across every chain in its `chain_family`; `n` is the total. Addresses with `n` below 300 get a null `region_confidence`.
2. The trough is the 6-hour window with the smallest share of `n`; its centre hour is `t`. The UTC offset is `round(3.5 - t)`, wrapped to -11..+12, taking 03:30 as the local sleep centre.
3. The band is the one of seven that contains the offset.
4. Depth `d` = `1 - (trough share / 0.25)`; night share is the share in the 12 hours centred on the trough.
5. `high` needs `n >= 3000`, `d >= 0.70`, night `<= 0.25`; `medium` needs `n >= 1000`, `d >= 0.50`, night `<= 0.30`; `low` needs `n >= 300`, `d >= 0.30`, night `<= 0.35`; otherwise `region` and `region_confidence` are null. A second trough within 10% of the first caps confidence at `low`.

## Coverage

`ethereum`, `base` and `robinhoodchain` (evm). `solana` (svm).

## Tables

* [`dimensions.accounts`](/docs/catalog/accounts/registry) region columns, on Accounts ▸ Registry.
* [`facts_accounts.activity_hours`](/docs/catalog/accounts/activity-hours), the hourly evidence `region` is derived from.
* [`reports_accounts.activity_coverage`](/docs/catalog/accounts/activity-coverage), the share of each day's active senders that are attributed and regioned.
* [`reports_accounts.region_distribution`](/docs/catalog/accounts/region-distribution), a trailing 90-day snapshot of senders by region and confidence.
* [`reports_accounts.region_hit_rate`](/docs/catalog/accounts/region-hit-rate), region accuracy for accounts with a known expected band.

## Sample queries

<Tabs>
  <Tab title="Band distribution on one chain">
    The subquery pins the window ending on the latest `window_end` for `ethereum`, so the ranking reads one snapshot rather than mixing windows.

    ```sql theme={null}
    select
        region,
        region_confidence,
        senders,
        sender_share
    from `reports_accounts.region_distribution`
    where chain_id = 'ethereum'
      and window_end = (
          select max(window_end)
          from `reports_accounts.region_distribution`
          where chain_id = 'ethereum'
      )
    order by senders desc
    ```
  </Tab>

  <Tab title="A project's wallets by region">
    `project_id` filters `dimensions.accounts` to one attributed project; `region` is null wherever `region_confidence` is null.

    ```sql theme={null}
    select
        chain_id,
        address,
        region,
        region_confidence
    from `dimensions.accounts`
    where project_id = 'coinbase'
    order by chain_id, region_confidence desc
    ```
  </Tab>

  <Tab title="Coverage across chains, latest complete day">
    `activity_date` is fixed to yesterday because the day still running is partial and gets rewritten by the next run.

    ```sql theme={null}
    select
        chain_id,
        attributed_share,
        regioned_share
    from `reports_accounts.activity_coverage`
    where activity_date = date_sub(current_date(), interval 1 day)
    order by regioned_share desc
    ```
  </Tab>
</Tabs>
