What Data Sheets is
Data Sheets is FlowFn's built-in tabular data store — spreadsheet-style tables you can read and write from playgrounds, workflows, and agents without standing up an external database. It's a standalone, top-level feature: open Data Sheets from the dashboard sidebar and pick an app to see its databases.
The hierarchy: Database → sheet → column → row
- A Database is the top-level container — a named, team + app scoped grouping. Every database belongs to exactly one app, just like workflows, forms, and playgrounds, and has a name and a slug (unique within the app).
- A sheet is one table inside a database. It has a name, a slug (the identifier the SDK and workflows use), typed columns, and rows.
- A column has a
key(the field name your code reads), a displayname, and a type (text, number, boolean, date, JSON, select, and more — see Managing sheets, columns, and rows). - A row is a record. Every row carries a stable internal
_idhandle that reads, updates, and deletes use to address it.
How the rest of FlowFn uses it
- Playgrounds attach a database from the same app on their Data tab (the playground's
linked_database_id) and read or write its sheets throughflowfn.data.*. The playground no longer stores rows itself. See Using Data Sheets from a Playground. - Workflows use the Data Sheet task to read / create / edit / upsert / delete rows. See Data Sheets in workflows.
- Agents can have a sheet attached as a tool, read-only or read-write. See Data Sheets in agents.
Plan gating
Data Sheets is plan-gated: it's available only when your plan sets allow_data_sheets. Plans also cap databases per app (max_databases_per_app), sheets per database (max_data_sheets_per_database), and rows per sheet (max_data_sheet_rows); a value of -1 means unlimited. See Billing & Plans for your tier's numbers.