Quick Answer
Notion CSV imports fail or produce wrong results for five main reasons: property type mismatches (date/number format wrong), encoding issues producing garbled characters, duplicate rows from re-importing the same CSV, relation and formula properties that simply cannot be imported via CSV, and file size limits (5MB free, 50MB paid).
The fix: Validate your CSV structure and format before importing. Use UTF-8 encoding. Format dates as YYYY-MM-DD (ISO — safest across all locales). Format multi-select values as comma-separated strings without quotes. Merge carefully — Notion always adds new rows, it never updates existing ones.
Why it happens: Notion's import maps CSV columns to database properties by header name match and attempts to parse values into the target property type. Type mismatches produce silent data loss — the row imports but the value is dropped.
What Notion's Import Behavior Actually Means
Garbled names or characters after a successful import — Your CSV was not saved with UTF-8 encoding. Re-export the file as UTF-8 and re-import.
"Values with commas not showing when mapped to Select" — A multi-select column with comma-separated values is being mapped to a Select property, which only accepts a single value. Map that column to a Multi-select property instead.
Import succeeds but fewer rows than expected — Notion silently drops rows when it cannot parse required values. Check date format (use YYYY-MM-DD), number format (no currency symbols), and header row accuracy.
Duplicates appearing after import — You imported the same CSV twice, or imported a CSV containing rows already in the database. Notion's import always adds new rows — it never updates existing rows, even if the content is identical. There is no deduplication on import.
Relation, rollup, or formula columns missing after import — These property types cannot be imported via CSV. Notion ignores them during import. You must rebuild these properties manually after importing.
Import creates a new database instead of merging into the existing one — You used the wrong import path. To merge into an existing database, open the database → click the •• menu → select "Merge with CSV" (not Settings → Import → CSV, which creates a new database).
Fast Fix (90 Seconds)
If your Notion CSV import failed or produced wrong results, try this first:
- Check encoding — If you see garbled characters, open your CSV in a text editor. If the file was saved from Excel on Windows, re-save as UTF-8 (File → Save As → encoding dropdown → UTF-8).
- Check date format — Notion is most reliable with YYYY-MM-DD (ISO format). If your dates are in MM/DD/YYYY or other formats, convert to YYYY-MM-DD before importing.
- Check for duplicate import — If you see more rows than expected, you may have imported twice. Notion adds rows, never updates. Delete the duplicates before re-importing.
- Use Merge with CSV for existing databases — Open your database, click
••→ "Merge with CSV" to add rows to an existing database. - Remove relation and formula columns — Strip any Relation, Rollup, or Formula columns from your CSV before import. Notion ignores these silently.
If property types are mapping incorrectly or data is being dropped, continue below.
TL;DR: Notion CSV imports always add rows — they never update existing ones. Import the same CSV twice and you have every row doubled with no error message. Use "Merge with CSV" (not Settings → Import) to add to existing databases. Validate your CSV structure before importing with SplitForge Data Validator to catch type mismatches before Notion silently drops them.
Your team has been building a content calendar in a spreadsheet for the last six months. You've finally decided to move everything to Notion. You export the spreadsheet as CSV, import it — success. Then someone imports it again to "update" a few rows. Now every item is duplicated. You import a third time trying to fix it. Now everything is tripled.
Notion's import adds rows. Every time. With no warning that this is how it works.
Each error scenario was reproduced using Notion's CSV import tool via Settings → Import, March 2026.
| Error / Symptom | Root Cause | Fix |
|---|---|---|
| Garbled characters after import | Non-UTF-8 encoding | Re-export as UTF-8 |
| Multi-select values not importing | Column mapped to Select instead of Multi-select | Change property type to Multi-select |
| Fewer rows than expected | Date/number parse failure, silent drop | Fix date format to YYYY-MM-DD, remove currency symbols |
| Duplicate rows after import | CSV imported multiple times | Merge adds rows, doesn't update — use UNIQUE_ID pattern |
| Relation columns missing | Relations can't be imported via CSV | Rebuild relations manually after import |
| Import creates new database | Wrong import path | Use •• → Merge with CSV instead |
| Select options not available after merge | New option created during merge | Change property to Text, then back to Select |
| Numbers with $ or % not importing | Currency/percentage format not recognized | Remove formatting, import as plain number |
How Notion Compares to Other Import Systems
| Platform | Strict on data types? | Updates existing rows? | Deduplicates? | Safe date format | Max rows |
|---|---|---|---|---|---|
| Notion | Partial — silent drop | No — append only | No | YYYY-MM-DD safest | ~50K practical |
| PostgreSQL COPY | Yes — errors immediately, full rollback | N/A (append only) | No | YYYY-MM-DD | Server/memory limits |
| Google Sheets | No — silent coercion | Yes (paste over) | No | YYYY-MM-DD safest | 10M cells |
| monday.com | Yes on labels/status — silent drop | No — append only | No | YYYY-MM-DD | 8,000 |
| NetSuite | Yes on references — row-level error | Yes (Update mode) | No | Account date format | Import Assistant limits |
Notion and monday.com share the same failure mode: "successful" imports with silently dropped data. The difference is that monday.com has a 8,000-row hard cap; Notion is practically limited to around 50,000 rows before performance degrades significantly.
Table of Contents
- How Notion's CSV Import Actually Works
- Should You Even Use Notion CSV Import?
- Fix 1: Encoding — Garbled Characters
- Fix 2: Property Type Mismatches
- Fix 3: Multi-Select Format
- Fix 4: Duplicate Row Problem
- Fix 5: Properties That Cannot Be Imported
- Fix 6: File Size Limits
- Merging Into an Existing Database
- Additional Resources
- FAQ
This guide is for: Teams migrating data into Notion from spreadsheets or other tools, knowledge managers setting up new Notion databases, anyone getting unexpected results from Notion's CSV import feature.
How Notion's CSV Import Actually Works
Understanding Notion's import model prevents the most common mistakes.
CSV → Database: Rows become database pages. Columns become properties. Notion guesses property types based on the data in each column — numbers map to Number, dates to Date, everything else to Text.
Import always adds, never updates. This is the most important rule. Every CSV import appends new rows. There is no "update if exists."
Import the same CSV twice: every row doubles. Import it three times: every row triples. There is no warning. There is no undo.
Merge path vs import path: Settings → Import → CSV creates a brand new database. The •• menu → "Merge with CSV" inside an existing database adds rows to that database. These are completely different operations.
Property type guessing is imperfect: If a column contains mixed data types, Notion imports it as Text. This prevents data loss but is frequently confusing.
Should You Even Use Notion CSV Import?
Before importing, be clear about what you're trying to do.
Use CSV import if:
- You're doing a one-time migration from a spreadsheet or other tool
- The data is static and won't need to be updated via CSV again
- You're adding genuinely new rows that don't already exist in the database
Do NOT use CSV import if:
- You need to update existing rows (Notion can't do this via CSV)
- You'll be importing from the same source more than once
- You need ongoing sync between a spreadsheet and Notion
If you need updates or recurring imports: Use the Notion API, Notion2Sheets, Zapier, or Make instead of repeated CSV imports. CSV import is a migration tool, not a sync tool.
Fix 1: Encoding — Garbled Characters
If names like "Müller" appear as "Müller" or similar garbled strings after import, your CSV was not saved with UTF-8 encoding.
Cause: Excel on Windows saves CSV files in Windows-1252 (ANSI) encoding by default. Notion expects UTF-8.
Fix Option A — Re-save from Excel:
- Open your spreadsheet in Excel.
- Go to File → Save As.
- In the file type dropdown, select CSV UTF-8 (Comma delimited) (*.csv).
- Save, then re-import to Notion.
Fix Option B — Convert in Google Sheets:
- Upload your file to Google Sheets (File → Import).
- Once imported, go to File → Download → Comma-separated values (.csv).
- Google Sheets exports CSVs in UTF-8. Import this file to Notion.
Fix Option C — Convert with SplitForge:
Run your file through SplitForge Delimiter & Encoding Fixer. It detects and converts encoding locally in your browser — your data is never uploaded.
Per Notion's official help documentation, re-exporting as UTF-8 is the recommended fix for garbled characters on import.
Fix 2: Property Type Mismatches
Notion maps CSV columns to property types based on what it detects in the data. Mismatches produce silent data drops — the row imports but the field is blank.
Date properties: Use YYYY-MM-DD (ISO 8601) format. This is the safest format across all account locales — it works on US, EU, and international accounts. MM/DD/YYYY may parse correctly on US accounts but frequently fails or flips dates on EU/UK accounts or mixed-locale teams. Don't risk it: standardize to YYYY-MM-DD before every import.
Convert dates to YYYY-MM-DD before importing. In Excel: select the date column → Format Cells → Custom → type YYYY-MM-DD.
Number properties do not accept currency symbols, percentage signs, or thousands-separator commas. $1,250.00 fails. 1250 works.
Strip all formatting from number columns before import: remove $, €, %, and , from numeric values.
If a column has mixed data types (some text, some numbers), Notion imports the entire column as Text. This is correct — it prevents data loss. After import, you can manually change the property type in Notion if all remaining values are uniform.
After import type adjustment: If Notion imported a column as the wrong type, click the property header → change the type. Notion attempts to recast existing values.
Fix 3: Multi-Select Format
Multi-select columns in Notion store multiple values per cell. In CSV format, these values must be comma-separated within the cell.
Correct CSV format for multi-select:
Name,Tags
Project Alpha,"Design,Development,Research"
Project Beta,"Marketing,Launch"
The multi-select values are quoted as a group, separated by commas inside the quotes.
What goes wrong: If you map a column containing comma-separated values to a Select property (single value), Notion only imports the first value and drops the rest. The fix is to ensure the column is mapped to Multi-select, not Select, during the import step.
After import — new options not appearing in dropdown: If a merge import added new select option values that didn't previously exist in the database, those values are stored but don't appear as selectable options. Fix: change the property type to Text, then change it back to Multi-select or Select. This forces Notion to rebuild the options list from all existing values.
Fix 4: Duplicate Row Problem
Notion's import adds rows every time, regardless of whether identical content already exists. Importing the same CSV twice creates every row twice. There is no built-in deduplication.
Prevention (most important):
Keep a record of which CSVs you've imported and when. Before importing, confirm whether you're adding truly new data or updating existing rows.
The UNIQUE_ID dedup pattern (the real fix):
Notion has no update logic. If you need to manage re-imports without duplicates, you have to simulate it. Here's the pattern experienced teams use:
- Add a
UNIQUE_IDcolumn to your CSV before the first import — use email, record ID, or a generated hash from the row's key fields. This becomes your dedup key. - Before any subsequent import, export your current Notion database as CSV.
- Compare UNIQUE_ID columns between your new import CSV and the Notion export using SplitForge CSV Compare — this identifies which rows already exist.
- Strip existing rows from your import CSV, leaving only genuinely new rows.
- Import only the new rows via Merge with CSV.
Minimal version (no tooling needed):
Your import CSV: UNIQUE_ID | Name | Status | Due Date
user_001 | ...
user_002 | ...
Notion export: UNIQUE_ID | Name | Status | Due Date
user_001 | ... ← already exists, remove from import
user_003 | ... ← also exists, remove
Import only: user_002 | ... ← new row only
This pattern prevents duplicates entirely, even across repeated imports of the same source data.
If you need true update functionality (overwrite existing rows with new values), Notion's built-in import cannot do it. You need a third-party sync tool (Notion2Sheets, Zapier, Make) or the Notion API with a server-side dedup check.
Cleaning up duplicates after double-import:
- Add a filter to your database to show rows by Created Date.
- Sort by Created Date descending.
- Select all rows with the most recent created date (the duplicate import batch).
- Delete them.
For tools that help identify duplicate rows before re-importing, see remove duplicate rows before CRM import.
Fix 5: Properties That Cannot Be Imported
Notion's CSV import silently ignores several property types. These are not imported and do not produce errors — they simply don't appear in your database after import.
Properties that cannot be imported via CSV:
- Relation properties (links between databases)
- Rollup properties (computed from relations)
- Formula properties (calculated fields)
- Person/People properties (team member assignments)
- Files & Media properties (attachments)
- Button properties
What to do: Strip these columns from your CSV before importing to keep your column mapping clean. Rebuild these properties manually in Notion after the import is complete.
For a clean column extraction workflow before importing, see our guide on CSV column operations.
Fix 6: File Size Limits
Notion enforces file size limits per import:
- Free plan: 5MB per file
- Paid plans (Plus, Business, Enterprise): 50MB per file
A 5MB CSV is approximately 50,000–100,000 rows depending on content. If your file exceeds the limit, split it into batches before importing.
Use SplitForge CSV Splitter to divide large files by row count. For a Notion Free plan, split into batches of 40,000 rows or less to stay safely under 5MB. Import each batch using "Merge with CSV" in the existing database.
Merging Into an Existing Database
The most common structural error in Notion imports: using the wrong import path.
Wrong path (creates new database): Settings → Import → CSV → select file
Correct path (adds to existing database):
- Open the Notion database you want to import into.
- Click the
••(three dots) menu at the top of the database. - Select "Merge with CSV".
- Upload your CSV.
- Map columns to existing properties.
Column name matching: For a merge, your CSV column headers must exactly match the database property names. A column named Due Date in your CSV must match a property named Due Date in the database — not Due date or Duedate. Case-sensitive.
For more on what to verify before importing any CSV, see our CSV import errors complete guide and the CSV data type mismatch fix guide.
Additional Resources
Notion Official Documentation:
- Import data into Notion — Official import paths, supported file types, property types, and file size limits
- Notion CSV property format guide — Official format requirements for each property type
Standards:
- RFC 4180: CSV Format Specification — Official CSV quoting and delimiter standard
- Unicode UTF-8 Standard — Character encoding reference
Related Resources:
- MDN File API — Browser-side file handling reference