Development of Custom Webflow CMS Collections
Webflow CMS is structured content storage with binding to the visual builder. Unlike WordPress, where data structure is blurred through arbitrary fields and meta-boxes, Webflow CMS works with typed collections: each field has a strict type, each record has a predictable schema. This provides clean markup and predictable rendering behavior.
What a Webflow Collection Consists Of
A collection is essentially a data schema plus a set of records. For each collection:
-
Collection Page — template for individual record (
/blog/{slug},/team/{slug}) - Collection List — component to display multiple records on any page
- Reference / Multi-Reference — connections between collections
Supported field types: Plain Text, Rich Text, Image, Video, Link, Email, Phone, Number, Date, Switch (boolean), Color, Option (enum), File, Reference, Multi-Reference. Each type has its own limitations — for example, Rich Text doesn't support nested design components.
Typical Task: Blog with Authors and Tags
Collections:
Blog Posts
- title: Plain Text (required)
- slug: Plain Text (auto, unique)
- body: Rich Text
- published_at: Date
- author: Reference → Authors
- tags: Multi-Reference → Tags
- featured_image: Image
- seo_title: Plain Text
- seo_description: Plain Text
Authors
- name: Plain Text
- photo: Image
- bio: Rich Text
- linkedin: Link
Tags
- name: Plain Text
- color: Color
Many-to-Many connection via Multi-Reference works only one way: Post knows its Tags, but Tag doesn't know its Posts directly. For reverse selection, use Collection List filtering by Reference field.
Dynamic Filtering and Sorting
Native Webflow filtering is limited: you can filter by current page fields or fixed values. For advanced client-side filtering, use Finsweet CMS Filter — library with data-attributes:
<!-- Filter by tag -->
<div fs-cmsfilter-field="tag">Development</div>
<!-- Collection List with attribute -->
<div fs-cmsfilter-element="list">
<!-- Webflow Collection List items -->
</div>
Finsweet CMS Sort, CMS Load (pagination via AJAX) — standard stack for complex listings without backend development.
Platform Limitations and Workarounds
| Limitation | Workaround |
|---|---|
| Maximum 20 fields per collection | Split into related collections via Reference |
| No nested collections in Collection List | Use Finsweet Nested Lists |
| 100 items in Collection List per page | Finsweet CMS Load with pagination |
| No conditional rendering by Reference | Visibility conditions via Switch field |
| Multi-Reference maximum 25 connections | Architectural solution: join collection |
Webflow CMS API
Webflow provides REST API for collection management. Endpoints:
GET /v2/collections/{collection_id}/items
POST /v2/collections/{collection_id}/items
PATCH /v2/collections/{collection_id}/items/{item_id}
DELETE /v2/collections/{collection_id}/items/{item_id}
This enables data synchronization from external systems: CRM, ERP, PIM. For example, automatic catalog update from 1C via webhook + Node.js script with Webflow SDK:
import { WebflowClient } from 'webflow-api';
const client = new WebflowClient({ accessToken: process.env.WEBFLOW_TOKEN });
async function syncProduct(product) {
await client.collections.items.createItem(COLLECTION_ID, {
fieldData: {
name: product.title,
slug: product.sku.toLowerCase(),
price: product.price,
'in-stock': product.quantity > 0,
},
isDraft: false,
isArchived: false,
});
}
Content Localization
Webflow Localization (since 2023) allows creating translated versions of CMS records. Setup:
- In Project Settings → Localization add locales (for example,
en,ru,de) - For each collection, enable localization for needed fields
- Locale switcher controls record visibility
Alternative — store translations in separate collections with Reference connection to main.
Timelines
Simple collection (blog, news) with template markup — 3-5 days. Multi-connected system (catalog + filters + authors + tags + API sync) — 2-3 weeks. Integration with external data source via API — separate assessment based on source complexity.







