---
title: Baserow / NocoDB
description: Create, read, update, and delete rows in a Baserow or NocoDB table — hosted or self-hosted, including localhost.
---

Read and write rows in a Baserow or NocoDB table, on their cloud or on your own server.

Pick a saved connection in the **Credential** field, or create one from there. It signs in with a Bearer Token.

## What it does

Baserow and NocoDB are open-source alternatives to Airtable that you can host yourself, even on your own computer. Pick the **Provider**, then one **Operation** on a table:

* **Create row**, **Update row**: write the **Fields** you list.
* **Get row**, **Delete row**: act on one row by its **Row ID**.
* **List rows**: read rows from the table, up to **Limit** if set.

You name fields by their column name as it appears in your table, for both providers. **Update row** only changes the fields you list.

## When to use it

* Keep your data on your own machine: pair a local Baserow or NocoDB with local AI nodes.
* Log scraped prices, bookmarks or leads into a table you own.
* Read a table to drive a workflow, for example one row per URL to check.
* Use [Airtable](/nodes/builtin/integration/airtable/) or [Google Sheets](/nodes/builtin/integration/google-sheets/) instead if your data lives there.

## Inputs and settings

Call the Baserow / NocoDB API yourself with the HTTP Request node, and pick the same connection in its **Credential** field.

* **Base URL** is the address of your instance only, without a path: `https://api.baserow.io` for Baserow cloud, `https://app.nocodb.com` for NocoDB cloud, or for example `http://localhost:8080` for a self-hosted one.
* **Table ID**: in Baserow it is a number (for example `482`), listed in the database's API documentation; in NocoDB it is a text id that starts with `m`, shown in the table's details.
* **Fields**: one pair per column, for example `Name` = `{{ $input.title }}` and `URL` = `{{ $input.url }}`.

## Outputs

* **Create row**, **Get row** and **Update row** return the row as the provider sends it, with its id (`id` in Baserow, `Id` in NocoDB) and its columns.
* **List rows** returns the provider's page of results: Baserow puts the rows in `results`, NocoDB in `list`. Use [Split Out](/nodes/builtin/datatransformation/splitout/) on that field to get one item per row.

## Dependencies and credentials

* **Credential** (connection, Bearer Token): required. See [Connect Baserow / NocoDB](/app/connections/baserow-nocodb/).

- **Baserow**: create a **database token** in Baserow under **Settings → Database tokens**, with access to the workspace that holds the table.
- **NocoDB**: create an **API token** in NocoDB under **Account settings → Tokens**.

Save the token as a Bearer Token credential: see [Create a credential](/app/connections/create/). The node sends it the way each provider expects.

## Example workflow

1. A [Context Menu](/nodes/builtin/trigger/contextmenu/) trigger runs when you right-click a page.
2. [Get Page Metadata](/nodes/extension/getpagemetadata/) reads its `title` and `url`.
3. Baserow / NocoDB, **Provider** `Baserow`, **Create row**, **Base URL** `http://localhost:8080`, **Table ID** `482`, **Fields** `Title` = `{{ $input.title }}`, `Link` = `{{ $input.url }}`.
4. [Browser Notification](/nodes/extension/browsernotification/) confirms the row was saved.

## Common issues

* **"Baserow API Error: 401 Unauthorized" or "NocoDB API Error: 401".** The token is wrong, or has no access to this table. Create a new token that covers the table and update the credential.
* **"... API Error: 404 Not Found".** Check **Base URL** (no path after the address, right port) and **Table ID**.
* **A value is not written.** The field name must match the column name exactly, including capitals and spaces.
* **The run is blocked in the web app.** This node runs in the browser extension, which can reach self-hosted addresses like `localhost`. Install the extension, or run the workflow from it.

## Related nodes

* [Airtable](/nodes/builtin/integration/airtable/): the hosted service these tools replace.
* [Supabase](/nodes/builtin/integration/supabase/): rows in a Postgres database.
* [Data Store](/nodes/builtin/core/datastore/): keep small values inside AWFlow, no account needed.