> This page is part of the [Customer.io documentation](https://docs-customerio.netlify.app). For the complete index, see [llms.txt](https://docs-customerio.netlify.app/llms.txt).
> Last updated: April 29, 2026

# Slack Destination

## About this integration

This integration helps you send messages to your Slack Workspaes based on events from your app or website.

[Mode How we forward source data to the destination: through Customer.io's servers or directly from our JavaScript client.](/cdp/destinations/getting-started/#connection-mode)

[Web sources Indicates whether or not this integration supports our the JavaScript client.](/cdp/sources/getting-started/#types-of-sources)

[API sources Indicates whether or not this integration supports our server libraries (Go, NodeJS, Python), API, Mobile SDK, and other data sources.](/cdp/sources/getting-started/#types-of-sources)

[Supported calls The API methods this integration supports.](/cdp/sources/source-spec/source-events/)

[Integration name The name of this integration if you want to enable or disable it in the `integrations` object.](/cdp/sources/source-spec/common-fields/#the-integrations-object)

Standard

N/A

Slack

## Use cases[](#use-cases)

*   **Alert your sales team** when a high-value lead signs up or reaches a usage milestone. Post to your `#sales-alerts` channel with the person’s name, plan, and key traits.
*   **Notify support** when a customer submits a negative NPS score or cancels their subscription, so your team can reach out proactively.
*   **Keep your team in the loop** on product activity—post to a channel when someone completes onboarding, upgrades their plan, or hits an error threshold.
*   **Monitor data pipeline health** by posting to an internal channel when specific track events fire, confirming that your integration is working as expected.

## Getting started[](#getting-started)

1.  Go to **[Data & Integrations > Integrations](https://fly.customer.io/workspaces/last/journeys/integrations/all/directory)** and select the **Slack** entry in the *Directory* tab.
    
2.  (Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We’ll only show you data sources that work with your integration.
    
3.  Configure your integration.
    
4.  Click **Enable Destination**.
    

## Actions[](#actions)

When you’re done setting things up, you can go to the *Actions* tab to see how we map incoming data to your integration.

You may need to add actions for this integration

While we often have default triggers for actions, we don't always add those actions as defaults. You may need to add actions to make sure that you're sending all the data that you want to send to your integration. See our [actions](/integrations/data-out/actions/) page for help setting up actions.

Action

Default Trigger

Description

Post Message

Post a message to the specified Slack workspace and channel when the associated trigger criteria are met.

### Post message[](#post-message)

Set up at least one **Post Message** action. This action posts a message to a channel in your Slack workspace when an incoming data trigger fires.

1.  Go to **Actions** for your Slack integration and click **Add Action** to set up the *Post Message* action.
2.  Set up the *Trigger* for the action. This determines when Customer.io posts to Slack.
3.  Under *Data Structure*, enter the *Webhook URL* for your Slack workspace and channel. See [Slack’s documentation](https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks) for help creating an incoming webhook.
4.  Enter the *Message* you want to send. You can include variables in your message!
5.  Enter the *Channel* you want to send your message to.
6.  Set the *User*. This controls who the message appears from.
7.  (Optional) Enter the *Icon URL* for the user. This sets the profile picture for your integration.

#### Use variables in your messages[](#use-variables-in-your-messages)

You can use variables in the *Message* field to include data from the incoming event. For example, if someone triggers a `track` call with the event name `Order Completed`, you might send a message like:

```text
🎉 {{$.properties.name}} just completed an order for {{$.properties.total}}!
```

This pulls the `name` and `total` properties from the incoming track event and includes them in your Slack message.

#### Send to different channels[](#send-to-different-channels)

Each *Post Message* action targets a single Slack webhook URL, which maps to a specific channel. If you want to post to multiple channels based on different events, create separate *Post Message* actions—one per channel.

For example, you might have:

*   A `#sales-alerts` action triggered by `identify` calls where `$.traits.plan` equals `enterprise`
*   A `#support-alerts` action triggered by `track` calls where `$.event` equals `NPS Submitted`

## Things to know[](#things-to-know)

*   **Webhook URLs are channel-specific.** Each Slack incoming webhook is tied to a single channel. You’ll need a separate webhook (and action) for each channel you want to post to.
*   **Messages are plain text.** This integration posts text messages. It doesn’t support Slack’s [Block Kit](https://api.slack.com/block-kit) for rich formatting.
*   **The default username is “Customer.io Data Pipelines.”** Change this per action by updating the *User* field.
*   **Rate limits apply.** Slack limits incoming webhooks to roughly 1 message per second per webhook URL. If you send high-volume events to Slack, some messages may be dropped. Use this integration for important alerts, not high-frequency event streams.