Extension Overview
Architecture and capabilities of the DMTR Chrome extension for private market intelligence enrichment.
Overview
The DMTR Chrome extension detects private companies on supported research platforms, resolves them against the Blackmoat intelligence database via the DMTR API, and renders structured enrichment in a side panel. When you visit a PitchBook company page, the extension extracts the entity, calls /v1/intelligence/enrich/:slug, and displays the company profile, transaction history, key people, valuation metrics, and — if DMTR positions exist — transferability status.
The extension is the Layer 1 surface of the contributed data flywheel: free page-level utilities that demonstrate value before asking for anything in return.
Architecture
The extension is a Manifest V3 Chrome extension (packages/extension/) with four components:
| Component | File | Role |
|---|---|---|
| Background service worker | src/background/index.ts | Handles messaging between content scripts and the side panel, manages API calls to the DMTR backend, and controls the side panel lifecycle. |
| Content scripts | src/content/index.ts | Injected on matched sites. Finds the active SiteAdapter, calls extractEntities(), and sends detected entities to the service worker. |
| Side panel | src/panel/ | React app rendered in Chrome's side panel. Three tabs: Know (intelligence), Own (portfolio — placeholder), Signal (market signals — placeholder). |
| Site adapters | src/adapters/ | Declarative per-site entity extraction. Each adapter defines URL patterns, CSS selectors for entity extraction, and injection points for UI enrichment. |
SiteAdapter interface
Every supported site gets one adapter implementing this interface:
interface SiteAdapter {
name: string;
patterns: Array<{ hostname: string; pathname?: string }>;
extractEntities(doc: Document): ExtractedEntity[];
injectionPoints(doc: Document): InjectionPoint[];
}Currently implemented: PitchBook. See PitchBook adapter for details.
Data flow
- User navigates to a PitchBook company page
- Content script runs
pitchbookAdapter.extractEntities(document)→ extracts company name - Content script sends
ENTITIES_DETECTEDmessage to service worker - Side panel receives entities, calls
POST /v1/intelligence/resolveto match the name - Side panel calls
GET /v1/intelligence/enrich/:slugfor the matched entity - Side panel renders the Know tab with entity profile, metrics, transactions, people, and transferability badge
Three-layer tab architecture
| Tab | Layer | Status | Description |
|---|---|---|---|
| Know | Layer 1 — Page utilities | Implemented | Entity enrichment: profile, metrics, transactions, people, transferability |
| Own | Layer 2 — Personal knowledge graph | Placeholder | Portfolio tracking, deal tracker, relationship graph (requires DMTR account) |
| Signal | Layer 3 — Collective intelligence | Placeholder | Aggregated market signals, sentiment, deal flow velocity (requires data contribution) |
Try it without PitchBook — Start the API with
pnpm devand open http://localhost:3100. The Intelligence Discovery section on the demo page provides the same entity search and enrichment that the extension's Know tab renders. Search for "Saronic" to see the full enrichment panel with transferability badge.
Supported browsers
Chrome and Chromium-based browsers (Edge, Brave). Firefox and Safari support are planned.
What this sprint does not include
- IndexedDB / local knowledge graph (Layer 2)
- Differential privacy / contributed data (Layer 3)
- Bloomberg, AlphaSense, Carta, LinkedIn, or Gmail adapters
- MCP server integration
- Production authentication (extension uses the sandbox API)