FisherLeads
API

Webhooks

Let FisherLeads push new matching stores to you the instant they go live, as a single signed POST, instead of polling.

Instead of polling the feed, let FisherLeads push new matching stores to you the instant they go live. Add a webhook in the dashboard under Developers: a URL to receive events, and an optional filter (for example Shopify, US, has email) so you only get the stores you care about.

When new stores match, we send a single signed POST to your URL with the batch of leads. Each lead has the same shape as the API.

POST https://your-server.com/hook
Content-Type: application/json
X-FisherLeads-Event: leads.new
X-FisherLeads-Signature: 3a7f... (hex hmac-sha256 of the raw body)
{ "event": "leads.new", "count": 3, "leads": [ { "domain": "...", "platform": "..." } ] }

Verifying a delivery

So you know a request really came from FisherLeads, every delivery is signed. Compute an HMAC-SHA256 of the raw request body using 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));
}

Delivery, retries and the test event

Reply with any 2xx status to acknowledge a delivery. If your endpoint errors or times out, we keep the leads and try again on the next pass; after repeated failures the webhook is paused automatically so a broken URL does not pile up. Use the Test button in the dashboard to send a signed ping event and confirm your endpoint is wired up before you rely on it.

On this page