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.dltis Apache-2.0;psycopgis LGPL-3.0.