Slack Notification Sender avatar

Slack Notification Sender

Pricing

Pay per event

Go to Apify Store
Slack Notification Sender

Slack Notification Sender

Send messages to Slack channels via incoming webhooks. Supports plain text, Slack mrkdwn formatting, and Block Kit blocks for rich interactive notifications. Ideal for automated alerts, monitoring pipelines, and workflow integrations. No API credentials needed.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Send messages to any Slack channel using Incoming Webhooks — no bot tokens, no OAuth flows, no Slack app maintenance. One webhook URL, one message, done.

Built for developers, data teams, and automation engineers who want Slack notifications as a step in their Apify workflows. Trigger it from the Apify Scheduler, chain it after a scraper, or call it via the API whenever something interesting happens.


What Does It Do?

This actor sends a Slack message to a channel of your choice via an Incoming Webhook URL. You can send:

  • Plain text — simple Hello world messages
  • Slack mrkdwn*bold*, _italic_, `code`, <url|label> links, :emoji: codes
  • Block Kit blocks — rich interactive messages with headers, sections, buttons, images, and more

The actor pushes one dataset item per run with the result: success/failure, HTTP status code, channel name, and delivery timestamp.


Who Is It For?

Developers running scrapers on a schedule

You scrape product prices every morning. Instead of manually checking the dataset, connect this actor as a downstream task and get a Slack summary when new data arrives.

Data teams monitoring pipelines

Your ETL pipeline runs nightly. Use this actor to send a Slack alert when the pipeline finishes — or when it fails — so the team knows immediately without checking dashboards.

Ops teams building no-code alerting

You want uptime alerts, price drops, or news summaries sent to your #alerts channel. Chain this actor after the monitoring actor in a webhook chain — no code required.

Automation engineers

You need Slack as a sink in a multi-step workflow. This actor is an API-first, headless Slack sender that fits into any pipeline.


Why Use It Instead of Calling the Webhook Directly?

You haveUse
A cURL command or small scriptCall the webhook directly — that's fine
An Apify workflow with multiple actorsUse this actor as a downstream notification step
Non-technical colleagues building automations in Apify ConsoleThis actor provides a UI form with field descriptions
A need to log notification history in a datasetThis actor stores every send attempt with status

What Data Does It Output?

Each run pushes one item to the dataset:

FieldTypeDescription
successBooleanWhether the message was delivered successfully
statusCodeNumberHTTP status code from Slack's webhook endpoint
channelStringThe channel name if overridden, otherwise null
timestampStringISO 8601 timestamp of when the message was sent
errorMessageStringError message from Slack if the send failed, otherwise null

How Much Does It Cost?

Pricing is pay-per-event (PPE):

EventPrice
Actor start$0.01 (one-time per run)
Notification sent$0.005 per message delivered

Typical cost per notification: $0.015 (start + one message).

Sending one Slack alert costs less than a fraction of a cent on the Apify platform compute costs alone. The PPE model means you only pay when a message is actually delivered.

Free plan estimate: Apify's free tier includes $5/month of compute. At $0.015 per notification, that covers ~333 notifications per month before any charges.


How to Use It

Step 1: Create a Slack Incoming Webhook

  1. Go to api.slack.com/apps and create a new app (or use an existing one).
  2. Under Features, click Incoming Webhooks and toggle it on.
  3. Click Add New Webhook to Workspace and select the channel.
  4. Copy the webhook URL — it looks like: https://hooks.slack.com/services/T.../B.../XXXX

Step 2: Run the Actor

  1. Open the actor in Apify Console.
  2. Paste your webhook URL in the Webhook URL field.
  3. Type your message in the Message Text field.
  4. (Optional) Override the channel, bot name, or icon emoji.
  5. Click Start and check your Slack channel.

Step 3: Automate It

Use the actor in a webhook chain:

  1. In Apify Console, open any actor or task you want to trigger a notification from.
  2. Under Integrations, add a webhook with event ACTOR.RUN.SUCCEEDED.
  3. Set the webhook target to https://api.apify.com/v2/acts/automation-lab~slack-notification/runs.
  4. Configure the defaultInput with your webhook URL and message template.

Input Parameters

Required

ParameterTypeDescription
webhookUrlStringThe Slack Incoming Webhook URL from your Slack app settings
messageStringThe message text. Supports Slack mrkdwn formatting

Optional

ParameterTypeDescription
channelStringOverride the target channel (e.g. #alerts or @username)
usernameStringOverride the bot display name shown in Slack
iconEmojiStringOverride the bot icon with a Slack emoji (e.g. :bell:)
blocksArraySlack Block Kit blocks (JSON array) for rich message formatting

Slack mrkdwn Formatting Reference

Slack's mrkdwn syntax (not standard Markdown) is supported in the message field:

SyntaxResult
*bold text*bold text
_italic text_italic text
`inline code`inline code
```code block```code block
<https://example.com|link text>clickable link
:emoji_name:Slack emoji
<!channel>@channel mention
<!here>@here mention
<@U12345678>mention a specific user

Block Kit Examples

For rich messages, use Slack's Block Kit Builder to compose blocks visually, then paste the JSON into the blocks field.

Simple Header + Text Block

[
{
"type": "header",
"text": { "type": "plain_text", "text": "Scraper finished" }
},
{
"type": "section",
"text": { "type": "mrkdwn", "text": "*Results:* 1,234 items scraped\n*Duration:* 4m 12s" }
}
]

Alert Block with Button

[
{
"type": "section",
"text": { "type": "mrkdwn", "text": ":red_circle: *Price Alert*\nProduct XYZ dropped to *$49.99* (was $79.99)" }
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": { "type": "plain_text", "text": "View Product" },
"url": "https://example.com/product/xyz"
}
]
}
]

Integrations

Chain After a Scraper Run

Use Apify webhooks to fire this actor whenever a scraper completes:

{
"webhookUrl": "https://hooks.slack.com/services/YOUR/WEBHOOK",
"message": "Scraper finished. {{resource.defaultDatasetId}} items collected."
}

Zapier / Make.com

Call this actor via the Apify API from a Zapier "Run Actor" step. Pass dynamic values from previous Zap steps into the message field.

GitHub Actions

Trigger a Slack notification at the end of a CI/CD workflow:

- name: Notify Slack
run: |
curl -s -X POST https://api.apify.com/v2/acts/automation-lab~slack-notification/runs \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"webhookUrl": "${{ secrets.SLACK_WEBHOOK_URL }}",
"message": "Deployment to production complete :white_check_mark:"
}'

Monitoring Alerts

Combine with the Website Uptime Checker to get a Slack alert when your site goes down:

  1. Schedule the uptime checker to run every 5 minutes.
  2. On failure, fire a webhook that runs this actor with a #alerts channel message.

API Usage

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('automation-lab/slack-notification').call({
webhookUrl: 'https://hooks.slack.com/services/YOUR/WEBHOOK',
message: 'Hello from Node.js! :wave:',
channel: '#notifications',
username: 'My Bot',
});
console.log('Run status:', run.status);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/slack-notification').call(run_input={
'webhookUrl': 'https://hooks.slack.com/services/YOUR/WEBHOOK',
'message': 'Hello from Python! :snake:',
'channel': '#notifications',
})
print(f"Run status: {run['status']}")

cURL

curl -s -X POST \
"https://api.apify.com/v2/acts/automation-lab~slack-notification/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"webhookUrl": "https://hooks.slack.com/services/YOUR/WEBHOOK",
"message": "Hello from cURL! :terminal:",
"channel": "#alerts",
"username": "CurlBot"
}'

Use with Claude AI (MCP)

This actor is available as a tool in Claude AI through the Model Context Protocol (MCP). Add it to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.

Setup for Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com"

Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com"
}
}
}

Example prompts

  • "Send a Slack notification to #alerts with the message: 'Server CPU is at 95%, investigate immediately'."
  • "Use my Slack webhook to post a Block Kit message with header 'Scrape Complete' and body showing 1,234 results collected."
  • "Send a Slack message to #dev-ops saying the nightly ETL pipeline finished successfully at 3:42 AM."

Learn more in the Apify MCP documentation.


Legality and Slack ToS

This actor uses Slack's official Incoming Webhooks API, which is a first-party Slack feature designed for exactly this use case. There is no scraping, no reverse engineering, and no TOS violations.

Requirements:

  • You must own or have permission to use the Slack workspace and channel.
  • The webhook URL is tied to your Slack app — do not share it publicly.
  • Usage must comply with Slack's API Terms of Service.

FAQ

How do I get a Slack webhook URL?

Go to api.slack.com/apps, create a new app, enable Incoming Webhooks, add it to a workspace, and copy the generated URL. It takes about 2 minutes.

Can I send to multiple channels in one run?

No — this actor is designed to send one message per run. To send to multiple channels, create multiple tasks (one per channel) and run them concurrently, or call the actor multiple times via the API.

The actor says "no_team" — what does that mean?

This error comes directly from Slack. It means the webhook URL is invalid or has been revoked. Double-check the URL by copying it fresh from your Slack app settings at api.slack.com/apps.

The actor says "channel_not_found" — what does that mean?

The channel override you provided (channel field) does not exist in the workspace tied to the webhook, or the webhook's app has not been invited to that channel. Either use the webhook's default channel (leave channel blank) or invite the app to the target channel in Slack.

Can I send to a private channel?

Yes, but the webhook's Slack app must first be added to that private channel. Use /invite @YourAppName in the channel.

Does this actor support Slack threads?

Not currently. Thread support requires the Slack Web API (with a bot token), not Incoming Webhooks. If you need thread replies, contact us to discuss a feature request.

Why is my message showing raw emoji codes like :wave: instead of the emoji?

Slack renders emoji codes in mrkdwn text fields, but not in plain_text fields or in Block Kit plain_text elements. Make sure you are using mrkdwn formatting for emoji.