The number one beginner mistake in n8n is a node receiving "no data" when the previous node clearly produced output.
The number one beginner mistake in n8n is a node receiving "no data" when the previous node clearly produced output. This almost always happens because of an item structure mismatch. n8n nodes communicate using arrays of items, where each item has a json property. If a Code node returns a plain object instead of an array of items, or if an API returns a single object when you expected an array, downstream nodes receive nothing or behave unexpectedly.
Real-world example: A Code node processes API data but the next node shows "No items" even though the Code node shows output.
// This Code node output will cause "no data" in the next node
const result = {
name: "Jane Martinez",
email: "jane@example.com",
score: 85
};
return result; // n8n does not know how to pass this forward
```text
```javascript title="CORRECT: Returns an array of items with json property"
// Each item must be wrapped in { json: { ... } }
const result = {
name: "Jane Martinez",
email: "jane@example.com",
score: 85
};
return [{ json: result }];
```text
```javascript title="CORRECT: Multiple items"
const records = [
{ name: "Jane", score: 85 },
{ name: "Bob", score: 72 },
{ name: "Carlos", score: 91 }
];
// Map each record to the n8n item format
return records.map(record => ({ json: record }));
```text
Common variations of this mistake:
```javascript title="Debugging Checklist for 'No Data' Issues"
// 1. Returning a Promise without awaiting it
// WRONG:
return fetch('https://api.example.com/data');
// CORRECT:
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return [{ json: data }];
// 2. API returns { results: [...] } but you expected [...]
// WRONG expression in next node:
{{ $json[0].name }}
// CORRECT expression:
{{ $json.results[0].name }}
// 3. Forgetting to return from the Code node
// WRONG: function ends without return
const items = $input.all();
items.forEach(item => { item.json.processed = true; });
// CORRECT: must return the items
const items = $input.all();
items.forEach(item => { item.json.processed = true; });
return items;
```text
When you see "no data" in a downstream node, always check: (1) does the previous node's output panel show data, (2) is the data in the correct `[{ json: {...} }]` format, and (3) are expressions referencing the correct property path?
**Related:** [Always Set an Error Workflow on Every Production Workflow](../error-handling-and-reliability/01-always-set-an-error-workflow-on-every-production-workflow.md) | [Break Large Workflows into Sub-Workflows](../workflow-architecture/01-break-large-workflows-into-sub-workflows.md)
I build production n8n and Cloudflare automation for teams — the same engineering behind HarperFlow. Fixed-price, escrow-protected, US-based.