Records, views and CSV import

Browse and edit records in a grid, kanban board, calendar or map view, and import a batch of records straight from a CSV file.

Last updated

Once an entity has fields, its records are the rows of data you store in it. The Anythink dashboard gives every entity a records page with five views of the same data: a grid, a kanban board, a calendar, a map and charts. You can add, edit, lock and delete records from it, and load a batch of new ones from a CSV file.

The examples on this page use a tasks entity with these fields:

Field Type Notes
title Small text Required, and the entity's name field
status Small text, select display Choices To do (todo), In progress (doing) and Done (done)
due_on Date
location Geo
estimate Integer

To build an entity like it, see Model your data.

Open an entity's records#

Each entity opens at /org/{project_id}/entities/{entity}. The usual way in is a link in the dashboard's sidebar menu.

In the Anythink dashboard

  1. Select the entity in the sidebar. If it isn't there, tick Add to Menu when you create an entity, or add it afterwards as described in Menu configuration.
  2. The records open in the grid view, with one column per field and 25 records per page.

The toolbar above the records holds the view switcher, the Instant Edit switch (grid only), a delete button, Import and an Add button named after the entity, such as Add Task. Delete and Add appear only if your role has the matching permission on the entity, and Import appears for administrators. Charts view has none of them.

In the grid you can:

To do this Do this
Sort Select a column heading. Select it again to reverse the order. The grid sorts by one column at a time, and sorting happens in the database, so it covers every record and not only the page you can see.
Filter Open a column's menu (the icon at the right of its heading) and set a filter. The operators are equals, not equal, contains, not contains, starts with, ends with, greater than and less than, and for some columns a list of values. Filters on different columns combine with AND, and they run in the database.
Choose columns Use the Select Fields picker above the grid. It lists the entity's fields, and the fields of related entities as paths such as customer.name.
Reorder, resize and pin columns Drag a heading to move a column, drag its edge to resize it, or pin it from the column menu.
Page Use the controls at the top right. Items per page offers 25, 50, 100, 150, 200 and 250.
Open a record Select a row. The external-link icon at the end of a row opens the record in a new tab.

Relationship columns show the related record's name, or a count such as 3 items for one-to-many and many-to-many fields. File columns show a count such as 2 files. Select-field values are shown as stored.

The grid remembers your layout, but only in this browser. Your choice of view, the fields you picked, a kanban field, and each column's order, width, visibility and pinning are saved in the browser's local storage, per project and entity. Another browser, another device or another person starts from the defaults, and clearing your browser data resets them. Sorting, filters and the page you're on aren't saved. They reset when you leave the page.

With the CLI

bash
anythink data list tasks --limit 10

Filter, page and choose output with options:

bash
anythink data list tasks --filter 'status=todo&estimate=GTE:2' --limit 5
anythink data list tasks --filter '{"status":"todo"}' --page 2
anythink data list tasks --json
anythink data get tasks 4

--filter takes field=value pairs or a JSON object, with the operators in the REST API reference. Sorting and choosing fields need the API itself, through anythink fetch:

bash
anythink fetch "/entities/tasks/items?sortBy=estimate&sortDirection=desc&pageSize=3&fields=title,estimate"

With an AI assistant (MCP)

text
Show me the five tasks with the biggest estimates, with their title, status and due date.

The assistant uses the cli tool to run data list tasks, or fetch with sortBy and sortDirection when it needs ordering. Connect an AI assistant sets up the MCP server.

Switch views#

The view switcher is the row of icons at the top left of the records page. Hover an icon for its name: Grid View, Kanban View, Map View, Calendar View and Charts View. The view you pick is remembered for that entity in this browser.

View Needs Set up
Grid Nothing Works for every entity
Kanban A select field Choose the field from the Status Field menu
Calendar A date or timestamp field Chosen automatically from your field names
Map A geo value in each record you want to see, and a Google Maps key Add the key in Settings › Organisation Settings
Charts Nothing See Dashboards and charts

In the Anythink dashboard

Kanban. A kanban board shows one column per choice of a select field, with a card for each record.

  1. Select the Kanban View icon.
  2. Open the Status Field menu above the board and pick the field. It lists every field with the select display type. The first select field is used until you choose.
  3. Drag a card to another column to change its value. The dashboard updates the record straight away.

Each card shows the record's name field as its title, then its other non-empty values. Selecting a card opens the record. A record whose value isn't one of the field's choices has no column, so it doesn't appear. A field that holds several choices (Multiple) doesn't match a single column either. The board loads up to 1,000 records.

Calendar. A calendar places each record on a date.

  1. Select the Calendar View icon.
  2. Switch between Month, Week, Day and Agenda with the buttons above the calendar.
  3. Select an event to open its record.

You can't choose the date field. The calendar considers date and timestamp fields, and any field whose name contains date, time, start or end. It starts each event at the first field whose name contains start or is exactly date, or else the first candidate. It ends the event at the first field whose name contains end or is exactly due_date. With no separate end field, an event lasts an hour, and never less than 30 minutes. It titles the event with a field called title or name, or the id if there is neither. Records with no start value are left off. Name your fields start_date and end_date, or starts_at and ends_at, if you want control. It loads up to 1,000 records, and ignores any filter you set in the grid. If the entity has no usable field, the view says it doesn't have date fields suitable for calendar view.

Map. A map places each record at its location.

  1. Add a Geo field to the entity, and fill it in on your records. A location is a latitude and longitude, such as [51.5074, -0.1278].
  2. Go to Settings › Organisation Settings, enter your key in Google Maps Key and select Save Changes. Without a key, the map view shows Google Maps API Key Required and a link to the settings page.
  3. Select the Map View icon. Each record with a location gets a marker, and a row of cards below the map shows the record's values. Select a marker or a card to open the record.

The map shows the records on the grid's current page. If you have more than 25 records, switch to the grid first and choose a larger Items per page, then switch to the map. It finds the location in the first field whose value looks like a latitude and longitude, and titles each marker with a field called name or title.

Charts. Charts view builds charts from the entity's data. See Dashboards and charts.

With the CLI

Views are part of the dashboard, so the CLI has no view command. What a view needs is just fields, and the CLI creates those:

bash
anythink fields add tasks status --type varchar --display select --options "To do=todo,In progress=doing,Done=done"
anythink fields add tasks due_on --type date
anythink fields add tasks location --type geo --display geo

Check what the dashboard will find:

bash
anythink fields list tasks

A geo value is plain text, so you can set it from the CLI:

bash
anythink data create tasks --data '{"title":"Site visit","status":"todo","due_on":"2026-10-06","location":"[51.5074, -0.1278]"}'

Moving a kanban card is an update to the select field, which you can do directly:

bash
anythink data update tasks 4 --data '{"status":"doing"}'

With an AI assistant (MCP)

text
Add a status select field to tasks with the choices To do, In progress and Done, and a due_on date field. Then create a task called Site visit due on 6 October.

The assistant runs fields add and data create through the cli tool. Open the entity in the Anythink dashboard and switch to Kanban View or Calendar View to see the result.

Create, edit and delete records#

In the Anythink dashboard

Create.

  1. Select Add followed by the entity's name, such as Add Task.
  2. Fill in the form. A field marked required must have a value, or the dashboard shows This field is required and won't save. Integer fields must fit a 32-bit integer.
  3. Select Create followed by the entity's name, such as Create Task. You return to the grid.

Edit one record.

  1. Open the record. Its page is titled with the entity's name and Details, and has Details and Workflows tabs.
  2. Select Edit, change the fields and select Save. Cancel discards your changes. A field set as immutable can be filled in when you create a record, but not changed afterwards.
  3. To change one field without opening the whole form, select the pencil icon beside it, change the value and confirm.

Edit in the grid. Turn on Instant Edit above the grid, then select a cell and type. The change saves when you leave the cell, and a message confirms it.

Field Cell editor
Text and number fields Text or number box. Integers accept up to 2,147,483,647, and decimals up to two places.
Select A drop-down of the choices.
Boolean A checkbox.
Date and timestamp A date picker, with a time for timestamps.
Large text and rich text A larger editor, up to 2,000 characters.
JSON A JSON editor.
Relationship, file, multi-select, id, created_at, updated_at Not editable in the grid. Use the record's page.

While Instant Edit is on, selecting a cell edits it instead of opening the record, and the row checkboxes are hidden. Turn it off to open records or delete them.

Lock a record. On the record's page, select Lock Record. A locked record shows Unlock Record, and the Edit button disappears. Nobody can change or delete a locked record, from the dashboard or the API, until you unlock it. Locking needs update permission on the entity.

Delete. There's no delete button on a record's page. Use the grid.

  1. Tick the checkbox at the start of one or more rows. The checkbox at the top of the column selects the whole page.
  2. Select the red delete button in the toolbar, and confirm Delete. The dialog says it can't be undone.

Deleting is permanent and covers the selected rows only. Locked records stay in place when you delete several at once, so unlock them first. If the entity has a relationship with a deletion rule, the rule decides what happens to related records. See Connect entities with relationships. The grid is the only place with bulk actions, and delete is the only one. There's no bulk edit.

With the CLI

bash
anythink data create tasks --data '{"title":"Write brief","status":"todo","estimate":3}'
anythink data update tasks 4 --data '{"status":"done"}'
anythink data delete tasks 4 --yes

update changes only the fields you send. Lock or unlock a record, and delete several at once, with anythink fetch:

bash
anythink fetch "/entities/tasks/items/4/set-lock-status?locked=true" --method POST
anythink fetch "/entities/tasks/items/delete-many" --method POST --body '[5,6]'

A locked record rejects an update or a delete with Record is locked - no changes can be made. delete-many leaves locked records in place.

With an AI assistant (MCP)

text
Create a task called Write brief with estimate 3, then mark it done, then lock it.

The assistant runs data create, data update and the lock endpoint through the cli tool. It asks you before deleting anything.

Import records from a CSV file#

An import reads a CSV file you upload and creates one record for each row. It runs in the background, so a large file doesn't hold up the dashboard.

Prepare the file first:

  • The first row holds the column headings. Each other row is one record.
  • Put each record on one line. A line break inside a quoted value isn't supported.
  • Quote a value that contains a comma, for example "Draft, outline".
  • Write each value as the field stores it: whole numbers for integer fields, yyyy-MM-dd for dates, and a select field's stored value (todo) rather than its label (To do).
text
Task,State,Due,Points
"Draft, outline",todo,2026-10-12,2
Publish page,doing,2026-10-14,4
Send newsletter,done,2026-10-15,1

You map each column to a field, so the headings don't have to match the field names.

In the Anythink dashboard

  1. Open the entity's records and select Import. Importing is available to administrators.
  2. The dialog has three tabs: History, Templates and New Import. Open New Import.
  3. Drop a .csv file onto the upload area, or choose one. The limit is 50 MB. The dashboard uploads it to your project's files, in a folder named Imports, and reads the headings.
  4. Under Apply Saved Template, keep Custom mapping, or pick a template you saved earlier.
  5. Select Auto-Match to pair headings with fields. It matches a heading to a field's name or label, ignoring case, spaces and punctuation. Fix any others with the menu beside each field, and choose -- Ignore / Skip -- to leave a field empty. System fields and one-to-many and many-to-many relationship fields aren't offered.
  6. To reuse the mapping, switch on Save these mappings as a template and name it.
  7. Select Run Import.

The dialog needs at least one mapped field, and the dashboard requires a mapping for every field the entity marks as required. It tells you which are missing: Required fields missing mapping.

The import then appears in History, which updates every few seconds while it runs.

Status Meaning
Pending Waiting to start.
Processing Rows are being created.
Completed The import finished. Some rows may have failed: check the count.
Failed Nothing was imported. Every row failed, or the file couldn't be read.

Progress shows rows created out of the total, with a failed count in red, such as (2 failed). Select View Logs for the log.

What happens to a bad row. Rows are created in batches of 100. A row the database rejects, for example because it repeats a value in a Unique field, is skipped, and the rows around it are still imported. The log gives a count for each batch with failures, such as Batch 1: 1 succeeded, 2 failed., but not the reason for each row. To find out why, compare the skipped rows with the entity's constraints. A file that is empty or has no heading row Fails with an error that says so.

Start again from Change File if you picked the wrong file. Each import creates new records. It never updates or merges with existing ones, so importing the same file twice creates the rows twice.

The Templates tab lists your saved mappings for the entity, and you can delete them there.

With the CLI

The CLI has no import command, but an import is two steps you can run with files and fetch: upload the file, then start a job.

bash
anythink files upload tasks.csv
text
✓ File uploaded: tasks.csv
  ID: 4226

Start the job with the file's ID. mapping_json is a JSON string that maps each CSV heading to a field name:

bash
anythink fetch /imports/jobs --method POST --body '{
  "entity_name": "tasks",
  "file_id": 4226,
  "mapping_json": "{\"Task\":\"title\",\"State\":\"status\",\"Due\":\"due_on\",\"Points\":\"estimate\"}"
}'

The response carries the job's id and a status of Pending. Check progress with that ID:

bash
anythink fetch /imports/jobs/2
json
{
  "status": "Completed",
  "total_records": 3,
  "processed_records": 3,
  "failed_records": 0,
  "error_message": null,
  "log": "Successfully parsed CSV. Total rows to import: 3\nImport complete. Final results: 3 succeeded, 0 failed.\n"
}

To reuse a mapping, save it once and refer to it by ID:

bash
anythink fetch /imports/mappings --method POST --body '{
  "name": "Tasks from the planner",
  "entity_name": "tasks",
  "mapping_json": "{\"Task\":\"title\",\"State\":\"status\"}"
}'
anythink fetch /imports/jobs --method POST --body '{"entity_name":"tasks","file_id":4226,"import_mapping_id":1}'

A mapping's entity must match the job's entity. GET /imports/jobs lists your jobs and GET /imports/mappings your mappings. Map every field the entity requires, as the dashboard does.

If you already have the records as JSON, you don't need a CSV file. POST /entities/{entity}/items/import takes an array of records. See REST API reference.

With an AI assistant (MCP)

text
Upload tasks.csv, then import it into tasks, mapping Task to title, State to status, Due to due_on and Points to estimate. Tell me when it finishes and how many rows failed.

The assistant runs files upload, starts the job with fetch /imports/jobs and polls fetch /imports/jobs/{id} through the cli tool until the status is Completed or Failed.

Export records#

The dashboard has no export button. To take your records out, read them through the CLI or the API.

In the Anythink dashboard

There is no export in the records page. Use the CLI or API route below.

With the CLI

--all with --json walks every page and prints one JSON object per page. Pair it with --limit 1000, the largest page the API allows:

bash
anythink data list tasks --json --all --limit 1000 > tasks.json

Each page is a separate JSON object with page, limit, total_count, has_next_page and items. Convert it to CSV with whichever tool you use.

With an AI assistant (MCP)

text
Export every task as a CSV file, with title, status, due date and estimate.

The assistant reads all the pages with data list tasks --json --all and writes the CSV itself.

Record details#

A record's page has a Details tab, a Workflows tab, and for entities with row-level security, a Row-Level Security tab. The tab names are on the page, and you can open one directly with ?tab=workflows on the address.

Details shows every field. Relationship fields show the related records, and selecting one opens its details in a panel. File fields show the attached files. Fields are read-only until you select Edit or a field's pencil icon, and read-only for everyone without update permission on the entity.

Row-Level Security appears for project administrators when the entity has row-level security turned on. It lists the users, and with group access enabled the groups, who can see this record. See Groups and row-level security.

Run a workflow on a record#

The Workflows tab lists every enabled workflow whose manual trigger includes this entity, with its description, triggers and status.

In the Anythink dashboard

  1. Open the record and select the Workflows tab.
  2. Select the play button on the workflow's row.
  3. Confirm Trigger.

The workflow starts with the record's id and the entity name. See Triggers and scheduling for how a manual trigger is set up and what the workflow receives, and Workflow monitoring to follow the run. If the tab says No workflows found, no enabled workflow has a manual trigger for this entity.

With the CLI

bash
anythink workflows trigger 42 --entity tasks --entity-id 4

The workflow starts with 4 as its trigger.id. The workflow's ID shows on its page in the dashboard. See Triggers and scheduling for the options.

With an AI assistant (MCP)

text
Run workflow 42 for task 4.

The assistant runs workflows trigger 42 through the cli tool.

Limits#

Limit Value
Records per grid page 25, 50, 100, 150, 200 or 250. The API itself allows 1 to 1000 per page.
Kanban and calendar Load up to 1,000 records.
Map Shows the records on the grid's current page.
Sort One column at a time.
Bulk actions Delete only, from the grid. Locked records are skipped.
Saved layout Stored in the browser, not on your account.
CSV file size 50 MB in the dashboard.
CSV format Plain text, comma-separated, one record per line, with a heading row. Quote values that contain commas.
Import batches 100 rows at a time.
Import Creates records only. It doesn't update existing ones.
Import mapping Not available for one-to-many and many-to-many fields, or for system fields.
Locked records Can't be changed or deleted until unlocked.
Export None in the dashboard. Use anythink data list --json --all.

Next steps#