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.

Analytics
Daily transfer activity 30 September · UTC
Gross transfer amount 12,500 USDC
  • Transfer transactionsCounted after decimal normalizationTransfers counted
  • Mint and burn eventsExcluded from the totalMint, burn excluded
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 amount
12,500 USDC
Transfers counted
15
Mint and burn events excluded
4

12:00 to 16:00

3,500 USDC
  1. Transfer A 0x5e…21 / event 1 · block 20,862,214 1,500
  2. BurnExcluded by definition 0x2d…80 / event 3 · block 20,862,540 3,000
  3. 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
  1. 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.

  2. Your pipeline

    Apply the metric definition

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

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

  4. 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
  • Activity research

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

    GraphOps Substreams
  • Historical data pipelines

    Backfill package output and stream updates into your warehouse.

    GraphOps Substreams
  • Source-level validation

    Check transactions and state against node responses at explicit blocks.

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

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

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

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

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.