---
title: "How to Import a CSV into Framer CMS"
description: "Framer has an official CSV Import plugin for bulk-adding CMS items. Here's the step-by-step process, field mapping tips, and common gotchas to avoid."
canonical_url: "https://framerhub.io/blog/import-csv-to-framer-cms"
last_updated: "2026-11-17T00:00:00.000Z"
---

Entering CMS items one at a time is fine for five items and painful for five hundred. If you're migrating an existing catalog, blog archive, or listings database into Framer, the official **CSV Import** plugin is the tool built specifically for this — here's how to actually use it well, including the parts that trip people up.

## Before You Start: Prepare Your CSV

The single biggest source of import problems is a poorly structured CSV, not the tool itself. Before opening Framer:

1. **Match your column headers to your CMS field names as closely as possible.** Exact matches map automatically in most cases; close-but-not-exact names may require manual mapping during import.
2. **Clean your data first.** Trailing whitespace, inconsistent date formats, and stray special characters cause more import friction than any actual tool limitation. Fix these in a spreadsheet before import, not in Framer afterward.
3. **Handle images separately.** CSV import typically expects a publicly accessible image URL per row for image fields, not an uploaded file. If your source images live locally, upload them somewhere reachable (even a temporary cloud folder) and reference the URLs in your CSV.
4. **Decide how you'll handle rich text fields.** A CSV cell is plain text — if your content has formatting (bold, links, lists), confirm how the import tool handles that before assuming it will translate cleanly. Simple plain-text content imports far more predictably than richly formatted content.

## Step-by-Step: Running the Import

1. **Install the official CSV Import plugin** from the Framer Marketplace if you haven't already — it's a first-party tool built by Framer specifically for this workflow.
2. **Open the plugin from within your project**, and select the target CMS collection you want to import into. If you're importing into a brand-new collection, set up the field structure first so the import has somewhere to map data.
3. **Upload your prepared CSV file.** The plugin will read your column headers and attempt to map them to your collection's fields.
4. **Review the field mapping carefully before confirming.** This is the step people rush past and regret — a mismatched mapping (say, "Title" mapping to a description field) is easy to fix before import and tedious to fix after.
5. **Run a small test batch first.** Import 5-10 rows, then check the result in your CMS collection: are images showing correctly, is rich text formatted as expected, are dates parsed correctly? Confirm before running the full dataset.
6. **Run the full import once the test batch looks correct.**
7. **Spot-check a sample of the imported items** across different rows, not just the first few — issues sometimes only show up with certain data patterns (a particularly long title, a missing optional field) that a small test batch might not surface.

## Common Gotchas

- **Date formatting mismatches.** If your CSV has dates in one format (MM/DD/YYYY) and your CMS field expects another, some rows may import with incorrect or blank dates. Standardize date formatting in your source spreadsheet before import.
- **Reference fields don't import the same way as simple fields.** If your collection has a field referencing another collection (an author reference, a category reference), CSV import may not resolve those relationships automatically — check whether your specific setup requires a separate step or manual linking after import.
- **Large imports can hit plan-tier limits.** If your CSV has hundreds or thousands of rows, check your Framer plan's collection and item limits first — see our [Framer CMS limitations guide](/blog/framer-cms-limitations) for the full picture on plan-tier caps that CSV import doesn't bypass.
- **Duplicate detection isn't automatic.** Running the same CSV twice, or importing overlapping data from two sources, can create duplicate items unless you manually check for existing entries first. Keep a simple unique identifier column (a slug, SKU, or ID from your source system) in your CSV specifically so you can spot duplicates by sorting or filtering after import, even if the tool itself doesn't flag them for you.

## Going the Other Direction: CMS Export

If you need to move data *out* of Framer — backing up a collection, migrating to a different platform, or sharing content with a non-technical stakeholder in spreadsheet form — Framer also ships a companion **CMS Export** plugin. Between the two, you have a reasonably complete round-trip: pull existing content out, edit it in bulk in a spreadsheet, and re-import the updated version. This is a genuinely useful pattern for large content edits (a bulk price update across a product catalog, a category rename across hundreds of listings) that would be painfully slow to do item-by-item inside Framer's editor.

## When CSV Import Isn't the Right Tool

CSV import is built for bulk *content* migration — it's not a substitute for ongoing content management or automated syncing. If your actual need is:

- **Ongoing sync from an external source** (a live database, an API, another CMS) — you want a dedicated sync plugin, not repeated manual CSV exports and imports.
- **A one-time migration of a very large, complex dataset with many relationships** — consider whether a phased import (core fields first, relationships and secondary fields after) is more manageable than one giant CSV with every field represented.
- **Real-time content updates from a non-technical client** — CSV import is a migration tool, not a client-facing workflow. Once your CMS is populated, hand the client Framer's native CMS editing interface, not a repeated CSV re-import process.

## A Real Migration Example: Blog Archive

To make this concrete, here's how a typical blog migration goes using this workflow, since it's one of the most common reasons people search for CSV import in the first place:

1. **Export existing posts from the old platform** (WordPress, Ghost, a custom CMS) as a CSV, or write a small export script if your platform doesn't support CSV export natively.
2. **Clean the export** — strip HTML tags you don't want carried over literally, standardize date formats, and separate the image URLs into their own column if they weren't already.
3. **Set up your Framer CMS blog collection fields first** — title, slug, publish date, body, featured image, category — matching the structure your cleaned CSV will map into.
4. **Run a test import of 5 posts**, check formatting, images, and dates render correctly in Framer's editor.
5. **Run the full import**, then spot-check a sample across the full date range — older posts sometimes have different formatting quirks than recent ones if the source platform changed over time.
6. **Manually fix any reference-field relationships** (author, category) that didn't resolve automatically during import.

This pattern generalizes to product catalogs, real estate listings, and job postings — the specific fields change, but the sequence (clean source data, map fields, test small, then run full, then verify) holds regardless of what you're migrating. The one variable worth extra attention per content type is reference fields: a blog's author-to-post relationship, a listing's category assignment, or a product's variant grouping all behave differently during CSV import and are worth testing explicitly in your small batch rather than assuming they'll resolve the same way every time.

## After the Import: Set Up for Ongoing Management

Once your content is in, the workflow question shifts from "how do I get data in" to "how do I manage it well going forward." If your imported collection is meant to power a directory, listings site, or catalog with more than a handful of items, native single-field filtering won't scale to a real browsing experience — this is exactly the gap [CMS Filter](/plugins/framer-cms-filter) closes with multi-field filtering, realtime search, and price ranges configured from Framer's native panel. For the broader CMS setup beyond import specifically — collections, fields, dynamic pages — our [complete Framer CMS guide](/blog/framer-cms-complete-guide) covers the rest of the workflow.

## FAQ

**Does Framer have an official CSV import tool?**
Yes — Framer ships a first-party CSV Import plugin, available on the Framer Marketplace, specifically for bulk-adding items into a CMS collection. There's also a companion CMS Export plugin for going the other direction.

**Can I import images via CSV into Framer CMS?**
Image fields during CSV import typically expect a publicly accessible image URL per row rather than an uploaded file. Host your images somewhere reachable before import, or plan to add them manually afterward if that's not possible.

**What happens if my CSV column names don't match my CMS fields?**
The import tool maps columns to fields, usually by matching names or letting you assign each column manually. Mismatched or missing columns typically leave that field empty on import rather than causing the whole import to fail.

**Is there a limit to how many rows I can import at once?**
Practical limits exist based on your Framer plan's CMS collection and item caps, not the import tool itself. Check your plan's limits before importing a very large dataset.

**Should I test the import before running it on my real content?**
Always. Run a small test batch (5-10 rows) first to confirm field mapping, image handling, and rich-text formatting come through correctly before committing to a full import.
