Description
Notion Database Import turns one connected Notion data source into one Dots Dotabase, with each source page represented as a row. The adapter discovers available data sources, translates Notion property types into Dots schema definitions, flattens page blocks into readable Markdown, and preserves source identity so later pulls update the imported row rather than duplicating it.
The importer runs through the managed connection proxy and a throttled REST client. Its cursor tracks an incremental edit-time baseline and a resumable page cursor, allowing interrupted backfills to continue and later runs to request only pages edited at or after the last high-water mark. Attachments and relations pass through the generic connector engine’s binary and deferred-link machinery.
Selling Points
- Move structured knowledge without flattening everything to plain text. Common Notion properties become typed Dotabase properties.
- Keep page content usable. Supported block children are rendered into Markdown instead of remaining opaque source references.
- Resume large imports safely. Checkpointed pagination prevents an interruption from forcing a complete restart.
- Stay current with incremental pulls. Edit-time watermarks re-fetch boundary pages safely while provenance-keyed upserts remove duplicates.
- Preserve imperfect data honestly. Unsupported or malformed values are recorded in sync metadata rather than killing the entire row.
User Story
A product team keeps a research database in Notion and wants it searchable alongside native Dots knowledge. An owner connects Notion, selects the database, maps it to a new or existing Dotabase, and starts a backfill. The team receives typed rows with readable page bodies; subsequent scheduled pulls refresh edited pages while leaving row identity stable.
Extension Surface
This feature is configurable because a binding selects the Notion resource, target Dotabase, schema strategy, field mappings, cadence, and behavior-skip choices. The available source contract is implemented in packages/connectors/src/notion/index.ts, while packages/connectors/src/notion/schema-map.ts centralizes the mapping used for both schema description and row emission. Creating a different provider adapter uses the separate pluggable Source Connector Framework; this specific Notion behavior changes through binding configuration, not runtime plugins.
Capabilities & Limits
Capabilities include source discovery, schema mirroring or mapping, page-body extraction, incremental edit detection, external-file attachment handling, formula and rollup value capture, and deferred relation resolution. Value-level degradation means one problematic property does not discard the rest of a page.
Current limits include one data source per binding, one-way import only, and partial fidelity for unsupported block types. Standalone pages and wikis, webhook tails, hard-delete reconciliation, richer block rendering, and hydration beyond platform property caps are named successors. People values are not yet mapped to Dots user identities.
Implementation Map
packages/connectors/src/notion/index.tspackages/connectors/src/notion/schema-map.tspackages/connectors/src/notion/blocks.tspackages/connectors/src/notion/map-row.tsapps/web/src/composition/connector-wiring.ts