Blog
February 2, 2026

How to Import CSV into Notion

Import CSV files into Notion databases - create new databases or add to existing ones. Includes critical limitations like the merge duplicate issue, row limits, and column type detection.

8 mins read

How to Import CSV into Notion

Notion makes importing CSV files easy—until you need to update existing data. Then you hit the wall that frustrates everyone: Notion's "Merge with CSV" feature doesn't update existing rows. It creates duplicates.

This guide covers both import methods, explains column type detection, and shows you the workarounds for Notion's limitations. (Yes, there are workarounds. They're not pretty, but they work.)

Two Ways to Import CSV into Notion

Notion gives you two import methods. They behave very differently:

MethodWhat It DoesUse Case
Native CSV ImportCreates a new database from your CSVStarting fresh, one-time imports
Merge with CSVAdds rows to an existing databaseOngoing data additions

Pick the wrong one and you'll end up with duplicate data everywhere.

Method 1: Import CSV to Create a New Database

This is the standard import. It takes your CSV and creates a brand new Notion database.

Step-by-Step Instructions

  1. Open Notion on desktop or web (CSV import doesn't work on mobile)

  2. Navigate to Settings

    • Click "Settings" in your sidebar, or type /csv anywhere in Notion
  3. Select Import → CSV

    • Choose "Import" from the settings menu
    • Click "CSV" from the options
  4. Upload your file

    • Select your .csv file
    • Notion only accepts .csv—not .xlsx or .xls
  5. Review the import preview

    • Notion shows you what your data looks like
    • You can adjust column types here
  6. Complete the import

    • Click "Import" to create your new database

What Happens During Import

When Notion processes your CSV:

  • The first row becomes column headers. Every column in row 1 becomes a property name.
  • The first text column becomes the title property. This is your database's primary key—choose wisely before importing.
  • Column types are auto-detected. Sometimes Notion gets this wrong, and you'll need to fix it manually.

This method works fine for one-time imports. If you need ongoing updates, keep reading.

Method 2: Merge CSV with an Existing Database

Already have a Notion database? Use "Merge with CSV" to add more data.

Step-by-Step Instructions

  1. Open your existing database as a full page (not inline—this matters)

  2. Access the menu

    • Click the three dots (•••) at the top right
  3. Select "Merge with CSV"

  4. Upload your CSV file

  5. Map your columns

    • Match CSV columns to existing database properties
    • Headers must match property names exactly
  6. Complete the merge

The Critical Limitation: Merge Creates Duplicates

Here's where people get burned. From Notion's own documentation:

"Imports from CSV to existing database will add rows to the database, not update existing rows. Watch out for duplicate data."

So if you have "John Smith" in your database, and you import a CSV with updated info for "John Smith"—you get two John Smiths. Not one updated record. Two separate rows.

There's no built-in deduplication. Every merge adds new rows. Period.

Workarounds for the Duplicate Problem

Option 1: Manual cleanup Sort by a unique field, find the duplicates, delete them by hand. Tedious, but it works for small imports.

Option 2: Nuclear option Delete all existing rows, then import your complete CSV. You lose Notion-specific data like comments and linked database connections.

Option 3: Command-line tools Tools like csv2notion and csv2notion-neo can actually update existing rows. You'll need to be comfortable with the terminal and API tokens.

Option 4: Automation platforms Make, Zapier, n8n—these can match on unique identifiers and update records properly. More setup work, but you get real sync.

Column Type Auto-Detection

Notion's import wizard looks at your data and guesses property types. It's pretty good, honestly, though not perfect.

Supported Property Types

Property TypeAuto-Detected?
TextYes
NumberYes
SelectSometimes
Multi-selectSometimes
DateYes (MM/DD/YYYY format)
CheckboxYes
URLYes
EmailYes
PhoneYes
PersonNo
Files & mediaNo

How Detection Works

Notion checks the values in each column:

  • Numbers: All numeric? Becomes Number type.
  • Dates: MM/DD/YYYY format? Becomes Date.
  • URLs: Starts with http? URL property.
  • Booleans: true/false values? Checkbox.

Here's the catch: if even one cell has mixed data, Notion defaults to Text. A column with 99 numbers and 1 text value becomes Text. Safe, but annoying.

Properties You Can't Import

These are auto-generated by Notion—you can't set them via CSV:

  • Created time / Created by
  • Last edited time / Last edited by
  • Formula, Rollup, Button
  • ID (auto-number)

You also cannot import into relation properties. Notion's docs are clear: "CSV columns cannot be merged with Notion relation properties." Want to populate relations? Do it manually or use third-party tools.

Size and Row Limits

Notion doesn't publish hard limits, but they exist.

File Size

PlanMaximum Upload
Free5 MB
Paid200 MB

Practical Row Limits

There's no official row cap, but things get slow past 10,000 rows. Very large CSVs can time out, partially fail, or make your database painfully slow.

Dealing with Large Files

If your CSV is huge:

  1. Split it into 5,000-8,000 row chunks
  2. Import separately into different databases
  3. Use command-line tools like csv2notion—they don't have the web interface's limits

Preparing Your CSV

Clean data imports cleanly. Garbage in, garbage out.

You Need: Header Row

First row = column headers. No header row means your first data row becomes property names. (Ask me how I know.)

You Need: UTF-8 Encoding

Garbled characters after import? Encoding problem. Almost always.

How to get UTF-8:

  • Excel: Save As → CSV UTF-8 (Comma delimited)
  • Google Sheets: File → Download → CSV (it's automatic)
  • Numbers: Export To → CSV, select Unicode (UTF-8)

Quick Checklist

ThingWhy
Unique headersDuplicate column names = confusion
No blank headersCreates unnamed properties
Consistent date formatMM/DD/YYYY works best
No stray commasExtra commas = phantom columns
Closed quotesUnclosed quotes break everything

First Column Matters

Notion uses the first text column as your title property. If your first column is an ID number, that becomes your title. Probably not what you want.

Fix: Reorder columns before import. Put the descriptive field first.

Common Import Errors

"Import failed" or Timeout

File's too big. Split your CSV—stay under 10,000 rows.

Garbled Characters

Wrong encoding. Re-export with UTF-8.

Wrong Column Types

Mixed data in columns. Clean your source data, or fix property types manually after import (though you might lose data).

Missing Data or Extra Columns

Formatting issues—stray commas, unclosed quotes. Open your CSV in a text editor and look for problems.

"Merge with CSV" Not Showing Up

Your database is inline, not full-page. Open it as a full page first.

Duplicate Data After Merge

Not a bug. It's how Notion works. See the workarounds section.

Third-Party Tools

When native import fails you, these tools can help.

csv2notion

A Python CLI tool with features Notion should have built in:

pip install csv2notion
csv2notion --token YOUR_TOKEN --url DATABASE_URL your_file.csv

What you get: true merge (updates existing rows), manual column types, relation handling, duplicate detection.

csv2notion-neo

An enhanced fork with JSON support. Worth checking out.

Automation Platforms

Make, Zapier, n8n can do scheduled imports, proper record updates, and even relation population. Setup's more involved, but you get actual sync instead of "add more duplicates."

Notion API

For developers who want full control:

EndpointPurpose
POST /v1/pagesCreate pages
PATCH /v1/pages/{id}Update existing pages

Downsides: no bulk endpoint (you loop through records one by one), rate limited to 3 requests/second.

FAQ

Can I import CSV on mobile?

No. Desktop and web only.

Maximum columns?

50 properties, including system-generated ones.

Can I import into a linked database view?

No. Import into the source database.

What about non-US date formats?

Notion likes MM/DD/YYYY. Other formats often import as text. You can change the property type after, with mixed results.

Can I import files or images?

Not really. You can include URLs, but they import as URL properties, not file attachments.

Does formatting survive?

No. CSV is plain text. Bold, links, all that—gone.

Can I undo an import?

Nope. Delete the database (new imports) or manually remove the rows (merges).

When Native Import Falls Short

Notion's CSV import handles basic, one-time imports fine. But it breaks down when you need:

  • Real sync: Update records instead of creating duplicates
  • Scale: 10,000+ rows without timeouts
  • End-user uploads: Let users import CSVs with validation
  • Column mapping: Match arbitrary CSV columns to your schema

For these cases, purpose-built tools make more sense. ImportCSV gives you a drop-in importer with column mapping, validation, and webhook delivery—no need to build the UI yourself.


Bottom line: Notion's CSV import does the basics. Just know that merge creates duplicates (not updates), performance tanks past 10,000 rows, and some property types can't be imported at all. For anything beyond simple imports, you'll need third-party tools or the API.

Wrap-up

CSV imports shouldn't slow you down. ImportCSV aims to expand into your workflow — whether you're building data import flows, handling customer uploads, or processing large datasets.

If that sounds like the kind of tooling you want to use, try ImportCSV .