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

> Node: Webflow (`webflow`) · Action · v1
> Category: Marketing · Credentials: Webflow OAuth2 (`webflowOAuth2`)
> Updated: 2026-08-16

# Webflow

> Manage CMS collection items in Webflow

## Overview

Webflow is a website builder and CMS. This tool works with a Webflow site through the Webflow V2 API: create CMS collection items with custom field data, read a single item, list every item in a collection with pagination, update an item's fields, delete an item, and publish the site itself. Items can be pushed live immediately or left staged for a later publish. The Site ID is used to locate the collection in the parameter panel and is not sent with item requests.

**Category:** Marketing  
**Tool Name:** `webflow`  
**Version:** 1

**Appearance:** Icon: `si-webflow` | Color: `#4353FF`

## Node Type

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

## Input / Output

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

## Credentials

This tool requires **Webflow OAuth2** credentials.
See the [Credentials Guide](https://busybot.net/credentials/webflow-oauth2/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Item | `item` |
| Site | `site` |

### Operations

**Item**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a collection item from the field values you supply |
| Delete | `delete` | Delete a collection item by ID |
| Get | `get` | Retrieve a single collection item by ID |
| Get Many | `getAll` | List the items in a collection |
| Update | `update` | Update the field values of an existing collection item |

**Site**

| Operation | Value | Description |
|-----------|-------|-------------|
| Publish | `publish` | Publish the site to its Webflow subdomain and/or custom domains |

### Parameters

#### Item: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Site ID | `string` | Yes | — | ID of the Webflow site. For item operations, this is the site containing the collection. For site publish, this is the site to publish. Find in Webflow Dashboard > Site Settings > General > Site ID, or via the API: GET /v2/sites. |
| Collection ID | `string` | Yes | — | ID of the CMS collection. Find via Webflow API: GET /v2/sites/{siteId}/collections, or in the Webflow designer under CMS settings. |
| Live | `boolean` | Yes | `false` | Whether the item should be published on the live site immediately. When true, the tool creates the item then calls the publish endpoint to push it live. V2 removed the old /live route, so publishing is a separate API call. |
| Fields | `fixedCollection` | No | `{}` | Field data for the collection item. Field IDs are the field slugs from your Webflow collection schema. Discover available fields via the API: GET /v2/collections/{collectionId}. |
| — Field | | | | One entry per field you want to set. |
| — — Field ID | `string` | No | — | The field slug (e.g. "name", "slug", "post-body"). Find field slugs via the API: GET /v2/collections/{collectionId} and look at the fields array. |
| — — Field Value | `string` | No | — | The value to set for this field. Supports expressions like {{ $json.title }}. |

#### Item: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Site ID | `string` | Yes | — | ID of the Webflow site containing the collection. |
| Collection ID | `string` | Yes | — | ID of the CMS collection. Find via Webflow API: GET /v2/sites/{siteId}/collections, or in the Webflow designer under CMS settings. |
| Item ID | `string` | Yes | — | ID of the CMS item to operate on. Supports expressions like {{ $json.itemId }}. |

#### Item: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Site ID | `string` | Yes | — | ID of the Webflow site containing the collection. |
| Collection ID | `string` | Yes | — | ID of the CMS collection. Find via Webflow API: GET /v2/sites/{siteId}/collections, or in the Webflow designer under CMS settings. |
| Item ID | `string` | Yes | — | ID of the CMS item to operate on. Supports expressions like {{ $json.itemId }}. |

#### Item: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Site ID | `string` | Yes | — | ID of the Webflow site containing the collection. |
| Collection ID | `string` | Yes | — | ID of the CMS collection. Find via Webflow API: GET /v2/sites/{siteId}/collections, or in the Webflow designer under CMS settings. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `100` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Item: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Site ID | `string` | Yes | — | ID of the Webflow site containing the collection. |
| Collection ID | `string` | Yes | — | ID of the CMS collection. Find via Webflow API: GET /v2/sites/{siteId}/collections, or in the Webflow designer under CMS settings. |
| Item ID | `string` | Yes | — | ID of the CMS item to operate on. Supports expressions like {{ $json.itemId }}. |
| Live | `boolean` | Yes | `false` | Whether the item should be published on the live site immediately. When true, the tool updates the item then calls the publish endpoint to push it live. V2 removed the old /live route, so publishing is a separate API call. |
| Fields | `fixedCollection` | No | `{}` | Field data for the collection item. Field IDs are the field slugs from your Webflow collection schema. Discover available fields via the API: GET /v2/collections/{collectionId}. |
| — Field | | | | One entry per field you want to set. |
| — — Field ID | `string` | No | — | The field slug (e.g. "name", "slug", "post-body"). Find field slugs via the API: GET /v2/collections/{collectionId} and look at the fields array. |
| — — Field Value | `string` | No | — | The value to set for this field. Supports expressions like {{ $json.title }}. |

#### Site: Publish

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Site ID | `string` | Yes | — | ID of the Webflow site to publish. Find in Webflow Dashboard > Site Settings > General > Site ID, or via the API: GET /v2/sites. |
| Publish to Webflow Subdomain | `boolean` | No | `true` | Whether to publish to the *.webflow.io subdomain. Independent of custom domains — both can be selected. |
| Custom Domains | `string` | No | — | Comma-separated list of custom domain names to publish to. Leave empty to skip custom domains (still publishes to the webflow.io subdomain if that option is on). Domains must already be configured on the site in Webflow. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

The API response is **merged onto the input item JSON** — the returned fields are copied over the item's existing fields, so upstream data survives. Binary data on the input item is forwarded unchanged.

Item counts:

- **`create`, `get`, `update`, `delete` and `publish`** produce exactly one output item per input item.
- **`getAll` fans out** — one output item per collection item returned. With **Return All** on, the node pages through the whole collection; with it off, it returns at most **Limit** items.

What lands on the item:

| Operation | Merged onto the item |
|-----------|----------------------|
| `create` | The created item record as Webflow returns it, including its `id` |
| `get` | The requested item record |
| `getAll` | One item record per result |
| `update` | The updated item record |
| `delete` | `success` — `true` when Webflow confirms the delete, `false` otherwise |
| `publish` | The publish response from Webflow, or `success: true` when the response carries no body |

Inside an item record, your CMS field values live under `fieldData`, keyed by field slug. Reference them downstream by expression, e.g. `{{ $json.id }}` or `{{ $json.fieldData.slug }}`. In the rare case where the API returns a bare value rather than an object, it is placed on `result` instead.

With **Live** on, `create` and `update` make a second call to publish the affected item; the output item still carries the create/update response, not the publish response.

## Usage Examples

- Create a new blog post in a Webflow CMS collection
- List all items in a Webflow collection
- Update a product item in Webflow and publish live
- Delete a CMS item from a Webflow collection
- Get a specific CMS item by ID from Webflow

## Example Configuration

Create a blog post and publish it immediately:

```json
{
  "type": "webflow",
  "parameters": {
    "resource": "item",
    "operation": "create",
    "siteId": "62a1b2c3d4e5f6a7b8c9d0e1",
    "collectionId": "62b2c3d4e5f6a7b8c9d0e1f2",
    "live": true,
    "fieldsUi": {
      "fieldValues": [
        { "fieldId": "name", "fieldValue": "{{ $json.title }}" },
        { "fieldId": "slug", "fieldValue": "{{ $json.slug }}" },
        { "fieldId": "post-body", "fieldValue": "{{ $json.html }}" }
      ]
    }
  }
}
```

Read one item by ID:

```json
{
  "type": "webflow",
  "parameters": {
    "resource": "item",
    "operation": "get",
    "siteId": "62a1b2c3d4e5f6a7b8c9d0e1",
    "collectionId": "62b2c3d4e5f6a7b8c9d0e1f2",
    "itemId": "{{ $json.itemId }}"
  }
}
```

List a whole collection, one output item per record:

```json
{
  "type": "webflow",
  "parameters": {
    "resource": "item",
    "operation": "getAll",
    "siteId": "62a1b2c3d4e5f6a7b8c9d0e1",
    "collectionId": "62b2c3d4e5f6a7b8c9d0e1f2",
    "returnAll": true
  }
}
```

Update a product's price without publishing it yet:

```json
{
  "type": "webflow",
  "parameters": {
    "resource": "item",
    "operation": "update",
    "siteId": "62a1b2c3d4e5f6a7b8c9d0e1",
    "collectionId": "62b2c3d4e5f6a7b8c9d0e1f2",
    "itemId": "{{ $json.itemId }}",
    "live": false,
    "fieldsUi": {
      "fieldValues": [
        { "fieldId": "price", "fieldValue": "{{ $json.price }}" }
      ]
    }
  }
}
```

Publish the site to the Webflow subdomain and two custom domains:

```json
{
  "type": "webflow",
  "parameters": {
    "resource": "site",
    "operation": "publish",
    "siteId": "62a1b2c3d4e5f6a7b8c9d0e1",
    "publishToWebflowSubdomain": true,
    "customDomains": "www.example.com, example.com"
  }
}
```

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

Manage Webflow CMS collection items: create, read, update, delete, and list items with support for live publishing.

### Notes

- **`name` is mandatory on item create.** Webflow V2 requires it inside the field data, so the Fields collection must contain an entry with Field ID `name` or the item fails before the request is sent.
- **Field IDs are slugs, not labels.** A field shown as "Post Body" in the designer is addressed as `post-body`. Read them from `GET /v2/collections/{collectionId}`.
- **Publishing is a separate call in V2.** Turning **Live** on creates or updates the item first and publishes it afterwards; a failure at the publish step leaves the item saved but unpublished.
- **Site publish needs a target.** Turning **Publish to Webflow Subdomain** off while leaving **Custom Domains** empty selects nothing, and the node reports that rather than silently succeeding. Custom domains must already be attached to the site in Webflow.
- **Site ID is not sent with item requests** — it exists so the parameter panel can find your collections. Collection ID is what addresses the data.
- **Get Many fans out.** Downstream nodes receive one item per record, so there is no need for a Split Out node after it.