When to use Store
- You want to track how a value changes over time across runs: prices, quantities, scores.
- You need to compare the current run’s data against the most recent previous value without calling an external API.
- You want to accumulate a running total or average across multiple runs (e.g., daily volume, average invoice amount).
- A downstream HTTP action or Validation node needs historical context that does not live in the current document.
Prerequisites
Before using a Store node, create at least one store under Settings > Stores. If no store exists, the node cannot be configured. Every store carries a required value schema that describes the object held under each key. A Set node’s value must match that schema, so design the store first and the node second.Modes
The Store node operates in one of three modes, selected in the node editor: Set, Get and Delete.Set
Writes the resolvedvalue under the given key. Without an Entry ID the value is appended as a new entry. With an Entry ID, the node writes the one entry that key and Entry ID identify: it is created the first time and replaced on every later write. The write is idempotent per run and node: if the same Store node runs twice for one workflow run, only one write happens.
The value must be a JSON object, not a scalar or an array: a workflow whose Set value is anything else fails validation on save. The object must also match the store’s value schema. Ingestly adds a reserved
key property carrying the entry key to every stored value, and a reserved entryId property when the write has an Entry ID, so never declare key or entryId in the schema or in the node’s value.
Entry ID
An Entry ID turns one key into a set of named entries. Writing the same key and Entry ID again replaces that entry in place, so a corrected document overwrites the earlier one instead of adding a duplicate. Entries without an Entry ID under the same key are left alone and still read back.- A replaced entry counts as newly written: it becomes the Latest entry, falls inside a recent Window again, and its age retention restarts.
- The Entry ID is trimmed. An Entry ID template that resolves to nothing, or to a list or object, fails the step rather than silently appending.
- With If entry exists set to Fail, the first write wins and a later write of the same entry fails the run with a message naming the key and Entry ID. A retry of the same run is never treated as a conflict.
- Entry IDs are at most 256 characters after the template resolves.
During a dry run, Set validates and previews the value without saving it. A later Get reads committed entries and cannot see the previewed value, so its result can differ from a live run.
Fail on null value
By default, an expression that resolves to nothing renders as an empty string inside the stored object and the run succeeds. Turn Fail on null value on to make that a hard failure instead. The check covers three cases and names what went wrong:- An unresolved reference: the message quotes the token, for example
the reference {{extract.payload.total}} did not resolve. - A JSON-null leaf, named by its dotted path, for example
'lines[0].sku' resolved to a null or empty value. - An empty or whitespace-only string leaf, named by that same dotted path.
{{uuid}} and {{now}} always resolve, so they are never reported as unresolved. An empty object or an empty array is not a leaf and does not trip the check.
Set inside a Loop
A Set or Delete inside a Loop body is buffered per item, not written straight away. Buffered writes are flushed together, in order, as the loop progresses; a failed item’s own writes are discarded and never persisted. A Get in the same loop reads committed entries only: it never sees the loop’s own pending writes. With If entry exists set to Fail, a second item writing the same entry fails at once.
Get
Reads the series for a key and returns the result as the node’s payload. Entries are ordered by when they were last written, so a replaced entry counts as the newest. Three operations are available.Latest
Returns the single most recent entry for the key. The result lands atpayload. Stored JSON is parsed back into structured data, so read its fields directly, for example {{getPrice.payload.unitPrice}}. metadata.store.found is false and payload is null when no entry matched.
Last N
Returns the most recent N entries as a list. The result lands atpayload (array, newest first). Empty array when no entries matched.
Aggregate
Computes a number over the series. The result lands atpayload (number). An empty series yields 0 for Total and Count, and null for Average, Lowest, and Highest.
The node reads Value path out of each stored entry before computing the aggregate. Entries where the path does not resolve to a number are skipped. Leave it blank only when the stored value is itself a number: values written by a Set node are always objects, so a blank path aggregates nothing for them.
The editor suggests paths sampled from entries already stored under the configured key. Click a suggestion to fill the field. Upstream workflow fields are deliberately not offered, because the path is read against the stored entry rather than the current run.
Window
All three operations accept an optional Window to restrict which entries are included.
When no window is set, all entries for the key are included.
Delete
Removes entries from the store. The payload is the number of entries removed.
A delete that matches nothing succeeds with
0. During a dry run, Delete counts the entries it would remove and deletes nothing.
Output
The node’s data lives inpayload and identity/provenance fields are under metadata.store. Read downstream as {{storeName.payload}} or {{storeName.metadata.store.<field>}} where storeName is the node name in your workflow.
payload - the operation result:
metadata.store - identity and provenance:
found and count are present for every Get shape, including a miss and an empty aggregate series, where count is 0. A downstream node can branch on {{getPrice.metadata.store.count}} without first checking that the field exists.Limits
The workflow editor enforces the same bounds the API publishes, so a configuration the editor accepts is not refused when you save.When a store is missing
Deleting a store that a workflow still references breaks that workflow:- The node editor shows Store not found in place of the store name, with an inline note telling you the selected store no longer exists in this workspace.
- Saving or validating the workflow reports a validation error naming that node, and the workflow stays invalid (and therefore cannot run) until you point the node at a store that exists.
- If the workflow does run against a deleted store, the step fails with
Store not found or was deleted.
Moving a workflow between workspaces
Workflow exports carry store references by name, not by ID. On import, Ingestly rebinds each Store node to the store with the same name in the destination workspace. When no store matches that name (or more than one does), the reference is cleared and reported: the import warning lists unbound connectors, stores, and forward targets together, so open each affected node and pick a replacement. See export and import.Example: price change detection
A purchase-order workflow captures each line item’s unit price on every run and surfaces a warning when the price has changed. Set node (runs when the order arrives):{{vars.payload.priceChanged}}, or an If node can branch on it. Filter is not the node for this: it only keeps or drops pages of one document and never branches on a variable.
Example: packing slips per purchase order
A purchase order arrives as several packing slips over a few days, and a corrected slip can be resent. The invoice run later needs the received quantities from every current slip, then closes the order. Set node (runs for each packing slip):Inputs and outputs
Allowed inputs: All trigger nodes and all action nodes. Output: The node result with data atpayload and identity fields at metadata.store, as described in the Output section above.
Credits
Store nodes are free. They consume 0 credits per execution.Related
Stores settings
Create and manage store resources
Variable
Define named values that live only within a single run
HTTP action
Call external APIs to read or write data mid-workflow
Expressions and filters
Template syntax for key and value fields