Documentation

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/null

If 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.