Retention infrastructure for Web3
Turn onchain behavior into messages that land
Detect what wallets do. Resolve who they are. Reach them by email or in-app push — and measure whether it worked. One loop, wallet-first.
Start where you are
Two paths through these docs, depending on what you’re doing today.
Run campaigns
Set up a workspace, build an audience, and send your first campaign.
Build an integration
Send custom events, push in-app notifications, and query your data.
The core loop
Every part of the platform is one stage of the same loop. Each stage feeds the next.
Detect
Capture onchain activity and custom product events as they happen.
Resolve
Tie wallets, emails, and external IDs to one contact record.
Segment
Build cohorts with rules or SQL across onchain and messaging data.
Reach
Send email and wallet-addressed in-app push from one workflow.
Automate
Trigger flows the moment a wallet does something worth responding to.
Measure
Track opens, clicks, and delivery across both channels.
Popular guides
In-app notifications
Wallet-authenticated push in your dApp — two lines with the SDK.
Custom events
Send product events and trigger automations from them.
SQL schema
Every table, column, and type you can query.
Automation triggers
The full trigger catalog and filter operators.
Contract-based flows
React to mints, swaps, approvals, and liquidations.
Docs MCP server
Connect these docs to Claude, Cursor, or VS Code.
Wallet-first, by design
The wallet is the canonical user record. Email is optional, and so is every other identifier — which means you can reach someone who has never given you an address, and still measure whether it worked.

