Docs
Node data capture
Opt in to storing what went into and came out of each node — including LLM prompts and responses — for the runs you choose.
By default Obsevo receives how each node ran — status, timing, item counts, error text and token usage — and never the data itself. Node data capture is the opt-in exception: for the runs you pick, it also stores what each node received and returned, so you can open a failed run and see the exact input that broke it, or read the prompt an AI Agent sent and the answer it got back.
It is off until an admin turns it on.
Turning it on
In Instances → Edit, under Node data capture, tick the run outcomes to capture:
| Outcome | Captures node data for runs that… |
|---|---|
| Failed | ended in an error |
| Succeeded | completed successfully |
| Canceled | were stopped |
Failed only is the usual choice: it is where the data explains something, and it keeps storage small. Waiting and running executions are never captured — their data is not final yet.
Each workflow can override the instance on its own page: Same as instance, Never capture this workflow, or its own set of outcomes. Use Never for a workflow that handles data which must not leave n8n, on an instance that otherwise captures.
The agent picks the change up on its next report, usually within a minute.
What you see
On a run, nodes with captured data can be expanded:
- Input and Output, item by item, branch by branch. An ordinary node's input is its parent's output, so it is shown from there rather than stored twice.
- Conversation, for chat-model nodes: the system and user messages as sent, the model's reply, and any tool calls it asked for, with the model and token counts.
- Agent, for AI Agent nodes: every model and tool call the agent made, in the order it made them, and its final answer.
- Raw, the captured JSON as stored.
A node that ran several times (a loop, or an agent calling its model once per step) has a run selector; every run is kept, not just the last.
What is never sent
- Credentials. Values under keys that look like secrets — passwords, tokens,
API keys, authorization headers, cookies, private keys, sessions — are replaced
with
[redacted]on the agent, before anything leaves the host. Token counts are kept. - File contents. For binary data only the file name, type, size and n8n's storage reference are kept.
Limits
Capture is capped so a large run stays affordable and a conversation stays readable:
| Ordinary node | LLM / tool call | |
|---|---|---|
| Items per output | first 25, then a count | — |
| Longest single string | 4 KB | 64 KB |
| Per node run | 64 KB | 256 KB |
| Per execution | 2 MB | 2 MB |
When a run is over the per-execution budget, the largest ordinary outputs are dropped first, so LLM conversations survive. Anything cut is marked in the viewer.
On Obsevo Cloud, captured data counts against a monthly allowance and is kept for a plan-dependent number of days:
| Plan | Allowance / month | Kept for |
|---|---|---|
| Free | 250 MB | 3 days |
| Starter | 5 GB | 7 days |
| Pro | 25 GB | 14 days |
| Agency | 100 GB | 14 days |
Over the allowance, capture pauses until the meter resets on the 1st. Nothing
else is affected: runs, detection and alerts carry on as normal. Self-hosted
installs have no allowance and keep captured data for
OBSEVO_PAYLOAD_RETENTION_DAYS (default 7).
Keeping the final say on your host
Whoever runs the agent can refuse capture regardless of the dashboard:
OBSEVO_PAYLOAD_CAPTURE=offWith that set, nothing but metadata ever leaves the host, whatever the instance settings say. In API-key mode Obsevo polls n8n itself, so the dashboard setting is the only switch.