Connector Recipes: Notion · Slack · Google Drive · Postgres · Gmail · Linear · Confluence · HubSpot

Ready-made dlt pipelines that pull a source into RememberOS and keep it in sync. Each is self-contained (a minimal @dlt.resource over the source — no dlt init), incremental (re-runs only fetch what changed), and scopes its records with a container_tag so you can filter searches to one database / channel / table.

Source in connectors/{notion,slack,gdrive,postgres,gmail,linear,confluence,hubspot}/ — a pure, unit-tested map.py (record → memory) plus a pipeline.py runner.

Notion#

Syncs a database; each page's title + text properties become a memory. Auth: an internal integration token, shared with the database.

pip install dlt httpx && pip install -e connectors/dlt-longmem
export NOTION_TOKEN=secret_xxx NOTION_DATABASE_ID=xxx LONGMEM_API_KEY=mv_xxx
python connectors/notion/pipeline.py

Slack#

Syncs a channel's history (system join/leave messages filtered out). Auth: a bot token with channels:history + channels:read, invited to the channel.

export SLACK_TOKEN=xoxb-xxx SLACK_CHANNEL_ID=C0123456789 LONGMEM_API_KEY=mv_xxx
python connectors/slack/pipeline.py

Google Drive#

Lists Drive files; native Google Docs are exported to text and embedded, other files are indexed by name + link. Auth: an OAuth2 token with the drive.readonly scope.

export GDRIVE_TOKEN=ya29.xxx LONGMEM_API_KEY=mv_xxx
python connectors/gdrive/pipeline.py

Postgres#

Streams any table into RememberOS — the columns you pick are embedded as col: value text; the row id, source table, and remaining columns are kept as metadata. Uses a server-side cursor (large tables stream, never load whole) and is incremental on a monotonic column (updated_at or an id). Auth: a standard Postgres DSN.

pip install dlt psycopg && pip install -e connectors/dlt-longmem
export PG_DSN=postgresql://user:pass@host:5432/db PG_TABLE=public.customers
export PG_TEXT_COLUMNS=name,notes LONGMEM_API_KEY=mv_xxx
python connectors/postgres/pipeline.py

Gmail#

Syncs a mailbox (optionally narrowed by a Gmail search query); each message's subject, sender, and plain-text body become a memory. Auth: an OAuth2 token with the gmail.readonly scope.

export GMAIL_TOKEN=ya29.xxx GMAIL_QUERY="in:inbox newer_than:1y" LONGMEM_API_KEY=mv_xxx
python connectors/gmail/pipeline.py

Linear#

Syncs your Linear issues over the GraphQL API; each issue's title, description, and fields (state, assignee, priority, labels) become a memory, keyed by identifier (e.g. ENG-123). Auth: a personal API key (Settings → API). Optionally scope to one team.

export LINEAR_API_KEY=lin_api_xxx LINEAR_TEAM_KEY=ENG LONGMEM_API_KEY=mv_xxx
python connectors/linear/pipeline.py

Confluence#

Syncs your Confluence Cloud wiki; each page's title and body (storage-format XHTML, stripped to text with a dependency-free helper) become a memory, keyed by page id. Auth: HTTP Basic with your Atlassian email + an API token. Optionally scope to one space.

export CONFLUENCE_BASE_URL=https://yourorg.atlassian.net [email protected]
export CONFLUENCE_API_TOKEN=xxx CONFLUENCE_SPACE_KEY=ENG LONGMEM_API_KEY=mv_xxx
python connectors/confluence/pipeline.py

HubSpot#

Syncs your HubSpot CRM contacts; each contact's name and properties (title, company, email, lifecycle stage, lead status) become a memory, keyed by contact id — CRM as searchable memory for sales/support agents. Auth: a private-app token with the crm.objects.contacts.read scope.

export HUBSPOT_TOKEN=pat-xxxxxxxx LONGMEM_API_KEY=mv_xxx
python connectors/hubspot/pipeline.py
For full text of binary files (pdf, docx, pptx), use the file drop endpoint, which extracts and chunks them. These recipes embed Google Docs text and otherwise index metadata. dlt is Apache-2.0; psycopg is LGPL-3.0.