How do I…
Tasks, not topics. Find yours and you get the shape it takes in nodes, plus the page that explains it properly. Every shape here is taken from something already in the marketplace: install the closest one and read how it works inside.
React to something outside
Someone sends a request, you do something and answer if needed.
Webhook → Condition → HTTP request → Response
The trigger is read as outputs.<trigger name>.body, not through input. The response only reaches the caller if the caller asked to wait: ?wait=1. See Triggers and the response.
Do something on a schedule
Schedule → HTTP request → Text formatter → Telegram
A schedule gives you two useful fields: firedAt, when it fired, and previousRun, when it fired last time. Together they are exactly the window you need to fetch, with no state to keep.
Build a digest and send it
Schedule → HTTP request → Aggregate → Text formatter → Telegram
The template is one whole expression: literals in quotes, joined with &. Grouping is short:
$join($each($rows{source: $}, function($v, $k) {
$k & ": " & $string($count($v))
}), "\n")
Not do the same thing twice
Outside services love to send a webhook again.
Webhook → State (setIfAbsent) → Condition (stored) → action
setIfAbsent only writes when the key is absent and reports stored — true means first sighting. Use the event id as the key: order:{{outputs.incoming.body.id}}.
Walk a list one by one
HTTP request → Loop → Delay → HTTP request
Inside a loop the current item is input. Keep concurrency at 1–3 and add a delay if the service has rate limits. Remember: a node's output inside a loop is overwritten on every pass, so you cannot total something across iterations — count before the loop, or in the text template.
Fetch more than one page holds
Almost every API caps what it returns at once.
Request (skip 0) → Request (skip 50) → Request (skip 100) → Text formatter
The pages are chained, then joined: $append($append(p1, p2), p3). If the API returns a total count, use it for the exact number and the fetched rows for the sums.
Work something out from data
source → Filter → Transform → Aggregate
The three do different jobs: Filter keeps items, Transform changes each one, Aggregate reduces the list to one value. In all three the expression sees only the item — neither variables nor outputs are reachable there, so a threshold has to be a literal in the expression.
Give a person a form
Form → HTTP request → Condition → Response
Fields are described by a JSON array, and answers are read as outputs.<form>.form.<field name>. Numbers arrive as numbers, checkboxes as true/false. Good for internal tools: take an order over the phone, recount stock, send a one-off broadcast.
Ask a model
Webhook → Condition → LLM prompt → Condition → action
Ask the model to answer with one word from a list — then a condition can check it. And add a counter so AI operations are not spent on every "thanks": State (increment) plus a condition on value <= 3.
Write to a sheet or a database
Webhook → Data mapper → Google Sheets
Webhook → Database (upsert)
For your own database use upsert with onConflict — a repeated webhook then updates the same row instead of adding a second. See Database.
If none of these fit
Look at the marketplace: there are over eighty working flows there. Install the nearest one and take it apart — faster than starting from nothing. Or describe the task to the assistant in the editor: the button sits on the canvas, and it builds the shape and explains each node.