DEV Community

Cover image for Bridging Pendo Product Telemetry into an AI Knowledge Graph with Cognee
Masum Ali
Masum Ali

Posted on

Bridging Pendo Product Telemetry into an AI Knowledge Graph with Cognee

Bridging Pendo Product Telemetry into an AI Knowledge Graph with Cognee

Product teams sit on a goldmine of context inside Pendo: in-app onboarding guides, user feature clicks, customer accounts, and drop-off points.

Yet, when product managers or AI agents want to answer fundamental qualitative questions—like "Which enterprise accounts struggled with our latest SSO migration guide?"—they are forced to write multi-tab CSV exports or complex Segment queries.

To bridge this gap, we built and shipped the Pendo Connector for Cognee. Here’s a breakdown of how it works, the architectural choices we made, and how to get it running in your environment.


The Challenge: Telemetry vs Semantic Context

Raw product analytics is dominated by click events (button_clicked_id_382). By itself, that click means nothing to an LLM unless linked to:

  • The Feature Definition: What screen or workflow did that button belong to?
  • The Guide / Walkthrough: Was the user engaged in an active onboarding tour?
  • The Account Context: What subscription tier or industry does this user belong to?
flowchart TD
    subgraph Pendo API
        G[Guides & Tours]
        F[Feature Definitions]
        E[Track Events]
        A[Accounts & Visitors]
    end

    G --> Client[PendoClient]
    F --> Client
    E --> Client
    A --> Client

    Client --> DLT[DLT Pipeline]
    DLT -->|DOCUMENT_SOURCE_ATTR| Cognee[Cognee Cognify Engine]
    Cognee --> KG[(Graph Database + Vector Embeddings)]

Architectural Deep Dive

1. Multi-Resource Aggregation with dlt

Rather than treating Pendo as a dumb event pipe, our connector extracts four distinct knowledge layers:

  • Guides: Onboarding tooltips, banners, and walkthrough step texts.
  • Features: Element selectors, UI tags, and human descriptions.
  • Track Events: Custom behavioral events sent by backend services.
  • Visitor Context: Account groupings and last-seen metadata.
class PendoClient:
    def __init__(self, integration_key: str, base_url: str = "https://app.pendo.io") -> None:
        self.integration_key = integration_key
        self.base_url = base_url.rstrip("/")

    def get_guides(self) -> list[dict[str, Any]]: ...
    def get_features(self) -> list[dict[str, Any]]: ...
    def get_track_events(self) -> list[dict[str, Any]]: ...
Enter fullscreen mode Exit fullscreen mode

2. Turning UI Hierarchies into LLM-Ready Markdown

For every guide, feature, and event, we construct rich semantic documents:

# Pendo In-App Guide: Workspace Onboarding Tour (ID: guide_489)
- **Status:** Published
- **Audience Segment:** All New Workspace Admins
- **Created At:** 2026-08-15T09:00:00Z

### Guide Steps & UI Content
- **Step 1:** Welcome to your team workspace! Let's configure your data sources.
- **Step 2:** Click here to connect your PostgreSQL or Neo4j databases.
- **Step 3:** Invite your teammates to collaborate.
Enter fullscreen mode Exit fullscreen mode

When Cognee's cognify() pipeline digests this, it extracts relationships between Guides, Features, and Onboarding Steps, allowing autonomous agents to understand the exact UX journeys users experience.


How to Use It in 60 Seconds

Installation

pip install cognee-community-connector-pendo
Enter fullscreen mode Exit fullscreen mode

Ingestion Script

import asyncio
import cognee
from cognee_community_connector_pendo import pendo_source

async def main():
    source = pendo_source(
        integration_key="YOUR_PENDO_INTEGRATION_KEY",
        include_guides=True,
        include_features=True,
        include_events=True,
        since="2026-09-01T00:00:00Z",
    )

    # Ingest into Cognee memory
    await cognee.add(source, dataset_name="product_telemetry")
    await cognee.cognify(dataset_name="product_telemetry")

    # Ask deep product questions
    results = await cognee.search(
        "What guides are active for onboarding new workspace admins?",
        dataset_name="product_telemetry"
    )
    print(results)

if __name__ == "__main__":
    asyncio.run(main())
Enter fullscreen mode Exit fullscreen mode

Offline Unit Testing

The package includes an offline pytest suite testing pagination, rate-limit backoffs, and Cognee pipeline compatibility:

uv run pytest packages/connector/pendo/tests/test_pendo.py -v
Enter fullscreen mode Exit fullscreen mode

Summary & Links

Let us know what other product tools you'd love to see connected to Cognee!

Top comments (0)