Skip to main content

Export Notion pages and databases to Obsidian-friendly Markdown.

Project description

NoteShift (noteshift)

NoteShift exports Notion content to Obsidian-friendly Markdown with predictable filenames, link rewriting, and checkpoint/resume support.

CI PyPI Python Versions codecov

Why it exists

Teams migrating from Notion to Obsidian consistently report four pains:

  1. broken internal links after export
  2. inconsistent filenames and folder layout
  3. long exports failing midway without resume
  4. low confidence in migration correctness

NoteShift is focused on solving those pains first.

Current capabilities

  • Export a Notion page tree to Markdown
  • Export Notion data sources/databases through API layer
  • Rewrite internal links for Obsidian compatibility
  • Preserve and download attachments
  • Resume interrupted runs via checkpoint file
  • Emit migration report (migration_report.json + .md)

Documentation

Installation

Install from PyPI

uv tool install noteshift
# or
pipx install noteshift

Install from source (development)

uv tool install .
uv sync --extra dev --extra test

Authentication

Set a Notion integration token in NOTION_TOKEN.

export NOTION_TOKEN="secret_xxx"

Basic usage

noteshift export \
  --page-id "<notion-page-id>" \
  --out ./export \
  --max-depth 2 \
  --overwrite

Output

A successful run writes:

  • Markdown files for exported pages
  • downloaded assets in the export tree
  • .checkpoint.json for resume
  • migration_report.json
  • migration_report.md

Development

uv sync --extra dev --extra test
uv run ruff format .
uv run ruff check .
uv run mypy src
uv run pytest --cov=noteshift --cov-report=term

Contract tests (pytest-vcr)

Contract tests are deterministic and replay HTTP traffic from sanitized cassettes:

uv run pytest -m contract

To re-record cassettes intentionally, set a real token in your environment and run:

VCR_RECORD_MODE=once uv run pytest -m contract

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

noteshift-0.1.3.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

noteshift-0.1.3-py3-none-any.whl (20.7 kB view details)

Uploaded Python 3

File details

Details for the file noteshift-0.1.3.tar.gz.

File metadata

  • Download URL: noteshift-0.1.3.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for noteshift-0.1.3.tar.gz
Algorithm Hash digest
SHA256 a547d280b41321661ba062aa488865b4a078b9dc5c26b47a8bb8322cf2409a9a
MD5 a2bbd129f5c9b2e212947401f5e25980
BLAKE2b-256 e886cab6c9f91f1ef0e246293de9c65c03a92f8a5700638d6e10c32b3355e696

See more details on using hashes here.

Provenance

The following attestation bundles were made for noteshift-0.1.3.tar.gz:

Publisher: release.yml on Fragment256/noteshift

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file noteshift-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: noteshift-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 20.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for noteshift-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 47e8bcb5694eec95fcd85baa455fadaaeae377ad3afbc46fbc9e35d8c5c83cc1
MD5 8e9a5576eaa370ee1aac5794eb9e9ba3
BLAKE2b-256 b13637afb279a718381b9022446dba0d679d5e592637e157fc2c0d6370b98cb3

See more details on using hashes here.

Provenance

The following attestation bundles were made for noteshift-0.1.3-py3-none-any.whl:

Publisher: release.yml on Fragment256/noteshift

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page