CSV Import and Export

This content was generated with the assistance of AI and should be verified against the official Webflow documentation before being relied on in production.

This sub-section’s Webflow bibliography lists the reference material consulted while preparing these pages.

This page describes CSV import and export in the Webflow CMS as it was on 2026-10-28, the date on which its facts were checked against the official documentation. Webflow is a software-as-a-service product with no version numbers, so everything is dated rather than versioned; changes are announced at Webflow updates. CSV import and export are available in the Designer on every plan that includes the CMS (Premium, Team and Enterprise; the Ecommerce tiers add the store catalog). Plans are named by tier only, and the CMS Limits and Scaling page lists the item and Collection limits that a bulk import can run into. Content editors cannot use these functions from the old Editor, which is retired; the Content Editing on the Canvas page covers the current workflow.

The running example is Fernbrook Gardens, a fictitious botanical garden. Its Plants Collection holds a few hundred species and has to be loaded from a spreadsheet kept by the horticulture team, so CSV is the natural first step.

Why CSV, and when not to use it

A CSV file is the cheapest way to fill a Collection in bulk, to make the same edit to many items at once in a spreadsheet, and to take a copy of the content away from the site. It has three structural limits that decide when it is the wrong tool.

  • It is a manual, interactive process. You upload the file in the Designer and map columns by hand, so it cannot run on a schedule or from a deployment pipeline.

  • It is capped at 4 MB per file. A large archive has to be split into several files, and a migration from another system with thousands of long articles quickly needs more files than is comfortable.

  • It is flat. Each cell is text. Structure such as nested references, images with alt text, or rich text with embedded components has to be flattened into strings and rebuilt by Webflow.

When the content has to be synchronized repeatedly, when files exceed the cap, or when other systems produce the data, use the Data API instead; see The Data API as the scalable alternative.

Preparing the Collection first

Import maps CSV columns onto the fields of an existing Collection, so the Collection has to exist and be modeled before the file is loaded. The CMS Concepts and Content Modeling and Collections and Field Types pages explain how to model them. Three preparation steps save most import failures.

  1. Create every field you need, with the right type. Webflow lets you map a column to a field of a compatible type; a column that holds dates should be mapped to a Date/Time field, not a Plain text field, if you later want to sort by it.

  2. Import referenced Collections first. A reference or multi-reference field points at items of another Collection, so that target Collection has to contain the items before the referencing file is imported. For Fernbrook, the Plant families and Garden zones Collections are imported before Plants. See Reference and Multi-reference Fields.

  3. Make required fields complete. A row that lacks a value for a required field cannot be published, and Webflow describes importing such rows as drafts (see What happens to rows that cannot be imported cleanly).

The CSV file format

The file is a plain comma-separated text file with a header row. Each following row is one item and each header names a column that will be mapped to a field. Save it as UTF-8 so accented characters survive, and let your spreadsheet quote cells that contain commas, quotes or line breaks, which is what an export from Excel, Numbers or Google Sheets does.

Field type What to put in the cell Notes

Plain text, Name

The text

The Name field is required on every item.

Slug

A URL-safe value such as monstera-deliciosa

If it is missing, Webflow generates the slug from the name. A reference column is matched through the slug, so the slug has to be right (see Reference and multi-reference values).

Rich text

HTML, such as <p>Needs bright indirect light.</p>

Webflow converts recognized tags into rich-text elements.

Image, File

A publicly reachable direct URL

Local file paths cannot be imported. Webflow downloads the file during the import.

Date/Time

A date, preferably in ISO 8601 form such as 2026-11-15

Run a small test import to confirm how a time zone is read.

Switch

A true/false value

Run a small test to confirm the spellings accepted.

Option

The text of one of the defined options

An unknown value cannot be matched to an option.

Reference

The name or slug of one item in the target Collection

See Reference and multi-reference values.

Multi-reference

Several names or slugs separated by semicolons

Commas separate columns, so semicolons separate the values inside one cell.

The rows in the table that say "run a small test" are deliberate. Webflow’s article lists the supported field types but the exact accepted spellings can change between releases, and the cheapest way to learn them is an import of three to five rows into a scratch Collection.

Step by step: importing a file

Webflow documents the import in the Designer, from the Collections panel.

  1. Open the Designer and go to the Collections panel.

  2. Pick the Collection and choose Import (the CSV import option next to the new-item button).

  3. Upload the CSV file. Webflow rejects files larger than 4 MB.

  4. If the file includes an Item ID column, Webflow asks whether to update matching items or import everything as new (see Updating existing items).

  5. Map each CSV column to a field of the Collection, or skip the column. Webflow guesses a match from the header names, so name your headers after your fields.

  6. Review the summary, then confirm the import. Items that are valid are created; problems are listed so you can fix the file and import again.

What happens to rows that cannot be imported cleanly

When a required reference cell is empty or names an item that does not exist, Webflow still creates the item, sets it to draft, and leaves the reference field blank. The row is not lost, but nothing is published until an editor fixes the item. For a large file, sort the CMS panel by the draft state after an import to find these rows.

flowchart LR A[Spreadsheet] --> B[Export as CSV, UTF-8] B --> C{Under 4 MB?} C -- no --> D[Split the file or use the Data API] C -- yes --> E[Back up the site] E --> F[Collections panel, Import] F --> G[Map columns to fields] G --> H[Review drafts and publish]

A worked example: Fernbrook plants

Here is a small file for the Plants Collection. The Family column is a reference to Plant families, Zones is a multi-reference to Garden zones, and Description holds HTML.

Name,Slug,Family,Zones,Description,Photo,Bloom date
Monstera deliciosa,monstera-deliciosa,Araceae,Glasshouse; Tropical walk,"<p>Needs bright, indirect light.</p><p>Water weekly.</p>",https://assets.example.com/plants/monstera.jpg,2026-11-15
Lavandula angustifolia,lavandula-angustifolia,Lamiaceae,Herb garden,"<p>Loves full sun and <strong>poor soil</strong>.</p>",https://assets.example.com/plants/lavender.jpg,2027-06-20

Notes on the file:

  • The description cells are wrapped in double quotes because the HTML contains commas. A cell that contains a double quote must double it (" becomes "").

  • Glasshouse; Tropical walk is one cell with two values. The semicolon is what separates the references, not the comma.

  • The photo URLs must be reachable from the internet at import time. An image that sits behind a login fails.

The HTML that rich text becomes

An imported description becomes a rich-text field whose value is HTML, and the published page renders it as ordinary elements inside the rich-text container. For the Monstera row the page contains:

<div class="w-richtext">
  <p>Needs bright, indirect light.</p>
  <p>Water weekly.</p>
</div>

Anything that is not a recognized rich-text element, such as a script tag or a custom web component, is not preserved as an editable element, so move such content into an embed rather than into the CSV.

Reference and multi-reference values

Webflow added reference and multi-reference support to CSV import, announced at CSV import now supports reference and multi-reference fields. The rules are:

  • A cell holds the referenced item’s name or slug as plain text. Webflow turns the text into a slug and looks up the item with that slug. If the target item has a custom slug that differs from its name, put the slug in the CSV, because a name that slugifies to something else does not match.

  • Multi-reference cells use semicolons between values, for example Glasshouse; Tropical walk.

  • On import the order of columns does not matter, but the target Collection has to be populated already.

Exports behave differently, as described below, which is the usual source of confusion when a file is edited and loaded back.

Updating existing items

Import can also update items, not just add them. The mechanism is the Item ID column that an export contains. When the file has that column, Webflow offers a choice between updating matching items and importing every row as a new item. The practical workflow for a mass edit is:

  1. Export the Collection (see Exporting a Collection).

  2. Edit the values you want to change in a spreadsheet, and leave the Item ID column untouched.

  3. Import the edited file and choose to update matching items.

  4. Check the result in the Collections panel before publishing.

Two cautions apply.

  • Do not use update for Ecommerce items. The help article states that updating through CSV import does not apply to Ecommerce items.

  • Item IDs change when a site is restored from an old backup. The same article warns that restoring a backup created before 2024-03-25 refreshes every Collection and item ID, which breaks any file whose Item ID values were exported earlier. Export again after such a restore.

Items updated by CSV are not published automatically; they stay staged, and the site or the items have to be published as described in Publishing and Scheduling.

Backing up before you import

A bad import can create hundreds of draft items or overwrite good values, and there is no undo button for it. Webflow documents a backup step before import; whichever route you take, take it before every large or update import.

  1. Create a site backup (see Backups and Recovery) so you can restore the state of the whole site.

  2. Export the Collection as a CSV, which also gives you the Item IDs for the rollback of an update.

  3. Import a small sample first, ideally into a copy of the Collection or a staging site, and open the generated items.

  4. Import the rest in files below the 4 MB cap.

Restoring a backup brings back more than the CMS (pages, styles and settings), so a CSV export is often the more surgical rollback for a single Collection.

Exporting a Collection

Export is also done in the Collections panel: select the Collection and use Export. Webflow documents the following behavior in Export CMS content as a CSV and the import help article.

  • The file contains the items of the Collection, including archived items, or a selection you made, so a filtered list can be exported.

  • On a localized site the export covers the current locale view only.

  • Most fields, including reference fields, are written as plain text. Multi-reference values are separated by commas on export, whereas import expects semicolons. When you re-import an exported file, replace the separators in the multi-reference columns.

  • Image and file fields are exported as URLs that point at the files hosted by the original site. If the original site is deleted, the URLs stop working, so download the files before you leave the platform. The Images and Assets page lists where files live.

  • Ecommerce products are exported from the Ecommerce panel instead (see Ecommerce CSV).

import csv

# Fix the multi-reference separator of an exported file before re-importing it.
MULTI_REFERENCE_COLUMNS = ["Zones"]

with open("plants-export.csv", newline="", encoding="utf-8") as src, \
        open("plants-import.csv", "w", newline="", encoding="utf-8") as dst:
    reader = csv.DictReader(src)
    writer = csv.DictWriter(dst, fieldnames=reader.fieldnames)
    writer.writeheader()
    for row in reader:
        for column in MULTI_REFERENCE_COLUMNS:
            parts = [p.strip() for p in row[column].split(",") if p.strip()]
            row[column] = "; ".join(parts)
        writer.writerow(row)

The script assumes item names do not themselves contain commas. If they do, export slugs or fix those cells by hand.

Localization

Webflow Localize keeps one Collection with a version of each item per locale. CSV import and export work on one locale view at a time: you switch to a locale in the Designer, and the export contains that locale’s items. A file for a secondary locale therefore holds the translated text, and it has to be matched to its primary-locale items. The supported way is to export the secondary locale, translate or edit the text there, and import it back into the same locale view without removing the Item ID column. The Localization page describes the locale model; test the round trip on a sample before translating a whole Collection.

Ecommerce CSV

Products, variants and categories live in the Ecommerce panel and have their own import and export. The export contains all products with their variants and categories, including archived items. Product import creates items; as noted above, updating existing Ecommerce items through a CSV is not supported. The Ecommerce Overview page covers the product model and the Data API: Ecommerce and Localization page covers the API route, which is the way to update product data in bulk.

The Data API as the scalable alternative

When CSV is too small or too manual, the CMS endpoints of Data API v2 create, update and publish items from code. The trade-offs are:

CSV import Data API v2

Size

4 MB per file

Bulk calls of up to 100 items, repeated as often as needed

Automation

Manual, in the Designer

Scripts, webhooks, scheduled jobs

Updating

By Item ID

By item ID, or by staged and live item endpoints

Rate limits

None to manage

60 requests per minute on Starter and Basic, 120 on paid plans and Developer workspace sites; custom on Enterprise

Skills needed

A spreadsheet

An access token and some code

The following Python script, run against the Developer workspace Fernbrook site, creates plants in batches of 100 and respects the rate limit. It uses a placeholder token and a placeholder Collection ID.

import time
import requests

API = "https://api.webflow.com/v2"
TOKEN = "REPLACE_WITH_SITE_TOKEN"
COLLECTION_ID = "REPLACE_WITH_COLLECTION_ID"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

plants = [
    {"fieldData": {"name": "Monstera deliciosa", "slug": "monstera-deliciosa"}},
    {"fieldData": {"name": "Lavandula angustifolia", "slug": "lavandula-angustifolia"}},
]

for start in range(0, len(plants), 100):
    batch = plants[start:start + 100]
    response = requests.post(
        f"{API}/collections/{COLLECTION_ID}/items/bulk",
        headers=HEADERS,
        json={"isArchived": False, "isDraft": True, "fieldData": [p["fieldData"] for p in batch]},
        timeout=30,
    )
    response.raise_for_status()
    time.sleep(1)  # stay well below the per-minute limit

The request body above follows the shape of the bulk create endpoint at the time of writing, but endpoint paths and payloads belong to a versioned API; check the current reference before you run it, and see the Data API: CMS page for the full item model, including how staged and live items and publishing work, and Data API: SDKs, Limits and Errors for pagination and error handling. Authentication is covered in Data API: Authentication and Scopes; never put a token in a repository.

Pitfalls

  • File over 4 MB. Split by rows, and keep the header in every part. Long HTML in descriptions is the usual cause; a site migration of 100 MB of articles needs the API.

  • Excel or Numbers changed the encoding or the separators. Export "CSV UTF-8" and open the result in a text editor before importing.

  • Dates and numbers reformatted by the spreadsheet. A spreadsheet may turn 2026-11-15 into a local date format; format the column as text.

  • Reference not found. The slug did not match; the item became a draft with an empty reference field.

  • Images missing. The URL was a local path, needed a login, or redirected to a page instead of a file.

  • Re-import created duplicates. The Item ID column was removed or the import as new option was chosen.

  • Wrong separators after an export. Export writes commas inside multi-reference cells; import wants semicolons.

  • Limits. An import can hit the item or Collection limit of the plan; drafts and archived items may count toward it as well, as described in CMS Limits and Scaling.

Security and privacy

A CSV is a copy of your content outside the platform, and a CSV export of a Collection that stores personal data, such as a volunteer list kept as a Collection, is subject to the same data-protection duties as the site. Store exports in the access-controlled drive of the organization, delete working copies after the import, and avoid sending files by e-mail. Also treat spreadsheet cells from untrusted sources with care: a cell starting with an equals sign, a plus sign, a minus sign or an at sign can be run as a formula when the file is opened in a spreadsheet application, so sanitize such values in files that come from form submissions or third parties.

Corrections to older material

The book Webflow by Example (Packt, 2021) uses CSV import to load the sample CMS project and recommends dummy items and a CSV file for large Collections, which is still sound practice. What it cannot show is everything added since: reference and multi-reference columns, updating through the Item ID, the 4 MB limit as documented now, the Ecommerce panel, localized exports and the Data API. Its Collection limits and plan names are also outdated, as the Where Older Books and Tutorials Are Outdated page explains.