<!-- BusyBot node reference — https://busybot.net/tools/nocodb/ -->

> Node: NocoDB (`nocodb`) · Action (binary) · v1
> Category: Data & Storage · Credentials: NocoDB API (`nocoDbApi`)
> Updated: 2026-08-16

# NocoDB

> Read, create, update, and delete NocoDB rows with attachments

## Overview

The NocoDB tool performs CRUD operations on NocoDB table rows. Supports three NocoDB API versions (v1 for pre-0.90.0, v2 for 0.90.0+, v3 for 0.200.0+). Operations include: create rows (bulk, with optional binary attachment upload), get a single row (with optional attachment download), get all rows (with pagination, filtering, sorting, and optional attachment download), update rows (bulk, with optional binary attachment upload), and delete rows (bulk). Binary attachments are uploaded to NocoDB storage and linked as field values. Attachment fields can be downloaded as binary data. Supports both API Token (xc-token) and User Token (xc-auth) authentication.

**Category:** Data & Storage  
**Tool Name:** `nocodb`  
**Version:** 1

**Appearance:** Icon: `lucide-Database` | Color: `#36BFBF`

## Node Type

**Action (Binary)** — handles file/binary data operations

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **NocoDB API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/noco-db-api/) for setup instructions.

### 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

#### Create (`create`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Data to Send | `options` | No | `defineBelow` | How to populate row field values. |
| | | | | Options: `autoMapInputData` (use when node input properties match destination column names), `defineBelow` (set the value for each destination column manually) |
| Inputs to Ignore | `string` | No | — | Comma-separated list of input properties to exclude when using auto-map mode. _(shown when Data to Send is `autoMapInputData`)_ |
| Fields to Send | `json` | No | `[]` | JSON array of field definitions: [{ "fieldName": "Name", "fieldValue": "John" }, { "fieldName": "Photo", "binaryData": true, "binaryProperty": "data" }]. Set binaryData=true to upload a binary property as an attachment. _(shown when Data to Send is `defineBelow`)_ |

#### Delete (`delete`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Row ID | `string` | Yes | — | The value of the row ID field. Supports expressions like {{ $json.id }}. |
| Primary Key Type | `options` | No | `id` | The primary key field to use for identifying rows. |
| | | | | Options: `id` (default auto-increment ID added when the table was created via the UI), `ncRecordId` (select if the table was imported from Airtable), `custom` (enter a custom primary key field name) |
| Custom Primary Key Field | `string` | No | — | Name of the custom primary key field. _(shown when Primary Key Type is `custom`)_ |

#### Get (`get`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Row ID | `string` | Yes | — | The value of the row ID field. Supports expressions like {{ $json.id }}. |
| Download Attachments | `boolean` | No | `false` | Whether to download attachment fields as binary data. |
| Download Fields | `string` | No | — | Comma-separated names of attachment fields to download. Case sensitive. _(shown when Download Attachments is `true`)_ |

#### Get Many (`getAll`)

| 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 rows to return. Accepts 1–100. _(shown when Return All is `false`)_ |
| Download Attachments | `boolean` | No | `false` | Whether to download attachment fields as binary data. |
| Download Fields | `string` | No | — | Comma-separated names of attachment fields to download. Case sensitive. _(shown when Download Attachments is `true`)_ |
| Options | `collection` | No | `{}` | Additional getAll query options. |
| — View ID | `string` | No | — | Filter results to a specific NocoDB view. |
| — Fields | `string` | No | — | Comma-separated column names to include in the response. |
| — Sort | `json` | No | `[]` | JSON array of sort rules: [{ "field": "Name", "direction": "asc" }]. Direction can be "asc" or "desc". |
| — Filter By Formula | `string` | No | — | NocoDB filter formula, e.g. (name,like,example%)~or(name,eq,test). |

#### Update (`update`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Row ID | `string` | Yes | — | The value of the row ID field. Supports expressions like {{ $json.id }}. |
| Primary Key Type | `options` | No | `id` | The primary key field to use for identifying rows. |
| | | | | Options: `id` (default auto-increment ID added when the table was created via the UI), `ncRecordId` (select if the table was imported from Airtable), `custom` (enter a custom primary key field name) |
| Custom Primary Key Field | `string` | No | — | Name of the custom primary key field. _(shown when Primary Key Type is `custom`)_ |
| Data to Send | `options` | No | `defineBelow` | How to populate row field values. |
| | | | | Options: `autoMapInputData` (use when node input properties match destination column names), `defineBelow` (set the value for each destination column manually) |
| Inputs to Ignore | `string` | No | — | Comma-separated list of input properties to exclude when using auto-map mode. _(shown when Data to Send is `autoMapInputData`)_ |
| Fields to Send | `json` | No | `[]` | JSON array of field definitions: [{ "fieldName": "Name", "fieldValue": "John" }, { "fieldName": "Photo", "binaryData": true, "binaryProperty": "data" }]. Set binaryData=true to upload a binary property as an attachment. _(shown when Data to Send is `defineBelow`)_ |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Authentication Type | `options` | No | `apiToken` | How to authenticate with NocoDB. API Token uses xc-token header; User Token uses xc-auth header. |
| | | | | Options: `apiToken` (authenticate with an API token), `userToken` (authenticate with a user JWT token) |
| API Version | `options` | No | `3` | NocoDB API version to use. Choose based on your NocoDB instance version. |
| | | | | Options: `1` (before v0.90.0), `2` (v0.90.0 onwards), `3` (v0.200.0 onwards) |
| Workspace ID | `string` | No | — | NocoDB workspace ID. Only required for v3 in workspace-based deployments. _(shown when API Version is `3`)_ |
| Base (Project) ID | `string` | Yes | — | The NocoDB base (project) ID. Find it in the NocoDB UI under base settings. Supports expressions. |
| Table | `string` | Yes | — | Table ID (v2/v3) or table name (v1). Find the table ID in the NocoDB UI or via the API. Supports expressions. |
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. Accepts 1–100. |

## Output Data

The row lands directly on the output item's JSON — there is no wrapper property, and the input item's JSON does not pass through except where noted below. Binary data already on the input item is forwarded. Get Many fans out **one output item per row**, so a query returning 200 rows produces 200 items from one input item; every other operation produces exactly one output item per input item.

The exact shape depends on the API Version you selected, because the three NocoDB APIs answer write calls differently.

| Operation | Output items per input item | Item JSON |
|-----------|-----------------------------|-----------|
| `create` | One | The row you sent. On API Version `3` the service's response is merged over it; on `1` and `2` the new auto-increment `id` is added |
| `delete` | One | On API Version `1`, the input item JSON plus `deleted: true`. On `2`, `success: true`. On `3`, the service's delete response |
| `get` | One | The row as NocoDB returns it |
| `getAll` | One per row | The row as NocoDB returns it. When nothing matches, a single item with `_noResults: true` and a `message` |
| `update` | One | On API Version `1`, the row you sent. On `2`, `success: true`. On `3`, the row you sent with the service's response merged over it |

**Attachments.** With Download Attachments on, each file found in the fields you named in Download Fields is written to a binary property called `{fieldName}_{index}` — the first file in a `photo` field becomes `photo_0`, the second `photo_1`. Files that cannot be fetched are skipped rather than failing the item. Uploads work the other way: a Fields to Send entry with `binaryData` set to true reads the named binary property, stores the file in NocoDB, and writes the resulting attachment reference into that column.

Reference the result downstream by expression, e.g. `{{ $json.id }}` or `{{ $json.Name }}`.

## Usage Examples

- Create a row in a NocoDB table with file attachments
- Get all rows from a NocoDB table and download attachment fields
- Update a row and upload a new attachment
- Delete rows from a NocoDB table
- Query NocoDB with a where filter formula

## Example Configuration

Read a single row by its ID:

```json
{
  "type": "nocodb",
  "parameters": {
    "authType": "apiToken",
    "apiVersion": 3,
    "operation": "get",
    "projectId": "p_abc123def456",
    "table": "tbl_xyz789",
    "id": "1",
    "downloadAttachments": false
  }
}
```

Read a row and pull two of its attachment fields down as binary data:

```json
{
  "type": "nocodb",
  "parameters": {
    "authType": "apiToken",
    "apiVersion": 3,
    "operation": "get",
    "projectId": "p_abc123def456",
    "table": "tbl_xyz789",
    "id": "1",
    "downloadAttachments": true,
    "downloadFieldNames": "profile_photo,resume"
  }
}
```

Create a row from the incoming item, ignoring two properties:

```json
{
  "type": "nocodb",
  "parameters": {
    "authType": "apiToken",
    "apiVersion": 3,
    "operation": "create",
    "projectId": "p_abc123def456",
    "table": "tbl_xyz789",
    "dataToSend": "autoMapInputData",
    "inputsToIgnore": "id,created_at"
  }
}
```

Create a row with explicit columns, uploading a binary property into an attachment column:

```json
{
  "type": "nocodb",
  "parameters": {
    "authType": "apiToken",
    "apiVersion": 3,
    "operation": "create",
    "projectId": "p_abc123def456",
    "table": "tbl_xyz789",
    "dataToSend": "defineBelow",
    "fieldsUi": [
      { "fieldName": "name", "fieldValue": "John Doe" },
      { "fieldName": "email", "fieldValue": "john@example.com" },
      { "fieldName": "avatar", "binaryData": true, "binaryProperty": "profileImage" }
    ]
  }
}
```

Update a row identified by a custom primary key column:

```json
{
  "type": "nocodb",
  "parameters": {
    "authType": "apiToken",
    "apiVersion": 3,
    "operation": "update",
    "projectId": "p_abc123def456",
    "table": "tbl_xyz789",
    "primaryKey": "custom",
    "customPrimaryKey": "user_id",
    "id": "USR001",
    "dataToSend": "autoMapInputData"
  }
}
```

Query up to 100 rows with field selection, sorting, and a filter formula:

```json
{
  "type": "nocodb",
  "parameters": {
    "authType": "apiToken",
    "apiVersion": 3,
    "operation": "getAll",
    "projectId": "p_abc123def456",
    "table": "tbl_xyz789",
    "returnAll": false,
    "limit": 100,
    "options": {
      "fields": "name,email,created_at",
      "sort": "[{\"field\": \"created_at\", \"direction\": \"desc\"}]",
      "where": "(name,like,%John%)"
    }
  }
}
```

Delete a row from a table that was imported from Airtable:

```json
{
  "type": "nocodb",
  "parameters": {
    "authType": "apiToken",
    "apiVersion": 3,
    "operation": "delete",
    "projectId": "p_abc123def456",
    "table": "tbl_xyz789",
    "primaryKey": "ncRecordId",
    "id": "rec123abc456def"
  }
}
```

Read an entire table from a workspace-based deployment:

```json
{
  "type": "nocodb",
  "parameters": {
    "authType": "apiToken",
    "apiVersion": 3,
    "operation": "getAll",
    "workspaceId": "ws_abc123",
    "projectId": "p_abc123def456",
    "table": "tbl_xyz789",
    "returnAll": true
  }
}
```

### 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

CRUD operations on NocoDB table rows with binary attachment upload and download support.

### Pattern 1: Simple CRUD Operations

Most basic operations require only the core parameters plus operation-specific requirements:
- Always specify `projectId` and `table`
- For single-row operations (`get`, `update`, `delete`), include `id`
- Choose appropriate `primaryKey` type if using non-default ID fields

### Pattern 2: Bulk Data Retrieval

For `getAll` operations:
- Use `returnAll: true` for complete datasets
- Use `returnAll: false` with `limit` for pagination
- Leverage `options` collection for filtering, sorting, and field selection

### Pattern 3: File Upload/Download

- For uploads: Use `fieldsUi` with `binaryData: true` and specify `binaryProperty`
- For downloads: Enable `downloadAttachments` and specify `downloadFieldNames`

### Pattern 4: Data Mapping Strategies

- Use `autoMapInputData` when input property names match column names exactly
- Use `defineBelow` for explicit field control or when names don't match
- Combine with `inputsToIgnore` to exclude unwanted properties in auto-map mode