Positive Reply Slack Alert Without Zapier: Smartlead Native Webhook Setup
By Puzzle Inbox Team · May 22, 2026 · 7 min read read
Send a positive reply Slack alert without Zapier using Smartlead webhooks and a tiny serverless function. Step-by-step setup, payload mapping, and ops playbook.
Positive reply Slack alert without Zapier: the 5-minute architecture
You don't need Zapier, Make, or n8n to push a positive reply Slack alert from your cold email tool. Smartlead fires a webhook the instant its AI tags a reply as POSITIVE_REPLY. A 20-line serverless function converts that payload into a Slack Block Kit message and posts it to your channel. Total monthly cost: zero on the Cloudflare or Vercel free tier.
The positive reply Slack alert pattern matters because reply latency is the single biggest determinant of cold email meeting rates. Replying inside 10 minutes roughly doubles meeting hold rates versus replying the next morning. A Slack ping with reply text, sender, and a one-click reply button collapses that gap to under a minute.
Step 1: enable the Smartlead webhook
In Smartlead, open the target campaign, go to Settings, Webhooks, and add a new webhook for the "Lead Category Updated" event. Filter to POSITIVE_REPLY only (or POSITIVE_REPLY plus INFO_REQUEST if you want soft positives too). Point it at the public URL you'll deploy in step 3. Smartlead retries on non-2xx for 24 hours, so you don't need a queue.
The payload includes lead_email, lead_first_name, campaign_name, message_body, sender_account, and a deep link back to the Smartlead inbox view. That's everything you need for a useful Slack card.
Step 2: create the Slack incoming webhook
In Slack, create a new app, enable Incoming Webhooks, and add one for the channel you want alerts in (we recommend a dedicated #replies-hot channel, not #sales-general). Copy the webhook URL. Treat it like a password - anyone with the URL can post to that channel.
Step 3: deploy the relay function
Here's the minimum viable handler for Cloudflare Workers. Paste into a new Worker, set SLACK_WEBHOOK as a secret, deploy. Total time: 3 minutes.
export default {
async fetch(req, env) {
const p = await req.json();
const text = (p.message_body || "").slice(0, 500);
await fetch(env.SLACK_WEBHOOK, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
text: `Positive reply from ${p.lead_email}`,
blocks: [
{ type: "header", text: { type: "plain_text",
text: `HOT: ${p.lead_first_name || p.lead_email}` }},
{ type: "section", text: { type: "mrkdwn",
text: `*Campaign:* ${p.campaign_name}\n*From inbox:* ${p.sender_account}\n\n>${text}` }},
{ type: "actions", elements: [{ type: "button",
text: { type: "plain_text", text: "Open in Smartlead" },
url: p.smartlead_inbox_url }]}
]
})
});
return new Response("ok");
}
};
Step 4: add a kill switch and rate limit
Add a shared-secret query param so random POSTs can't spam your Slack. Smartlead lets you append ?token=xyz to the webhook URL. Check it in the Worker and 401 if missing. For rate limiting, Cloudflare's free tier already caps you sensibly, and Smartlead won't fire more than one event per lead category change.
Why not Zapier?
Zapier's "filter then Slack" zap costs $20-$50/month at any real reply volume and adds 30-90 seconds of polling latency. The native webhook path is instant, free, and you own the payload. For teams running Instantly or Smartlead at scale, the savings compound fast - and you can extend the same function to log into BigQuery, ping a phone via Twilio, or update a Clay table.
Ops playbook: what to do after the ping fires
The alert is only useful if someone acts. Assign an on-call replier per business hour, target a 10-minute response SLA, and standardize the first reply: confirm interest, propose two calendar slots, attach a one-pager. Track median response time weekly - if it creeps over 30 minutes, the channel becomes noise and gets muted within a month.
We built Puzzle Inbox specifically so this Slack ping flows into a keyboard-first triage view where a rep can reply, snooze, or push to CRM in under 15 seconds without context-switching to Smartlead's web UI.