Reference · Tools
Baserow
Perform CRUD operations on rows in Baserow database tables
The Baserow node lets you create, read, update, and delete rows in any Baserow database table directly from a BusyBot workflow. Use it to sync form submissions into a Baserow table, pull filtered and sorted records for downstream processing, or keep a self-hosted database in step with other tools. Authentication is handled via Baserow's JWT flow using your username and password.
- Node type
- Action
- Parameters
- 14
- Outputs
- Output, Error
- Credentials
- Baserow API
Baserow
Perform CRUD operations on Baserow database rows
Overview
Baserow is an open-source online database tool and Airtable alternative. This tool interacts with the Baserow REST API to create, read, update, and delete rows in database tables. It supports filtering, sorting, searching, and pagination when listing rows. Baserow uses JWT authentication obtained via username/password exchange. Field names in API responses are mapped between internal field IDs (field_N) and human-readable names automatically.
Category: Data & Storage
Tool Name: baserow
Version: 1
Appearance: Icon: si-baserow | Color: #1F8FFF
Node Type
Action — processes input items and produces output
Input / Output
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool requires Baserow API credentials. See the Credentials Guide for setup instructions.
Resources
| Resource | Value |
|---|---|
| Row | row |
Operations
| Operation | Value | Description |
|---|---|---|
| Create | create | Create a row |
| Delete | delete | Delete a row |
| Get | get | Retrieve a row |
| Get Many | getAll | Retrieve many rows |
| Update | update | Update a row |
Parameters
Row: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Data to Send | options | No | defineBelow | Whether to insert the input data this node receives in the new row. |
Options: autoMapInputData (use when node input properties match destination column names), defineBelow (set the value for each destination column) | ||||
| Inputs to Ignore | string | No | — | List of input properties to avoid sending, separated by commas. Leave empty to send all properties. (shown when Data to Send is autoMapInputData) |
| Fields to Send | fixedCollection | No | {} | Explicit field ID and value pairs to send. (shown when Data to Send is defineBelow) |
| — Field ID | string | No | — | The numeric field ID. Find via GET /api/database/fields/table/{tableId}/. Example: for field_123, enter “123”. |
| — Field Value | string | No | — | The value to set for this field. |
Row: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Row ID | string | Yes | — | ID of the row to delete. |
Row: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Row ID | string | Yes | — | ID of the row to return. |
Row: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 50 | Max number of results to return. Accepts 1–100. (shown when Return All is false) |
| Options | collection | No | {} | Additional options for filtering, sorting, and searching. |
| — Filters | fixedCollection | No | {} | Filter rows based on comparison operators. |
| — — Field | string | No | — | Field ID (numeric) to filter on. Find via GET /api/database/fields/table/{tableId}/. |
| — — Filter Operator | options | No | equal | Operator to compare field and value with. |
Options: contains, contains_not, date_after (field after this date, YYYY-MM-DD), date_before, date_equal, date_equals_month, date_equals_today, date_equals_year, date_not_equal, equal, filename_contains, higher_than, empty (field is empty), not_empty, boolean (boolean field is true), link_row_has_not, link_row_has, lower_than, not_equal, single_select_equal, single_select_not_equal | ||||
| — — Value | string | No | — | Value to compare to. |
| — Filter Type | options | No | AND | How to combine multiple filters. Only applies when two or more filters are provided. Defaults to AND. |
Options: AND (rows must match all provided filters), OR (rows only have to match one of the filters) | ||||
| — Search Term | string | No | — | Text to match (can be in any column). |
| — Sorting | fixedCollection | No | {} | Set the sort order of the result rows. |
| — — Field | string | No | — | Field ID (numeric) to sort by. Find via GET /api/database/fields/table/{tableId}/. |
| — — Direction | options | No | — | Sort direction, either ascending or descending. |
Options: empty string (ASC — ascending), - (DESC — descending) |
Row: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Row ID | string | Yes | — | ID of the row to update. |
| Data to Send | options | No | defineBelow | Whether to insert the input data this node receives in the new row. |
Options: autoMapInputData (use when node input properties match destination column names), defineBelow (set the value for each destination column) | ||||
| Inputs to Ignore | string | No | — | List of input properties to avoid sending, separated by commas. Leave empty to send all properties. (shown when Data to Send is autoMapInputData) |
| Fields to Send | fixedCollection | No | {} | Explicit field ID and value pairs to send. (shown when Data to Send is defineBelow) |
| — Field ID | string | No | — | The numeric field ID. Find via GET /api/database/fields/table/{tableId}/. Example: for field_123, enter “123”. |
| — Field Value | string | No | — | The value to set for this field. |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Database ID | string | Yes | — | ID of the Baserow database. Find by calling GET /api/applications/ and filtering by type “database”. |
| Table ID | string | Yes | — | ID of the table within the database. Find by calling GET /api/database/tables/database/{databaseId}/. |
| Max Concurrency | number | No | 10 | Maximum number of items to process concurrently. Accepts 1–100. |
Output Data
Unlike most connectors, this node replaces the item JSON rather than merging into it — the output item carries the Baserow row (or the delete confirmation) and nothing else. Binary data on the input item is forwarded.
Baserow stores columns internally as field_123. On the way out, those keys are translated back to your human-readable column names, so a row arrives as { "id": 1, "order": "1.00", "Name": "…", "Notes": "…" }. The same translation runs in reverse for Data to Send = autoMapInputData, which is why auto-mapping works with plain column names; Fields to Send takes the numeric field ID instead.
| Operation | Output |
|---|---|
create | One item per input item, carrying the created row including its new id. |
get | One item per input item, carrying the requested row. |
update | One item per input item, carrying the row as it stands after the patch. |
delete | One item per input item, carrying success: true. |
getAll | Fans out — one output item per row returned. A query that matches nothing emits one item, which is the input item passed through unchanged. |
Reference columns downstream by their Baserow name, e.g. {{ $json.Name }} or {{ $json.id }}.
Usage Examples
- Create a new row in a Baserow table
- Retrieve all rows from a Baserow table with filters
- Update a row by ID in Baserow
- Delete a row from a Baserow table
- Search rows across all columns in a Baserow table
Example Configuration
Create a row from the incoming item’s own properties:
{
"type": "baserow",
"parameters": {
"resource": "row",
"operation": "create",
"databaseId": "12345",
"tableId": "67890",
"dataToSend": "autoMapInputData",
"inputsToIgnore": "id,_error"
}
}
Create a row with explicit field IDs:
{
"type": "baserow",
"parameters": {
"resource": "row",
"operation": "create",
"databaseId": "12345",
"tableId": "67890",
"dataToSend": "defineBelow",
"fieldsUi": {
"fieldValues": [
{ "fieldId": "123", "fieldValue": "{{ $json.name }}" },
{ "fieldId": "124", "fieldValue": "{{ $json.email }}" },
{ "fieldId": "125", "fieldValue": "active" }
]
}
}
}
Fetch one row by ID:
{
"type": "baserow",
"parameters": {
"resource": "row",
"operation": "get",
"databaseId": "12345",
"tableId": "67890",
"rowId": "{{ $json.rowId }}"
}
}
List rows matching two filters, newest first:
{
"type": "baserow",
"parameters": {
"resource": "row",
"operation": "getAll",
"databaseId": "12345",
"tableId": "67890",
"returnAll": false,
"limit": 50,
"additionalOptions": {
"filterType": "AND",
"filters": {
"fields": [
{ "field": "125", "operator": "equal", "value": "active" },
{ "field": "126", "operator": "date_after", "value": "2026-01-01" }
]
},
"order": {
"fields": [
{ "field": "126", "direction": "-" }
]
}
}
}
}
Search every column for a term and return the whole table:
{
"type": "baserow",
"parameters": {
"resource": "row",
"operation": "getAll",
"databaseId": "12345",
"tableId": "67890",
"returnAll": true,
"additionalOptions": {
"search": "{{ $json.query }}"
}
}
}
Update selected columns on a row:
{
"type": "baserow",
"parameters": {
"resource": "row",
"operation": "update",
"databaseId": "12345",
"tableId": "67890",
"rowId": "{{ $json.id }}",
"dataToSend": "defineBelow",
"fieldsUi": {
"fieldValues": [
{ "fieldId": "125", "fieldValue": "archived" }
]
}
}
}
Delete a row:
{
"type": "baserow",
"parameters": {
"resource": "row",
"operation": "delete",
"databaseId": "12345",
"tableId": "67890",
"rowId": "{{ $json.id }}"
}
}
Error Handling
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes failed items to Error output port |
Tips
Perform CRUD operations on rows in Baserow open-source database tables with filtering, sorting, and pagination support.
Frequently asked questions
How does this node authenticate with Baserow?
It uses the Baserow API credential type (baserowApi), which exchanges your Baserow username and password for a JWT token automatically. You don't supply a static API key — instead, configure a baserowApi credential with your account details and the node handles the token exchange before each request.
Field names in my Baserow table look like 'field_123' in the response — why?
Baserow's REST API internally identifies columns by numeric IDs (field_N). The Baserow node maps these back to their human-readable names automatically, so by the time data reaches the next step in your workflow you should see your actual column names rather than the raw IDs.
Can I filter, sort, or paginate when listing rows?
Yes. The List Rows operation supports filtering, sorting, searching, and pagination. This means you can fetch only the records matching specific criteria rather than pulling an entire table, which is important for large datasets or when you only need a targeted subset of rows.
What happens if the API call fails — does the workflow stop?
The node has two separate outputs: Output and Error. A failed API call routes to the Error output rather than stopping the workflow outright, so you can attach a branch that handles errors — logging them, sending an alert, or retrying — without the whole automation breaking.
Is this node suitable for a self-hosted Baserow instance, or only Baserow Cloud?
Because authentication goes through the Baserow REST API and credentials include your own endpoint configuration, the node works with both self-hosted and cloud-hosted Baserow instances. You point the baserowApi credential at whichever URL your Baserow is running on.
Build with the Baserow node
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Baserow API credentials first.
Open BusyBotLast updated . Spotted something wrong? Tell us.