<!-- BusyBot node reference — https://busybot.net/tools/google-firebase-realtime-database/ -->

> Node: Google Firebase Realtime Database (`google_firebase_realtime_database`) · Action · v1
> Category: Data & Storage · Credentials: Google Firebase Realtime Database OAuth2 (`googleFirebaseRealtimeDatabaseOAuth2Api`)
> Updated: 2026-08-16

# Google Firebase Realtime Database

> Create, get, update, delete, and push records in Google Firebase Realtime Database.

## Overview

Interacts with the Firebase Realtime Database REST API. Create (PUT) overwrites a path with data built from selected item fields; Delete (DELETE) removes a path and returns `{ success: true }`; Get (GET) retrieves the data at a path (a null response raises "Requested entity was not found"); Push (POST) appends to a list at a path with an auto-generated key; Update (PATCH) merges partial data into a path.

The database URL is built as `https://{projectId}.{region}/{path}.json`, so the Project ID you enter is the database instance subdomain and the Region is the host suffix. Non-object scalar responses are wrapped as `{ [path]: value }` so they always arrive as JSON.

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

**Appearance:** Icon: `lucide-Database` | Color: `#FFA000`

## Node Type

**Action** — processes input items and produces output

## Input / Output

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

## Credentials

This tool requires **Google Firebase Realtime Database OAuth2** credentials.
See the [Credentials Guide](https://busybot.net/credentials/google-firebase-realtime-database-oauth2-api/) for setup instructions.

### Operations

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Write data to a database path (PUT — overwrites existing data). |
| Delete | `delete` | Delete data from a database path. |
| Get | `get` | Get a record from a database path. |
| Push | `push` | Append to a list of data with an auto-generated key. |
| Update | `update` | Update (merge) data at a database path. |

### Parameters

#### Create (`create`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Object Path | `string` | Yes | — | Object path in the database. Do not include a leading slash or .json suffix. Example: "users/user1". Supports expressions like {{ $json.userId }}. |
| Columns / Attributes | `string` | Yes | — | Comma-separated list of field names to pick from the input item's JSON and send as the request body. |

#### Delete (`delete`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Object Path | `string` | Yes | — | Object path in the database. Do not include a leading slash or .json suffix. Example: "users/user1". Supports expressions like {{ $json.userId }}. |

#### Get (`get`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Object Path | `string` | No | — | Object path in the database. Do not include a leading slash or .json suffix. Leave blank to return the entire database. Supports expressions. |

#### Push (`push`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Object Path | `string` | Yes | — | Object path in the database. Do not include a leading slash or .json suffix. Example: "users/user1". Supports expressions like {{ $json.roomId }}. |
| Columns / Attributes | `string` | Yes | — | Comma-separated list of field names to pick from the input item's JSON and send as the request body. |

#### Update (`update`)

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Object Path | `string` | Yes | — | Object path in the database. Do not include a leading slash or .json suffix. Example: "users/user1". Supports expressions like {{ $json.userId }}. |
| Columns / Attributes | `string` | Yes | — | Comma-separated list of field names to pick from the input item's JSON and send as the request body. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Authentication | `options` | No | `oAuth2` | Authentication method to use. |
| | | | | Options: `oAuth2`, `serviceAccount` |
| Google Account | `credential` | No | — | Connect or select your Google account. _(shown when Authentication is `oAuth2`)_ |
| Service Account Email | `string` | Yes | — | The email address of the Google service account. _(shown when Authentication is `serviceAccount`)_ |
| Private Key | `string` | Yes | — | The private key from the service account JSON key file. _(shown when Authentication is `serviceAccount`)_ |
| Project ID | `string` | Yes | — | The Realtime Database instance name. This is the subdomain of your database URL (e.g. "my-app-default-rtdb" from "my-app-default-rtdb.firebaseio.com"), NOT the Firebase project ID. |
| Region | `options` | No | `firebaseio.com` | The region/host suffix for the Firebase Realtime Database URL. |
| | | | | Options: `firebaseio.com` (default region), `europe-west1.firebasedatabase.app`, `asia-southeast1.firebasedatabase.app` |
| Max Concurrency | `number` | No | `5` | Maximum number of items to process concurrently. |

## Output Data

Each input item produces exactly one output item. The data returned by the Firebase REST API is merged into the top level of the item's JSON, so the incoming fields stay available alongside the response.

| Operation | What is merged onto the item |
|-----------|------------------------------|
| `create` | The object written to the path. |
| `delete` | `success: true`. |
| `get` | The data stored at the path. A scalar value (string or number) is wrapped as `{ "<path>": value }`; an empty path returns the whole database. |
| `push` | `name` — the auto-generated key Firebase assigned to the new list entry. |
| `update` | The merged object returned for the path. |

A `get` against a path that holds no data raises "Requested entity was not found" rather than returning an empty item, so it can be routed through the Error port.

## Usage Examples

- Write a new user record to Firebase Realtime Database
- Get data from a Firebase database path
- Push a new message to a Firebase list with an auto-generated key
- Update specific fields of a Firebase database record
- Delete a node from a Firebase Realtime Database path
- Store sensor readings in a Firebase time-series list
- Read the entire database root object

## Example Configuration

Write a user record, overwriting anything already at that path:

```json
{
  "type": "google_firebase_realtime_database",
  "parameters": {
    "operation": "create",
    "projectId": "my-app-default-rtdb",
    "region": "firebaseio.com",
    "path": "users/{{ $json.userId }}",
    "attributes": "name,email,role,createdAt"
  }
}
```

Read one record back:

```json
{
  "type": "google_firebase_realtime_database",
  "parameters": {
    "operation": "get",
    "projectId": "my-app-default-rtdb",
    "region": "firebaseio.com",
    "path": "users/{{ $json.userId }}"
  }
}
```

Append a chat message to a list and let Firebase generate the key:

```json
{
  "type": "google_firebase_realtime_database",
  "parameters": {
    "operation": "push",
    "projectId": "messaging-app-rtdb",
    "region": "firebaseio.com",
    "path": "chatrooms/{{ $json.roomId }}/messages",
    "attributes": "text,userId,timestamp",
    "maxConcurrency": 10
  }
}
```

Merge a status change into an existing record without replacing it:

```json
{
  "type": "google_firebase_realtime_database",
  "parameters": {
    "operation": "update",
    "projectId": "status-tracker-rtdb",
    "region": "firebaseio.com",
    "path": "users/{{ $json.userId }}/status",
    "attributes": "isOnline,lastSeen"
  }
}
```

Delete a node from a European database instance:

```json
{
  "type": "google_firebase_realtime_database",
  "parameters": {
    "operation": "delete",
    "projectId": "my-eu-app-default-rtdb",
    "region": "europe-west1.firebasedatabase.app",
    "path": "products/{{ $json.productId }}"
  }
}
```

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

Read, write, update, delete, and push records in Google Firebase Realtime Database using the REST API.

- **Project ID is the database subdomain, not the Firebase project.** Take the first label of your database URL — `my-app-default-rtdb` from `https://my-app-default-rtdb.firebaseio.com`.
- **Region must match the database.** Databases created outside the United States use `europe-west1.firebasedatabase.app` or `asia-southeast1.firebasedatabase.app`; using the wrong suffix points at a host that does not exist.
- **Columns / Attributes filters the request body.** Only the named fields are read off the input item and sent, so upstream metadata does not leak into the database. A field that is missing from the item is simply omitted.
- **Create replaces, Update merges.** Use Create when the path should end up exactly as described, Update when you only want to change a few keys.
- **Push returns the generated key** as `name` — capture it downstream if you need to address the new entry later.