Overview

What a table is made of, and the few decisions worth getting right before you start filling one.

Columns

A table is a set of named columns, and each row holds one value per column. You choose the columns when you create the table, and you can add or remove them later without disturbing the rows you already have.

Every column has a type, which decides what counts as a valid value and how the column sorts:

Type Holds
Text Anything at all. Names, notes, references.
Number Amounts and counts. Sorts by size, so 3 comes before 20.
Yes or no A flag, such as whether someone has confirmed.
Date A day. Sorts oldest to newest.

A value that does not fit its column is refused rather than stored as something else, so a Number column never quietly ends up holding the word "later". A table can have up to 20 columns.

Two columns come with every table and are kept for you: when a row was first saved, and when it last changed.

You can also pick which columns the rows list shows at a glance, up to five. That choice does double duty: a List step returns those same columns unless it asks for others, since it is answering the same question about what matters on a row.

The key

The key is what makes a row findable. Pick one or more columns to be the key, and that combination identifies a row for the life of the table. An email address makes a good key. So does a store plus an order number.

A key means three things:

  • No two rows can share one. Saving against a key that already exists updates that row instead of adding a second
  • A flow can find a row by it, which is the whole point of looking someone up
  • A flow can remove a row by it
  • Capitalisation and surrounding spaces are ignored when matching, so [email protected] and [email protected] are the same row. Characters that merely look alike are not, so a full-width 500 and a plain 500 stay two different rows

A table without a key still stores rows perfectly well, it just cannot be searched or written to by key from a flow. That is the right choice for a log you only ever add to and read in the dashboard.

Changing the key once rows exist. You can, and existing rows keep their values. What changes is which rows count as the same row from then on, so two rows that were distinct under the old key may now collide. You will be told before anything is applied.

Personal details

Any column can be marked as holding personal details. Its values are encrypted, so they are unreadable to anyone who gets at the underlying data without going through your dashboard.

That protection costs a little reach:

  • An encrypted column cannot be sorted or filtered in the rows list
  • Searching only finds an encrypted value if it is the table's key

The exception for keys is deliberate: it is what lets a conversation look someone up by email, and lets you find their row when they ask you to delete it, without the address being readable in storage.

How big a row can be

One row holds about 8,000 characters in total. That is roughly 1,500 words, or four and a half pages of prose, which is a great deal more than most rows ever hold: a lead with an email, a name, a budget and a timeline uses about 1.5% of it.

It is a budget for the whole row rather than a limit on each column, so you can spend it unevenly. One long note can take nearly all of it, or twenty columns can take about 400 characters each. There is no separate per-column limit to keep track of.

Encrypting a column does not cost you room for ordinary writing. Text compresses before it is encrypted, so a paragraph of prose usually takes less space encrypted than it does in the clear. Something opaque, a token or a long reference, does not compress, and takes about what you would expect.

Naming a column is free. What a row stores is its values, so a column called estimated_delivery_date costs a row exactly what one called d does. Name them for whoever reads them.

A row that will not fit is not saved at all. Nothing is written and nothing is trimmed to make it fit, so a row you already had is left exactly as it was. In a flow the Save step takes its Error branch, which you can answer however suits the conversation. In the dashboard you are told when you save the form.

How much you get

Your plan includes a number of rows across all your tables, and a number of tables:

Plan Rows Tables
Free 2,000 1
Starter 25,000 5
Pro 100,000 20
Business 500,000 Unlimited

This is a limit rather than a meter. Storage never appears on your invoice, and nothing is billed by the row.

If you need more rows, you can buy a capacity pack: Small adds 25,000 and Large adds 100,000. A pack is a one-off purchase rather than a subscription, and it stays with you through a plan change.

Deleting rows gives the space straight back, whether you delete them from the dashboard or a conversation does it. Nothing has to be reclaimed and nothing has to expire first.

As you approach your limit the Tables screen starts telling you where you stand. Once you are at it, existing rows can still be read and updated, but new ones are refused until you free some space or add capacity.

Request a demo
This form is running on UniversalChatbot.