# Alerts (/docs/alerts)

An alert watches one number and checks it every hour, day or week. When the number breaks your rule, the alert **fires**: you get a message, and another one when it's back to normal. **Alerts** in the sidebar shows every alert with its state, latest value and recent history.

<CopyPrompt preset="alerts">
  Hand this to your agent. It looks at your events and proposes a few alerts worth having, then sets them up with you.
</CopyPrompt>

## What an alert can watch [#what-an-alert-can-watch]

| Watch | The number | Good for |
| --- | --- | --- |
| **Event** | A count, unique people, or sum or average of a property, for the last complete hour, day or week | Daily orders, signups per hour, revenue per day |
| **Insight** | A saved [trend](/docs/product-analytics/insights): its latest complete period. A saved funnel: its overall conversion % | Checkout conversion, weekly active users |
| **SQL query** | A number from the first row of a [saved query](/docs/product-analytics/sql) | Anything else: refunds over sales, accounts at risk |

For SQL, sort so the row you care about comes first, for example `ORDER BY day DESC`.

## When it fires [#when-it-fires]

- **drops below** or **goes above** a number;
- **changes by** a percentage, going up, down or either way. Event and trend alerts compare against the period before, and funnel and SQL alerts compare against the previous check.

The form shows the current value as you build the alert, and whether it would fire right now. A new alert checks once straight away.

## Where you're told [#where-youre-told]

Every check is recorded on the alert's page, and fires and recoveries appear in the activity log. Add up to five destinations:

- **Slack**: paste an [incoming webhook](https://api.slack.com/messaging/webhooks) URL. Messages look like *Daily orders: 12 (was 31, −61%) — drops below 20*, with a link to the alert.
- **Telegram**: add the Datahop bot to a channel or group, then enter its chat id. See [Destinations → Telegram](/docs/destinations#telegram) for how to find it.
- **Webhook**: Datahop sends a JSON `POST` you can point at an automation or an agent:

```json
{
  "type": "alert.fired",
  "alert": { "id": 4, "name": "Daily orders", "url": "https://app.datahop.dev/p/1/alerts/4" },
  "project": { "id": 1, "name": "Acme" },
  "value": 12,
  "previous": 31,
  "period": "2026-11-01T00:00:00",
  "condition": { "type": "below", "value": 20 },
  "message": "Daily orders: 12 (was 31, −61%) — drops below 20",
  "at": "2026-11-02T08:00:12.000Z"
}
```

`type` is `alert.fired`, `alert.resolved` or `alert.test`. **Send test** posts a test message to every destination. Destinations must be public `https` addresses.

## Pause, check, delete [#pause-check-delete]

Switch an alert off to pause it. **Check now** runs it immediately and notifies you if its state changes. Editing what it watches or when it fires starts it fresh.

## Agents [#agents]

Agents can do all of this over MCP: `create_alert`, `list_alerts`, `get_alert`, `update_alert`, `check_alert` and `delete_alert`. A good pattern is to point a webhook at your agent, so a firing alert starts an investigation: *"Orders dropped 40% — which step of checkout changed?"*
