Tables
Customer data the agent can read without calling your API. Upload a CSV, name the column that identifies a person, and a verified visitor can ask about their own row.
When to use a table instead of an action
Use a table when the data is small, changes slowly, and you would otherwise be building an endpoint just for this. Use an Action when the data is live, large, or already behind an API you maintain.
| Table | Action |
|---|---|
| A CSV export of subscription tiers | Live order status from your OMS |
| Seat allocations per account | Anything that must be current to the second |
| Anything you would paste into a spreadsheet | Anything with a write side |
Columns and types
Each column has a type — string, number, boolean or date — used for parsing on import and for formatting in the dashboard. Exactly one column is the identity key.
The identity key
The identity key is how a row is matched to a verified customer. It is almost always the email address, because that is what identity signing proves.
Matching is case-insensitive: Ada@Example.com and ada@example.com are the same person. The casing you typed is preserved for display and used in error messages, so a conflict names the value the way you wrote it.
Importing a CSV
The first row must be a header, and its names must match your column names. Import is an upsert on the identity key:
- an identity value not present yet is imported
- one that already exists is updated in place
- a row that cannot be parsed is skipped, and reported back with its line number and the reason
Nothing is silently dropped. The result summary tells you exactly how many of each, so re-uploading a corrected export is safe and repeatable.
email,plan,seats,renews_on,active
ada@example.com,Growth,12,2026-11-04,true
grace@example.com,Scale,80,2027-01-19,true
alan@example.com,Free,1,,falseType parsing on import
| Type | Accepted | Rejected |
|---|---|---|
number | 12, -4, 3.5 | an empty cell in a required column, 'twelve' |
boolean | true / false, yes / no, 1 / 0 | 'maybe' |
date | ISO 8601 — 2026-11-04 | ambiguous formats like 04/11/26 |
string | anything | — |
What the agent can do with a table
Read the verified customer’s own row, and only that row. Tables are read-only to the agent: there is no path by which a conversation edits your data. Changes happen in the dashboard or through a re-import.
An anonymous visitor gets nothing from a table, no matter how the question is phrased — the lookup needs an identity value, and an unverified visitor has none. See Identity & signing.
Practical notes
- Column names become part of how the model talks about the data.
renews_onreads better in an answer thancol_7. - Leave out anything the customer should not see in a support reply. A table is retrieval context, and context is quotable.
- Re-import the whole file rather than diffing it — upsert makes that the cheap, correct option.