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

# Financial statements

> A protocol's income statement and treasury, by reporting period.

`screeners.projects_financial_statements` holds one row per project per reporting period length: the income statement and the treasury for the most recent period that has finished. `period_granularity` takes `week`, `month`, `quarter` or `year`, so one project carries four rows, each closing on a different date.

The income statement reads down in order. Fees are what users paid, `fees_supply_side` is the share passed on to suppliers, and revenue is what the protocol kept. Expenses and token incentives come off revenue to leave earnings. `project_id` joins [`dimensions.projects`](/docs/catalog/projects/registry).

Every period on this table has closed. A quarter still running does not appear until it ends, so two projects on the same `period_granularity` are always comparable.

## Columns

Each line item carries three columns: the figure for the period, its change against the period before, and its change against the same period a year earlier. Changes are fractions, so `0.05` is five percent up.

<table>
  <thead>
    <tr>
      <th width="240">Column</th>
      <th width="130">Type</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>project\_id</code></td>
      <td><code>STRING</code></td>
      <td>Project the statement belongs to, such as <code>aave</code>; joins <code>dimensions.projects</code>.</td>
    </tr>

    <tr>
      <td><code>period\_granularity</code></td>
      <td><code>STRING</code></td>
      <td>Length of the period: <code>week</code>, <code>month</code>, <code>quarter</code> or <code>year</code>.</td>
    </tr>

    <tr>
      <td><code>period\_start</code></td>
      <td><code>TIMESTAMP</code></td>
      <td>First moment of the period.</td>
    </tr>

    <tr>
      <td><code>period\_end</code></td>
      <td><code>TIMESTAMP</code></td>
      <td>Last moment of the period.</td>
    </tr>

    <tr>
      <td><code>fees</code></td>
      <td><code>NUMERIC</code></td>
      <td>What users paid to use the protocol over the period, USD. Also <code>fees\_qoq</code> and <code>fees\_yoy</code>.</td>
    </tr>

    <tr>
      <td><code>fees\_supply\_side</code></td>
      <td><code>NUMERIC</code></td>
      <td>The share of fees passed on to suppliers rather than kept, USD. Also <code>fees\_supply\_side\_qoq</code> and <code>fees\_supply\_side\_yoy</code>.</td>
    </tr>

    <tr>
      <td><code>revenue</code></td>
      <td><code>NUMERIC</code></td>
      <td>Fees the protocol kept, USD. Also <code>revenue\_qoq</code> and <code>revenue\_yoy</code>.</td>
    </tr>

    <tr>
      <td><code>expenses</code></td>
      <td><code>NUMERIC</code></td>
      <td>What the protocol spent over the period, USD. Also <code>expenses\_qoq</code> and <code>expenses\_yoy</code>.</td>
    </tr>

    <tr>
      <td><code>token\_incentives</code></td>
      <td><code>NUMERIC</code></td>
      <td>Value of tokens paid out to attract usage, USD. Also <code>token\_incentives\_qoq</code> and <code>token\_incentives\_yoy</code>.</td>
    </tr>

    <tr>
      <td><code>earnings</code></td>
      <td><code>NUMERIC</code></td>
      <td>Revenue after expenses and token incentives, USD. Negative where a protocol pays out more than it keeps. Also <code>earnings\_qoq</code> and <code>earnings\_yoy</code>.</td>
    </tr>

    <tr>
      <td><code>treasury</code></td>
      <td><code>NUMERIC</code></td>
      <td>Value the protocol held at the close of the period, USD. Also <code>treasury\_qoq</code> and <code>treasury\_yoy</code>.</td>
    </tr>

    <tr>
      <td><code>treasury\_net</code></td>
      <td><code>NUMERIC</code></td>
      <td>Treasury excluding the protocol's own token, USD. Also <code>treasury\_net\_qoq</code> and <code>treasury\_net\_yoy</code>.</td>
    </tr>
  </tbody>
</table>

## Sample queries

<Tabs>
  <Tab title="One statement">
    **Read one project's quarterly statement.** The columns come back in statement order, fees down to earnings, then the treasury.

    ```sql theme={null}
    select
        period_start,
        period_end,
        fees,
        fees_supply_side,
        revenue,
        expenses,
        token_incentives,
        earnings,
        treasury_net
    from `screeners.projects_financial_statements`
    where project_id = 'aave'
      and period_granularity = 'quarter'
    ```
  </Tab>

  <Tab title="Most profitable protocols">
    **Rank projects by what they earned last quarter.** `earnings_qoq` says which way each one is moving.

    ```sql theme={null}
    select
        projects.name,
        statements.revenue,
        statements.earnings,
        statements.earnings_qoq
    from `screeners.projects_financial_statements` as statements
    join `dimensions.projects` as projects
        using (project_id)
    where statements.period_granularity = 'quarter'
      and statements.earnings is not null
    order by statements.earnings desc
    limit 25
    ```
  </Tab>

  <Tab title="Paying out more than they keep">
    **Find protocols whose token incentives exceed their revenue.** Earnings go negative when the payout is larger than the take.

    ```sql theme={null}
    select
        projects.name,
        statements.revenue,
        statements.token_incentives,
        statements.earnings
    from `screeners.projects_financial_statements` as statements
    join `dimensions.projects` as projects
        using (project_id)
    where statements.period_granularity = 'year'
      and statements.earnings < 0
    order by statements.earnings
    limit 25
    ```
  </Tab>

  <Tab title="Growing on the year">
    **Rank projects by annual revenue growth.** `period_granularity` picks the reporting length, and `revenue_yoy` compares against the same period a year earlier.

    ```sql theme={null}
    select
        projects.name,
        statements.revenue,
        statements.revenue_yoy,
        statements.earnings_yoy
    from `screeners.projects_financial_statements` as statements
    join `dimensions.projects` as projects
        using (project_id)
    where statements.period_granularity = 'quarter'
      and statements.revenue > 1000000
    order by statements.revenue_yoy desc
    limit 25
    ```
  </Tab>
</Tabs>

## Notes

A line item with no figure for a project is empty rather than zero. A protocol that reports no treasury has no treasury figure, which is not the same as holding nothing.

The four `period_granularity` values close on different dates, so a project's `week` row and its `quarter` row end at different times. Filter to one granularity in every query, or a project returns four rows that do not add up to each other.

`earnings` is revenue after expenses and token incentives, so it is the one line item that can be negative. Ranking on it puts the protocols paying out most at the top when sorted ascending.
