DocsHooks and notifications
Feature reference

Hooks and notifications

A hook tells your team which new leads to call first. It watches every new lead, and when one has all of the hook's marks, the lead is hooked: your team is told in Jellyhook, and in Slack or a webhook if you choose.

When you would use it

Say you have a mark "Pricing reader" and another "Came back". A lead who has both is worth a call today. You make a hook with those two marks, tell your sales colleague, and send it to #sales in Slack too. The next lead who sends the form with both marks is hooked: it shows up in Hooked leads, in their notifications and in #sales a few seconds later.

The Hooks page

Hooks in the sidebar, with a yellow circle showing how many leads your hooks caught that you have not looked at yet. Two tabs:

Hooked leads

Every lead one of your hooks caught, newest first, with the hooks that caught it. Click one to open the lead. Opening this tab clears the yellow circle.

Hooks

Every hook on the site, with its marks, who it tells and where. Add hook opens the editor. Each hook has a Live / Paused button: a paused hook catches nothing until it is live again. The editor has the hook's name at the top (New hook until you change it) and these rows:

RowWhat it does
Lead marksOne or more of your marks. The lead must have all of them. Marks shared by teammates can be picked after Copy to my marks.
NotifyAll (every member, the default) or Custom (the members you pick). Picking people is how you hand a kind of lead to someone.
MessageA Subject and a message. Left empty, the message reads {lead} matched {marks}. {lead} is the lead's name in Jellyhook and "a new lead" outside it. {marks} is the mark names.
Notification methodIn app (always on) and any Slack channels and webhooks you click. A channel that is not picked is shown dimmed.
Slack messageShown once a Slack channel is picked. Customize chooses what the Slack message shows, with a preview and Send a test to Slack. See The Slack message below.
Same visitor againNotify once a day (default) or every time, when one visitor sends several forms that match.
Add lead to group (optional)Also puts every lead this hook catches into a group.

The Slack message

Every Slack message has the hook's subject and message. Under Slack message → Customize you choose what else it shows:

PartWhat it showsShown when
Where they came from"Came from: Meta · Ads · Spring sale · 2026 Core Demo Video": the source, campaign and ad the lead is credited to (see Acquisition)The lead's visits are known. A lead who only ever came directly reads "Direct"
The ad's thumbnailThe ad's image, largeThe ad has a thumbnail in Acquisition → Ads
Watch the ad buttonOpens the ad's videoThe ad has a video link in Acquisition → Ads
Open the lead buttonOpens the lead in Jellyhook, or its HubSpot contact when HubSpot is connected (Open the lead in: HubSpot, Jellyhook or both)Always
Hook, site and timeA small line under the messageAlways
Sent late"Sent 54 minutes late. Jellyhook was busy when this form came in. The form was sent ...", right under the message, so nobody calls a lead believing the form was just sentThe message goes out more than 2 minutes after the form. Always on
Visit summaryWhat they did in the visit with the form, before sending it: Short, Moderate (the default) or Long, as on the lead page. A form they started and left unsent is always said, with the field they left it atSet to anything but Off
Earlier visitsThe visits before the one with the form: when they first saw the site, how many visits and how long, then one line per visit (the last 4) with its key events: a form left unsent and the field, or a long time on one heading. "Oct 9: 5m 50s, mostly /pricing. Spent 2m 40s on "Enterprise" on /pricing. Started the form on /contact and left it at the "phone" field."Ticked (off by default), and the lead had earlier visits
Page summariesUp to 3 pages you pick, one line each: "/pricing: 3m 10s over 2 views in 2 visits; read up to 72% of the page ...", or "Page not visited"At least one page is picked
  • A new hook shows every part, with the Moderate visit summary and no page summaries. Hooks made before the summary existed send the Moderate summary too. The choice is saved with the hook and applies to every Slack channel it sends to.
  • The preview next to the options is drawn from the exact message Slack receives. It uses your newest ad that has a thumbnail (or an example ad) and an example visit.
  • Send a test to Slack sends the message, as the hook would send it now, to the Slack channels picked in it. The message says "a new lead" and the summaries are made from your site's newest lead. It works before the hook is saved.
  • Webhooks always receive every field that was made for the hook, whatever is shown in Slack, including previous_visits when Earlier visits is ticked. Every lead a hook catches is sent to each webhook picked in that hook, so a webhook can start an automation in Zapier, Make, n8n or your CRM.

Visit summary and page summaries

  • Both are made once, when the hook catches the lead, and cover what they did before sending the form. The visit with the form is cut at the form, so time spent on the site after sending it is not included.
  • The tracker sends the form page's heading times and scroll with the form, so that page is complete at that moment, before the visitor leaves it. A site still running an older copy of the tracker (cached in a visitor's browser) shows the form page's time without its headings.
  • Page summaries read every visit of the lead up to the form, or only the visit with the form, as chosen in the hook. A page they did not open reads "Page not visited" (or "Page not visited in this visit"). /pricing and /pricing/ are the same page.
  • The message never waits long for them: if they cannot be made within 2.5 seconds, or the visit cannot be read, the message is sent without them. If Slack refuses the full message (for example an ad image it cannot load), it is sent once more as a plain message: subject, message, where they came from and Open the lead.

The Integrations page

Integrations in the sidebar: where hooks can send outside Jellyhook, and HubSpot under CRM (see HubSpot). Channels: Slack (Connect opens Slack's own screen to pick a channel; a webhook URL can be pasted instead) or Webhook (any https address, for example Zapier, Make or your CRM). A channel that keeps failing is marked "Failing" with the last error.

The Notifications page

A red dot (never a number) on Notifications in the sidebar while anything there is unread.

  • From Jellyhook: updates from us about the product. In the app only, never in Slack.
  • Your inbox: one entry for every lead a hook caught for you. Click one to open the lead; Mark all as read marks them all.

What it needs

  • At least one mark of your own that is switched on. Make one on the Leads page.
  • A new form submission. Hooks are checked when the form is sent and again when that visit ends. Leads from before the hook existed are not caught.
  • Only an owner or admin of the site can connect or remove integrations. Anyone on the site can make hooks.

How it works

  • When a form is sent, the lead is queued for its site. Each site's leads are checked in order, so one busy site does not slow another.
  • The lead's marks are worked out, then every live hook is compared with them. A hook catches the lead when it has all of the hook's marks.
  • By default the same visitor is caught by the same hook at most once in 24 hours, so a visitor who sends three forms in a row makes one notification, not three. Each hook can change this under Same visitor again: Notify once a day (the default) or Notify every time, which is useful for testing. The lead still gets its marks and group when a notification is held back.
  • Slack and webhook messages that fail are tried again later (after 30 seconds, 2 minutes, 10 minutes, 1 hour, 3 hours).
Hooks belong to the site
A hook is part of the site, not of the person who made it. It keeps running if they leave. Its maker, or an owner or admin, can change or delete it. Someone who leaves the site no longer gets its notifications and cannot see them.

What is sent outside Jellyhook

Slack and webhook messages carry the hook's subject, the message with "a new lead" in place of the name, the mark names, the site and a link to the lead, and, unless switched off for Slack, where the lead came from: the source, campaign and ad, with the ad's tag, thumbnail and video link from Acquisition → Ads. When the hook has them, they also carry the visit summary and page summaries: page addresses, heading texts from your site and times. The link only opens for people signed in to the site. The lead's name, email, form answers and the conditions inside a mark are never sent.

Webhook requests are signed. When you add a webhook you get a signing secret once. Each request has a header X-Jellyhook-Signature: t=<seconds>,v1=<hex>, where the hex is HMAC-SHA256 of <t>.<raw body> with that secret. Check it, and reject requests whose time is old.

When it is empty or looks wrong

  • "No hooks yet." Make one with Add hook.
  • A mark on a hook is shown in red: it is off or was deleted, and the hook is paused until you turn it on or replace it.
  • No hooked lead you expected: check that the lead has every mark of the hook, that the hook is Live, and that the same visitor was not caught by it in the last 24 hours (see Same visitor again; testing from one browser needs a new private window each time, or Notify every time).
  • "Hooks are not set up on this database yet": the site's database is missing the tables.

Limits

  • 10 hooks per person per site, and up to 10 marks in one hook.
  • 500 Slack and webhook messages per site per day. In-app notifications are not capped.
  • Marks connected to a published mark cannot be used in a hook. Use a copy.
  • No email or SMS yet. A hook needs all of its marks (no "any of these").

Related