Resources · n8n integration

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

Why automate

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.

Actions

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.

Resources × operations matrix
ResourceCreateGetUpdateDeleteDeleteInsertListIf Row ExistsIf Row Does Not ExistUpsert
Row
Table

Row

7 operations
01

Delete row(s)

row.deleteRows

What 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: allConditions narrows the selection, anyCondition widens 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.
Use cases
clearing the rows of a campaign once its export has been sent.
02

Get row(s)

row.get

What 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, DESC for newest first.
Use cases
reading a stored quota for a customer before deciding what to send next.
03

If row exists

row.rowExists

What 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: allConditions when several columns have to agree.
  • Conditions: the column, the comparison and the value, typically {{ $json.id }} taken from the trigger.
Use cases
letting through only the customers already registered in a table of approved accounts, and dropping the rest without an error branch.
04

If row does not exist

row.rowNotExists

What 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: anyCondition is enough when one identifier alone proves the item is known.
  • Conditions: usually a single line comparing a column to {{ $json.orderId }}.
Use cases
running a daily import twice without sending the same order confirmation twice.
05

Insert row

row.insert

What 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.
Use cases
logging every webhook payload received during a launch so the numbers can be checked afterwards.
06

Update row(s)

row.update

What 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.
Use cases
marking a batch of records as exported once the file has actually left.
07

Upsert row(s)

row.upsert

What 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.
Use cases
keeping exactly one row per subscriber, whether the contact is brand new or has been seen many times already.

Table

4 operations
08

Create a data table

table.create

What 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, number and string.
  • Reuse Existing Tables: returns the existing table with the same name instead of raising an error.
Use cases
a setup workflow that a colleague runs once before the real automation starts.
09

Delete a data table

table.delete

What 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.
Use cases
tearing down the scratch table a test workflow created, at the end of that same workflow.
10

List data tables

table.list

What 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, name or updatedAt, ascending or desc.
Use cases
checking that last month's archive table is still there before an export runs.
11

Update a data table

table.update

What 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 }}.
Use cases
renaming a rolling table at the start of each month so the archive keeps a readable history.
Need help

Need help automating Data table with n8n?

A person reads every message.

FAQ

Data table node, the questions that come next

01Is the n8n Data table node included in n8n?
Yes. It is a core node shipped with n8n, on n8n Cloud and on a self-hosted instance alike, with nothing to install and no extra cost on the n8n side. Self-hosting runs through Docker or npm under the Community Edition and its Sustainable Use licence, and a workflow behaves the same way in both places. Because the data stays inside n8n, a self-hosted instance keeps those rows on infrastructure you control, which is often the reason teams choose a data table over an external spreadsheet in the first place.
02What do you need to set up before using it?
Nothing on the account side. This node has no credential and no Authentication selector, so there is no key to generate, no scope to grant and no token to rotate. That is a real advantage: one less thing to break at three in the morning. What you do need is a table. Either create it from the Data Tables tab in your project Overview, or let a workflow build it with the Create a data table operation. You also need something upstream, since the node runs on incoming items and never opens a workflow on its own.
03What are the limits of the Data table node?
The node is at version 1, with 2 resources and 11 operations, and there is no Data table trigger: nothing fires when a row changes, so a Schedule Trigger or a webhook has to drive the check. Column types are set when the table is created, from boolean, date, number and string, and the node offers no operation to alter a column afterwards. Renaming is limited to the table name itself. Deletions of rows and of tables are permanent, which is exactly what Dry Run exists to protect you from.
04When should you use a data table instead of a spreadsheet?
Use a data table when the data only matters to your workflows: deduplication keys, counters, run state, small lookup maps. It lives in n8n, so there is no quota, no authentication and no network call between the workflow and its own memory. Use a spreadsheet when a human has to read, sort or share the data outside n8n, or when other tools already read that file. A fair rule of thumb: if nobody outside the automation would ever open it, keep it in a data table.
05n8n or Make for storing workflow state?
It depends on where you want the data to sit. Make is a hosted automation platform with no self-hosting option, billed per operation, so every read and write of a stored value counts against that meter. n8n can run on your own servers, which means the table and the rows stay on infrastructure you control, and the visual logic stays in the same editor as the rest of the workflow. If your constraint is data residency or a high volume of small reads, self-hosted n8n answers it directly. If you never want to run a server, the hosted platform is the simpler path.
Hack'celeration Lab

Get our weekly integration tips.

No spam. Unsubscribe anytime.