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

# Aptos Token Transfers

> Curated and enriched fungible token transfer activity on the Aptos blockchain.

export const TableSample = ({tableName, tableSchema}) => <>
    <div className="hidden dark:block">
      <iframe src={`https://dune.com/embeds/3419983/5785629?table_schema_t6f0df=${tableSchema}&table_name_t6f0df=${tableName}&darkMode=true`} style={{
  width: '100%',
  height: '500px',
  border: 'none',
  marginTop: '10px'
}} />
    </div>
    <div className="dark:hidden">
      <iframe src={`https://dune.com/embeds/3419983/5785629?table_schema_t6f0df=${tableSchema}&table_name_t6f0df=${tableName}`} style={{
  width: '100%',
  height: '500px',
  border: 'none',
  marginTop: '10px'
}} />
    </div>
  </>;

The `tokens_aptos.transfers` table contains curated fungible token transfer activity for Aptos assets indexed on Dune. It normalizes balance-changing activity across Aptos' legacy Coin standard and the newer Fungible Asset (FA) standard into one transfer table.

This dataset includes:

* Standard transfers reconstructed from paired debit and credit activity within the same transaction
* Residual mint and burn rows when only one side of the balance change exists
* Metadata enrichment for symbol and decimals
* USD valuation when an hourly USD price is available for the token

<Info>
  The table aims to capture standard Aptos fungible token transfers. Some non-standard token implementations or custom transfer hooks may not map cleanly into sender and receiver semantics for every transaction.
</Info>

### Utility

The Aptos transfers table provides a consistent view of fungible token movement on Aptos, enabling you to:

* Track token flows between accounts
* Analyze transfer volume by token, wallet, and day
* Separate regular transfers from mint and burn activity
* Investigate issuer, exchange, and protocol-related fund movement

### Methodology

Aptos token movement is modeled differently than EVM token transfers. According to the official Aptos docs, the legacy Coin standard emits `0x1::coin::DepositEvent` and `0x1::coin::WithdrawEvent`, while the Fungible Asset standard emits `0x1::fungible_asset::Deposit` and `0x1::fungible_asset::Withdraw` events from primary stores. Dune's Aptos transfers model aligns to that event model and reconstructs transfer rows from those balance-changing activities.

The `tokens_aptos.transfers` table is built as follows:

* It starts from Aptos fungible asset activity rows for supported Coin and FA deposit/withdraw event types.
* Debit and credit events are paired within the same transaction and `asset_type` using FIFO-style overlap logic to reconstruct transfer rows.
* Unpaired residual activity is emitted as `mint` or `burn` in `transfer_type`.
* Symbol and decimals are enriched from Aptos asset metadata, while `tx_from` is sourced from `aptos.user_transactions`.
* When multiple assets share overlapping symbols, the model keeps canonical asset types for key stablecoins to avoid duplicate symbol-level rows.
* `amount_usd` is calculated from `prices_external.hour` for Aptos when hourly pricing is available.

### Pricing Methodology

The `price_usd` and `amount_usd` columns come from Dune's external hourly price feed for Aptos tokens. If a token has a price for that hour, the transfer row gets a USD price and value. If not, both columns stay `NULL`.

This approach is meant to keep transfer valuations stable and avoid obvious outliers from thin or noisy onchain pricing. For tokens outside Dune's trusted token set, very large computed USD values are set to `NULL` instead of being shown.

For more details on Dune's pricing methodology, see the [Prices documentation](/data-catalog/curated/prices/overview).

## Table Schema

| Column                    | Type        | Description                                                                 |
| ------------------------- | ----------- | --------------------------------------------------------------------------- |
| `unique_key`              | `VARCHAR`   | Surrogate key to identify a unique transfer row                             |
| `blockchain`              | `VARCHAR`   | Blockchain identifier (`aptos`)                                             |
| `block_month`             | `DATE`      | Month bucket derived from `block_time`                                      |
| `block_date`              | `DATE`      | Block date                                                                  |
| `block_time`              | `TIMESTAMP` | Block timestamp                                                             |
| `tx_version`              | `UINT256`   | Aptos transaction version                                                   |
| `tx_hash`                 | `VARBINARY` | Transaction hash                                                            |
| `event_index`             | `INTEGER`   | Primary event index used for the transfer row                               |
| `counterpart_event_index` | `INTEGER`   | Matched opposite-side event index for paired transfers                      |
| `token_standard`          | `VARCHAR`   | Aptos token standard label used for the activity                            |
| `tx_from`                 | `VARBINARY` | Transaction sender                                                          |
| `tx_to`                   | `VARBINARY` | Transaction receiver field reserved for future enrichment; currently `NULL` |
| `from`                    | `VARBINARY` | Transfer sender owner address                                               |
| `to`                      | `VARBINARY` | Transfer receiver owner address                                             |
| `contract_address`        | `VARBINARY` | Package address parsed from `asset_type`                                    |
| `asset_type`              | `VARCHAR`   | Fully qualified Aptos asset type                                            |
| `from_storage_id`         | `VARBINARY` | Sender-side fungible store identifier                                       |
| `to_storage_id`           | `VARBINARY` | Receiver-side fungible store identifier                                     |
| `symbol`                  | `VARCHAR`   | Token symbol from Aptos asset metadata                                      |
| `decimals`                | `INTEGER`   | Display decimals from Aptos asset metadata                                  |
| `tx_index`                | `INTEGER`   | Transaction index within the block                                          |
| `amount_raw`              | `UINT256`   | Raw token amount before decimal adjustment                                  |
| `amount`                  | `DOUBLE`    | Transfer amount in display units                                            |
| `price_usd`               | `DOUBLE`    | Hourly USD price used to calculate `amount_usd`                             |
| `amount_usd`              | `DOUBLE`    | USD value of the transfer                                                   |
| `transfer_type`           | `VARCHAR`   | Transfer classification (`transfer`, `mint`, or `burn`)                     |
| `_updated_at`             | `TIMESTAMP` | Timestamp when this row was last written                                    |

<TableSample tableSchema="tokens_aptos" tableName="transfers" />

## Sample Queries

**Query recent token transfers for a specific Aptos address**

This query returns the most recent incoming and outgoing token transfers for a wallet:

```sql theme={null}
SELECT
    block_time,
    tx_version,
    symbol,
    transfer_type,
    CASE
        WHEN "from" = 0x8fc24635538e870786e8444e89ed1458449a1f0788ad21f27c4f8188333138f9 THEN 'Outgoing'
        WHEN "to" = 0x8fc24635538e870786e8444e89ed1458449a1f0788ad21f27c4f8188333138f9 THEN 'Incoming'
    END AS direction,
    amount,
    amount_usd
FROM tokens_aptos.transfers
WHERE (
        "from" = 0x8fc24635538e870786e8444e89ed1458449a1f0788ad21f27c4f8188333138f9
        OR "to" = 0x8fc24635538e870786e8444e89ed1458449a1f0788ad21f27c4f8188333138f9
    )
    AND block_time > now() - interval '30' day
ORDER BY block_time DESC
LIMIT 100
```

**Calculate daily transfer volume for a specific Aptos asset**

This query aggregates daily transfer activity for a single Aptos asset:

```sql theme={null}
SELECT
    block_date,
    symbol,
    COUNT(*) AS num_rows,
    SUM(amount) AS total_amount,
    SUM(amount_usd) AS total_amount_usd
FROM tokens_aptos.transfers
WHERE contract_address = 0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b
    AND transfer_type = 'transfer'
    AND block_date >= current_date - interval '30' day
GROUP BY 1, 2
ORDER BY 1 DESC
```

**Split transfer activity into transfers, mints, and burns**

This query helps distinguish normal transfers from supply-changing events:

```sql theme={null}
SELECT
    block_date,
    transfer_type,
    COUNT(*) AS num_rows,
    SUM(amount) AS total_amount,
    SUM(amount_usd) AS total_amount_usd
FROM tokens_aptos.transfers
WHERE block_date >= current_date - interval '30' day
    AND symbol = 'APT'
GROUP BY 1, 2
ORDER BY 1 DESC, 2
```
