Skip to content

Connectors Overview

Integrate Google Drive, Gmail, Notion, OneDrive, GitHub and Web Crawler to automatically sync documents into your knowledge base

Connect external platforms to automatically sync documents into supermemory. Supported connectors include Google Drive, Gmail, Notion, OneDrive, GitHub and Web Crawler with real-time synchronization and intelligent content processing.

Supported Connectors

Google Drive

**Google Docs, Slides, Sheets**

Real-time sync via webhooks. Supports shared drives, nested folders, and collaborative documents.

Gmail

**Email Threads**

Real-time sync via Pub/Sub webhooks. Syncs threads with full conversation history and metadata.

Notion

**Pages, Databases, Blocks**

Instant sync of workspace content. Handles rich formatting, embeds, and database properties.

OneDrive

**Word, Excel, PowerPoint**

Scheduled sync every 4 hours. Supports personal and business accounts with file versioning.

GitHub

**GitHub Repositories**

Real-time incremental sync via webhooks. Supports documentation files in repositories.

Web Crawler

**Web Pages, Documentation**

Crawl websites automatically with robots.txt compliance. Scheduled recrawling keeps content up to date.

Quick Start

1. Create Connection

typescript
import Supermemory from 'supermemory';

const client = new Supermemory({
  apiKey: process.env.SUPERMEMORY_API_KEY!
});

const connection = await client.connections.create('notion', {
  redirectUrl: '
  containerTags: ['user-123', 'workspace-alpha'],
  documentLimit: 5000,
  metadata: { department: 'sales' }
});

// Redirect user to complete OAuth
console.log('Auth URL:', connection.authLink);
console.log('Expires in:', connection.expiresIn);
// Output: Auth URL: 
// Output: Expires in: 1 hour
python
from supermemory import Supermemory
import os

client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))

connection = client.connections.create(
    'notion',
    redirect_url='
    container_tags=['user-123', 'workspace-alpha'],
    document_limit=5000,
    metadata={'department': 'sales'}
)

# Redirect user to complete OAuth
print(f'Auth URL: {connection.auth_link}')
print(f'Expires in: {connection.expires_in}')
# Output: Auth URL: 
# Output: Expires in: 1 hour
bash
curl -X POST " \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "redirectUrl": "
    "containerTags": ["user-123", "workspace-alpha"],
    "documentLimit": 5000,
    "metadata": {"department": "sales"}
  }'

# Response: {
#   "authLink": "
#   "expiresIn": "1 hour",
#   "id": "conn_abc123",
#   "redirectsTo": "
# }

2. Handle OAuth Callback

After user completes OAuth, the connection is automatically established and sync begins.

3. Monitor Sync Status

typescript
import Supermemory from 'supermemory';

const client = new Supermemory({
  apiKey: process.env.SUPERMEMORY_API_KEY!
});

// List all connections using SDK
const connections = await client.connections.list({
  containerTags: ['user-123', 'workspace-alpha']
});

connections.forEach(conn => {
  console.log('Connection:', conn.id);
  console.log('Provider:', conn.provider);
  console.log('Email:', conn.email);
  console.log('Created:', conn.createdAt);
});

// List synced documents (memories) using SDK
const memories = await client.documents.list({
  containerTags: ['user-123', 'workspace-alpha']
});

console.log(`Synced ${memories.memories.length} documents`);
// Output: Synced 45 documents
python
from supermemory import Supermemory
import os

client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))

# List all connections using SDK
connections = client.connections.list(
    container_tags=['user-123', 'workspace-alpha']
)

for conn in connections:
    print(f'Connection: {conn.id}')
    print(f'Provider: {conn.provider}')
    print(f'Email: {conn.email}')
    print(f'Created: {conn.created_at}')

# List synced documents (memories) using SDK
memories = client.documents.list(container_tags=['user-123', 'workspace-alpha'])

print(f'Synced {len(memories.memories)} documents')
# Output: Synced 45 documents
bash
# List all connections
curl -X POST " \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"containerTags": ["user-123", "workspace-alpha"]}'

# Response: [{"id": "conn_abc", "provider": "notion", "email": "user@example.com", ...}]

# List synced documents
curl -X POST " \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"containerTags": ["user-123", "workspace-alpha"]}'

# Response: {"results": [...], "totalCount": 45}

How Connectors Work

Authentication Flow

  1. Create Connection: Call /v3/connections/{provider} to get OAuth URL (or direct connection for web-crawler)
  2. User Authorization: Redirect user to complete OAuth flow (not required for web-crawler)
  3. Automatic Setup: Connection established, sync begins immediately
  4. Continuous Sync: Real-time updates via webhooks + scheduled sync every 4 hours (or scheduled recrawling for web-crawler)

Document Processing Pipeline

graph TD
    A[External Document] --> B[Webhook/Schedule Trigger]
    B --> C[Content Extraction]
    C --> D[Chunking & Embedding]
    D --> E[Index in Supermemory]

    E --> F[Searchable Memory]
    E --> G[Document Search]

Sync Mechanisms

ProviderReal-time SyncScheduled SyncManual Sync
Google Drive✅ Webhooks (7-day expiry)✅ Every 4 hours✅ On-demand
Gmail✅ Pub/Sub (7-day expiry)✅ Every 4 hours✅ On-demand
Notion✅ Webhooks✅ Every 4 hours✅ On-demand
OneDrive✅ Webhooks (30-day expiry)✅ Every 4 hours✅ On-demand
GitHub✅ Webhooks✅ Every 4 hours✅ On-demand
Web Crawler❌ Not supported✅ Scheduled recrawling (7+ days)✅ On-demand

Connection Management

List All Connections

typescript
import Supermemory from 'supermemory';

const client = new Supermemory({
  apiKey: process.env.SUPERMEMORY_API_KEY!
});

const connections = await client.connections.list({
  containerTags: ['org-123']
});
python
from supermemory import Supermemory
import os

client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))

connections = client.connections.list(container_tags=['org-123'])

for conn in connections:
    print(f"{conn.provider}: {conn.email} ({conn.id})")
    print(f"Documents: {conn.document_limit or 'unlimited'}")
    print(f"Expires: {conn.expires_at or 'never'}")
# Output: notion: user@company.com (conn_abc123)
# Output: Documents: 5000
# Output: Expires: never
bash
curl -X POST " \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"containerTags": ["org-123"]}'

# Response: [
#   {
#     "id": "conn_abc123",
#     "provider": "notion",
#     "email": "user@company.com",
#     "documentLimit": 5000,
#     "createdAt": "2024-01-15T10:30:00.000Z"
#   }
# ]

Delete Connections

The DELETE /v3/connections/:connectionId endpoint accepts an optional deleteDocuments query parameter:

ParameterTypeDefaultDescription
deleteDocumentsbooleantrueWhen true, all documents imported by the connection are permanently deleted. When false, the connection is removed but documents are kept.

INFO

Setting deleteDocuments=false is useful when you want to disconnect an integration without losing the memories that were already imported.

typescript
import Supermemory from 'supermemory';

const client = new Supermemory({
  apiKey: process.env.SUPERMEMORY_API_KEY!
});

// Delete connection and all imported documents (default)
const result = await client.connections.deleteByID(connectionId);

// Delete connection but keep imported documents
const result = await client.connections.deleteByID(connectionId, {
  deleteDocuments: false
});

// Or delete by provider (requires container tags)
const result = await client.connections.deleteByProvider('notion', {
  containerTags: ['user-123']
});

console.log('Deleted:', result.id, result.provider);
python
from supermemory import Supermemory
import os

client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))

# Delete connection and all imported documents (default)
result = client.connections.delete_by_id(connection_id)

# Delete connection but keep imported documents
result = client.connections.delete_by_id(connection_id, delete_documents=False)

# Or delete by provider (requires container tags)
result = client.connections.delete_by_provider(
    provider='notion',
    container_tags=['user-123']
)

print(f"Deleted: {result.id} {result.provider}")
bash
# Delete connection and all imported documents (default)
curl -X DELETE " \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY"

# Delete connection but keep imported documents
curl -X DELETE " \
  -H "Authorization: Bearer $SUPERMEMORY_API_KEY"

# Response: {
#   "id": "conn_abc123",
#   "provider": "notion"
# }

Built as an internal reference companion.