Let's start with the most common source of frustration: understanding the data model. Most problems people run into with n8n at the beginning aren't node problems. They come down to not understanding one thing: n8n doesn't pass "data" between nodes. It passes a list of items.
Each item is an object:
{ "json": { ...your data... }, "binary": { ...files, if any... } }
Three consequences follow from this, and they change the way you build workflows:
- A node runs once per item. If Google Sheets sends over 50 rows, the HTTP Request node will fire 50 times. You don't need to write a loop β n8n does it automatically. This is exactly why beginners end up adding a Loop Over Items node where none is needed.
- An array inside a field is not the same as a list of items. Does an API return one item with a results field containing 20 records? As far as n8n is concerned, that's still one item. The node will process it once. To handle each record individually, you first need to break the array out into separate items β that's what the Split Out node is for. The reverse operation is Aggregate (many items β one).
- You reference a specific item, not "the node's result." {{ $json.email }} β a field from the item currently being processed. {{ $('Webhook').item.json.email }} β a field from the corresponding item in an earlier node.
Once you understand that you're working on a list, not a single record, most of the workflow's "weird" behavior disappears.
Coming soon: details on the first meetups in PoznaΕ & GdaΕsk. It's going to be π₯
