Slack Notification Sender
Pricing
Pay per event
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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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 worldmessages - 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 have | Use |
|---|---|
| A cURL command or small script | Call the webhook directly — that's fine |
| An Apify workflow with multiple actors | Use this actor as a downstream notification step |
| Non-technical colleagues building automations in Apify Console | This actor provides a UI form with field descriptions |
| A need to log notification history in a dataset | This actor stores every send attempt with status |
What Data Does It Output?
Each run pushes one item to the dataset:
| Field | Type | Description |
|---|---|---|
success | Boolean | Whether the message was delivered successfully |
statusCode | Number | HTTP status code from Slack's webhook endpoint |
channel | String | The channel name if overridden, otherwise null |
timestamp | String | ISO 8601 timestamp of when the message was sent |
errorMessage | String | Error message from Slack if the send failed, otherwise null |
How Much Does It Cost?
Pricing is pay-per-event (PPE):
| Event | Price |
|---|---|
| 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
- Go to api.slack.com/apps and create a new app (or use an existing one).
- Under Features, click Incoming Webhooks and toggle it on.
- Click Add New Webhook to Workspace and select the channel.
- Copy the webhook URL — it looks like:
https://hooks.slack.com/services/T.../B.../XXXX
Step 2: Run the Actor
- Open the actor in Apify Console.
- Paste your webhook URL in the Webhook URL field.
- Type your message in the Message Text field.
- (Optional) Override the channel, bot name, or icon emoji.
- Click Start and check your Slack channel.
Step 3: Automate It
Use the actor in a webhook chain:
- In Apify Console, open any actor or task you want to trigger a notification from.
- Under Integrations, add a webhook with event
ACTOR.RUN.SUCCEEDED. - Set the webhook target to
https://api.apify.com/v2/acts/automation-lab~slack-notification/runs. - Configure the
defaultInputwith your webhook URL and message template.
Input Parameters
Required
| Parameter | Type | Description |
|---|---|---|
webhookUrl | String | The Slack Incoming Webhook URL from your Slack app settings |
message | String | The message text. Supports Slack mrkdwn formatting |
Optional
| Parameter | Type | Description |
|---|---|---|
channel | String | Override the target channel (e.g. #alerts or @username) |
username | String | Override the bot display name shown in Slack |
iconEmoji | String | Override the bot icon with a Slack emoji (e.g. :bell:) |
blocks | Array | Slack 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:
| Syntax | Result |
|---|---|
*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 Slackrun: |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:
- Schedule the uptime checker to run every 5 minutes.
- On failure, fire a webhook that runs this actor with a
#alertschannel 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 ApifyClientclient = 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.
Related Actors
- Website Uptime Checker — Monitor your websites and trigger Slack alerts on downtime
- Broken Link Checker — Find broken links and notify your team via Slack
- Google News Scraper — Monitor brand mentions and send Slack summaries