Reference · Tools

Baserow

Perform CRUD operations on rows in Baserow database tables

Action Data & Storage v1

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

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Baserow API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Rowrow

Operations

OperationValueDescription
CreatecreateCreate a row
DeletedeleteDelete a row
GetgetRetrieve a row
Get ManygetAllRetrieve many rows
UpdateupdateUpdate a row

Parameters

Row: Create

ParameterTypeRequiredDefaultDescription
Data to SendoptionsNodefineBelowWhether 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 IgnorestringNoList of input properties to avoid sending, separated by commas. Leave empty to send all properties. (shown when Data to Send is autoMapInputData)
Fields to SendfixedCollectionNo{}Explicit field ID and value pairs to send. (shown when Data to Send is defineBelow)
— Field IDstringNoThe numeric field ID. Find via GET /api/database/fields/table/{tableId}/. Example: for field_123, enter “123”.
— Field ValuestringNoThe value to set for this field.

Row: Delete

ParameterTypeRequiredDefaultDescription
Row IDstringYesID of the row to delete.

Row: Get

ParameterTypeRequiredDefaultDescription
Row IDstringYesID of the row to return.

Row: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. Accepts 1–100. (shown when Return All is false)
OptionscollectionNo{}Additional options for filtering, sorting, and searching.
— FiltersfixedCollectionNo{}Filter rows based on comparison operators.
— — FieldstringNoField ID (numeric) to filter on. Find via GET /api/database/fields/table/{tableId}/.
— — Filter OperatoroptionsNoequalOperator 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
— — ValuestringNoValue to compare to.
— Filter TypeoptionsNoANDHow 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 TermstringNoText to match (can be in any column).
— SortingfixedCollectionNo{}Set the sort order of the result rows.
— — FieldstringNoField ID (numeric) to sort by. Find via GET /api/database/fields/table/{tableId}/.
— — DirectionoptionsNoSort direction, either ascending or descending.
Options: empty string (ASC — ascending), - (DESC — descending)

Row: Update

ParameterTypeRequiredDefaultDescription
Row IDstringYesID of the row to update.
Data to SendoptionsNodefineBelowWhether 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 IgnorestringNoList of input properties to avoid sending, separated by commas. Leave empty to send all properties. (shown when Data to Send is autoMapInputData)
Fields to SendfixedCollectionNo{}Explicit field ID and value pairs to send. (shown when Data to Send is defineBelow)
— Field IDstringNoThe numeric field ID. Find via GET /api/database/fields/table/{tableId}/. Example: for field_123, enter “123”.
— Field ValuestringNoThe value to set for this field.

All Operations

ParameterTypeRequiredDefaultDescription
Database IDstringYesID of the Baserow database. Find by calling GET /api/applications/ and filtering by type “database”.
Table IDstringYesID of the table within the database. Find by calling GET /api/database/tables/database/{databaseId}/.
Max ConcurrencynumberNo10Maximum 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.

OperationOutput
createOne item per input item, carrying the created row including its new id.
getOne item per input item, carrying the requested row.
updateOne item per input item, carrying the row as it stands after the patch.
deleteOne item per input item, carrying success: true.
getAllFans 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

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes 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 BusyBot

Last updated . Spotted something wrong? Tell us.