Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
LABS
Guides

How to Implement a Proposal Lifecycle Analytics Dashboard

A technical tutorial for building a dashboard that tracks governance proposal metrics across discussion, voting, and execution stages to identify process bottlenecks.
Chainscore © 2026
introduction
GOVERNANCE ANALYTICS

How to Implement a Proposal Lifecycle Analytics Dashboard

A guide to building a data-driven dashboard for tracking and analyzing on-chain governance proposals from creation to execution.

A proposal lifecycle analytics dashboard is a critical tool for DAOs, protocol teams, and researchers to monitor governance health and participation. It aggregates on-chain data to visualize the journey of a proposal from its initial submission through voting, execution, and final outcome. Key metrics tracked include proposal state, voter turnout, voting power distribution, and time-to-execution. This data transforms raw blockchain logs into actionable insights, enabling stakeholders to identify bottlenecks, gauge community sentiment, and improve governance processes. Building such a dashboard requires interfacing with governance smart contracts, indexing event data, and presenting it through a clear UI.

The technical foundation involves querying and processing on-chain events. Most governance systems, like those built on Compound's Governor Bravo or OpenZeppelin's Governor, emit standardized events such as ProposalCreated, VoteCast, and ProposalExecuted. Your dashboard's backend must index these events, typically using a service like The Graph for subgraph creation or a dedicated indexer. For example, a subgraph schema would define entities for Proposal, Vote, and Delegate, linking them via the proposal ID. This creates a queryable database that powers your frontend analytics.

For the frontend implementation, frameworks like React or Next.js paired with charting libraries such as Recharts or Chart.js are common choices. The core dashboard should display: a list of proposals with their current state (Pending, Active, Canceled, Defeated, Succeeded, Queued, Expired, Executed), detailed vote breakdowns (For, Against, Abstain), voter addresses with their voting power, and historical trends. Interactive filters for time periods, proposal types, and outcomes are essential for deep analysis. Here's a conceptual React component structure:

jsx
function ProposalCard({ proposal }) {
  return (
    <div>
      <h3>{proposal.title}</h3>
      <p>Status: {proposal.status}</p>
      <p>For: {proposal.forVotes} | Against: {proposal.againstVotes}</p>
    </div>
  );
}

Advanced analytics move beyond basic state tracking. Implement features to calculate voter participation rate (votes cast / total possible votes), quorum achievement over time, and the concentration of voting power among top delegates. Tracking the proposalThreshold and quorum parameters across upgrades can reveal how governance accessibility changes. Furthermore, correlating proposal outcomes with token price data or protocol metric changes (e.g., TVL, revenue) can provide causal insights. These layers of analysis help answer whether high-participation votes lead to better outcomes or if certain proposal types consistently fail.

To ensure real-time data, your indexing solution must handle chain reorganizations and update the UI accordingly. For subgraphs, this is managed by the indexing service. For a custom indexer, you need logic to handle chain forks. The frontend can poll for updates or use WebSocket subscriptions. Finally, consider making the dashboard public and open-source to enhance transparency. Tools like Dune Analytics or Flipside Crypto offer alternative starting points for querying data, but a custom dashboard provides tailored metrics, branding, and direct integration with your community's interface.

prerequisites
FOUNDATION

Prerequisites and Architecture

Before building a proposal lifecycle analytics dashboard, you need the right data sources, tools, and architectural blueprint. This section covers the essential components and design patterns.

The core prerequisite is on-chain data access. You'll need to index proposal events from the target DAO's governance smart contracts. For Ethereum-based DAOs like Compound or Uniswap, this means listening to events from the Governor contract (e.g., ProposalCreated, VoteCast, ProposalExecuted). Use a node provider like Alchemy or Infura for reliable RPC access, or leverage a specialized indexer such as The Graph to query historical data efficiently. You will also need the contract ABIs to decode event logs.

The backend architecture typically follows an ETL (Extract, Transform, Load) pipeline. A common pattern uses a service (written in Node.js, Python, or Go) to poll for new events or subscribe via WebSocket. Each event is processed, normalized into a consistent schema, and stored in a database. Time-series databases like TimescaleDB or document stores like MongoDB are well-suited for this analytical data. For production systems, consider using a message queue (e.g., RabbitMQ) to handle event ingestion peaks.

Your data schema must model the proposal lifecycle stages. Essential entities include: Proposal (with fields for id, proposer, description, startBlock, endBlock, state), Vote (voter, support, weight, reason), and ProposalStateTransition (blockNumber, previousState, newState). Capturing the block number and timestamp for each state change is critical for calculating metrics like time-to-quorum or voting duration distribution.

For the frontend dashboard, you'll need a framework like React or Vue.js and a charting library such as D3.js or Recharts. The frontend queries aggregated data from a backend API. Ensure your API can serve both real-time updates (via WebSockets for new proposals/votes) and historical aggregates (e.g., proposal success rate over the last 6 months). Authentication may be required if displaying voter-specific data.

Key technical decisions include handling chain reorganizations (re-orgs) by confirming event finality and scaling for high-throughput DAOs. For Aragon DAOs on Polygon or Arbitrum, you must adapt to their specific contract interfaces. Always reference the official documentation for the protocol you're analyzing, such as OpenZeppelin's Governor contract guide or Compound's Governor Bravo.

stage-1-forum-data
DATA INGESTION

Stage 1: Collecting and Analyzing Forum Data

This stage involves programmatically gathering raw governance data from community forums like Discourse and Commonwealth, then processing it into a structured format for analysis.

The foundation of any proposal lifecycle dashboard is reliable data. For DAOs, the primary source is often their governance forum, where discussions, temperature checks, and formal proposals are posted. You need to ingest data from these platforms using their public APIs. For a Discourse forum, you can use the /posts.json and /topics.json endpoints. For Commonwealth, the GraphQL API at https://commonwealth.im/api provides access to threads, comments, and community data. The goal is to fetch all relevant posts, including metadata like author, timestamp, category, and vote counts.

Raw API data is rarely analysis-ready. You must structure and clean the data into a consistent schema. Key entities to extract include: Proposal (the main discussion thread), Comment (replies and discussions), Author (participant wallet addresses), and Vote (forum sentiment signals like likes). A robust pipeline will handle pagination, rate limiting, and incremental updates to sync new data without re-fetching everything. Store this structured data in a database like PostgreSQL or a data warehouse for efficient querying.

With clean data, you can begin core metric calculation. This transforms raw events into actionable insights. Essential metrics for this stage include: Discussion Activity (total posts/comments over time), Participant Engagement (unique addresses posting/voting), Sentiment Velocity (comment rate during key phases), and Proposal Categorization (tagging threads by type, e.g., "Parameter Change" or "Grants"). Calculating these requires aggregating your structured data by time windows and proposal IDs.

To operationalize this, you'll need a script or service. Below is a simplified Python example using the requests library to fetch and calculate basic metrics from a Discourse API, assuming you have a Proposal table in a database.

python
import requests
import pandas as pd
from datetime import datetime, timedelta

# 1. Fetch proposal topics from Discourse API
def fetch_proposals(forum_url, api_key):
    headers = {'Api-Key': api_key, 'Api-Username': 'system'}
    response = requests.get(f'{forum_url}/latest.json', headers=headers)
    return response.json()['topic_list']['topics']

# 2. Calculate weekly activity
proposals = fetch_proposals('https://forum.example.com', 'your_api_key')
df = pd.DataFrame(proposals)
df['created_at'] = pd.to_datetime(df['created_at'])

weekly_activity = df.set_index('created_at').resample('W').size()
print("Weekly Proposal Creation:")
print(weekly_activity)

This initial analysis provides the baseline metrics for your dashboard. You can visualize weekly activity trends, top contributors, and most active proposal categories. This stage answers fundamental questions about community health: Is forum activity growing? Are discussions concentrated among a few members? The output is a clean, queryable dataset and a set of foundational KPIs ready for the next stage: tracking the on-chain proposal lifecycle and execution.

stage-2-voting-data
STAGE 2: AGGREGATING ON-CHAIN AND OFF-CHAIN VOTING DATA

How to Implement a Proposal Lifecycle Analytics Dashboard

This guide details the technical process of building a dashboard that aggregates and visualizes voting data from both on-chain governance contracts and off-chain platforms like Snapshot.

The core of a governance analytics dashboard is a data aggregation layer that fetches and normalizes information from disparate sources. For on-chain data, you will query the governance contract's events and state. For a typical Compound/Aave-style governor, key events include ProposalCreated, VoteCast, and ProposalExecuted. Use a provider like Alchemy or Infura with a library such as ethers.js or viem to listen for these events or fetch historical logs. You must also query the contract's view functions (e.g., state(), proposalVotes()) to get the current status and tally of each proposal.

Off-chain data from platforms like Snapshot is accessed via their GraphQL API. You will need to construct queries to fetch proposal details, votes, and strategies for a specific space. The challenge is data normalization: a vote on-chain is a transaction with weight derived from token balance, while a Snapshot vote is a signed message with weight calculated by a custom strategy (e.g., ERC-20 balance, delegation, or multi-chain). Your aggregation service must create a unified data model, mapping fields like voter address, proposal identifier, voting power, and choice (For, Against, Abstain) into a common schema stored in your database.

A robust implementation uses a backend service (Node.js, Python) with scheduled jobs. One job polls the blockchain for new events and updates, while another queries the Snapshot API. These jobs should handle pagination, rate limiting, and error logging. Store the normalized data in a structured database (PostgreSQL, TimescaleDB). For real-time updates, consider using Socket.IO or Server-Sent Events to push new votes or state changes to the connected frontend dashboard, providing users with live insights into active proposals.

The frontend dashboard visualizes this aggregated data. Use a charting library like Chart.js or D3.js to create time-series graphs showing voting power participation over a proposal's lifecycle. Display key metrics: total voting power cast, quorum status, voter turnout percentage, and the vote distribution. Implement filters to view data by proposal type, timeframe, or voter. For transparency, each vote should be traceable back to its source—on-chain transaction hash or Snapshot proof link—allowing users to verify the data's integrity directly on the respective explorer.

Finally, consider advanced analytics to derive more value. Calculate voter sentiment trends, identify whale voting patterns, or detect potential voting coalitions. Implement alerts for proposals nearing their quorum or voting deadline. By aggregating on-chain and off-chain data into a single pane of glass, this dashboard transforms raw voting logs into actionable intelligence, empowering communities to analyze participation, understand delegate behavior, and make more informed governance decisions.

stage-3-execution-metrics
POST-EXECUTION TRACKING

How to Implement a Proposal Lifecycle Analytics Dashboard

This guide explains how to build a dashboard to monitor on-chain governance proposals after they are executed, tracking key metrics like voter participation, treasury impact, and execution status.

A post-execution analytics dashboard transforms raw on-chain proposal data into actionable insights for DAO contributors and token holders. The core objective is to move beyond simple pass/fail tallies and measure the real-world impact of governance decisions. Essential metrics to track include final vote turnout (percentage of circulating supply), execution success/failure status, treasury balance changes, and contract interactions initiated by the proposal. For example, a dashboard could show that Proposal #42, which passed with 55% approval, successfully transferred 100,000 USDC from the treasury but failed to call a secondary setParameter function due to a gas limit error.

To build this dashboard, you must first index and query historical proposal data. Start by using a subgraph for your DAO's governance contract (e.g., a subgraph for OpenZeppelin's Governor) or query a blockchain indexer like The Graph or Covalent. You need to fetch events such as ProposalCreated, VoteCast, ProposalExecuted, and ProposalCanceled. For treasury impact, you'll also need to parse the calldata of executed transactions to identify token transfers or contract calls. A basic query for a Governor-based DAO might look like:

graphql
query GetExecutedProposals {
  proposals(where: {executed: true}) {
    id
    description
    forVotes
    againstVotes
    abstainVotes
    executionTimestamp
  }
}

After collecting the data, the next step is calculating derived metrics. Voter participation is calculated as (Total Votes Cast / Circulating Token Supply) * 100. Treasury outflow/inflow requires summing the value of all asset transfers in the proposal's transactions, which may involve fetching historical token prices from an oracle API. You should also track execution latency, which is the time delta between the proposal's endBlock and its executionTimestamp. This metric can reveal bottlenecks in the execution process. Structuring this data in a time-series database (like TimescaleDB) allows for trend analysis, such as observing whether voter apathy is increasing over time.

For the frontend visualization, use a library like D3.js, Chart.js, or a framework-specific tool like Recharts. Create widgets for: a proposal execution status chart (pie chart for executed vs. canceled vs. failed), a historical voter turnout timeline, and a treasury impact table listing the top proposals by value moved. Ensure the dashboard updates automatically by connecting your frontend to the indexed data via a subscription or by polling a backend API service. Tools like Grafana can be configured with your database as a data source for a quicker, albeit less customized, operational dashboard.

Finally, implement alerting and reporting features to make the dashboard proactive. Set up notifications for critical events, such as a proposal execution failure or a treasury withdrawal exceeding a predefined threshold. You can use services like PagerDuty, a simple Discord webhook, or an email service. Regularly publishing a quarterly governance report generated from this dashboard data fosters transparency. By implementing this lifecycle analytics system, DAOs can quantitatively assess their governance health, identify process flaws, and make data-driven decisions to improve future proposal design and voter engagement.

CORE KPIS

Key Proposal Lifecycle Metrics

Essential on-chain and off-chain metrics for tracking governance proposal health and engagement.

MetricDescriptionData SourceTarget Range

Voter Participation Rate

Percentage of eligible voters who cast a vote

On-chain Snapshot

20% for major upgrades

Average Voting Power per Vote

Mean voting weight (tokens) of participating addresses

On-chain

Avoid > 30% concentration in single vote

Proposal-to-Execution Time

Time from proposal creation to on-chain execution

On-chain Timestamps

7-14 days (varies by DAO)

Discussion Sentiment Score

Aggregate sentiment (positive/neutral/negative) from forum posts

Discourse/Commonwealth API

60% positive for passage

Delegation Activity

Number of new/updated delegation events preceding a vote

On-chain Events

Spike indicates heightened interest

Quorum Achievement Time

Time for a proposal to reach the minimum voting power threshold

On-chain

< 50% of total voting period

Vote Swing Analysis

Measurement of how vote distribution changes during the voting period

On-chain Snapshot

Large late swings may indicate manipulation

Gas Cost for Execution

Estimated gas required to execute the passed proposal

Simulation / Tenderly

< 0.5 ETH for EVM chains

building-visualizations
TUTORIAL

How to Implement a Proposal Lifecycle Analytics Dashboard

A step-by-step guide to building a data visualization dashboard that tracks on-chain governance proposals from submission to execution.

A proposal lifecycle dashboard transforms raw on-chain data into actionable insights for DAO members and researchers. The core data model tracks a proposal's journey through key states: Pending, Active, Succeeded/Failed, Queued, and Executed. For each state, you need to capture the block number, timestamp, and relevant transaction hash. This data is typically sourced by indexing events from the governance contract, such as ProposalCreated, VoteCast, ProposalQueued, and ProposalExecuted. Using a subgraph on The Graph protocol or a custom indexer is the most efficient way to query this historical data.

The frontend visualization requires a library like D3.js, Recharts, or Chart.js. Start by plotting the high-level metrics: total proposals over time, pass/fail ratio, and average voting turnout. A central timeline component is essential, visually mapping each proposal's progression through the states mentioned above. Interactive tooltips should display granular data: proposal ID, creator, voting period dates, and final vote tally. For example, a ProposalCard component might show a horizontal bar with colored segments representing time spent in each state, updating in real-time as new blocks are mined.

To calculate meaningful analytics, implement derived metrics from the raw state data. Time-in-phase analysis measures how long proposals remain in queue before execution, highlighting potential bottlenecks in the governance process. Voter participation curves can be charted by sampling vote casts over the active period, showing if momentum builds early or late. Use a library like date-fns for time calculations. Aggregate these metrics in summary cards: Average Execution Delay: 4.2 days, Median Voting Period: 5 days, Top Proposer: 0xabc.... This quantitative view helps DAOs optimize their governance parameters.

For a complete implementation, integrate live data feeds. Use ethers.js or viem to listen for new governance events via a WebSocket provider (e.g., provider.on("block")). When a new event is detected, update the dashboard's state and re-fetch the relevant proposal details. Consider caching strategies for performance. The final dashboard should offer filters by date range, proposal status, and proposer address. By following this architecture, you build a tool that provides transparency into the governance health and efficiency of any DAO using Compound Governor or similar frameworks.

PROPOSAL ANALYTICS

Frequently Asked Questions

Common technical questions and solutions for building a governance proposal lifecycle dashboard.

A comprehensive dashboard requires aggregating on-chain and off-chain data. Key sources include:

  • On-chain data: Proposal creation, voting transactions, and execution calls from the governance contract (e.g., OpenZeppelin Governor, Compound Governor Alpha). Use an RPC provider or indexer like The Graph for historical queries.
  • Event logs: Capture ProposalCreated, VoteCast, ProposalExecuted events.
  • Off-chain data: Snapshot votes, forum discussions (from Discourse or Commonwealth), and social sentiment data via APIs.
  • Token data: Delegate and voter balances at the proposal snapshot block, fetched from the token contract or a subgraph.

Integrating these sources provides a complete view from ideation to execution.

conclusion-next-steps
IMPLEMENTATION SUMMARY

Conclusion and Next Steps

You have now built a functional dashboard to track proposal lifecycle metrics. This guide covered the core components: data ingestion, processing, and visualization.

Your dashboard provides a foundation for on-chain governance analysis. By aggregating data from sources like The Graph, Tally, and Snapshot, you can track key metrics such as proposal volume, voting participation, execution success rates, and delegate behavior over time. This data is crucial for DAO operators and researchers to assess protocol health and voter engagement. The next step is to operationalize this dashboard for continuous monitoring.

To move from a prototype to a production system, consider these enhancements: - Implement automated data backfilling using cron jobs or serverless functions to ensure historical data completeness. - Add real-time alerts for critical governance events, like a proposal entering a voting phase or a quorum being met, using webhook integrations with Discord or Slack. - Enhance data validation by cross-referencing multiple data sources to flag discrepancies in proposal state or vote tallies.

For deeper analysis, extend your data model. Incorporate sentiment analysis on forum discussions using NLP models to gauge community sentiment preceding a vote. Calculate delegate concentration metrics like the Gini coefficient to understand voting power distribution. Track proposal lifecycle duration from temperature check to execution to identify bottlenecks in your DAO's governance process.

The dashboard's architecture is designed for extensibility. You can add support for new chains by integrating additional subgraphs from The Graph's hosted service or by indexing custom events with a subgraph studio. Similarly, new frontend visualizations—such as delegate relationship graphs or proposal dependency trees—can be built by querying the aggregated data layer you've established.

Finally, consider the security and maintenance of your analytics pipeline. Regularly audit your data connectors for API changes from providers like Snapshot or Tally. Implement query rate limiting and caching to manage costs and performance, especially when using paid RPC endpoints. Document your data schema and ETL processes to ensure the dashboard remains maintainable as your team or the underlying protocols evolve.