- Home
- Resources
- Integrations
- Data table
n8n Data table nodeConfigure Data table in n8n.
The n8n Data table node gives a workflow a memory that outlives its own execution. It stores structured rows inside n8n itself, through 2 resources and 11 operations, with no account to connect. Reach for it when a run has to remember what the run before it already handled.
Verified Trustpilot reviews · AI, automation & growth agency
What does the n8n Data table node actually store?
A data table is a small table living inside n8n, with named columns and typed values, that any workflow in the project can read and write. The Data table node is how a workflow touches it: create the table, list tables, rename one, then insert, read, update, upsert or delete rows. Nothing leaves n8n, and nothing disappears when the execution ends.
Take a nightly job that pulls orders and sends a recap. Without storage, every run starts blind and the same order gets announced twice. With a table, each order goes through If row does not exist, only the unseen ones continue, and Insert row writes them back at the end. The next run stays quiet about them.
Second scenario, a counter that survives a restart. An API that allows a fixed number of calls per day needs a tally kept somewhere reliable. One row per day, read with Get row(s) and raised with Update row(s), covers it. If that tally currently lives in Google Sheets, moving it here removes one external service from the critical path.
Third, a small reference table. Mapping a product code to a price band, or a country to an account owner, is exactly the lookup that ends up hard coded inside an If node and then quietly rots. A table stays editable from the Data Tables tab of your project Overview, by someone who never opens the workflow.
When to pick something else. If the data belongs to another system, ask that system: a table is a cache you now have to keep honest, and HTTP Request reaches any endpoint a dedicated node misses. Joining two streams of items on a shared key is Merge territory, not a table lookup. And a table is not a queue: rows have no order of their own beyond the column you sort on.
Known limits. The node is at version 1 and exposes 2 resources, Table and Row, for 11 operations in total. There is no Data table trigger, so a Schedule Trigger, a webhook or an app trigger still has to open the workflow. Column types are fixed when you create the table, and the node deletes rows permanently. Our n8n training walks through the patterns above end to end.
Which operations does the Data table node offer?
The Data table node exposes 11 operations across 2 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
| Resource | Create | Get | Update | Delete | Delete | Insert | List | If Row Exists | If Row Does Not Exist | Upsert |
|---|---|---|---|---|---|---|---|---|---|---|
| Row | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| Table | ✓ | ✓ | ✓ | ✓ |
Operations index
Row
7 operationsDelete row(s)
row.deleteRowsWhat you see in n8n
Notes & use cases
Removes every row matching the conditions you set and returns what it removed. The removal is permanent, so the node gives you a way to look before you leap.
Key parameters
- Data table: choose the table from the list, by name, or by ID.
- Must Match:
allConditionsnarrows the selection,anyConditionwidens it. - Conditions: each one pairs a Column, a Condition and a Value, commonly
{{ $json.email }}. - Dry Run: simulates the delete and returns the affected rows in their before and after states.
Get row(s)
row.getWhat you see in n8n
Notes & use cases
Reads rows back out of a table and hands them to the next node as items. This is what turns stored data into workflow data.
Key parameters
- Data table: the table to read from, by list, name or ID.
- Must Match and Conditions: the filter that decides which rows come back.
- Return All: on, every match comes back; off, Limit Per Input Row caps the result for each incoming item.
- Order By, Order By Column and Order By Direction: sort on a column,
DESCfor newest first.
If row exists
row.rowExistsWhat you see in n8n
Notes & use cases
Acts as a gate on the items coming in. An item whose match is found in the table comes out unchanged; an item with no match produces nothing at all.
Key parameters
- Data table: the table to check against.
- Must Match:
allConditionswhen several columns have to agree. - Conditions: the column, the comparison and the value, typically
{{ $json.id }}taken from the trigger.
If row does not exist
row.rowNotExistsWhat you see in n8n
Notes & use cases
The mirror image of the check above. Only items with no match in the table continue, which makes it the shortest deduplication step in n8n.
Key parameters
- Data table: the table holding what has already been processed.
- Must Match:
anyConditionis enough when one identifier alone proves the item is known. - Conditions: usually a single line comparing a column to
{{ $json.orderId }}.
Insert row
row.insertWhat you see in n8n
Notes & use cases
Writes a new row for each incoming item. No matching, no conditions: whatever arrives gets a line of its own.
Key parameters
- Data table: the destination table, which must already exist.
- Columns: map the incoming fields onto the table columns, either by hand or automatically when the names match.
- Optimize Bulk: stops the inserted data being returned, which improves bulk insert performance by up to 5 times.
Update row(s)
row.updateWhat you see in n8n
Notes & use cases
Rewrites the rows that match your conditions with the values you map. Rows that match nothing stay untouched, and no new row is created.
Key parameters
- Data table: the table to modify.
- Columns: the fields to write, so map only what should change.
- Must Match and Conditions: pair a Column, a Condition and a Value such as
{{ $json.status }}. - Dry Run: returns the affected rows before and after, without writing anything.
Upsert row(s)
row.upsertWhat you see in n8n
Notes & use cases
Updates the matching rows, and inserts a new one when nothing matches. That is a single node where a lookup, a branch and two separate writes used to sit, which is why it usually replaces three nodes in an older workflow.
Key parameters
- Data table: the table that holds the current state.
- Columns: the values to write in both paths, insert and update alike, so map the whole row rather than a fragment of it.
- Must Match and Conditions: the key that decides which branch applies, often
{{ $json.email }}. - Dry Run: shows the before and after states.
Table
4 operationsCreate a data table
table.createWhat you see in n8n
Notes & use cases
Builds a new table and its columns from inside a workflow, rather than by hand in the interface. Handy when a template has to set up its own storage on first run.
Key parameters
- Name: required, the name of the table to create, plain text or an expression.
- Columns: add one entry per column, each with a Name and a Type among
boolean,date,numberandstring. - Reuse Existing Tables: returns the existing table with the same name instead of raising an error.
Delete a data table
table.deleteWhat you see in n8n
Notes & use cases
Drops an entire table, its columns and its rows in one go. The action cannot be undone, which is why it sits on its own with a single parameter and no filter to soften it.
Key parameters
- Data table: required, identified from the list, by name, or by ID; prefer the ID when two tables share a similar name.
List data tables
table.listWhat you see in n8n
Notes & use cases
Returns the tables in the project as items, one per table. Useful when a workflow has to work out what exists before it writes anything.
Key parameters
- Return All: on for the whole list; off, and Limit Per Input Row caps it, for example at 50.
- Filter by Name: keeps the tables whose name contains the text, matching without regard to case.
- Sort Field and Sort Direction: sort on
createdAt,nameorupdatedAt, ascending ordesc.
Update a data table
table.updateWhat you see in n8n
Notes & use cases
Changes the name of an existing table. Nothing else about the table moves: columns, types and rows all stay exactly as they were.
Key parameters
- Data table: required, the table to rename, from the list, by name or by ID.
- New Name: required, the new name, often built from an expression such as
{{ $json.period }}.
Need help automating Data table with n8n?
A person reads every message.
Data table node, the questions that come next
01Is the n8n Data table node included in n8n?
02What do you need to set up before using it?
03What are the limits of the Data table node?
04When should you use a data table instead of a spreadsheet?
05n8n or Make for storing workflow state?
Get our weekly integration tips.
No spam. Unsubscribe anytime.


