notcrawl mirrors Notion workspace data into local SQLite and normalized
Markdown so you can search, query, diff, and share your Notion memory without
depending on the Notion UI.
It has two ingestion paths:
desktop: read-only snapshots of the local Notion desktop cacheapi: official Notion API sync with rate-limit aware crawling
SQLite is the canonical archive. Markdown is the durable human/agent surface. Git share mode publishes normalized snapshots that other machines can subscribe to without holding Notion credentials.
- local SQLite storage with FTS5
- read-only local desktop cache ingestion from macOS Notion
- official API page/block/user/comment ingestion
- Notion database metadata and row ingestion through the official API
- current Notion data-source API support plus legacy database endpoint support
- normalized Markdown export organized by Unicode-safe workspace, teamspace, and page paths
- CSV/TSV export for crawled Notion database rows
- compressed JSONL git-share snapshots plus import/update workflows
- archive status, activity reporting, and SQLite maintenance commands
- read-only SQL access for ad hoc inspection
brew tap vincentkoc/tap
brew install notcrawlYou can also download archives, .deb, or .rpm packages from the
latest release.
Use the local Notion Desktop cache:
notcrawl init
notcrawl doctor
notcrawl status
notcrawl report
notcrawl sync --source desktop
notcrawl export-md
notcrawl search "launch plan"Or use the official Notion API:
export NOTION_TOKEN="secret_..."
notcrawl sync --source api
notcrawl databases
notcrawl export-db --database DATABASE_ID --format csv --output roadmap.csv
notcrawl export-db --all --dir exports/csvDefault paths:
- config:
~/.notcrawl/config.toml - database:
~/.notcrawl/notcrawl.db - cache:
~/.notcrawl/cache - Markdown archive:
~/.notcrawl/pages - git share repo:
~/.notcrawl/share
initwrites a starter configdoctorchecks config, SQLite, desktop cache, and token presencestatusprints archive counts, last sync time, and database/WAL sizereportsummarizes recent page, database, space, and comment activitymaintainrebuilds FTS, optimizes SQLite indexes, and can runVACUUMsyncingests fromdesktop,api, orallexport-mdrenders normalized Markdown files from SQLitedatabaseslists crawled Notion databasesexport-dbexports one crawled Notion database, or all databases with--all --dir, to CSV or TSVsearchsearches page and comment text through FTS5sqlruns read-only SQL against the archivepublishexports SQLite tables and Markdown into a git share reposubscribeclones a share repo and imports the latest snapshotupdatepulls and imports a subscribed share repo
Release packaging is managed with GoReleaser. Tagged releases build tarballs,
checksums, .deb, .rpm, GitHub release notes, and a Homebrew tap update.
See docs/distribution.md for release operations.
Desktop mode is read-only. It snapshots Notion's local SQLite database before reading it and never writes to Notion application storage.
API mode uses the official Notion API. It stores raw API payloads alongside normalized rows so renderers can improve without recrawling.
Secrets are never exported into Markdown or git-share snapshots.
