Slack
A Block Kit message in a Slack channel for every mapped event. Useful for a "new customer" channel the whole team watches, or for keeping an eye on a conversion you have just started tracking.
This is a destination, driven by the event mapping. Alerts from monitors and error rules are a separate feature with its own notification channels.
Prerequisites
- A Slack workspace where you can install an app.
What to collect
| Value | Where to find it | Stored as |
|---|---|---|
| Incoming webhook URL | api.slack.com/apps → your app (or Create New App → From scratch) → Features → Incoming Webhooks → toggle on → Add New Webhook to Workspace → pick the channel. Copy the https://hooks.slack.com/services/… URL. |
Vault |
| Channel label | Free text shown in the message footer. Slack itself decides the real channel from the webhook. | Config |
| Include the person | Off by default. On, the message shows the email or name of the person who triggered the event. | Config |
| Include raw properties | Off by default. On, the event's properties are appended as a code block. | Config |
The webhook URL is the credential — anyone who has it can post to that channel — so it is stored in the vault and never shown again, not in the console and not in the delivery log.
The message
{
"text": "New purchase · $49",
"blocks": [
{ "type": "header", "text": { "type": "plain_text", "text": "New purchase", "emoji": false } },
{ "type": "section", "fields": [
{ "type": "mrkdwn", "text": "*Event*\nNew purchase" },
{ "type": "mrkdwn", "text": "*Value*\n$49" },
{ "type": "mrkdwn", "text": "*Page*\n/checkout" },
{ "type": "mrkdwn", "text": "*Source*\nsearch / organic" },
{ "type": "mrkdwn", "text": "*Items*\n2 × SKU-1" }
]},
{ "type": "context", "elements": [
{ "type": "mrkdwn", "text": "SaaS Pro Max · production · #growth · <https://example.com/checkout|source page>" }
]}
]
}
The mapping rule's "Message title" becomes the header. text is the fallback
Slack shows in notifications and to screen readers.
Fields appear only when there is something to show, and Slack renders at most ten per section, so a very wide event is trimmed rather than rejected.
Mapping advice
Slack is the one destination where * — every event — is almost always the
wrong choice. A busy application will rate-limit the webhook and drown the
channel. Map the two or three events a human actually wants to see, and add
conditions:
[
{
"event": "purchase",
"destinationEvent": "New purchase",
"valueProperty": "value",
"currency": "USD",
"conditions": [{ "property": "value", "op": "gte", "value": "100" }]
}
]
Verifying
Press Send test event. A message titled "Destination test" appears in the
channel. Slack answers ok as plain text; anything else — invalid_payload,
channel_not_found, no_service — is recorded in the delivery log with the
code Slack returned.
Privacy
Personal data goes to Slack only when you turn "Include the person" on. Consider
who is in the channel first: a Slack message is a copy of the data that lives
outside SaaS Pro Max's permission model, and people.pii.read does not apply
there.
Limitations
- One message per event, with no batching or digest.
- 10 second timeout; retries at 30 s, 2 min and 8 min for 429 and 5xx.
- Slack rate-limits incoming webhooks to roughly one message per second per webhook. Map narrowly.