Data tables
A data table holds reference data that your workflows look up: a vendor list with cost centers, a price list, a project budget. A workflow script reads its rows with ctx.tables, and a workflow condition can check whether a row exists for a field of the document. You fill a table by importing a file or through the API from your own system.
You find the data tables in the settings under Filing › Data tables. For data that stays in another system and is fetched on each call, use a data source instead.
Who has data tables
Section titled “Who has data tables”Data tables are part of the Business and Enterprise plans and of the trial. You need the permission Create and change data tables, their columns, uploads and rows, which the built-in roles Owner and Admin have. Without the plan, the settings don’t show the page.
| Plan | Business | Enterprise | Trial |
|---|---|---|---|
| Tables | 20 | 100 | 20 |
| Rows, in all tables | 100,000 | 1,000,000 | 100,000 |
When your plan ends or shrinks, your tables and rows stay, and published workflows keep looking them up. You can’t create tables or add rows beyond your plan’s quota; Your plan holds no more data tables. or The rows would exceed your plan’s quota. says so.
Create a table
Section titled “Create a table”- Select New table.
- Enter the Label (German) and the Label (English), each at most 100 characters.
- Enter the Key: how scripts name the table, such as
vendors. It starts with a lowercase letter, contains only letters and digits and has at most 40 characters. It can’t be changed later. - Under Columns, give each column a key (by the same rules), its labels and its kind: Text, Number, Amount, Date or Yes/No. Add more with Add column; a table has at most 50 columns.
- Choose the Key column: rows are found and updated by its value, so every row has one, and no two rows have the same. The key column is a text, a number or a date.
- Select Create table.
How values are read. Text is compared exactly, so leading zeros stay: a cost center 0100 is a text, not the number 100. A number may have a decimal point or, without one, a decimal comma (1234,5); thousands separators aren’t accepted. An amount has at most two decimals. A date is 2026-10-23 or 23.10.2026. Yes/No accepts true/false, ja/nein, yes/no, wahr/falsch and 1/0. A text cell holds at most 4,000 characters, and a row at most 64 KB.
The table’s page
Section titled “The table’s page”Open a table from the list. Its page has the tabs Rows, Columns and Imports:
- Rows lists the rows by key. Search rows finds a text in the key or in any value.
- Columns lists the columns. Add column adds one; a column’s kind can’t be changed later, a new column takes its place. Edit labels changes only the labels. Remove deletes a column and its values in every row; the key column can’t be removed.
- Imports records every import from a file: Imported by, When, Rows, Kind and File (SHA-256), the file’s checksum.
Export downloads the table as a CSV file that Excel opens as it is: semicolons between the values, the column keys as the header. A text that starts with =, +, - or @ gets a leading ', so a spreadsheet shows it as text and doesn’t run it as a formula.
Import rows from a file
Section titled “Import rows from a file”- On the table’s page, select Import rows.
- Choose file: an XLSX, CSV or JSON file (an array of objects, or one object per line), up to 20 MB and 100,000 rows. Of a workbook, Acriva reads the first sheet.
- Choose the Kind of import:
- Add and update: new keys are added, existing ones updated. Nothing is deleted, and a column you don’t import keeps its value.
- Replace: all rows are replaced by the file’s rows. If the import fails, the old rows stay.
- Map columns: Acriva suggests for each column of the file the table’s column whose key or label it carries. Choose another one, or Don’t import. The key column must be mapped.
- Preview: the first rows of the file and the errors in it. What the import changes counts the rows that are new, updated, unchanged and, for a replace, deleted.
- In the step Import, select Import … rows with the number of rows. As long as a row has an error, the import is refused: correct the file and upload it again.
The import is recorded on the Imports tab, and running workflows read the new rows from their next step.
Files Acriva reads. The type of a file is decided by its content, not its name. Acriva reads the values Excel saved for formulas and never runs a formula. Old .xls files, binary workbooks (.xlsb) and workbooks with macros (.xlsm) are refused: save them as .xlsx. A CSV file may use a semicolon, a comma or a tab between values, in UTF-8 or in the Windows encoding Excel writes.
The upload itself. The file isn’t stored, only its checksum. The rows read stay 24 hours for the preview and are then deleted. Up to 5 uploads of the workspace may wait for their import. One upload of the workspace is read at a time: while one runs, Acriva asks you to try again in a few seconds.
Delete rows and tables
Section titled “Delete rows and tables”- Delete rows by key (in the table’s menu) deletes up to 1,000 rows at once, by their keys, one per line. The rows are deleted at once and for good, for example to delete a person’s data.
- Delete table deletes the table with all its rows and its imports.
A table or a column that a published workflow or a running instance uses can’t be deleted: A published workflow or a running instance uses this table.
Use a table in a script
Section titled “Use a table in a script”A script reads only the tables its step names as inputs; the script step shows them under Inputs › Data sources and data tables as Data table. Then it looks up a row by its key, or queries rows by their columns:
const vendor = await ctx.tables.lookup('vendors', ctx.document.fields.vendorNumber);if (vendor == null) { ctx.hint('The vendor list has no such vendor. Please allocate by hand.'); return;}ctx.setField('costCenter', vendor.costCenter);
const sameCostCenter = await ctx.tables.query('vendors', { costCenter: '4400' });lookupreturns the row whose key matches, ornull. The key is compared in the column’s form:1.50finds1.5,23.10.2026finds2026-10-23.queryreturns the rows whose columns equal the given values, on up to 3 columns: at most 100 rows, ordered by key.nullfinds empty cells.- A run looks up at most 50 times,
lookupandquerytogether. A table the step doesn’t name, or the 51st lookup, ends the run (table-not-declared,limit-table-lookups), see Limits exceeded.
The designer doesn’t offer a data table as an input yet. A workflow gets one through its file workflow.yaml, where the script step lists it among its inputs:
inputs: - kind: field key: vendorNumber type: text - kind: table key: vendorsCheck a table in a condition
Section titled “Check a table in a condition”A condition can check whether the table has a row whose key is a field of the document, and, optionally, compare one of that row’s columns with fixed values. The designer shows such a condition as Looks up the data table “vendors”; like a table input, it comes through the workflow’s file:
- kind: condition name: knownVendor label: Known vendor? branches: - when: kind: tableLookup table: vendors keyField: vendorNumber column: blocked operator: equalTo constants: ['true'] next: blockedVendor default: approveWithout column, the condition holds when the row exists. When publishing, Acriva checks that the table and the column exist and that the field’s kind fits the key column’s (a text field for a text key, a number or an amount for a number key, a date for a date key). A workflow looks up at most 20 different pairs of table and field. If a table can’t be read at that moment, the condition counts as finding no row; it never fails the step.