Gap detection catches a start that never got its finish. Heartbeat detection catches the flow that never even started.
Every other check in FlowProofs needs a source ping to exist before it can reason about anything. If a whole flow goes quiet, no calls come in, no forms get submitted, an integration falls over upstream, there's no source ping to compare against and nothing for gap detection to flag. A flow can look perfectly healthy by having nothing to report at all. Heartbeat detection is the check built for exactly that case.
A flow with no expected cadence set is treated as on-demand: silence is normal, and heartbeat detection stays off for it. Once you tell FlowProofs how often a flow should run (every 15 minutes, hourly, every 4 hours, daily, weekly, or a custom number of minutes) it starts watching for source pings on that schedule, with a grace period added on top so a normal few minutes of lateness never counts as a miss.
If a flow's cadence plus grace period passes with no source ping at all, FlowProofs opens a heartbeat incident, marks the flow's heartbeat status as missed, and alerts through the same channels already set up for that flow. The alert names the flow and how long it's been silent. The moment a new source ping arrives, the incident resolves and the flow returns to a normal heartbeat status automatically.
Where to set this up