Shape, filter, store and fetch data: tables, HTTP, dates, TOTP codes.
Generated from the node definitions in
src/lib/flow/node/data/and the English labels (component.flow.node.data). Every node also has the common settings.
Contents
- Aggregate —
data/aggregate - Date & time —
data/date - Filter —
data/filter - HTTP request —
data/http - Limit —
data/limit - Random pick —
data/random - Set fields —
data/set - Sort —
data/sort - Split text —
data/split - Data table —
data/table - 2FA code —
data/totp - Remove duplicates —
data/unique - Summarize —
data/summarize - Compare —
data/compare - Crypto —
data/crypto - HTML —
data/html - Convert —
data/convert - RSS —
data/rss - Store —
data/store - Code —
data/code - Next post —
data/post
Aggregate
data/aggregate · icon sigma
Combines many items into one value
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
list | List | text | ||
path | Field in item | text | ||
operation | Operation | select: collect (Collect into a list), count, sum, average, min (Minimum), max (Maximum), join (Join as text) | "collect" | |
separator | Separator (join) | text | ", " |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"value": "unknown"
}
Example node
{
"id": "aggregate",
"type": "data/aggregate",
"name": "Aggregate",
"field": {
"operation": "collect",
"separator": ", "
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Date & time
data/date · icon calendar
Gets, formats, shifts or compares dates
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
operation | Operation | select: now, format (Format a date), add (Add or subtract), difference | "now" | |
value | Date | text | ||
amount | Amount (negative subtracts) | number | 0 | |
unit | Unit | select: seconds, minutes, hours, days | "minutes" | |
other | Other date (difference) | text | ||
timezone | Timezone (empty: the flow's) | text |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"iso": "string",
"unix": "number",
"text": "string",
"date": "string",
"time": "string",
"weekday": "string",
"value": "number"
}
Example node
{
"id": "date",
"type": "data/date",
"name": "Date & time",
"field": {
"operation": "now",
"amount": 0,
"unit": "minutes"
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Filter
data/filter · icon filter
Keeps the items that match conditions
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
list | List | text | ||
combine | Combine | select: and (All conditions), or (Any condition) | "and" | |
condition | Conditions | list of { path: text, operator: select, value: text } | [{"path": "", "operator": "notEmpty", "value": ""}] |
Output dots
next— Nextempty— Empty
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"items": [
"unknown"
],
"removed": "number"
}
Example node
{
"id": "filter",
"type": "data/filter",
"name": "Filter",
"field": {
"combine": "and",
"condition": [
{
"path": "",
"operator": "notEmpty",
"value": ""
}
]
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
HTTP request
data/http · icon globe-lock
Calls an API or webhook. With Authentication: A credential, it adds the 's headers and query to the request; an OAuth2 credential answered 401 is refreshed once and the call sent again.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
curl | Import a cURL command | curl | ||
method | Method | select: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS | "GET" | |
url | URL | text | ||
auth | Authentication | select: none, credential (A credential) | "none" | |
credential | Credential | credential | auth: credential | |
query | Query (JSON) | json | ||
header | Headers (JSON) | json | ||
bodyType | Body as | select: json, form (Form (urlencoded)), multipart (Multipart (with files)), raw (Raw text), file (A file of the item), none (No body) | "json" | |
body | Body | json | bodyType: json, form, multipart | |
raw | Raw body | textarea | bodyType: raw | |
contentType | Content type | text | "text/plain" | bodyType: raw |
fileKey | File keys (comma list, empty: all) | text | bodyType: multipart, file | |
response | Response as | select: auto (Auto (JSON or text)), json, text, file (A file) | "auto" | |
isFull | Full response (with headers) | boolean | false | |
isNeverError | Never error (4xx and 5xx go on) | boolean | false | |
isFollow | Follow redirects | boolean | true | |
maxRedirects | Most redirects | number | 10 | isFollow: True |
Output dots
next— Nexterror— Error
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"status": "number",
"header": "unknown",
"body": "unknown",
"page": "number"
}
Example node
{
"id": "http",
"type": "data/http",
"name": "HTTP request",
"field": {
"method": "GET",
"timeoutMs": 30000
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Limit
data/limit · icon list-filter
Keeps the first or last N items
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
list | List | text | ||
count | Count | number | 5 | |
from | From | select: start (From the start), end (From the end) | "start" |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"items": [
"unknown"
]
}
Example node
{
"id": "limit",
"type": "data/limit",
"name": "Limit",
"field": {
"count": 5,
"from": "start"
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Random pick
data/random · icon shuffle
Picks random items from a list
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
list | List | text | ||
count | How many | number | 1 |
Output dots
next— Nextempty— Empty
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"items": [
"unknown"
],
"item": "unknown"
}
Example node
{
"id": "random",
"type": "data/random",
"name": "Random pick",
"field": {
"count": 1
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Set fields
data/set · icon pencil
Sets, removes and renames fields
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
mode | Mode | select: field (Field by field), json | "field" | |
field | Fields | list of { op: select, name: text, type: select, value: text, to: text } | mode: field | |
json | JSON | json | mode: json | |
include | Keep from the input | select: none (Nothing), all (Everything), selected (Only these fields), except (All but these fields) | "none" | |
keep | Fields (comma list) | text | include: selected, except | |
isDot | Dots make paths (product.title) | boolean | true | |
isLenient | Ignore conversion errors | boolean | false | |
isFile | Keep the files | boolean | false |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
"the item it got (unchanged), or what its code returns"
Example node
{
"id": "set",
"type": "data/set",
"name": "Set fields",
"field": {
"field": [
{
"name": "",
"value": ""
}
]
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Sort
data/sort · icon arrow-down-wide-narrow
Sorts a list by a field
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
list | List | text | ||
path | Field in item | text | ||
direction | Direction | select: asc (Ascending), desc (Descending) | "asc" |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"items": [
"unknown"
]
}
Example node
{
"id": "sort",
"type": "data/sort",
"name": "Sort",
"field": {
"direction": "asc"
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Split text
data/split · icon scissors
Turns text into a list
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
text | Text | textarea | ||
separator | Separator (\n for lines) | text | "," | |
trim | Trim spaces | boolean | true |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"items": [
"unknown"
]
}
Example node
{
"id": "split",
"type": "data/split",
"name": "Split text",
"field": {
"separator": ",",
"trim": true
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Data table
data/table · icon table-2
Finds, adds, changes or deletes rows in one of your tables
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
table | Table | table | ||
operation | Operation | select: find (Find rows), insert (Add rows), update (Change rows), upsert (Change or add), delete (Delete rows) | "find" | |
where | Where (column: value, or id) | json | ||
data | Data (column: value) | json | ||
limit | Maximum rows | number | 100 | |
sort | Sort by column | text | ||
direction | Direction | select: desc (Newest / largest first), asc (Oldest / smallest first) | "desc" |
Output dots
next— Nextempty— Nothing found
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"rows": [
"unknown"
],
"row": "unknown",
"count": "number"
}
Example node
{
"id": "table",
"type": "data/table",
"name": "Data table",
"field": {
"operation": "find",
"limit": 100,
"direction": "desc"
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
2FA code
data/totp · icon key-round
The account's current authenticator code
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
account | Account | dataset.account |
Output dots
next— Nextnone— No 2FA
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"code": "string",
"expiresInMs": "number"
}
Example node
{
"id": "totp",
"type": "data/totp",
"name": "2FA code",
"field": {},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Remove duplicates
data/unique · icon list-x
Drops repeated items
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
list | List | text | ||
path | Compare field (empty: whole item) | text |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"items": [
"unknown"
],
"removed": "number"
}
Example node
{
"id": "unique",
"type": "data/unique",
"name": "Remove duplicates",
"field": {},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Summarize
data/summarize · icon sigma
Sums up the input items like a pivot table (runs once with all of them). Group by: fields, comma separated (none: one group). Measures: a field and what to work out (count, countUnique, sum, average, min, max, concatenate with a separator, append into a list) under a name. One item per group: { <group fields>, <names> }.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
group | Group by (fields, comma separated) | text | ||
measure | Measures | list of { path: text, operation: select, name: text, separator: text } | [{"path": "", "operation": "count", "name": "count"}] |
Compare
data/compare · icon git-compare-arrows
Compares two lists: input A and input B, matched by key fields (comma separated). Each item leaves through same, different, onlyA or onlyB. Fields to leave out don't count as a difference. When they differ it sends both ({ a, b }), A's or B's.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
key | Match by (fields, comma separated) | text | "id" | |
skip | Fields to leave out | text | ||
prefer | When they differ, send | select: both, a (A's), b (B's) | "both" |
Crypto
data/crypto · icon fingerprint
hash (md5, sha1, sha256, sha384, sha512), hmac with a secret, base64Encode, base64Decode, uuid, or random bytes (hex or base64). The result goes into the item under Name in the output (default result).
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
operation | Operation | select: hash, hmac, base64Encode (Base64 encode), base64Decode (Base64 decode), uuid, random (Random bytes) | "hash" | |
value | Value | text | operation: hash, hmac, base64Encode, base64Decode | |
algorithm | Algorithm | select: md5, sha1, sha256, sha384, sha512 | "sha256" | operation: hash, hmac |
secret | Secret | text | operation: hmac | |
encoding | Encoding | select: hex, base64 | "hex" | operation: hash, hmac, random |
length | Bytes | number | 32 | operation: random |
name | Name in the output | text | "result" |
HTML
data/html · icon code-xml
Reads values out of HTML with CSS selectors. Each value: a name, a selector, what to read (its text, its HTML, an attribute) and whether to take every match as a list. Tidy whitespace (on) collapses spaces and line breaks.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
html | HTML | textarea | ||
extract | Values | list of { name: text, selector: text, read: select, attribute: text, isList: boolean } | [{"name": "title", "selector": "title", "read": "text", "isList": false}] | |
isTrim | Tidy whitespace | boolean | true |
Convert
data/convert · icon arrow-right-left
Runs once. jsonToXml (with a root element), xmlToJson (attributes as @_name), csvToItems (one item per row; the first row names the columns; quoted cells work), itemsToCsv (the input items), queryToObject, objectToQuery, markdownToHtml, htmlToText. The result goes under Name in the output; CSV to items sends the rows as items.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
operation | Convert | select: jsonToXml (JSON to XML), xmlToJson (XML to JSON), csvToItems (CSV to items), itemsToCsv (Items to CSV), queryToObject (Query string to object), objectToQuery (Object to query string), markdownToHtml (Markdown to HTML), htmlToText (HTML to text) | "xmlToJson" | |
value | Value | textarea | operation: jsonToXml, xmlToJson, csvToItems, queryToObject, objectToQuery, markdownToHtml, htmlToText | |
delimiter | Delimiter | text | "," | operation: csvToItems, itemsToCsv |
root | Root element | text | "root" | operation: jsonToXml |
name | Name in the output | text | "result" |
RSS
data/rss · icon rss
Reads an RSS or Atom feed (public addresses): one item per entry, { title, link, date, text, author, image }, up to Entries at most (20). No entries: the empty dot.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
url | Feed URL | text | ||
limit | Entries at most | number | 20 |
Store
data/store · icon database
A value kept across runs: get, set, increment (by N), append to a list, remove from a list, delete, or list the keys (with a prefix). Kept for: this flow, this campaign's group (a Studio run: its flow), or the whole workspace. Test runs keep their own values. Each write is journaled, so puts the old value back. Output: the item with { key, value } (list: keys).
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
operation | Operation | select: get, set, increment, append (Append to a list), remove (Remove from a list), delete, list (List keys) | "get" | |
scope | Kept for | select: flow (This flow), campaign (This campaign group), workspace (The workspace) | "flow" | |
key | Key | text | operation: get, set, increment, append, remove, delete | |
value | Value (JSON) | json | operation: set, append, remove | |
by | By | number | 1 | operation: increment |
prefix | Keys starting with | text | operation: list |
Code
data/code · icon square-code · plan feature code
Your JavaScript, in the worker. Once per item: item and index, return that item's output (an object, a list of objects, or null to drop it). Once with all items: items, return the output list. ctx is the whole (files, API, log, sleep). await works. Python isn't available.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
language | Language | select: javascript, python | "javascript" | |
mode | Run | select: each (Once per item), all (Once with all items) | "each" | |
code | Code | code | "return { ...item, doubled: Number(item.value ?? 0) * 2 };" |
Next post
data/post · icon file-stack
Hands out the next post of a post set, or files of a Drive folder, for this campaign
From a post set: pick the set with an option of kind Post set ({{ option.post.dataset }}), like accounts. Drafts (from Generate with AI) and posts whose media was deleted from the Drive are skipped (the post is marked in ). From a Drive folder: count files of the folder (its own files, not its subfolders') become the media of one post, with no text.
Order: shuffle (at random), by name (A→Z or Z→A, numbers in order) or by date added. Repeat: unique hands out each post once per campaign, then the empty dot (the last one also sends a notification); rotate hands out the least used next, so it goes round forever. What a campaign took is kept per campaign (Studio runs have their own count, test runs too), so one set can feed several campaigns.
media holds the Drive file ids, ready for a post node's Media (𝕏, Threads, Facebook); file has their names, types and sizes; left is what unique still has.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
source | From | select: set (A post set), folder (A Drive folder) | "set" | |
set | Post set (required) | dataset.post | source = set | |
path | Drive folder (required) | text | source = folder | |
count | Files per post | number | 1 | source = folder |
order | Order | select: shuffle (Shuffle), name.asc (Name A→Z), name.desc (Name Z→A), date.asc (Oldest first), date.desc (Newest first) | "shuffle" | |
repeat | Repeat | select: unique (Unique (each once per campaign)), rotate (Rotate (round and round)) | "unique" |
Output dots
next— Nextempty— Used up
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"key": "string",
"name": "string",
"text": "string",
"media": [
"string"
],
"file": [
{
"id": "string",
"name": "string",
"mime": "string",
"size": "number"
}
],
"left": "number"
}
Default settings
timeout 1 minutes; the rest are the .