n8n → HookGet
n8n calls HookGet; the request is verified at the door and becomes normalised events on the same pipeline as everything else you deliver.
In short
- One HTTP Request node at the end of a workflow, plus an Error Workflow for failures — that is the whole integration.
- Runs become
automation.run_succeeded/run_failedwith duration, item count and the failed node as data. - The workflow name is a groupable attribute; the execution id is the entity — the right way round for filtering.
- This is a convention we document, not an n8n feature — n8n has no native run webhook, and we say so.
What it produces
| n8n sends | Becomes | Data |
|---|---|---|
| status: success | automation.run_succeeded | duration_ms, items |
| status: error / failed | automation.run_failed | duration_ms, failed_node |
| status: running | automation.run_started | — |
| status: canceled | automation.run_cancelled | — |
Set up
# The body your HTTP Request node sends (only "status" is required):
{
"workflow": "Lead enrichment",
"execution_id": "{{ $execution.id }}",
"status": "success",
"started_at": "{{ $execution.startedAt }}",
"finished_at": "{{ $now }}",
"items": 42
}
# with header x-hookget-token: <the source secret>
Stated plainly
n8n does not emit a "workflow finished" webhook natively. This connector documents a small JSON body and verifies a shared token — a convention HookGet publishes, not an integration n8n provides. It works on every n8n plan, self-hosted included, precisely because it asks nothing of n8n itself.
Questions
How do I catch failures if the workflow died before the last node?
Set an n8n Error Workflow that posts the same body with status: "error".
n8n triggers it on any unhandled failure, so the report survives the crash of the workflow
it reports on.
What if my expression leaves a field empty?
Everything except status is optional. Duration is derived from
started/finished timestamps when present; a missing field narrows the event rather than
rejecting it.