Connect Slack to the rest of your stack.

Post notifications from dbt, Terraform, Argo CD, AWS, or any flow task. Schedule reports into channels as editable Canvases. Gate destructive steps with Block Kit approvals. Spin incident channels with on-call invited. Export channel history to your data warehouse.

Around every workflow, every system, every channel.

Slack is where teams already work. Kestra makes every other tool reach them there: notifications from dbt, reports from Snowflake, approval gates for Terraform, incident channels spun from any failure, message archives exported to BigQuery. Slack stops being a per-tool integration target and becomes the meeting point for the whole stack.

Notifications from any upstream system, one task shape

Every flow can route its completion or failure into Slack as the last step. dbt build finished, app.chats.Post fires. Terraform applied, app.chats.Post fires. AWS Lambda errored, app.chats.Post fires. Argo CD reported Healthy, app.chats.Post fires. The Slack notification task is the same regardless of the upstream tool. No per-tool integration code, no per-tool webhook config, no per-tool YAML.

Scheduled reports posted into channels as editable Canvases

A scheduled flow queries any data source (Snowflake, BigQuery, AWS Athena, NetBox, GitHub stats, AWS Cost Explorer), formats the rows into markdown sections, then app.canvases.Create posts an editable Canvas to the right channel. Leadership reads the daily metrics during standup, adds context inline, and the next morning's run updates the Canvas. Reports stop being PDFs nobody opens.

Human approval inside any multi-tool chain

Before any destructive step in any flow (terraform apply, kubectl Apply, Argo CD sync, Snowflake DELETE, IAM key rotation), app.chats.Post sends a Block Kit message with the change summary and Approve / Reject buttons. The Pause task waits. The click hits the Slack Events trigger; a handler flow resumes the original execution with the reviewer identity recorded. One gate pattern, every cross-tool chain.

Incident channels spun from any failure source

When a production flow fails (dbt, Terraform, Argo CD, Kubernetes, AWS, NetBox, anything), the errors branch fires app.conversations.Create with a dated channel name, app.conversations.Invite adds on-call from PagerDuty or NetBox lookup, app.canvases.Create posts the runbook for this failure type, and app.chats.Post kicks off the channel. Same pattern across every monitored flow.

Slash commands and interactive buttons as one of many flow entry points

app.core.Trigger receives slash commands like /deploy, /rollback, /restart from Slack's Events API. Same trigger captures interactive component clicks (Block Kit buttons). Slack joins webhooks, schedules, S3 triggers, Kafka triggers, and Git events as one valid way to launch a flow. The full event-driven catalog stays open.

Slack as a data source, not only a destination

app.conversations.History pulls channel messages into Kestra storage. From there, the BigQuery or Snowflake plugin lands the result in your warehouse for support-channel analytics, response-time SLAs, top-question clustering. app.users.List enumerates the workspace for identity reconciliation with HubSpot, Okta, or NetBox contacts. app.files.Info inventories shared files for compliance reviews.

How teams use Slack as the integration point

Patterns engineering, data, and ops teams ship today. Each one shows Slack connecting two systems beyond itself, with the real plugin classes in play.

Notification fabric

dbt, Terraform, Argo CD, AWS: every completion lands in the right channel

A reusable notify subflow takes a channel ID, a message template, and a status as inputs. Parent flows (dbt build, terraform apply, argocd sync, aws lambda invoke) call the subflow on success or failure. Per-tool channel routing (#data-pipelines for dbt, #infra for Terraform, #releases for Argo CD, #aws-alerts for Lambda) lives in the parent. The notification logic and the Block Kit formatting live once, in the subflow.

One subflow, many parents

Adding a new upstream tool means one line in the parent flow. The notify subflow does not change.

Channel routing in the parent, not Slack

No Slack admin maintenance when a new team wants its own channel. The parent flow picks the channel.

Same Block Kit formatting everywhere

Status, link to execution, timestamp, runtime. Every notification has the same shape regardless of source.

Reactions signal status at a glance

reactions.Add stamps a checkmark or alarm emoji on the original message. Scanning the channel becomes scanning emojis.

dbt build flow
any parent
argocd sync flow
any parent
terraform apply flow
any parent
call notify subflow
shared logic
post to channel
chats.Post
react to status
white_check_mark or fire
Scheduled report

Query Snowflake at 8am, post the day's metrics as an editable Canvas

Scheduled at 8am UTC. Runs a Snowflake query against the daily metrics view. A Python script formats the rows into markdown sections: revenue, signups, churn, support tickets, top-of-funnel. app.canvases.Create posts the result to #leadership-daily as an editable Canvas. Leadership reads the metrics during standup, edits the Canvas inline with context. Tomorrow's run updates the same Canvas with the day's numbers.

Replaces the PDF nobody opens

Reports live where the team reads them. No email digest, no shared drive folder, no morning ritual of checking dashboards.

Canvas is editable during the meeting

Leadership adds context, decisions, follow-ups inline. The artifact reads like a meeting note.

Same pattern for any data source

Swap Snowflake for BigQuery, Athena, Postgres, or a REST API. The downstream Canvas task does not care.

8am schedule
cron
snowflake query
daily metrics view
format markdown
Python script
post canvas
editable, channel-bound
ping the team
thread message
Cross-tool gate

Block Kit buttons gate any destructive step in any flow

A flow chains Terraform, Ansible, and Argo CD. Before terraform apply, app.chats.Post sends a Block Kit message to #releases with the plan summary, the affected resources, and Approve / Reject buttons. The Pause task waits. The click hits a Slack Events handler flow that captures the user_id, looks up the original execution, and resumes the Pause with the reviewer identity. terraform apply runs only after the click. The same gate pattern wraps Argo CD sync downstream.

Same gate for any task

Terraform, Argo CD, Snowflake DELETE, AWS IAM mutation, NetBox device delete. One pattern, any destructive step.

Reviewer identity flows forward

The Slack user_id passed by the click becomes a flow output, recorded in execution history alongside the change.

Two-gate chains for big rollouts

Approve the plan in #releases, approve the apply in #infra-on-call. Two distinct reviewers, two clicks, one flow.

terraform plan
produces plan.json
post approval
Block Kit buttons
wait for click
Pause
terraform apply
after resume
ansible configure
next step
argocd sync gate
second approval
argocd sync
after resume
Data source

Pull #support history into BigQuery for response-time analytics

A weekly flow runs app.conversations.History against the support channel, paginates through the full week's messages, writes the result to BigQuery via the BigQuery plugin. Analytics queries the warehouse for response-time SLAs by topic, top question clusters, agent workload distribution, customer sentiment trends. The Slack channel is the source of truth for the conversations; BigQuery is the analytical substrate.

Slack data joins your warehouse

Once in BigQuery, conversations join orders, tickets, sessions, and product events. The support channel becomes a first-class data source.

Same pattern for any channel

Swap #support for #partners, #leadership, #incidents. Different analytics, same extract path.

Closes the loop back to Slack

Once dbt builds the support_metrics models, the flow posts the summary back into Slack. The team sees its own data.

weekly schedule
Monday 6am
pull history
conversations.History
transform
Python script
load to bigquery
weekly partition
trigger dbt
support_metrics models
post summary
back to Slack

Blueprints for Slack-as-integration patterns.

One blueprint per use case above. Copy the YAML, install your Slack app with the right OAuth scopes, set the bot token in Kestra secrets, ship it.

Reusable notify subflow called by any upstream
Daily Snowflake digest as an editable Canvas
Channel history export to BigQuery

A single Subflow that takes channel + status + execution context, posts to Slack

Two flows. The notify subflow takes channel, status, summary, and execution_url as inputs and posts a Block Kit message with reactions.Add for the status emoji. Any parent flow (dbt, Terraform, Argo CD, AWS Lambda) calls it on success or failure.

Explore Blueprints

Query metrics at 8am, format markdown, post a Canvas to leadership

Runs a Snowflake query against the daily metrics view, formats the rows into markdown sections via a Python script, posts the result as an editable Canvas to a leadership channel, and pings the team with a thread reply.

Explore Blueprints

Weekly pull #support history, transform, load to BigQuery, trigger dbt

A weekly flow pulls the support channel's history, transforms it into a BigQuery-friendly schema in Python, loads it as a weekly partition, then triggers the support_metrics dbt models to refresh.

Explore Blueprints

Kestra vs Slack-integration alternatives

Capability
Slack Incoming Webhooks (one-way)
Zapier / Make per integration
Custom bot + per-system glue code
Same notification task across dbt, Terraform, Argo CD, AWS
One chats.Post task called by any flow
One webhook URL per channel, custom JSON per sourceOne Zap per source-channel pairCustom code per upstream tool
Scheduled reports posted as editable Canvases
canvases.Create with markdown from any data source
Webhooks post messages, not CanvasesLimited templating, no Canvas supportCustom canvas API integration
Approval gate inside a multi-tool flow
Block Kit buttons + Pause + resume from another flow
Webhooks cannot receive interactivityManual approver action in Zapier UI, no flow contextCustom state machine
Auto-create incident channels from any failure
conversations.Create + Invite + canvases.Create chained
Not supported (one-way)Multi-step Zap per failure sourceCustom bot
Pull channel history into the data warehouse
conversations.History + BigQuery / Snowflake load
Not supportedExport tools limited or paidCustom export pipeline
Slash commands and interactive buttons as flow entry points
Events API trigger validates signature, fires flow
Not supportedLimited via Zapier, not full flow contextCustom bot endpoint + routing
Bot token rotation and secrets handling
Token in Kestra secrets, decrypted per task
Webhook URL itself acts as the secretVendor-managedRoll your own
Chain Slack notifications with the rest of the stack
Outputs flow into any of 1300+ plugin tasks
Slack-onlyLimited per Zapier app catalogWhatever you write
Self-hosted, OSS edition
Self-hosted by default, OSS edition free
Slack-hostedSaaSSelf-hosted possible

Slack & Kestra: common questions

Find answers to your questions right here, and don't hesitate to Contact Us if you couldn't find what you're looking for.

See How

Ready to make Slack the meeting point for your stack?

Notify from dbt, Terraform, Argo CD, AWS, or any task. Schedule reports into channels with Canvas formatting. Gate destructive steps with Block Kit approvals. Spin incident channels with on-call invited. Export channel history to your data warehouse. Open source, self-hosted, event-driven.