Skip to main content

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.