This article covers creating a data table and defining its schema, from scratch or from a CSV file, what you can change once the table exists, and how to have a table delete its own old rows.
What a data table is for, where its edges are and the limits that apply everywhere are on the parent page, Data Tables. Adding, editing and exporting the rows themselves happens on the table's detail page and is covered in Managing Data Table Rows. Reading and writing a table from a conversation is covered in Using the Data Table Node in a Flow.
The Data Tables page

1. Create Data Table: Opens the create screen. Once the tenant holds the maximum number of tables, creating another is refused until one is deleted.
2. Search Name: Filters the list by table name.
3. Data Tables Storage: How much storage all tables in the tenant use together, against the tenant's limit. It is a tenant total, not a per-table figure.
4. The table list: One row per table, with Name, Description, Total Columns, Total Rows, Retention and Last Modified. Retention shows the automatic row deletion period in days, or Off, and it is the one column the list cannot be sorted on. Each row carries Edit Schema (the pencil), Export CSV and Delete. Clicking the row opens the table's detail page, where its rows are managed.
Choosing how to create the table
Create Data Table opens the create screen, which starts with a choice of source.
| Option | Use it when |
|---|---|
| Start from Scratch | You are designing the schema yourself, and rows will be added later or written by a flow. |
| Import from CSV | You already have the data in a file and want the table and its rows created in one step. |
Both routes produce the same kind of table. The choice affects only how the schema is defined, and whether rows arrive with it.
Creating a table from scratch

1. Source: Start from Scratch selected.
2. Name (required): The table's identifier, used by flows to reference it. It must start with a letter and contain only letters, numbers and underscores, and it must be unique in the tenant.
3. Description (required): What the table stores and when it should be used. An AI agent uses this text to decide which table to reach for, so describe the contents and the occasion rather than naming the columns.
4. Columns: The schema. The section header counts what you have used, and at least one column is required. Add Column appends an empty row.
5. Column Name: Same pattern as the table name, unique within the table. The three system column names are reserved.
6. Type: What the column holds. See below.
7. Column Description: What this column means.
8. Fast filter: Indexes the column's values as they are stored, so a Data Table node that filters on it retrieves data faster on large datasets. The counter beside Add Column shows how many of the five are in use, and the remaining toggles are disabled once the fifth is set.
9. System columns notice: Lists the three columns every table gets automatically.
Save creates the table.
Column types
| Type | Holds | Fast filter |
|---|---|---|
| Text | Short text, up to 200 characters | Available |
| Long Text (not indexable) | Text up to 8,000 characters | Not available |
| Number | Numeric values | Available |
| Boolean | True or False | Available |
| DateTime | A date and time | Available |
Choosing Long Text (not indexable) disables that column's Fast filter toggle outright. If you expect to filter on a text column, keep it as Text and stay within 200 characters.
⚠️ Warning: A Fast filter cannot be removed once it has been set. It can be turned on later from Edit Schema, but never turned off again, and the column counts against the table's five for good. Mark only the columns a flow will actually filter on.
System columns
Every table automatically gets Id, DateCreated and DateModified. You do not create them and you cannot edit them: they appear in the table's detail view but not when adding or editing a row, and their names cannot be reused. They are left out of a CSV export by default, so an exported file can be re-imported without duplicating them.
Creating a table from a CSV file
Choosing Import from CSV replaces the Columns section with an upload area, because names and types are set in the preview instead. Name and Description are still filled in on this screen and follow the same rules. The import happens in two steps.
Step 1: Upload the file

1. Source: Import from CSV selected.
2. Upload CSV File: Drag a file onto the dropzone or click to browse. Only .csv is accepted.
3. The limits line: The column, row and file size ceilings for an import. A file that breaks one of them is rejected before the preview, naming the limit it broke and the figure in your file.
Once the file is read, the screen reports how many columns and rows it found.
Step 2: Confirm the preview

1. Delimiter: How the file's columns are separated: Comma ( , ), Semicolon ( ; ), Tab or Pipe ( | ). It is detected from the file and carries an Auto-detected badge. Change it only if the preview below is not split correctly, which the modal tells you when everything lands in a single column.
2. My file has a header row: Selected by default, using the first row as the column names. Clear it if your file has no header, and the first row is treated as data.
3. Columns and their types: One entry per detected column, with the name taken from the header row and the type inferred for it. Adjust a type here if the inference is not what you want.
4. Preview rows: The first ten data rows.
5. Import: Names the number of columns it will create.
CSV import always creates a new table. There is no way to import a file into a table that already exists.
💡 Tip: The preview infers each column's type from the first ten data rows only, while the import parses every row. A file can therefore preview cleanly and still fail further down, on a stray
N/Ain a Number column or a date in another format. The error names the row and the column, so fix that cell and upload again. If a column's values are not uniform all the way down, importing it asTextand cleaning the data afterwards is the shorter path.
Deleting old rows automatically
The Data Retention section lets a table delete its own old rows, so it does not have to be emptied by hand as it approaches its row limit. It is off on a new table and off on every table that already existed. Because the create screen and the schema screen are one screen in two modes, you can set it while creating the table or change it at any time from Edit Schema. The setting belongs to the table, so nothing needs republishing.

1. Automatically delete old rows: Turns the daily cleanup on for this table. Default: off. Column definitions and the table itself are never affected, only rows.
2. Keep rows for: How old a row may be before it is removed, in days. Default: 30 the first time the switch is turned on (range 1 to 90). A value outside the range is corrected to the nearest allowed one rather than rejected.
3. Last cleanup: The date of the most recent run for this table and how many rows it deleted, or a line saying no cleanup has run yet.
A row's age is measured from the last time it was modified, and from its creation date only if it was never modified. Editing a row restarts its clock, including an edit a flow makes through a Data Table node, so rows a flow keeps updating are never old enough to be removed.
The cleanup runs once a day, and reads each table's current setting when it runs, so a change made during the day decides what happens that night. Rows the cleanup removes cannot be recovered from any screen. Set the period against the oldest row a flow still needs to read, not against the row limit you are trying to stay under.
What you can change after the table exists
Edit Schema, the pencil on the list row or the button on the table's detail page, reopens the same screen in edit mode. It is deliberately narrower than the create screen: existing columns are partially locked, and a standing alert on the screen says so.

1. Name: Disabled. A table cannot be renamed.
2. Description: Still editable.
3. The locked-columns alert: States what is fixed and what is not.
4. Existing columns: Each carries a lock icon, with Name, Type and the delete icon disabled. The description stays editable and Fast filter stays live, but only in the on direction.
5. Add Column: New columns can still be added and are fully editable until the schema is saved.
| Item | After the table is created |
|---|---|
| Table name | Locked |
| Table description | Editable |
| Existing column name | Locked |
| Existing column type | Locked |
| Existing column description | Editable |
| Fast filter on an existing column | Can be turned on, cannot be turned off |
| Deleting an existing column | Not possible |
| Adding a new column | Possible, within the column limit |
| Data Retention | Editable, on or off, at any time |
Because a column's name and type are fixed for its life, they are worth a minute before saving. If one turns out wrong, the way out is a new column beside it, and the old one stays.
Deleting a table
Delete on the list row removes the table and every row in it, permanently. A table cannot be deleted while a draft or published flow still references it by name, so remove or repoint the Data Table nodes that use it first. If only older project versions reference the table, the delete is allowed but asks you to confirm.
Naming rules and creation limits
These apply while you are defining a table. The tenant-wide ceilings, including tables per tenant, columns per table, rows and storage, are on Data Tables.
| Item | Value |
|---|---|
| Table name | 3 to 64 characters, must start with a letter, then letters, numbers and underscores, unique per tenant |
| Column name | Up to 63 characters, same pattern, unique within the table |
| Reserved column names | Id, DateCreated, DateModified |
| Description, table and column | Up to 500 characters |
| CSV upload | .csv only, maximum 20 MB |
| Data Retention period | 1 to 90 days, off unless you turn it on, 30 days when you do |
