# Business data format

> How to prepare revenue, orders, accounts and other structured files so the agent can query and join them.

Business data is any file of rows and columns that isn't customer text: orders, renewals, accounts, locations, usage, survey scores. It goes in under **Data Sources > Structured data**, by file upload, and is queryable within about a minute. It is never enriched. File upload is the only way in today; an API for business data is on the roadmap.

## Rules

- **A header row** with clear column names. Each name becomes a column the agent can query.
- **One grain per file.** Decide what one row is (one order, one account per month, one store) and keep to it. Put the grain in the file name, for example `orders_by_order_id.csv` or `accounts_by_month.csv`, so the agent knows how to count.
- **A key you can join on.** Include the id that also appears in your conversation data: an account id, customer id, order number or store id. Never a raw email address or phone number; if email is the only shared key, use the same hash of it on both sides. See [Join business data](/data/join-business-data).
- **Dates in one format.** Use `YYYY-MM-DD` (or `YYYY-MM-DD HH:MM:SS`). Dates are stored as text, so a column mixing `1/2/2025` and `2025-01-02` can't be sorted or filtered reliably.
- **Numbers as plain numbers.** No currency symbols, no thousands separators, no scientific notation.
- **No personal data you don't need.** Leave out names, emails, phone numbers and addresses ([PII redaction](/data/pii-redaction)).
- **The file-level rules** from the [conversation format](/data/conversation-format#rules-that-break-uploads) apply here too: UTF-8, no byte order mark, no fully quoted cells, no backslashes in headers.

## The table takes the file's name

Each uploaded file becomes its own table, named after the file. A file called `September 2026 Closed Won.csv` becomes a table the agent queries as `"September 2026 Closed Won"`.

:::caution
Uploading a corrected file under a new name creates a new table, and anything that referred to the old name stops finding it. Keep the name stable for files you replace, and tell the agent the new name when it changes.
:::

To remove a table you no longer want, email support@dimensionlabs.io; see [Re-upload, duplicates and deleting data](/data/upload-a-file#re-upload-duplicates-and-deleting-data).

## Check it first

The [file checker](/data/check-a-file) has a business data mode for these rules: set **File type** to **Business data**. To see how many of your keys match your conversation file before you upload either, check the conversation file first, then use its [join test](/data/check-a-file#test-a-join).

## Template

A small example: [business data template](/templates/business-data-template.csv).
