Skip to content

Export Notion database to Google Sheets, Excel, and other apps

Need to move your Notion database to Google Sheets or Excel? Discover the best methods for your specific workflow. Learn how to run simple manual CSV exports, set up automated live sync connectors, and safely execute complex relational data migrations without losing a single link.

Raaj Raaj · · 8 min read
Export Notion database to Google Sheets, Excel, and other apps
TALK TO AN ENGINEER

Planning a migration?

Get a free 30-min call with our engineers. We'll review your setup and map out a custom migration plan — no obligation.

Schedule a free call
  • 1,500+ migrations completed
  • Zero downtime guaranteed
  • Transparent, fixed pricing
  • Project success responsibility
  • Post-migration support included

For a one-time transfer, export your Notion database as Markdown & CSV and import the CSV into Google Sheets or Excel. For ongoing updates, use a connector like Sync2Sheets or Truto. For complex migrations involving massive datasets or relational structures, you will need a dedicated migration script to handle the API rate limits.

Info

This guide is accurate as of the Notion API version 2022-06-28. Notion's export behavior and API may change over time.

The Notion Data Transfer Decision Model

Before touching your data, classify your exact need. We built the Data Transfer Decision Model to help teams avoid choosing the wrong tool. Evaluate your project based on two axes: Data Complexity (relations, rollups, attachments) and Update Frequency (one-time vs live sync).

Info

Disclosure: ClonePartner, the publisher of this blog, is a migration service provider. We appear in Quadrants 3 and 4 below because those reflect genuine use cases for dedicated migration help. Evaluate all options independently.

Quadrant Scenario Best Approach Tool Example
Q1: Static Simple Flat tables, one-time report. Manual Export Native CSV Download
Q2: Dynamic Simple Flat tables, daily/live updates. Automated Connector Truto, Sync2Sheets
Q3: Dynamic Complex Relational data, live updates. Custom API Scripts Python, Notion API, Truto, ClonePartner
Q4: Static Complex Full workspace move, retaining relations. Enterprise Migration Migration Service (ClonePartner)

Manual method: export to CSV and import into Google Sheets

According to Notion's official export documentation, native exports are designed for standard backups and basic reporting. For smaller databases — based on our internal testing, roughly under 10,000 rows — this manual flow is typically the fastest option.

Step 1: Open the root database

You need to open the actual full-page database. If you export a linked view embedded on a standard page, Notion will only export the visible rows. The export will also strictly reflect your currently applied filters.

Step 2: Initiate the export

Click the three dot menu in the top right corner of the database page and choose Export.

Step 3: Configure settings

Select Markdown & CSV. If you need your image attachments, select "Everything" under the content dropdown. If you only need raw data, select "No files & images" to drastically speed up the server processing time.

Step 4: Unzip and Import

Notion generates a ZIP file. Unzip this folder on your computer. To bring this into Google Workspace, open Google Sheets, navigate to File > Import, click the Upload tab, and select your extracted CSV file.

Importing into Excel

The title of this guide promises Excel coverage, so here it is in full.

Using the Data Import Wizard

Open Excel. Go to Data > From Text/CSV. Select your extracted CSV file. In the import wizard, set the File Origin to 65001 : Unicode (UTF-8) to ensure special characters and emojis render correctly. Click Load.

Using Power Query (recommended for larger files)

For more control, use Data > Get Data > From File > From Text/CSV. Power Query lets you preview and transform columns before loading. This is especially useful for cleaning up date formats or splitting multi-value fields that Notion exports as comma-separated strings.

Excel-specific gotchas

  • Cell limits: Excel workbooks support a maximum of 1,048,576 rows × 16,384 columns per sheet. If your Notion database exceeds this, you'll need to split the export.
  • Date format parsing: Excel may auto-detect date columns incorrectly depending on your locale. If dates look wrong, use Power Query or format the column manually after import.
  • Numbers stored as text: Notion exports all CSV values as text. Excel may flag numeric columns with a green triangle warning. Use "Convert to Number" or set the column type explicitly in Power Query.

Edge Cases: What happens to complex Notion properties

A CSV is a flat text file. Notion is a 3D relational database. When exporting, according to Notion's property handling guidelines, data flattening causes several major changes.

  • Relation Properties: CSVs cannot nest data. Relations export as raw, alphanumeric internal Notion IDs. You must add a helper formula column in Notion using prop("Name") to extract the human readable text before exporting.
  • Rollups: Rollup values export as static text strings representing their current state at the exact moment of export.
  • Rich Text: Bold formatting, colors, and inline links are stripped. The cell will only contain the raw plain text.
  • Attachments: Spreadsheet cells cannot hold physical files. Your CSV will only contain text URLs. The actual image files are saved in an adjacent assets folder within your downloaded ZIP.

Common CSV Import Failures & Benchmarks

If your import fails or looks broken, check these documented platform limits and formatting rules.

The 10 Million Cell Limit: As per Google Sheets documentation, a single workbook has a hard limit of 10 million cells. If you export a massive enterprise Notion database, the CSV import will instantly fail if it breaches this cap.

UTF-8 Encoding Errors: If your text contains foreign characters or emojis that turn into gibberish in Excel, the encoding is wrong. Use Excel's "Data > From Text/CSV" import wizard and explicitly set the file origin to "65001 : Unicode (UTF-8)". See the full Excel import instructions in the section above.

Truncated Filtered Views: If rows are missing, you likely exported a view with active filters. Always create a dedicated "Export View" in Notion with zero filters and zero sorting applied.

Tool Comparison Matrix: Sync Connectors

If you fall into Quadrant 2 of the Decision Model (Dynamic Simple), you need a connector. Based on platform benchmarks and API constraints, here is how the top tools compare.

Info

Sync latency figures below are based on vendor-reported specifications and may vary depending on database size, network conditions, and API load.

Tool Best For Sync Latency Core Limitation Price Tier
Sync2Sheets Direct Google Sheets integration ~5 minutes (Scheduled) Struggles with massive multi-database relations Paid/Freemium
Truto True two-way data alignment Real-time (Webhook driven) Need to pay an upfront cost Enterprise/Premium
CSV Getter Developer-friendly API endpoints On-Demand One-way export only Freemium
Zapier/Make Trigger-action custom workflows 1 to 15 minutes Complex setup for updating existing rows Tiered by Tasks
Coupler.io Scheduled data imports to Sheets/Excel Scheduled intervals Limited transformation options Freemium/Paid
Unito Two-way sync across project management tools Near real-time Can be complex to configure for nested data Tiered by Connectors
n8n Self-hosted workflow automation On-Demand/Scheduled Requires self-hosting or cloud plan; steeper learning curve Free (self-hosted)/Paid
Native Import Simple one-time reports N/A (Manual) Data immediately becomes stale Free

Edge Case Authority: API Limits and Massive Databases

For teams handling databases larger than 10,000 rows (based on our internal testing), native CSV exports frequently result in server timeouts. You may need to transition to Quadrant 3: The Notion API.

API Authentication: Getting Started

Before making any API calls, you need to set up authentication:

  1. Create an internal integration at notion.so/my-integrations. Give it a name and select the workspace it should access.
  2. Copy the Internal Integration Token — this is your API key. It starts with ntn_ or secret_.
  3. Share the database with your integration. Open your Notion database, click the three-dot menu, go to "Connections," and add your integration. The API cannot access any database that hasn't been explicitly shared with it.

This is step zero — skip it and every API request will return a 401 or 404.

Handling API Rate Limits

The Notion API enforces a strict rate limit of 3 requests per second. If you use Zapier or custom Python scripts to dump massive databases into Google Sheets, you need to build retry logic and backoff delays into your code, or your sync will crash with HTTP 429 Too Many Requests errors.

Pagination for Large Databases

The API does not return your entire database at once. A single /v1/databases/{id}/query request returns a maximum of 100 rows. Your script must capture the next_cursor token from the JSON response and pass it into subsequent requests to page through the dataset.

Here is a basic Python example showing pagination with exponential backoff:

import requests
import time
 
NOTION_API_KEY = "your_integration_token"
DATABASE_ID = "your_database_id"
HEADERS = {
    "Authorization": f"Bearer {NOTION_API_KEY}",
    "Notion-Version": "2022-06-28",
    "Content-Type": "application/json",
}
 
def query_notion_database(database_id):
    url = f"https://api.notion.com/v1/databases/{database_id}/query"
    all_results = []
    has_more = True
    next_cursor = None
    backoff = 1
 
    while has_more:
        payload = {}
        if next_cursor:
            payload["start_cursor"] = next_cursor
 
        response = requests.post(url, headers=HEADERS, json=payload)
 
        if response.status_code == 429:
            retry_after = int(response.headers.get("Retry-After", backoff))
            time.sleep(retry_after)
            backoff *= 2
            continue
 
        response.raise_for_status()
        data = response.json()
        all_results.extend(data["results"])
        has_more = data.get("has_more", False)
        next_cursor = data.get("next_cursor")
        backoff = 1  # reset on success
        time.sleep(0.35)  # stay under 3 req/s
 
    return all_results
 
results = query_notion_database(DATABASE_ID)
print(f"Fetched {len(results)} rows")

CSV Export vs API Output: Property Fidelity

Not all properties are preserved equally across export methods:

  • Relation properties: CSV exports raw internal IDs. The API returns the related page IDs along with enough metadata to resolve them with a follow-up request.
  • Rollups: CSV gives you the computed value as a static string. The API returns the rollup configuration, letting you recompute if needed.
  • Select / Multi-select: Both methods preserve these well, but the API also returns the color metadata.
  • Files & Media: CSV gives you URLs. The API gives you signed S3 URLs that expire (typically within 1 hour), so you need to download assets promptly.

For high-fidelity data transfers, the API generally preserves more structure and metadata than CSV exports.

Multi-Database Joins

Native exports cannot perform SQL style joins. If Database A relates to Database B, your CSV export will only show raw IDs. To build a unified report in Excel, you must export both databases separately and use VLOOKUP or INDEX/MATCH functions to join the data locally.

Migration Flow for Enterprise Databases

When you hit Quadrant 4 (Static Complex), connectors and basic API scripts are insufficient. Moving a full workspace requires a strict data engineering pipeline.

  1. Schema Discovery: Map every relation, rollup, and formula. Identify cyclic relations that could cause infinite loops during extraction.
  2. ID Resolution Mapping: Build an intermediary database to store Notion's alphanumeric IDs alongside their text equivalents for safe translation.
  3. Asset Extraction: Write a dedicated script to parse all file property URLs, download the binaries locally, and upload them to your new hosting environment.
  4. Dry Run Validation: Extract a 5 percent sample size. Validate the data types against the target system's schema.
Info

About ClonePartner: We're a migration service that handles these exact enterprise edge cases. Rather than just handing you a tool, we work as a dedicated partner through the entire process. We offer unlimited sample migrations so you can verify the mapping before the final cutover. If you're evaluating whether to build this in-house or bring in outside help, our guide below covers the tradeoffs.

Read next: In-house vs Outsourced Data Migration: Which is right for your team?

Sources & References

Frequently Asked Questions

How do I export a Notion database to Google Sheets?
Export the database as Markdown & CSV. Unzip the downloaded file, open Google Sheets, and use File > Import to upload the CSV text file.
Can I sync Notion to Google Sheets automatically?
Yes. You can use specialized connectors for native integration, or workflow automation platforms to trigger updates when a Notion row changes.
Why do my Notion relations export as random text?
Notion exports relation properties as raw internal system IDs. To get readable text, you must create a new formula column in Notion to extract the related page name before you export.
What is the size limit for a Notion CSV export?
While Notion does not publish a hard block, user benchmarks show that databases exceeding 10,000 rows or containing gigabytes of nested files frequently cause the export server to time out.
Why does my exported CSV look incomplete?
The export engine strictly honors the filters applied to your current view. If you have a filter hiding completed tasks, those tasks will not appear in the final CSV.

More from our Blog