Tables allow you to create and manage custom data tables directly within Sim. Store, query, and manipulate structured data within your workflows without needing external database integrations.
Why Use Tables?
No external setup : Create tables instantly without configuring external databases
Workflow-native : Data persists across workflow executions and is accessible from any workflow in your workspace
Flexible schema : Define columns with types (string, number, boolean, date, json) and constraints (required, unique)
Powerful querying : Filter, sort, and paginate data using MongoDB-style operators
Agent-friendly : Tables can be used as tools by AI agents for dynamic data storage and retrieval
Key Features:
Create tables with custom schemas
Insert, update, upsert, and delete rows
Query with filters and sorting
Batch operations for bulk inserts
Bulk updates and deletes by filter
Up to 10,000 rows per table, 100 tables per workspace
Tables are created from the Tables section in the sidebar. Each table requires:
Name : Alphanumeric with underscores (e.g., customer_leads)
Description : Optional description of the table's purpose
Schema : Define columns with name, type, and optional constraints
Type Description Example Values stringText data "John Doe", "active"numberNumeric data 42, 99.99booleanTrue/false values true, falsedateDate/time values "2024-01-15T10:30:00Z"jsonComplex nested data {"address": {"city": "NYC"}}
Required : Column must have a value (cannot be null)
Unique : Values must be unique across all rows (enables upsert matching)
Create and manage custom data tables. Store, query, and manipulate structured data within workflows.
Insert a new row into a table. IMPORTANT: You must use the
Parameter Type Required Description tableIdstring Yes Table ID dataobject Yes Row data as JSON object
Parameter Type Description successboolean Whether row was inserted rowjson Inserted row data messagestring Status message
Parameter Type Required Description tableIdstring Yes Table ID rowsarray Yes Array of row data objects (max ${TABLE_LIMITS.MAX_BATCH_INSERT_SIZE} rows)
Parameter Type Description successboolean Whether rows were inserted rowsarray Inserted rows data insertedCountnumber Number of rows inserted messagestring Status message
Insert or update a row based on unique column constraints. If a row with matching unique field exists, update it; otherwise insert a new row. IMPORTANT: You must use the
Parameter Type Required Description tableIdstring Yes Table ID dataobject Yes Row data to insert or update
Parameter Type Description successboolean Whether row was upserted rowjson Upserted row data operationstring Operation performed: insert or update messagestring Status message
Update an existing row in a table. Supports partial updates - only include the fields you want to change. IMPORTANT: You must use the
Parameter Type Required Description tableIdstring Yes Table ID rowIdstring Yes Row ID to update dataobject Yes Updated row data
Parameter Type Description successboolean Whether row was updated rowjson Updated row data messagestring Status message
Update multiple rows that match filter criteria. Data is merged with existing row data.
Parameter Type Required Description tableIdstring Yes Table ID filterobject Yes Filter criteria using operators like $eq, $ne, $gt, $lt, $contains, $ncontains, $startsWith, $endsWith, $in, $nin, $empty, etc. dataobject Yes Fields to update (merged with existing data) limitnumber No Maximum number of rows to update (default: no limit, max: ${TABLE_LIMITS.MAX_BULK_OPERATION_SIZE})
Parameter Type Description successboolean Whether rows were updated updatedCountnumber Number of rows updated updatedRowIdsarray IDs of updated rows messagestring Status message
Delete a row from a table
Parameter Type Required Description tableIdstring Yes Table ID rowIdstring Yes Row ID to delete
Parameter Type Description successboolean Whether row was deleted deletedCountnumber Number of rows deleted messagestring Status message
Delete multiple rows that match filter criteria. Use with caution - supports optional limit for safety.
Parameter Type Required Description tableIdstring Yes Table ID filterobject Yes Filter criteria using operators like $eq, $ne, $gt, $lt, $contains, $ncontains, $startsWith, $endsWith, $in, $nin, $empty, etc. limitnumber No Maximum number of rows to delete (default: no limit, max: ${TABLE_LIMITS.MAX_BULK_OPERATION_SIZE})
Parameter Type Description successboolean Whether rows were deleted deletedCountnumber Number of rows deleted deletedRowIdsarray IDs of deleted rows messagestring Status message
Query rows from a table with filtering, sorting, and pagination
Parameter Type Required Description tableIdstring Yes Table ID filterobject No Filter conditions (MongoDB-style operators: $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $contains, $ncontains, $startsWith, $endsWith, $empty) sortobject No Sort order as {field: "asc"|"desc"} limitnumber No Maximum rows to return (default: ${TABLE_LIMITS.DEFAULT_QUERY_LIMIT}, max: ${TABLE_LIMITS.MAX_QUERY_LIMIT}) offsetnumber No Number of rows to skip (default: 0)
Parameter Type Description successboolean Whether query succeeded rowsarray Query result rows rowCountnumber Number of rows returned totalCountnumber Total rows matching filter limitnumber Limit used in query offsetnumber Offset used in query
Get a single row by ID
Parameter Type Required Description tableIdstring Yes Table ID rowIdstring Yes Row ID to retrieve
Parameter Type Description successboolean Whether row was retrieved rowjson Row data messagestring Status message
Get the schema configuration of a table
Parameter Type Required Description tableIdstring Yes Table ID
Parameter Type Description successboolean Whether schema was retrieved namestring Table name columnsarray Column definitions messagestring Status message
Filters use MongoDB-style operators for flexible querying:
Operator Description Example $eqEquals {"status": {"$eq": "active"}} or {"status": "active"}$neNot equals {"status": {"$ne": "deleted"}}$gtGreater than {"age": {"$gt": 18}}$gteGreater than or equal {"score": {"$gte": 80}}$ltLess than {"price": {"$lt": 100}}$lteLess than or equal {"quantity": {"$lte": 10}}$inIn array {"status": {"$in": ["active", "pending"]}}$ninNot in array {"type": {"$nin": ["spam", "blocked"]}}$containsString contains (case-insensitive) {"email": {"$contains": "@gmail.com"}}$ncontainsDoes not contain (case-insensitive; matches empty cells) {"email": {"$ncontains": "@spam.com"}}$startsWithStarts with (case-insensitive) {"name": {"$startsWith": "Dr."}}$endsWithEnds with (case-insensitive) {"file": {"$endsWith": ".pdf"}}$emptyCell is empty (true) or non-empty (false) {"phone": {"$empty": true}}
Multiple field conditions are combined with AND logic:
{
"status" : "active" ,
"age" : { "$gte" : 18 }
}
Use $or for OR logic:
{
"$or" : [
{ "status" : "active" },
{ "status" : "pending" }
]
}
Specify sort order with column names and direction:
Multi-column sorting:
{
"priority" : "desc" ,
"name" : "asc"
}
Every row automatically includes:
Column Type Description idstring Unique row identifier createdAtdate When the row was created updatedAtdate When the row was last modified
These can be used in filters and sorting.
Resource Limit Tables per workspace 100 Rows per table 10,000 Columns per table 50 Max row size 100KB String value length 10,000 characters Query limit 1,000 rows Batch insert size 1,000 rows Bulk update/delete 1,000 rows
Category: blocks
Type: table
Tables are scoped to workspaces and accessible from any workflow within that workspace
Data persists across workflow executions
Use unique constraints to enable upsert functionality
The visual filter/sort builder provides an easy way to construct queries without writing JSON