Overview
Slack is where your team already lives all day. FisherLeads is where you find online stores the moment they launch, each one confirmed live and enriched with the founder contact, platform and tech it runs on. Connecting the two turns a Slack channel into a live feed of brand new stores, posted the second they match what you are looking for.
Speed is the whole point. A store that went live minutes ago has no agency, no tools and no inbox full of pitches yet. When that launch lands in your new stores channel while it is still fresh, a rep can read the alert, click through to the store, and reach the owner before a single competitor has found them. The window is short, and Slack is the fastest way to put it in front of a human.
FisherLeads does not install an app inside Slack. Instead it pushes new matching stores to you in real time as a signed webhook, which you turn into a Slack message with Zapier in a few clicks, or with your own code, or you pull the same feed from the REST API and post it yourself. This guide covers all three.
What you can do
Alert a channel instantly
Every matching new store posts to the Slack channel you choose, within seconds of going live, with its name, domain, country and niche.
Hand reps the contact
The verified owner email and store link land right in the message, so a rep can act on the alert without leaving Slack to go hunting.
A channel per market
Point different filters at different channels, so your US apparel team and your UK beauty team each see only the launches that are theirs.
Trigger team workflows
A new message can kick off a Slack workflow, a reaction that claims the lead, or a button that files it in your CRM.
How the integration works
There are three ways to connect FisherLeads to Slack, and all three carry the same store data, described further down. Most teams start with Zapier because it needs no code and formats the message for you. Teams with a developer often post the message from their own code for full control over how it looks.
One thing to know up front: a Slack message is not just raw data, it is formatted text with a headline, context and links. The store data from FisherLeads has to be shaped into that message first. Zapier does this shaping for you through its Slack action. If you prefer to point your own code at Slack, you format the message yourself before you post it. Either way, pick the path that fits your team, and you can always start with Zapier and move to code later.
Set it up with Zapier (no code)
The fastest path, and the one most teams use. FisherLeads sends each new store to Zapier, and Zapier posts a formatted message to your Slack channel. No code, about ten minutes, and you set it up once. Available on the Enterprise plan.
Add a webhook in FisherLeads
In the dashboard, open Developers and add a webhook. Give it a filter, for example Shopify, US, verified email, so you only alert on the stores you care about.
Create a catch hook in Zapier
Start a new Zap and choose Webhooks by Zapier as the trigger, with the Catch Hook event. Zapier generates a unique URL for you to copy.
Paste the URL and send a test
Copy the Zapier URL into your FisherLeads webhook, then press Test in the dashboard. Zapier catches the event so it can read the real store fields.
Add the Slack action
Add a second step, choose Slack, and pick the Send Channel Message action. Connect your Slack workspace and choose the channel you want the alerts to land in.
Write the message
Compose the message text and drop the store fields into it: merchant and domain in the headline, country and niche as context, the store link and the owner email as the things to act on. Make it scannable so a rep understands the lead at a glance.
Turn it on
Switch the Zap on. From now on, every new store that matches your filter posts to the channel within seconds of launching, with nothing more to do.
Use your own code
If you would rather not use Zapier, point the FisherLeads webhook at your own endpoint and post to Slack yourself. When new stores match, FisherLeads sends a single signed POST with the batch of leads. Each lead has the same shape as the API.
Because a Slack Incoming Webhook expects Slack formatted JSON, do not point the FisherLeads webhook straight at a Slack Incoming Webhook. The two payloads are different. Instead, receive the FisherLeads delivery in your own code, build a Slack message from the fields, and then send that message on to Slack. This also lets you use rich blocks, buttons and threads exactly how you want them.
POST https://hooks.zapier.com/... (your catch hook URL)
Content-Type: application/json
X-FisherLeads-Event: leads.new
X-FisherLeads-Signature: 3a7f... (hmac-sha256 of the raw body)
{
"event": "leads.new",
"count": 2,
"leads": [
{
"domain": "example.com",
"url": "https://example.com",
"merchant": "Example Beauty Co",
"platform": "shopify",
"site_type": "ecommerce",
"country": "US",
"niche": "beauty",
"launched": "2026-06-30",
"email": "hello@example.com",
"phone": "+1 555 010 1234",
"socials": { "instagram": "https://instagram.com/examplebeauty" },
"tech": ["Klaviyo", "Meta Pixel"],
"revenue_band": "Small"
}
]
}Every delivery is signed so you can be sure it came from FisherLeads before you post anything to a channel. Compute an HMAC SHA256 of the raw request body with your webhook secret (shown next to the webhook in the dashboard) and compare it, constant time, to the X-FisherLeads-Signature header.
import crypto from "crypto";
function verify(rawBody, signature, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature),
);
}Use the REST API
Prefer to pull rather than be pushed to? The REST API returns the same feed, newest first, with the same filters as the dashboard. Poll it on a schedule, format each new store as a Slack message, and post it to your channel from your own code or a scheduled job. Read access is on the Business plan; higher limits are on Enterprise.
curl "https://fisherleads.com/v1/leads?platform=shopify&country=US&has_email=true&page=1" \
-H "Authorization: Bearer fk_live_your_key_here"What the alert shows
Each store brings the fields below, the same shape across webhooks and the API. A field is omitted when we could not confirm it. Compose them into the message however reads best for your team; the suggestions below are a good default.
| FisherLeads field | Example | Where it appears in the message |
|---|---|---|
| merchant | Example Beauty Co | Headline, as the store name |
| domain | example.com | Headline, next to the name |
| url | https://example.com | Action link to open the store |
| hello@example.com | Action link to contact the owner | |
| platform | shopify | Context line |
| site_type | ecommerce | Context line |
| country | US | Context line |
| niche | beauty | Context line |
| launched | 2026-06-30 | Context line, how fresh it is |
| phone | +1 555 010 1234 | Action detail when present |
| socials | instagram, tiktok | Action links when present |
| tech | Klaviyo, Meta Pixel | Context for qualifying the lead |
| product_count | 42 | Context for store size |
| revenue_band | Small | Context for prioritising |
Choose which stores alert
You almost never want every new store pinging a channel. Each webhook carries a filter, set in the dashboard when you create it, so only matching stores are sent. Filter by platform, country, niche, site type, revenue band and whether the store has a verified email. Create several webhooks with different filters if different teams want different launches.
Filtering at the source is what keeps the channel signal and not noise. It also keeps your Zapier task usage down, since Zapier only ever sees the stores that matter to you, and it means the alert that fires is always one a rep would want to act on.
Keeping the channel useful
A new store feed is only valuable if people still read it a week later. The fastest way to kill a channel is to flood it, so treat volume as a design choice from the start. Filter tightly at the webhook so only genuinely relevant launches post, and give each filter its own channel, for example one per market or per niche, rather than pouring everything into a single firehose.
For high volume filters, post a single digest message that lists the batch instead of one message per store. A delivery can carry up to 50 stores, and 50 separate messages will bury everything else in the channel. A tidy digest, posted every delivery or on a schedule, keeps the feed readable while still surfacing every launch.
Use threads to keep follow up out of the main channel. Reps can reply in the thread under a launch to say they are on it, share notes, or paste the reply they sent, so the top level stays a clean timeline of new stores and the discussion lives one click down.
Workflows and reactions
Because each launch lands as a real Slack message, everything Slack already does on messages works on it. Build a Slack workflow that triggers when a message hits the channel, to log the store in a sheet, open a ticket, or notify an owner by direct message. The alert becomes the first step of a repeatable process rather than just a notification.
Reactions make claiming a lead effortless. Agree on a convention, for example a checkmark means a rep has taken it and a handshake means the owner replied, so the whole team can see at a glance which launches are being worked and which are still open. If you post messages from your own code, you can add buttons too, so one click files the store in your CRM or starts a sequence without anyone leaving Slack.
Freshness, retries and reliability
Alerts reach Slack within seconds of a store going live. FisherLeads posts matches as they happen rather than on a nightly batch, so the channel is always current and a rep is seeing a launch while it is still fresh enough to matter.
Deliveries are reliable. Reply with any 2xx status to acknowledge a webhook. If your endpoint or your Zap errors or times out, FisherLeads keeps the leads and retries on the next pass, and after repeated failures the webhook is paused automatically so a broken destination does not pile up. Use the Test button in the dashboard to send a signed ping and confirm the channel is wired before you rely on it.
Security and your data
Every webhook is signed with an HMAC SHA256 of the body using a secret only you and FisherLeads hold, so you can verify each delivery really came from us and was not tampered with in transit before it posts to a channel.
The integration is one way: FisherLeads sends new stores to you. It does not read, store or scan anything in your Slack workspace. No messages, no members and no channels ever come back to FisherLeads. What lands in Slack is the public store data in the table above.
Best practices
- Filter tightly at the webhook so the channel only shows launches a rep would want to act on.
- Give each filter its own channel, for example one per market or niche, so teams see only what is theirs.
- For busy filters, post a digest message per delivery instead of one message per store, so the channel stays readable.
- Put the owner email and store link in the message as the things to act on, so a rep can move without leaving Slack.
- Agree on a reaction convention so the team can see which launches are claimed and which are still open.
- Verify the signature on every delivery if you post from your own code, and keep the webhook secret safe.
- Start with the Test event and one filter, confirm the message reads well, then widen the filter.

