ServicesAboutNotesContact Get in touch →
EN FR
Note

Elementary Slack and Teams integration

How to connect Elementary alerts to Slack (token-based and webhook) and Microsoft Teams, including the tradeoffs between integration methods.

Planted
elementarydata qualityautomation

Elementary supports Slack and Microsoft Teams as alerting destinations. The mechanics for each are different, and within Slack there are two integration methods with meaningfully different capabilities.

Slack: token-based vs webhook

Token-based integration is the recommended approach. It gives you custom channels per model, user tagging (@jessica.jones), and file uploads that include detailed failure information. The setup takes 10-15 minutes.

Create a Slack app in your workspace, then add these bot token scopes:

  • channels:join
  • channels:read
  • chat:write
  • files:write
  • users:read
  • users:read.email
  • groups:read

Install the app to your workspace, copy the bot token, then configure Elementary:

# In your Elementary profile
slack:
token: xoxb-your-slack-token
channel_name: data-alerts
group_alerts_by: "table"

Or pass directly to the CLI:

Terminal window
edr monitor \
--slack-token $SLACK_TOKEN \
--slack-channel-name data-alerts \
--group-by table

Webhook-based integration is simpler but limited. You create an incoming webhook in Slack — no custom app required — and pass the URL to the CLI:

Terminal window
edr monitor --slack-webhook $SLACK_WEBHOOK_URL

The catch is that webhooks only send to one fixed channel and don’t support user mentions. No @jessica.jones in the alert, no routing to #finance-data-alerts based on model metadata. Webhooks are appropriate for a quick proof of concept or for cases where a single fixed channel and no user mentions are sufficient. Token-based integration is the standard for production use.

Routing alerts to different Slack channels

With token-based integration, alerts route to specific channels based on model metadata. Two patterns work well together.

Per-model routing is the escape hatch for models that need non-standard behavior:

models:
- name: mrt__marketing__campaigns
config:
meta:
channel: marketing-data-alerts

Path-based routing in dbt_project.yml handles entire directories at once:

models:
your_project:
marts:
marketing:
+meta:
channel: marketing-data-alerts
finance:
+meta:
channel: finance-data-alerts

Every model under marts/marketing/ routes to #marketing-data-alerts, every model under marts/finance/ routes to #finance-data-alerts. Individual models can still override this by setting their own channel in model-level YAML — the more specific configuration wins.

Channel structure depends on team organization. One channel per domain (finance, marketing, product) suits medium-sized teams organized by function. One channel per squad suits teams organized by product area. A single shared channel for all alerts tends to produce high volume that reduces signal-to-noise for recipients.

Microsoft Teams

Teams integration uses webhooks with Adaptive Cards for formatting. The setup is straightforward:

teams:
notification_webhook: https://your-org.webhook.office.com/webhookb2/...
group_alerts_by: "table"

Or via CLI:

Terminal window
edr monitor --teams-webhook $TEAMS_WEBHOOK_URL

Teams integration has several limitations: user mentions aren’t fully supported, formatting options are more constrained than Slack, and Microsoft deprecated Incoming Webhooks in late 2025. Organizations that haven’t migrated to Power Automate Workflows will need to do so.

For organizations standardizing on Teams, Power Automate Workflows that trigger on webhook events give you more control over message formatting and notification routing than the legacy webhook approach. The incoming webhook URL changes in the migration, but the Elementary configuration is the same structure.

If you need richer alerting capabilities than Teams currently supports — per-channel routing, user mentions, conditional formatting — the practical path is either Elementary Cloud (which extends to PagerDuty and other incident management tools) or a hybrid approach where Elementary alerts go to a Teams channel and a Power Automate workflow handles further routing.