Ping only after the real work succeeds.
That one rule prevents false “everything is fine” signals.
Shell / cron
run-your-job && curl -fsS "$JOB_HEARTBEAT_URL" >/dev/nullIf run-your-job fails, the heartbeat should not be sent.
GitHub Actions
- name: Run scheduled work
run: ./run-job.sh
- name: Signal successful completion
if: ${{ success() }}
run: curl -fsS "$JOB_HEARTBEAT_URL" >/dev/null
n8n
Add an HTTP Request node at the end of the successful branch. Point it to the unique Job Heartbeat URL. Do not place it in an unconditional cleanup/finally path.
Make.com
Add an HTTP request as the final successful module in the scenario. If the scenario never reaches that module, Job Heartbeat sees the missing check-in.
Zapier
Add a final Webhooks/HTTP step after the meaningful work. Use the unique heartbeat URL as the destination. Keep error handling separate so a failed Zap does not accidentally report success.
AI agents and scheduled agent tasks
Have the agent runner or orchestration layer send the heartbeat only after the scheduled task reaches its definition of success. Job Heartbeat does not need the prompt, transcript, model key, or workflow payload.
Choosing the right success point
Place the heartbeat after the outcome you actually care about. For example, if a job generates a file and uploads it, ping after the upload succeeds—not merely after the process starts.
Need help?
Email austinoaksadmin@icloud.com. Do not send API keys, passwords, or production secrets by email.
