Skip to content

DataStore

The DataStore module is the workflow’s main structured data storage system. It supports multiple actions: add records (add), bulk add (bulk), filter (filter), get a specific field (getField), check existence (exists), delete (delete), modify tags (modifyTags), replace tags (replaceTags), batch tag operations (batchTags) and map keys to values (map). Records are organized in groups, each with a unique key and optional tags. Tags allow categorizing and filtering records with OR, AND or exclusion modes. Supports dynamic variables {{variable}} in fields like key, row and tags.

Parameters vary depending on the selected action. Available variants are:

ParameterTypeRequiredDescription
groupdataStoreGroupYesGroup where to store the record.
keytextYesField to use as unique identifier. Supports {{variable}}.
rowtextYesData to store. Use {{data}} for the complete input.
tagsdataStoreGroupTagsNoGroup tags to assign to the record.
ParameterTypeRequiredDescription
groupdataStoreGroupYesGroup where to store the records.
keytextYesField of each object to use as unique key.
dataKeytextYesArray of objects to store. Use {{data}} if the input is the array.
tagsdataStoreGroupTagsNoTags to apply to all records.
ParameterTypeRequiredDescription
groupdataStoreGroupNoFilter by group (empty = all).
keytextNoFilter by specific key.
tagsdataStoreGroupTagsNoFilter by tags.
tagModeselectNoFilter mode: any (OR), all (AND), exclude. Default: any.
limitnumberNoMaximum records returned, newest first. Default 50; raise it (up to 5000) if you need the full history of a group.

The filter output is the list of records (each with its row_data already parsed into an object). The node needs action: filter; if you write it by hand in a template, do not forget it.

ParameterTypeRequiredDescription
groupdataStoreGroupYesGroup to search in.
keytextYesRecord key to search for.
fieldtextYesField name to get from the record.
ParameterTypeRequiredDescription
groupdataStoreGroupYesGroup to search in.
keytextYesKey to search for.
tagsdataStoreGroupTagsNoAlso filter by tags (optional).
tagModeselectNoFilter mode: any (OR), all (AND).
ParameterTypeRequiredDescription
idtextNoSpecific record ID to delete.
groupdataStoreGroupNoRecord group (if no ID is specified).
keytextNoRecord key to delete (used with group).

DataStore Modify Tags (action: modifyTags)

Section titled “DataStore Modify Tags (action: modifyTags)”
ParameterTypeRequiredDescription
idstextNoRecord IDs separated by comma.
groupdataStoreGroupNoGroup to filter records (if no IDs).
tagsdataStoreGroupTagsNoFilter tags to find records.
adddataStoreGroupTagsNoTags to add to records.
removedataStoreGroupTagsNoTags to remove from records.

DataStore Replace Tags (action: replaceTags)

Section titled “DataStore Replace Tags (action: replaceTags)”
ParameterTypeRequiredDescription
groupdataStoreGroupYesGroup where to search for records.
filterTagsdataStoreGroupTagsNoFilter records by these tags before replacing. If empty, applies to the entire group.
tagModeselectNoFilter mode: any (OR), all (AND). Default: any.
oldTagdataStoreGroupTagsYesThe tag to replace (select from group list).
newTagtextYesThe new tag that will replace the old one. Can be existing or new.
ifNotFoundselectNoIf the record doesn’t have the tag to replace: skip = do nothing (default), assign = assign the new tag anyway.
logselectNoLog actions to the logs table. Default: No.
ParameterTypeRequiredDescription
groupdataStoreGroupYesGroup to search in.
filterTagsdataStoreGroupTagsYesTags to filter the records on which the action will be applied.
filterModeselectNoFilter mode: any (OR), all (AND), exclude. Default: any.
batchActionselectYesAction to apply: add (add tags), remove (remove tags), replace (replace tag).
addTagsdataStoreGroupTagsNoTags to add (visible when batchAction = add).
removeTagsdataStoreGroupTagsNoTags to remove (visible when batchAction = remove).
oldTagdataStoreGroupTagsNoTag to replace (visible when batchAction = replace).
newTagtextNoNew tag (visible when batchAction = replace).
ifNotFoundselectNoIf tag not found: skip or assign (visible when batchAction = replace).
logselectNoLog actions. Default: No.
ParameterTypeRequiredDescription
groupdataStoreGroupYesGroup to search in.
keystextYesArray of keys to map. Supports {{data.ids}}.
fieldtextYesField to extract from each record.
transformselectNoTransformation: uppercase, lowercase, trim, or none.

So you don’t have to remember or type names by hand, the key and field fields include an assistant: a magnifier button next to the {} variables button. Clicking it opens a list of what already exists in the selected group.

FieldNodesWhat it lists
keyAdd, Filter, Get Field, Exists, DeleteThe group’s keys (up to 50), with a preview of the record. With more records, type in the search box to filter.
fieldGet Field, MapThe fields found in the group’s latest records, with their type and an example.

How to use it:

  1. Choose the group first. Without a group, the assistant reminds you.
  2. Click the magnifier on the key or field field.
  3. Search if needed and click a value: it is written into the field.

Good to know:

  • It is a help, not a requirement. You can still type the value by hand or use a variable such as {{data.order}}.
  • If the group is a variable (for example {{data.group}}), the assistant cannot know what is inside: type the value by hand.
  • Fields are inferred from real records. Only top-level fields are offered, which is what these nodes read. If the group has no records yet, there are no fields to show.
  • Permissions. You need permission to view the DataStore; otherwise the assistant shows a notice instead of the list.
  • Loaded on demand. Data is requested when you open the assistant, not when you open the node.

Varies by action:

{ "nextModule": "siguiente", "data": { "success": true, "key": "clave_registro" } }
{ "nextModule": "siguiente", "data": [{ "id": 1, "group_name": "clientes", "record_key": "juan", "row_data": {}, "tags": [] }] }
{ "nextModule": "siguiente", "data": { "isFound": true, "message": "Found", "row": { "datos": "del_registro" } } }
{ "nextModule": "next", "data": { "success": true, "deletedCount": 1 } }
{ "success": true, "replaced": 15, "skipped": 3, "assigned": 0, "total": 18 }
{ "success": true, "matchedRecords": 50, "action": "replace", "ids": [1, 2, 3], "result": { "replaced": 45, "skipped": 5, "assigned": 0, "total": 50 } }
{
"label": "DataStore Add",
"action": "add",
"group": "clientes",
"key": "{{data.email}}",
"row": "{{data}}",
"tags": ["nuevo"]
}
{
"action": "replaceTags",
"group": "orders",
"oldTag": "pending",
"newTag": "processed",
"ifNotFound": "skip"
}

Replace tag only on records matching certain tags

Section titled “Replace tag only on records matching certain tags”
{
"action": "replaceTags",
"group": "orders",
"filterTags": ["urgent", "vip"],
"tagMode": "all",
"oldTag": "pending",
"newTag": "priority",
"ifNotFound": "assign",
"log": "true"
}
{
"action": "batchTags",
"group": "customers",
"filterTags": ["new"],
"filterMode": "any",
"batchAction": "add",
"addTags": ["welcome-sent"]
}
{
"action": "batchTags",
"group": "customers",
"filterTags": ["temp", "test"],
"filterMode": "any",
"batchAction": "remove",
"removeTags": ["temp", "test"]
}
{
"action": "batchTags",
"group": "products",
"filterTags": ["active"],
"filterMode": "any",
"batchAction": "replace",
"oldTag": "active",
"newTag": "discontinued",
"ifNotFound": "skip",
"log": "true"
}
  • Supports dynamic variables {{variable}} in key, row, dataKey and tags fields.
  • The key and field fields have an assistant to pick existing values: see Assignment assistant.
  • If the action is add and a record with the same key already exists in the group, it is updated.
  • For bulk, the input can be an array or an object that is converted to an array.
  • The exists action returns isFound: true/false with the record data if it exists.
  • The delete action can delete by direct ID or by group + key combination.
  • The modifyTags action allows adding and removing tags simultaneously on multiple records.
  • The map action allows getting a specific field from multiple records at once, with optional transformations.
  • The replaceTags action searches for a specific tag on each record and replaces it with another. If the record doesn’t have the tag, you can configure it to assign the new tag anyway (ifNotFound: assign) or do nothing (ifNotFound: skip).
  • The batchTags action first filters records by tag match and then applies a bulk operation: add tags, remove tags, or replace one tag with another.
  • Each variant has its own parentNode dataStore and its own icon/color for easy visual identification.
  • DataStoreTrigger (trigger activated by DataStore changes)
  • dataframe (legacy version, obsolete)
  • decision (to evaluate query results)
  • iterator (to iterate over filtered results)