---
title: Execution Data
description: "Read this run's id, trigger and timing, or attach searchable metadata to it"
---

Read details about the current run, or tag the run with a value you can search for later in run history.

## What it does

Execution Data has two operations, chosen with **Operation**:

* **Read run context** outputs this run's id, the workflow id, how the run was started (the trigger type), when it started and how long it has been running.
* **Attach metadata** saves a **Key** and **Value** pair on the run. Run history shows the pair on the run's row and in its detail panel, and the history search box finds runs by either half of a pair, by run id or by status. Tag a run with `order` = `4471` and searching "4471" brings it back.

Values are always stored as text, so numbers and true/false stay searchable. You can attach several pairs by using the node more than once.

## When to use it

* Make runs findable by something meaningful, such as an order number, a customer or a page, instead of only by time.
* Branch on how a run started, for example handle a scheduled run differently from a manual one.
* Put the run id or elapsed time in a log line or a message.

To remember values from one run to the next, use [Data Store](/nodes/builtin/core/datastore/) instead.

## Inputs and settings

**Value** is usually an expression, such as `{{ $input.orderId }}`. **Key** is required for **Attach metadata**.

## Outputs

**Read run context** outputs:

| Field | Meaning |
| --- | --- |
| `runId` | The id of this run, or `null` outside a workflow run. |
| `workflowId` | The workflow this run belongs to, or `null`. |
| `triggerType` | How the run started, such as `schedule`, `manual`, `contextmenu` or `chat`, or `unknown`. |
| `startedAt` | When the run started, as an ISO timestamp, or `null`. |
| `elapsedMs` | Milliseconds since the run started, or `null`. |

**Attach metadata** outputs `key` and `value` (the pair just written), `metadata` (every pair on this run so far) and `persisted`, which is `false` when the node ran on its own and there was no run to tag.

## Dependencies and credentials

None. This node needs no connection and has no slots for other nodes.

## Example workflow

Tag each run with the page it processed, then find it in run history:

1. [Context Menu](/nodes/builtin/trigger/contextmenu/) trigger, **Menu Contexts** `Page`.
2. Execution Data, **Operation** Attach metadata, **Key** `page`, **Value** `{{ $input.tabTitle }}`.
3. The rest of your steps, for example [Get All Text](/nodes/extension/getalltext/) and a summary.
4. Later, open run history and type part of the page title in the search box to find that run.

## Common issues

* **"Attaching metadata needs a key."** **Key** is empty. Fill it in.
* **`persisted` is `false`.** You tested the node on its own. Run the whole workflow and the pair is saved on that run.
* **`triggerType` is `unknown`.** The trigger's `triggerType` field did not reach this node, usually because a node in between replaced the data. Place Execution Data right after the trigger, or turn on an "include input fields" option in the nodes between.
* **The metadata does not show in run history.** Metadata is saved with runs recorded in this browser profile (local mode). Run context works in every mode.
* **A paused run lost its metadata after resuming.** A resumed run is recorded as a new run with its own id. Attach the metadata again after the pause.

## Related nodes

* [Data Store](/nodes/builtin/core/datastore/): remember values between runs.
* [Switch](/nodes/builtin/flow/switch/): route by `triggerType`.
* [Error Trigger](/nodes/builtin/trigger/errortrigger/): react when a run fails.
* [Digest](/nodes/builtin/core/digest/): collect items across runs and release them together.