Export Notion pages and databases to JSON with filtering and advanced options
Project description
Notion to JSON Exporter
Export your entire Notion workspace to JSON format with a simple command-line tool.
Features
- Export all pages and databases from your Notion workspace
- Systematic traversal of nested content
- Progress tracking with rich terminal UI
- JSON format preserving Notion structure
- Secure API key handling via CLI or environment variables
- Rate-limited API calls to respect Notion's limits
Installation
From PyPI
# Using pip
pip install notion-to-json
# Using uv
uv pip install notion-to-json
# Using uvx (no installation needed)
uvx notion-to-json --api-key YOUR_API_KEY
From source
# Clone the repository
git clone https://github.com/jonatkinson/notion-to-json.git
cd notion-to-json
# Install dependencies
uv sync
Usage
Basic usage
# Export entire workspace (default)
export NOTION_API_KEY="your-integration-token"
notion-to-json
# Using command-line flag
notion-to-json --api-key "your-integration-token"
# Specify output directory
notion-to-json --output-dir ./my-exports
# Export creates:
# - exports/pages/ # Individual page JSON files
# - exports/databases/ # Individual database JSON files
# - exports/manifest.json # Export summary and metadata
# Test API connection only
notion-to-json --test --api-key "your-integration-token"
# Search and list all pages and databases
notion-to-json --search --api-key "your-integration-token"
# List ALL pages (not just first 10) and databases
notion-to-json --list-all --api-key "your-integration-token"
# Save search results to a JSON file
notion-to-json --search --save-list "notion-content.json" --api-key "your-integration-token"
# Retrieve specific page content
notion-to-json --get-page "page-id-here" --api-key "your-integration-token"
# Save page content to file
notion-to-json --get-page "page-id-here" -o "page-content.json" --api-key "your-integration-token"
# Retrieve specific database content
notion-to-json --get-database "database-id-here" --api-key "your-integration-token"
# Save database content to file
notion-to-json --get-database "database-id-here" -o "database-content.json" --api-key "your-integration-token"
Advanced options
# Verbose logging
notion-to-json --verbose
# Quiet mode (errors only)
notion-to-json --quiet
# Log to file
notion-to-json --log-file export.log
# Export only pages
notion-to-json --filter-type page
# Export only databases
notion-to-json --filter-type database
# Filter by title pattern (regex)
notion-to-json --include-pattern "Project.*2024"
notion-to-json --exclude-pattern "Archive|Draft"
# Export items modified after a date
notion-to-json --modified-after "2024-01-01"
# Combine filters
notion-to-json --filter-type page --include-pattern "Meeting" --modified-after "2024-06-01"
Getting a Notion API Key
- Go to https://www.notion.so/my-integrations
- Create a new integration
- Copy the "Internal Integration Token"
- Share your Notion pages/databases with the integration
Development
Setup
# Install development dependencies
make install
# Run linting
make lint
# Format code
make format
# Run tests
make test
# Run all checks
make dev
Project Structure
notion-to-json/
├── src/
│ └── notion_to_json/
│ ├── cli.py # CLI interface
│ ├── client.py # Notion API client
│ ├── models.py # Data models
│ └── exporter.py # JSON export logic
└── tests/ # Test suite
Roadmap
- Phase 1: Project setup and structure
- Phase 2: Notion API client implementation
- Phase 3: Content discovery (pages & databases)
- Phase 4: Full content retrieval
- Phase 5: JSON export functionality
- Phase 6: CLI enhancements and distribution
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file notion_to_json-1.0.0.tar.gz.
File metadata
- Download URL: notion_to_json-1.0.0.tar.gz
- Upload date:
- Size: 30.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa3dcb992b40418d8dfcab1ea0adf0679fc96a5c3de6ec99044b7f15314ff560
|
|
| MD5 |
5228dbdcf896f529d6446cbd1d341dd4
|
|
| BLAKE2b-256 |
c2f4d8806b7df8136d7eb8866965b3377a9d2f345745455e56e7b3f83364463a
|
Provenance
The following attestation bundles were made for notion_to_json-1.0.0.tar.gz:
Publisher:
publish.yml on jonatkinson/notion-to-json
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notion_to_json-1.0.0.tar.gz -
Subject digest:
fa3dcb992b40418d8dfcab1ea0adf0679fc96a5c3de6ec99044b7f15314ff560 - Sigstore transparency entry: 243043375
- Sigstore integration time:
-
Permalink:
jonatkinson/notion-to-json@da594e4c63ab6110f632d34f98629f3c14db7a50 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/jonatkinson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@da594e4c63ab6110f632d34f98629f3c14db7a50 -
Trigger Event:
release
-
Statement type:
File details
Details for the file notion_to_json-1.0.0-py3-none-any.whl.
File metadata
- Download URL: notion_to_json-1.0.0-py3-none-any.whl
- Upload date:
- Size: 16.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02a60320edddffadfb315b05e8f180f5a172d78e2b2d1a9283bbdc8685b91876
|
|
| MD5 |
e0ea4c67c5e80e279198bfe74d76d30c
|
|
| BLAKE2b-256 |
7c6184605809f984954537bf228424f3a540ef501d9038f42c2cef4a6e3ad0d3
|
Provenance
The following attestation bundles were made for notion_to_json-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on jonatkinson/notion-to-json
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notion_to_json-1.0.0-py3-none-any.whl -
Subject digest:
02a60320edddffadfb315b05e8f180f5a172d78e2b2d1a9283bbdc8685b91876 - Sigstore transparency entry: 243043378
- Sigstore integration time:
-
Permalink:
jonatkinson/notion-to-json@da594e4c63ab6110f632d34f98629f3c14db7a50 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/jonatkinson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@da594e4c63ab6110f632d34f98629f3c14db7a50 -
Trigger Event:
release
-
Statement type: