Notion
Set up Notion token or OAuth access and understand what the connector syncs.
Notion
Supported auth methods
The Notion connector supports two auth methods:
- Token
- OAuth
In the persisted config, the active method is selected through notion.authMethod.
What OAuth means here
OAuth lets you approve syncdown in the browser instead of pasting your Notion account password into the app.
For the Notion connector, that means:
- you create or reuse a Notion public integration
- you paste that integration's client ID and client secret into
syncdown - Notion shows a browser consent screen for the workspace or account that will be connected
syncdownexchanges the callback code for tokens so later syncs can continue without reconnecting every time
On later sync runs, syncdown can continue using the approved connection without asking you to reconnect every time.
If you do not want the browser-based OAuth flow, you can still use the token-based setup instead.
TUI setup
Open Connectors → Notion.
Token flow
Choose Connect with Token.
The TUI opens the Notion integrations page:
Then it asks for the token and validates it before saving.
OAuth flow
Choose Connect with OAuth.
The TUI asks for:
- Notion public integration client ID
- Notion public integration client secret
Then it opens the browser, waits for a local callback, validates the returned access token, and finishes the connection flow.
Before you start
Prepare a Notion public integration in the Notion integrations page.
Open the setup page directly: Notion integrations.
You will need:
- the public integration client ID
- the public integration client secret
syncdown opens the integrations page from the TUI so you can create a new integration or copy the values from an existing one.
What happens during connection
- Paste the client ID.
- Paste the client secret.
syncdownopens the Notion consent screen in your browser.- Approve access for the intended workspace or account.
- Notion redirects back to the local callback server started by
syncdown. syncdownvalidates the returned access token and completes the connection.
Token vs OAuth
- Use Token if you already manage a Notion integration token manually and want the simplest non-browser setup.
- Use OAuth if you prefer a browser approval flow and want
syncdownto keep the connection usable across later syncs.
Headless setup
Token flow:
syncdown config set notion.enabled true
syncdown config set notion.authMethod token
printf '%s' "$NOTION_TOKEN" | syncdown config set notion.token --stdinOAuth flow:
syncdown config set notion.enabled true
syncdown config set notion.authMethod oauth
printf '%s' "$NOTION_CLIENT_ID" | syncdown config set notion.oauth.clientId --stdin
printf '%s' "$NOTION_CLIENT_SECRET" | syncdown config set notion.oauth.clientSecret --stdin
printf '%s' "$NOTION_REFRESH_TOKEN" | syncdown config set notion.oauth.refreshToken --stdinWhat gets synced
The connector:
- validates the chosen token or OAuth credentials
- discovers Notion pages the selected integration or OAuth-connected account can access
- discovers Notion databases the selected integration or OAuth-connected account can access
- queries pages inside each discovered database
- fetches page metadata and Markdown for each candidate page
Pages from discovered databases are written into database-specific directories when the database name is available.
Rendered Notion Markdown includes YAML frontmatter with:
- common fields such as
title,source,created,updated databasewhen the page came from a synced database- flattened top-level keys for Notion properties using frontmatter-friendly normalized names such as
status,due_date, orassignee_name
Nested properties: frontmatter is not emitted.
Incremental behavior
The connector stores a cursor between runs.
For synced databases, that cursor is used to request incremental page candidates. Top-level pages the selected integration or OAuth-connected account can access are still discovered on each run.
The connector also keeps stored snapshots in SQLite so it can avoid unnecessary rewrites when the source and render versions have not changed.
Current caveats
- Only content the selected integration or OAuth-connected account has access to is visible.
- The current implementation targets accessible pages and databases, not every possible Notion object type.
- Large or unusually complex Notion content should be validated in your workspace before relying on it for production exports.