Ingest Intercom conversations, replies, articles, and contacts into CortexDB.

Intercom Connector

The Intercom connector ingests conversations, conversation parts (replies and notes), Help Center articles, and contacts from Intercom into CortexDB as typed episodes. Admin-only internal notes receive restricted visibility.

Setup

1. Create an Intercom Access Token

  1. In Intercom, go to Settings > Integrations > Developer Hub
  2. Create a new app or select an existing one
  3. Under Authentication, copy the Access Token
  4. Ensure the token has scopes for conversations, contacts, and articles

2. Configure the Connector

export CORTEX_INTERCOM_ACCESS_TOKEN=your-access-token
export CORTEX_INTERCOM_TENANT_ID=my-app
export CORTEX_INTERCOM_NAMESPACE=intercom

3. Start the Connector

cortexdb-connector intercom \
  --access-token your-access-token \
  --tenant-id my-app

Or with Docker:

docker run -d \
  --name cortex-intercom \
  -e CORTEX_INTERCOM_ACCESS_TOKEN=your-access-token \
  -e CORTEX_INTERCOM_TENANT_ID=my-app \
  cortexdb/connector-intercom:latest

What Gets Ingested

| Intercom Event | Episode Type | Content | |---|---|---| | Conversation | message | Subject and initial message body | | Reply / Part | comment | Reply body and part type | | Admin note | comment | Note body (restricted visibility) | | Article | document | Article title and body | | Contact | document | Name, email, role, companies |

Episode Metadata

{
  "type": "message",
  "content": "Conversation [open]: Need help with API integration\nHi, I'm trying to set up the webhook endpoint but getting 401 errors...",
  "source": "intercom",
  "timestamp": "2026-03-17T11:45:00Z",
  "metadata": {
    "conversation_id": "123456789",
    "state": "open",
    "priority": "priority",
    "sla_applied": true,
    "statistics": {
      "time_to_first_response": 120,
      "median_time_to_reply": 300
    }
  },
  "entities": [
    { "type": "conversation", "id": "123456789", "name": "Need help with API integration" },
    { "type": "admin", "id": "987654", "name": "Alice" },
    { "type": "contact", "id": "654321", "name": "Bob Smith" }
  ]
}

Configuration

| Variable | Default | Description | |---|---|---| | CORTEX_INTERCOM_ACCESS_TOKEN | Required | Intercom access token | | CORTEX_INTERCOM_TENANT_ID | Required | Target tenant | | CORTEX_INTERCOM_NAMESPACE | intercom | Target namespace | | CORTEX_INTERCOM_BACKFILL_DAYS | 90 | Days of history to backfill | | CORTEX_INTERCOM_INCLUDE_ARTICLES | false | Include Help Center articles | | CORTEX_INTERCOM_POLL_INTERVAL_SEC | 60 | Polling interval |

Backfill

On first run, the connector backfills conversations updated within the last CORTEX_INTERCOM_BACKFILL_DAYS days (default 90). Conversations are fetched via the search API with updated_at filtering. Conversation parts are fetched per-conversation. Contacts use the search API. Articles use page-based pagination. All endpoints handle rate limits via Retry-After header and use cursor-based pagination (starting_after).