Skip to main content
Alerts
Get notified in real time when high-value whales and important user actions happen:
  • Key user events (connect wallet, transactions, conversions, drop off)
  • When whales and high-value users visit your app
In the project settings page, you can create an alert that will notify you via:
  • Webhooks (including Slack via incoming webhooks)

How to set up your first alert

Get real-time notifications when high-value users interact with your app. This guide walks you through creating alerts for whale detection and key events.

Step 1: Navigate to Alerts

  1. Go to the Formo Dashboard
  2. Select your project
  3. Click Settings in the left navigation (gear icon)
  4. Select the Alerts tab

Step 2: Create a new alert

  1. Click Create Alert
  2. Configure your alert:
SettingDescription
NameDescriptive name (e.g., “Whale Alert”)
Trigger TypeEvents or Users (see below)
ConditionsFilter conditions (optional)
NotificationWebhook (generic HTTP or Slack)

Step 3: Choose a trigger type

Select whether the alert fires on events or users:
Triggers when a new event matches your filters. Each matching event is sent to your webhook.
Event TypeWhen it fires
connectUser connects their wallet
transactionUser submits a transaction
pageUser visits a specific page
customYour custom tracked events
You can add conditions to filter on event properties (e.g., chain_id = 8453, status = failed).

Step 4: Configure notifications

  1. Select Webhook as the notification type
  2. Enter your webhook URL (generic HTTPS endpoint or Slack incoming webhook)
  3. Formo sends a POST request with batched data
Webhook security and signatures:
  • Optional secret: In the alert configuration, you can provide a signing secret used to verify requests on your server.
  • For generic webhooks (non-Slack URLs), Formo uses your secret to compute an HMAC-SHA256 signature over the string {timestamp}.{body}, where:
    • timestamp is the Unix timestamp (seconds) used for the request
    • body is the exact JSON payload string sent in the request
HTTP headers sent:
HeaderDescription
Content-Typeapplication/json
User-AgentFormo-Alerts/1.0
X-Formo-Alert-IdThe alert ID in Formo
X-Webhook-SignatureHMAC-SHA256 signature (generic webhooks with a secret only)
X-Webhook-TimestampUnix timestamp used in the signature (generic webhooks with a secret only)
X-Webhook-Eventalert.event.triggered or alert.user.triggered (generic webhooks with a secret only)

Step 5: Test your alert

  1. Save your alert configuration
  2. Trigger a test event:
    • Visit your app in a browser
    • Connect a wallet
    • Perform the action that matches your alert
  3. Check your Slack channel or webhook endpoint for the notification

Alert payloads

Event alerts

When an event alert is triggered, Formo batches all matching events into a single webhook call.

Webhook payload

The webhook payload uses the alert.event.triggered event type and contains raw analytics events: Top-level properties:
PropertyTypeDescription
idstringUnique event ID (e.g., evt_3f7f9c4e-...)
typestringAlways alert.event.triggered
creatednumberUnix timestamp (seconds) when the webhook was created
dataarrayArray of raw analytics events that matched your filters
Each event in data:
PropertyTypeDescription
project_idstringYour Formo project ID
session_idstringUser session ID
channelstringEvent channel (e.g., web, import)
typestringEvent type (e.g., connect, transaction, page, track)
anonymous_idstringAnonymous user ID
user_idstringIdentified user ID (if available)
addressstringWallet address (if available)
eventstringEvent name
contextobjectContext data (IP, user agent)
propertiesobjectEvent-specific properties
versionstringSDK version
timestampstringISO 8601 timestamp
message_idstringUnique message ID
originstringOrigin domain
localestringUser locale
locationstringCountry code
timezonestringUser timezone
page_pathstringPage path
page_titlestringPage title
page_urlstringFull page URL
page_querystringURL query string
page_hashstringURL hash
library_namestringSDK library name
library_versionstringSDK library version
referrer_urlstringFull referrer URL
referrerstringReferrer domain
refstringRef parameter
utm_sourcestringUTM source
utm_mediumstringUTM medium
utm_campaignstringUTM campaign
utm_termstringUTM term
utm_contentstringUTM content
user_agentstringRaw user agent string
devicestringDevice type (e.g., desktop, mobile)
browserstringBrowser name
osstringOperating system
Sample payload:
{
  "id": "evt_3f7f9c4e-8b2c-4d1f-9a4b-4a2e9c1d2f01",
  "type": "alert.event.triggered",
  "created": 1739097600,
  "data": [
    {
      "project_id": "proj_123",
      "session_id": "sess_456",
      "channel": "web",
      "type": "connect",
      "anonymous_id": "4b48c7b6-3d61-409f-b695-1d9452954d6b",
      "user_id": "",
      "address": "0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc",
      "event": "Connected wallet",
      "context": {
        "ip": "203.0.113.10",
        "user_agent": "Mozilla/5.0 ..."
      },
      "properties": {
        "chain_id": 84532,
        "net_worth": 250000
      },
      "version": "1",
      "timestamp": "2026-02-09T06:42:16.519Z",
      "message_id": "msg_01J8ABCDEF1234567890",
      "origin": "app.formo.so",
      "locale": "en-US",
      "location": "VN",
      "timezone": "Asia/Saigon",
      "page_path": "/pricing",
      "page_title": "Pricing",
      "page_url": "https://app.formo.so/pricing",
      "page_query": "",
      "page_hash": "",
      "library_name": "@formo/sdk-js",
      "library_version": "1.0.0",
      "referrer_url": "https://google.com/",
      "referrer": "google.com",
      "ref": "",
      "utm_source": "google",
      "utm_medium": "cpc",
      "utm_campaign": "whale-acquisition",
      "utm_term": "",
      "utm_content": "",
      "user_agent": "Mozilla/5.0 (...)",
      "device": "desktop",
      "browser": "Chrome",
      "os": "MacOS"
    }
  ]
}

Slack payload

For Slack incoming webhooks (hooks.slack.com), Formo formats each event as an individual Slack Block Kit card message. Each message includes:
  • A header with the alert name
  • A user link (clickable link to Formo profile)
  • Event properties (key-value pairs from the event, up to 10 properties)
  • Metadata fields: Country, Device, Browser, OS, Referrer, Referral, UTM Source, UTM Medium, UTM Campaign, UTM Term, UTM Content — only shown when non-empty
  • A timestamp and View User button
  • Up to 25 events per batch, with an overflow summary if more were found
Sample Slack Block Kit payload (one event = one message):
{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": ":bell: Whale Alert",
        "emoji": true
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "<https://app.formo.so/teams/team_1/projects/proj_123/users/0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc|0xF04bC8...E26bdc>"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*chain_id:* 84532\n*net_worth:* 250000"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Country:* Vietnam\n*Device:* Desktop\n*Browser:* Chrome\n*OS:* MacOS\n*Referrer:* google.com\n*UTM Source:* google\n*UTM Medium:* cpc\n*UTM Campaign:* whale-acquisition"
      }
    },
    {
      "type": "context",
      "elements": [
        { "type": "mrkdwn", "text": ":clock1: Feb 9, 06:42 AM" }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": { "type": "plain_text", "emoji": true, "text": "View User" },
          "style": "primary",
          "url": "https://app.formo.so/teams/team_1/projects/proj_123/users/0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc"
        }
      ]
    }
  ]
}

User alerts

When a user alert is triggered, Formo sends matching user profiles to your webhook.

Webhook payload

The webhook payload uses the alert.user.triggered event type: Top-level properties:
PropertyTypeDescription
idstringUnique event ID (e.g., evt_3f7f9c4e-...)
typestringAlways alert.user.triggered
creatednumberUnix timestamp (seconds) when the webhook was created
dataarrayArray of user profiles that matched your filters
Each user in data contains the full wallet profile. All fields from the profile are included — key properties: Wallet identity:
PropertyTypeDescription
addressstringWallet address
net_worth_usdnumberWallet net worth in USD
tx_countnumberTotal transaction count
first_onchainstringFirst on-chain transaction timestamp
last_onchainstringLast on-chain transaction timestamp
updated_atstringWhen the wallet profile was last updated
ensstringENS name
farcasterstringFarcaster username
lensstringLens handle
basenamesstringBase name
lineastringLinea name
avatarstring | nullENS/Farcaster avatar URL
display_namestringDisplay name
descriptionstringProfile description
profile_urlstringLink to user profile in Formo dashboard
Socials (included when available): discord, telegram, website, github, twitter, linkedin, email, instagram, facebook, tiktok, youtube, reddit, linea Project-level engagement:
PropertyTypeDescription
first_seenstringWhen the user was first seen (UTC)
last_seenstringWhen the user was last active (UTC)
num_sessionsnumberTotal unique sessions
revenuenumberTotal revenue
volumenumberTotal transaction volume
pointsnumberTotal loyalty points
lifecyclestringLifecycle stage (New, Returning, Power user, Churned, Resurrected)
activity_datesstring[]Array of dates the user was active
locationstringCountry code
devicestringDevice type
browserstringBrowser name
osstringOperating system
Attribution (first-touch and last-touch):
PropertyTypeDescription
first_referrerstringFirst-touch referrer domain
first_referrer_urlstringFirst-touch full referrer URL
first_refstringFirst-touch referral code
first_utm_sourcestringFirst-touch UTM source
first_utm_mediumstringFirst-touch UTM medium
first_utm_campaignstringFirst-touch UTM campaign
first_utm_termstringFirst-touch UTM term
first_utm_contentstringFirst-touch UTM content
last_referrerstringLast-touch referrer domain
last_referrer_urlstringLast-touch full referrer URL
last_refstringLast-touch referral code
last_utm_sourcestringLast-touch UTM source
last_utm_mediumstringLast-touch UTM medium
last_utm_campaignstringLast-touch UTM campaign
last_utm_termstringLast-touch UTM term
last_utm_contentstringLast-touch UTM content
Last activity:
PropertyTypeDescription
last_typestringLast event type (e.g., connect, page, track)
last_eventstringLast event name
last_propertiesstringJSON-encoded properties of the last event
Sample payload:
{
  "id": "evt_a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
  "type": "alert.user.triggered",
  "created": 1739097600,
  "data": [
    {
      "address": "0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc",
      "net_worth_usd": 250000,
      "ens": "whale.eth",
      "farcaster": "",
      "lens": "",
      "basenames": "",
      "linea": "",
      "discord": "",
      "telegram": "",
      "website": "",
      "github": "",
      "twitter": "whale_trader",
      "linkedin": "",
      "email": "",
      "instagram": "",
      "facebook": "",
      "tiktok": "",
      "youtube": "",
      "reddit": "",
      "avatar": "https://euc.li/whale.eth",
      "display_name": "Whale",
      "description": "",
      "updated_at": "2026-02-09 06:40:00",
      "tx_count": 142,
      "first_onchain": "2022-03-15 12:00:00",
      "last_onchain": "2026-02-09 06:40:00",
      "profile_url": "https://app.formo.so/teams/team_1/projects/proj_123/users/0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc",
      "first_seen": "2025-11-15 08:30:00",
      "last_seen": "2026-02-09 06:42:16",
      "num_sessions": 47,
      "revenue": 5200.50,
      "volume": 89000.00,
      "points": 1500,
      "lifecycle": "Returning",
      "activity_dates": ["2026-02-09", "2026-02-08", "2026-02-05"],
      "location": "VN",
      "device": "desktop",
      "browser": "Chrome",
      "os": "MacOS",
      "first_referrer": "google.com",
      "first_referrer_url": "https://google.com/search?q=formo",
      "first_ref": "",
      "first_utm_source": "google",
      "first_utm_medium": "cpc",
      "first_utm_campaign": "whale-acquisition",
      "first_utm_term": "",
      "first_utm_content": "",
      "last_referrer": "twitter.com",
      "last_referrer_url": "https://twitter.com/formo",
      "last_ref": "",
      "last_utm_source": "twitter",
      "last_utm_medium": "social",
      "last_utm_campaign": "",
      "last_utm_term": "",
      "last_utm_content": "",
      "last_type": "connect",
      "last_event": "Connected wallet",
      "last_properties": "{\"chain_id\":8453}"
    }
  ]
}

Slack payload

For Slack incoming webhooks, Formo formats user profiles as a rich card layout:
  • A header with the alert name
  • Per user: a clickable address header with avatar image (if available), a field grid with key profile data, and a View Profile button
  • Up to 25 users per batch, with an overflow summary if more were found
Default fields displayed:
FieldSourceConditional
Lifecyclelifecycle (e.g., New, Returning, Power user)Yes — only shown when non-empty
Net Worthnet_worth_usd (formatted as $1,234)No — always shown
First Seenfirst_seen (formatted date)No — always shown
LocationlocationYes — only shown when non-empty
BrowserbrowserYes — only shown when non-empty
DevicedeviceYes — only shown when non-empty
OSosYes — only shown when non-empty
Referrerfirst_referrer or last_referrerYes — only shown when non-empty
Referralfirst_ref or last_refYes — only shown when non-empty
UTMfirst_utm_* or last_utm_* (comma-joined)Yes — only shown when non-empty
Sample Slack Block Kit payload:
{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": ":bell: Whale Alert",
        "emoji": true
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*<https://app.formo.so/teams/team_1/projects/proj_123/users/0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc|0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc>*"
      },
      "accessory": {
        "type": "image",
        "image_url": "https://euc.li/whale.eth",
        "alt_text": "0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc"
      }
    },
    {
      "type": "section",
      "fields": [
        { "type": "mrkdwn", "text": "*Lifecycle:* Returning" },
        { "type": "mrkdwn", "text": "*Net Worth:* $250,000" },
        { "type": "mrkdwn", "text": "*First Seen:* Nov 15, 2025" },
        { "type": "mrkdwn", "text": "*Location:* VN" },
        { "type": "mrkdwn", "text": "*Browser:* Chrome" },
        { "type": "mrkdwn", "text": "*Device:* desktop" },
        { "type": "mrkdwn", "text": "*OS:* MacOS" },
        { "type": "mrkdwn", "text": "*Referrer:* google.com" },
        { "type": "mrkdwn", "text": "*UTM:* google, cpc, whale-acquisition" }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": { "type": "plain_text", "emoji": true, "text": "View Profile" },
          "style": "primary",
          "url": "https://app.formo.so/teams/team_1/projects/proj_123/users/0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc",
          "value": "0xF04bC8FdFC8b1c03Fa77885574Ae6Ea041E26bdc"
        }
      ]
    }
  ]
}

Examples

Whale detection alert

Notify when high-value users visit:
SettingValue
NameWhale Alert
Trigger typeUsers
Conditionnet_worth_usd > 100000
NotificationSlack webhook
Every time a wallet with over $100k net worth is active, you’ll get a Slack message with their profile.

Failed transaction alert

Track when users encounter issues:
SettingValue
NameFailed TX Alert
Trigger typeEvents
Conditiontype = transaction, status = failed
NotificationWebhook
Get notified when transactions fail so you can investigate UX issues.

Webhook integration examples

Send to Slack:
# Your Slack webhook URL
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Send to Zapier:
# Your Zapier webhook URL
https://hooks.zapier.com/hooks/catch/123456/abcdef/
Then use Zapier to route alerts to any destination: Notion, Airtable, Discord, SMS, etc.

Next Steps

Wallet Profiles

Learn more about user data available in alerts

Custom Events

Track custom events to alert on

Webhooks API

Full webhook documentation

User Segments

Target specific user groups with alerts