Notion Connector
Sync pages and databases from your Notion workspace into LH42.
Features
- Pages - Full page content with block structure
- Databases - Database entries as individual documents
- Nested content - Child pages and sub-pages
- Rich text - Preserves formatting, links, mentions
- Incremental sync - Only changed pages re-indexed
- Block conversion - Notion blocks → searchable markdown
Prerequisites
- Notion workspace admin access
- Notion integration created (or use our managed integration)
Setup
Step 1: Connect via OAuth
- Go to Settings > Integrations
- Find Notion and click Connect
- Select the workspace to connect
- Choose pages/databases to share with the integration
> Note: You must explicitly share pages with the integration in Notion for them to be accessible.
Step 2: Share Content with Integration
In Notion:
- Open a page or database
- Click Share in the top right
- Invite the LH42 integration
- Repeat for each top-level page you want synced
Step 3: Configure Settings
python
client.connectors.configure("notion", {
"settings": {
"workspace_id": "optional-workspace-id", # Filter to workspace
"include_databases": True, # Sync database entries
"include_archived": False # Skip archived pages
}
})Step 4: Start Initial Sync
python
client.connectors.sync("notion", mode="full")Content Transformation
Notion blocks are converted to searchable markdown:
| Notion Block | Output |
|---|---|
| Paragraph | Plain text |
| Heading 1/2/3 | # / ## / ### |
| Bulleted list | - item |
| Numbered list | 1. item |
| To-do | - [ ] / - [x] |
| Code | \\\`language |
| Quote | > text |
| Callout | > [icon] text |
| Table | Markdown table |
| Embed | Link reference |
API Reference
List Pages
bash
GET /api/connectors/{connector_id}/pages?limit=50
# Response
{
"pages": [
{
"id": "page_abc123",
"external_id": "12345678-abcd-...",
"title": "Product Roadmap",
"last_edited": "2026-01-20T10:30:00Z",
"synced": true
}
]
}Sync Specific Page
bash
POST /api/connectors/{connector_id}/sync
{
"mode": "incremental",
"filters": {
"page_ids": ["12345678-abcd-..."]
}
}Database Handling
Notion databases are synced as collections:
- Each database entry becomes a document
- Properties become searchable metadata
- Relations are preserved as references
python
# Filter to specific databases
client.connectors.configure("notion", {
"settings": {
"database_ids": ["db-id-1", "db-id-2"]
}
})Permissions
Notion permissions are handled at the integration level:
- Only pages shared with the integration are accessible
- Workspace members see all synced content in LH42
- For granular access, use multiple integrations
Sync Frequency
| Mode | Frequency | Use Case |
|---|---|---|
| Scheduled | Every 4 hours | Standard sync |
| On-demand | Manual trigger | Immediate updates |
Troubleshooting
"Page not found" errors
- Verify the page is shared with the LH42 integration
- Check the integration has access to the workspace
Missing content
- Some block types may not be fully supported
- Ensure nested pages are also shared
Sync taking too long
- Large workspaces may take longer on first sync
- Use
database_idsfilter to limit scope
Next Steps
- Confluence Connector - Connect Confluence
- Integrations Overview - Architecture overview