← Protocols
Formo
Analytics·EVM · Solana · Multi-chain

Formo

01Description

Web3 product analytics built for crypto teams — autocaptures page views, sessions, wallet connects, signatures, transactions, and chain switches with a single SDK. Ships React, Next.js, React Native, and HTML script integrations and tight wagmi support.

02Best for
  • 01product analytics for dapps (Mixpanel/Amplitude alternative)
  • 02wagmi-aware autocapture of wallet events
  • 03funnel analysis from visit → connect → transact
  • 04session replay-style behavior dashboards
  • 05privacy-first onchain user analytics
03Install
  • pnpm add @formo/analytics
04Environment variables
VariableScopeDescription
NEXT_PUBLIC_FORMO_WRITE_KEYClientFormo SDK Write Key from app.formo.so → project settings. Client-safe; identifies the project, not a user.
05Prompt snippet
Install `@formo/analytics` and wrap your app with `FormoAnalyticsProvider`. With wagmi (recommended): `<FormoAnalyticsProvider writeKey={process.env.NEXT_PUBLIC_FORMO_WRITE_KEY!} options={{ wagmi: { config: wagmiConfig, queryClient } }}><App /></FormoAnalyticsProvider>` — this autocaptures page views, wallet connect/disconnect, chain switches, signatures, and transactions. For Next.js App Router put the provider in a `'use client'` component wrapping your `app/layout.tsx` children. For static sites use the CDN: `<script src='https://cdn.formo.so/analytics@latest' defer onload="window.formofy('${FORMO_WRITE_KEY}')"></script>`. Track custom events with `analytics.track('event_name', { ...properties })` and identify users with `analytics.identify(walletAddress, { ...traits })` after they connect. Use the same Write Key on your marketing site and dapp so Formo can stitch the cross-domain journey.
06Gotchas
  • Wagmi autocapture only fires when you actually use wagmi React hooks (`useAccount`, `useSignMessage`, etc.) — if your dapp uses raw viem or ethers, transactions and signatures will NOT autocapture and you must `analytics.track()` them yourself.
  • Next.js App Router: the provider MUST be a `'use client'` component or it will fail to mount; common cause of 'no events arriving in Formo'.
  • GDPR: although Formo brands as privacy-first, it still sets a session identifier — gate the provider behind your CMP for EU/UK users.
  • PII: don't pass email or full name to `identify(address, { ... })`. Stick to wallet address as the primary identity and leave PII to your auth/CRM.
  • Sampling / volume: free tier is event-capped — high-traffic dapps will silently drop events past the cap; instrument server-side aggregates for billing-critical metrics rather than relying solely on client events.
  • Solana support shipped in Feb 2026 and is newer than the EVM path — non-wagmi adapters (e.g. Solana wallet-adapter) require manual `track('wallet_connected', { address, chainId: 'solana' })` calls; not all events autocapture yet.
07Alternatives