# Build dashboards and reports from onchain activity.

Query indexed entities or stream event history into your database. GraphOps operates the data services behind your dashboards and reports.

[Create account (opens in a new tab)](https://platform.graphops.xyz/auth/register) [Explore Subgraphs API](https://graphops.xyz/services/subgraphs#service-example) 

Analytics 

Worked example 

## Trace a daily total back to its transfers

Your dashboard reports 12,500 USDC of transfers on 30 September, the busiest day of the week.

At stake 

Before the weekly review, a stakeholder asks what that number contains and what it leaves out.

Built with 

- GraphOps Substreams

### Daily transfer activity

30 September · UTC   

Gross transfer amount12,500 USDC

Transfers counted15

Mint and burn events excluded4

#### 12:00 to 16:00

3,500 USDC  

- Transfer A 0x5e…21 / event 1 · block 20,862,214 1,500

- BurnExcluded by definition 0x2d…80 / event 3 · block 20,862,540 3,000

- Transfer B 0x9a…c7 / event 0 · block 20,862,987 2,000

Stored through block 20,866,412 Day ends at block 20,865,599 Published 

### How it comes together

- GraphOps service

- Your systems and team

- GraphOps Substreams 

#### Backfill and follow transfer events

Package output lands in your warehouse with block, transaction, and event index, first for the history you need and then as new blocks arrive.

- Your pipeline 

#### Apply the metric definition

Normalize decimals, exclude mints and burns, count each transaction and event index once, and bucket by UTC time.

- Your pipeline 

#### Check coverage before publishing

Stored output reaches block 20,866,412, past the day’s last block, so your finality policy moves 30 September from provisional to published.

- Your analyst 

#### Answer from the records

The busiest interval, 12:00 to 16:00, holds transfers of 1,500 and 2,000 USDC. A 3,000 USDC burn in the same interval is excluded by the definition.

ResultThe answer names its inputs: 15 transfers counted and 4 mint and burn events excluded, each identified by transaction and event index.

An existing Subgraph can supply the transfers when its schema has them. Keep published results in your own storage so later corrections do not change them.

When a source correction arrives 

A reorg can remove or replace a counted transfer. Mark the affected day provisional, regenerate its totals from the corrected records, and keep the previously published figure with its publication time.

Related workflows 

## From exploration to recurring reports

- ### Protocol dashboards

Query indexed protocol entities for an explorable dashboard.

[GraphOps Subgraphs](https://graphops.xyz/services/subgraphs)

- ### Activity research

Study event history using your own definitions of volume and participation.

[GraphOps Substreams](https://graphops.xyz/services/substreams)

- ### Historical data pipelines

Backfill package output and stream updates into your warehouse.

[GraphOps Substreams](https://graphops.xyz/services/substreams)

- ### Source-level validation

Check transactions and state against node responses at explicit blocks.

[GraphOps RPC](https://graphops.xyz/services/rpc)

Evaluate with your data 

## Publish a metric your readers can interpret

A higher transfer total means more gross token movement. It does not by itself establish more users, revenue, or economic demand.

- Test 01 

### Define the unit of analysis

Document contracts, UTC boundaries, decimals, exclusions, and repeated transfers. Add a separate measure when the question concerns participation.

- Test 02 

### Compare like with like

Compare intervals with the same coverage and rules, and keep incomplete periods provisional. Monetary comparisons need a named price source and valuation time.

- Test 03 

### Keep a route back to the inputs

Save the definition and source identifiers with each report run. Record the block each Subgraph query read so the run can be reproduced.

### Bring to the first conversation

- One reporting question

- Its metric definition and dimensions

- Refresh cadence

- The history it needs

[Explore current pricing](https://graphops.xyz/pricing) 

## Start with the question you need to answer.

Create an account and fund access to query a schema or backfill events. Work with GraphOps on historical coverage, integration, and recurring reporting needs.

[Create account (opens in a new tab)](https://platform.graphops.xyz/auth/register)[Discuss your project](https://graphops.xyz/contact#enterprise)
