Re-detectable events fire once, not forever

Events a sweep can re-detect every few minutes carry a dedupe key and a window, so the same fact is announced once rather than each pass.

What it is

NotifyOnce checks for an existing row carrying the same dedupe key for this org and event inside a window (24 hours by default) before dispatching, then stamps the key into the notification's structured data. Used by estimate opened, GHL lead re-merge, broken QuickBooks connections, failed customer sends and invoice-overdue escalation steps.

Also called: duplicate alerts · same notification over and over · spam from a cron

See it
Re-detectable events fire once, not forever
CustomerBuildingAmountStatus
Sutter Kline30×40 Garage$11,650Approved
Ivy Brubaker30×40 Garage$14,310Approved
Ivy BrubakerEquipment Storage$16,210Approved
Ivy BrubakerEquipment Storage$1,200Open
Delia Yoder30×40 Garage$17,540Draft
A bell row reading '14 new leads ingested' instead of fourteen rows. notificationRegistry lead_new. Sample data — no customer information appears here.
How it works
  1. 1The check queries notifications for a matching data->>'dedupe_key' newer than the cutoff.
  2. 2A failed check never blocks the send — 'fail-open, like everything else in this file'.
  3. 3The check-then-insert race is accepted: 'worst case is one duplicate, never a flood.'
  4. 4Bulk arrivals also collapse: more than ten new leads in one pass becomes a single summary row with email suppressed.
Why we built it

Crons and re-detection are exactly the shape that turns a useful alert into noise. The registry's lead_new entry documents the batch collapse as guard (b): a summary row rather than one notification per lead.

The problem
  • Sweep-detected facts re-announced on every pass
  • Bulk imports fanning out one email per row
Sound familiar?
What you get
One notification per fact
Bulk arrivals summarise instead of flooding

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →