Google Sheets → Notion
Download the sheet as CSV and import it as a Notion database. The import adds rows. It does not update them, and it does not create relations, rollups, or formulas.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Google Sheets
- Shared spreadsheets that most teams can open, comment on, filter, and download
- Structured ownership, status, and workflow views improve operational visibility
- Relations, attachments, and automations have to be rebuilt with formulas or scripts
- Custom fields, automations, history, and reporting are difficult to reproduce exactly
Notion
- Polished pages and databases let teams build flexible workspaces without code
- Flexible documents make it easy to capture and organize team knowledge
- Offline use, export fidelity, and large-workspace governance remain weak points
- Structure, links, permissions, and rich blocks often degrade during export
Notion: Polished pages and databases let teams build flexible workspaces without code. This removes a major source-side concern: Relations, attachments, and automations have to be rebuilt with formulas or scripts.
What you lose: Shared spreadsheets that most teams can open, comment on, filter, and download. What you inherit: Offline use, export fidelity, and large-workspace governance remain weak points.
Jump to a section
Know the shape of the move.
This timeline assumes
- The sheet is a table you want as a Notion database. The site already documents Google Docs → Notion, Notion → Google Docs, and Google Sheets → Airtable.
- You download a CSV from Sheets with File, Download. One tab is one file.
- The first row is headers. Notion says a CSV row becomes a page and a column becomes a property.
- You can live with an add-only import. Notion says imports and merges add rows and do not update existing ones.
- The sheet stays available until the database page count matches.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| The sheet as a database | partial | critical | Notion's CSV import creates a database, or merges into an existing one. Rows become pages. Columns become properties. You map each column. Start from Settings, Import, CSV, or type /csv. | Import into a new database first. |
| File size | partial | high | Notion says the CSV limit is 5 MB on the Free plan and 50 MB on paid plans. A Sheet that is larger has to be split or filtered before download. | Check the CSV size before you upload. Split by a column you can filter on later. |
| Adds, not updates | manual | critical | Notion says imports add rows and do not update existing rows. Merge with CSV, from the database menu, also adds rows. Matching headers to property names matters for a merge, and it still does not update a page that is already there. | Import once into an empty database. A fix is a new database, or you accept duplicates. |
| Relations, rollups, and formulas | lost | critical | A new CSV import cannot create relations, rollups, or formulas. Notion says you rebuild those after import. If you merge into a database that already has a relation property, you can map a column onto that existing relation. | Create relations after the load, or create the empty database with relations before a merge. |
| Dates and selects | partial | high | Notion says dates import as MM/DD/YYYY. A value with commas mapped to a Select should be mapped to Text instead, or it will not show. Numbers such as currency, percents, and negatives should be mapped to Text if they import wrong. Mixed types may arrive as text. The title property does not support formatting. | Map awkward columns to Text, then change the type after you see the values. |
| Encoding and headers | partial | high | Notion says garbled characters mean you should re-export as UTF-8. The first row must be headers, and every cell needs a header. A merge matches headers to property names exactly. | Rename the header row to the property names before a merge. Keep the CSV in UTF-8. |
| Formulas in the sheet | manual | high | The CSV is values. A Sheets formula does not become a Notion formula, and Notion will not create one during the import. | Rebuild the formula in Notion after the pages exist, or keep the value and label it as a snapshot. |
| Several tabs | manual | high | File, Download gives you the spreadsheet file you chose to download. A CSV is one table. Each tab you care about is its own import and its own database. | Download and import tab by tab. |
| Comments and notes | lost | medium | Notion's CSV page does not list comments, notes, or protected ranges as imported fields. | Copy comments into a column before you download, if you still need them. |
| Sharing | manual | high | A sheet's link does not become Notion page permissions. The new database inherits the workspace you imported into. | Import into a private page, then share it. |
| The sheet after import | clean | medium | The import uploads a CSV. It does not delete the Google Sheet. Notion's export help is the other direction and is not a sync. | Make the sheet read-only so the two copies do not diverge. |
| A too-wide or too-tall sheet | partial | medium | Google's own import help is about bringing files into Sheets, and it is the place that names the too-large error for Sheets. For this direction the binding limit is Notion's 5 MB or 50 MB CSV cap, which you can measure on the downloaded file. | If the CSV is over the plan limit, split it before upload. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Tab | CSV file | manual | File, Download. One tab at a time. |
| Header | Property name | transform | Must match exactly on a merge. |
| Row | Database page | automatic | Added, not updated. |
| Column | Property | transform | You map it during import. |
| Date | Date property | transform | Notion says MM/DD/YYYY. |
| Comma-separated select | Text property | manual | Notion says a Select mapping drops these values. |
| Formula | Value only | manual | Rebuild the formula later. The import will not create one. |
| Relation | Existing relation, only on a merge | manual | A new import cannot create a relation. |
| Comment | No destination | unsupported | Put it in a column before download if you need it. |
| Sheet permission | Notion share you set | manual | Not imported. |
Make the move recoverable.
Create the source-of-truth backup
Keep the sheet and the CSV until the Notion database is accepted.
- Name the tab and confirm the first row is headers.
- Download CSV and check the file size against 5 MB or 50 MB.
- Save a second copy of the CSV.
- Make the sheet read-only when you are ready for the final file.
- Leave the sheet in Drive.
Proof to capture: A UTF-8 CSV on disk and the sheet still open.
CSV
Give Notion a file it can map.
- Download the tab as CSV.
- Re-save as UTF-8 if a pilot shows garbled text.
- Put dates in a form you can read as MM/DD/YYYY, which is what Notion says it imports.
- Move comma-heavy cells into columns you will map as Text.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
New database
Add the rows once.
- Use Settings, Import, CSV, or /csv.
- Create a new database.
- Map columns. Use Text where Select or a number would drop characters.
- Do not merge into that database again unless you want duplicate pages.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
A second import duplicates the database
You merge the same CSV after fixing a header.
- Consequence
- Notion adds pages. It does not update the ones from the first import.
- Mitigation
- Delete the pilot database and import the fixed file once.
Stop if: The live database already contains the first file.
A relation was expected from a blank import
Two sheets refer to each other and you imported each as a new database.
- Consequence
- Notion will not create the relation. The link is text.
- Mitigation
- Create the relation property afterward, or merge into a database that already has it.
Stop if: The workflow depends on a relation and you have no plan to build it.
The file is over the plan limit
The CSV is over 5 MB on Free, or over 50 MB on a paid plan.
- Consequence
- Notion's import does not take the file.
- Mitigation
- Split the CSV before the upload.
Stop if: You have one file and it is over the limit.
Do the work in this order.
- Days 1 to 2 · inventory
Tabs and properties
2 to 5 hours active1 to 2 days elapsedSheet owner waiting- List tabs.
- Mark columns that are selects, dates, or links.
Depends on: Sheet access
Stop / go checkpointDownload?
Go when: Each tab is a future database or explicitly dropped.
Stop when: A relation is required and nobody owns rebuilding it.
- Day 2 · backup
CSV
1 to 3 hours active1 day elapsedNone waiting- Download each tab.
- Check size and UTF-8.
Depends on: Inventory
Stop / go checkpointImport a pilot?
Go when: The file is under the plan limit and the header row is real.
Stop when: The file is over 5 MB or 50 MB and not split.
- Days 2 to 5 · pilot
New database
3 to 8 hours active2 to 3 days elapsedReview waiting- Import into a new database.
- Check dates and a select.
- Note relations you still have to create.
Depends on: CSV
Stop / go checkpointImport the other tabs?
Go when: Page count matches CSV rows.
Stop when: Values are garbled or a select column is empty.
- Days 5 to 7 · cutover
Read-only sheet
2 to 4 hours active1 to 2 days elapsedEditors waiting- Stop edits in the sheet.
- Download and import the final CSV once.
- Share the Notion page.
Depends on: Pilot accepted
Stop / go checkpointUse the database?
Go when: The final page count matches.
Stop when: You would need a second import into the same database.
- Days 7 to 12 · observe
Keep the sheet
1 to 3 hours active3 to 5 days elapsedPeople using Notion waiting- Leave the sheet readable.
- Add relations and formulas Notion could not create.
- Keep the CSV.
Depends on: Database shared
Stop / go checkpointStop using the sheet?
Go when: The relations you needed now exist, or you dropped them.
Stop when: The only copy of a formula is the sheet and you still need it live.
Cut over with a way back.
Cutover
One import of a frozen CSV into a new database.
- Make the sheet read-only.
- Download the CSV.
- Import it into a new Notion database.
- Compare the page count with the row count.
- Share the page.
- Leave the sheet in Drive.
Proof to capture: The database page count matches the CSV, and the sheet is unchanged.
Rollback
Edit the Google Sheet again.
- Send people back to the sheet.
- Leave the Notion database unused, or delete the pilot.
- Keep the CSV.
- Fix headers or types.
- Import into a new database rather than merging onto the bad one.
Proof to capture: The sheet is the working copy, and you know which Notion database was the attempt.
- Page count does not match
- A second import created duplicates
- Select values disappeared
- The CSV is over the plan size
- A required relation was not created and has no follow-up
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | Size and encoding | Check the CSV is UTF-8 and under 5 MB or 50 MB for the plan. | Notion will accept the upload. | File properties. | |
V-02Blocking | First row | Open the CSV. | The first row is headers, one per column. | CSV. | |
V-03Blocking | Pages | Compare database pages with data rows. | They match. | Count note. | |
V-04Blocking | MM/DD/YYYY | Open three date properties. | The day and month are the ones from the sheet. | Date check. | |
V-05Blocking | Commas | Find a cell that contained a comma. | It is in a Text property, or the whole value is visible. | Property check. | |
V-06Blocking | Not invented | Look for a relation the import would have had to create. | It is absent, and you have a note to build it, or it was mapped onto one that already existed. | Schema note. | |
V-07Blocking | Single import | Search for a distinctive row. | One page. | Search. | |
V-08Blocking | Sheet | Open the Google Sheet. | It is still there and matches the CSV you imported. | Sheet check. |
Remove the scaffolding safely.
Safe after: The database has been used and the CSV is stored, with the sheet still readable.
- Store the CSV next to the database link.
- Add relations and formulas Notion could not create on import.
- Do not merge the same file in again.
- Keep the sheet until those formulas exist or are dropped.
- Share the Notion page to match the audience of the sheet.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- Notion: import CSVAccessed 2026-11-02
- Google Sheets: download a copyAccessed 2026-11-02
- Google Sheets: import and large filesAccessed 2026-11-02
- Notion: export and CSV in the other directionAccessed 2026-11-02