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.2.tar.gz (15.0 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.2-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: noteshift-0.1.2.tar.gz
  • Upload date:
  • Size: 15.0 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.2.tar.gz
Algorithm Hash digest
SHA256 a62c1d0346c0ac354b868632475cb1b56743288a610aa33a75fde37c893001fe
MD5 6d1404fdffd184f28af95ab59a24ca7b
BLAKE2b-256 5a6d2c7d41f0f14372128b2918ca7cdda8268ad5a2510d37fcf816319c5c27d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for noteshift-0.1.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: noteshift-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 20.0 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 68281d31c5e351ef22295485603326426f2aebe06ff63220594568a0da3aafc2
MD5 da1762f16e128b1cb18bf36edf13e760
BLAKE2b-256 43d184fcf7788b6fd01ba1a012f75e635a4fa6583bcb3898bf558dbcbbc968f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for noteshift-0.1.2-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