Documentation

Implementation guides

Connect competitor activity data to CRM, Slack, Claude, Clay, webhooks, or REST API. Each activity contains named buyer, named seller, named competitor, and confidence score. Activities refreshed daily.

Quickstart

Three steps to your first activity response:

  • 01 Get an API key from your account page (or by replying to the welcome email).
  • 02 Connect your CRM (Salesforce or HubSpot) so we can sync your account list, and send us your competitor list.
  • 03 Call /competitive_activity in claude (MCP). On the next business day after your list ingests.
# Your first call — last 24h of competitive activity
curl -X GET https://api.dealintelligence.io/v1/competitive_activity \
  -H "Authorization: Bearer $DI_API_KEY" \
  -G --data-urlencode "timeframe=24h"

# Response: 200 OK
{
  "events": [
    {
      "event_id": "evt_8H3K9PqR2nL",
      "event_type": "open_opportunity",
      "timestamp": "2026-05-19T14:22:08Z",
      "confidence": 0.99,
      "buyer": { "name": "M. Eisenberg", "company": "Workday", ... },
      "competitor": { "company": "Acme", "seller": {...} }
    },
    ...
  ],
  "count": 7,
  "next_cursor": "cur_aB42xZ..."
}

Authentication

All requests authenticate via a Bearer token in the Authorization header. API keys are issued on signup and rotate-able from your account page. Test keys (di_test_*) and live keys (di_live_*) are separate; test keys hit a deterministic activity fixture so your CI doesn't flap.

The remote Claude connector (Option A below) uses OAuth 2.1 sign-in instead of an API key — you authorize access from your browser and nothing is stored in the client. API keys apply to the REST API, Clay, webhooks, and the self-hosted MCP server.

Authorization: Bearer di_live_xxxxxxxxxxxx

# Test mode — deterministic fixtures, no rate limit, no billing
Authorization: Bearer di_test_xxxxxxxxxxxx

Your first activity

Once your account list is ingested (typically within 24 hours of upload), activities refresh on a daily cadence — new observations land each morning UTC. You can also pull historical activities from the prior 90 days via any endpoint. Most customers start with a 30-day pilot, then wire the daily refresh into Clay or Claude.

Claude (MCP)

Every endpoint becomes a tool call your agent can use to query activities, slice by competitor / industry / owner, build account-level rollups, or join against CRM pipeline state. Connect one of two ways, depending on whether you use Claude in the browser or Claude Code in your terminal.

Claude connector

A hosted, read-only Claude MCP server with one-click OAuth. No API key to manage, and you always run the latest version.

  • 01 In Claude, open Settings → Connectors → Add custom connector. (One-click discovery in the Claude connector directory is coming soon.)
  • 02 Paste the server URL below and click Connect.
  • 03 Sign in with your Deal Intelligence account and approve read-only access. Claude now has the full tool surface.
# Remote MCP server — OAuth 2.1, no API key
https://api.dealintelligence.io/mcp

You authorize access from your browser and approve the read:competitive_activity scope; no key is stored in Claude. Access requires an active Deal Intelligence plan, and every tool is read-only — the connector never writes to your CRM.

Claude Code

For Claude Code and local setups, point at the same hosted server over HTTP and authenticate with an API key (generate one in Settings → API keys) instead of the browser OAuth flow:

// ~/.claude/mcp.json — remote MCP server over HTTP, API-key auth
{
  "mcpServers": {
    "deal_intelligence": {
      "type": "http",
      "url": "https://api.dealintelligence.io/mcp",
      "headers": { "Authorization": "Bearer di_live_xxxxxxxxxxxx" }
    }
  }
}

Restart Claude. The agent gets the full tool surface — 11 read-only tools: five primary activity-stream tools plus aggregation, slice, CRM-cross, and discovery helpers. Have your agent call discover() first; it returns your tenant's filter vocabulary so the model can suggest realistic competitor / industry / owner values without guessing.

// Primary — verified activity streams
deal_intelligence.competitive_activity({ timeframe, event_type, competitor,
                                         industry, region, employee_band,
                                         job_function, seniority, owner, ... })
deal_intelligence.closed_lost_revival({ window })
deal_intelligence.churn_risk({ window })
deal_intelligence.account_activity({ account, window })
deal_intelligence.buyer_activity({ name, company, title, window })

// Aggregations — "where should I look first?"
deal_intelligence.top_accounts({ window, by, account_status, limit })
deal_intelligence.multi_competitor_accounts({ window, min_competitors })

// Slice — scope to one competitor
deal_intelligence.competitor_summary({ competitor, window })

// CRM-cross — activities joined with pipeline state
deal_intelligence.pipeline_at_risk({ window, stage_filter, min_amount })
deal_intelligence.renewals_at_risk({ days_to_renewal, window })

// Discovery — call this first
deal_intelligence.discover({ discovery_window })

Example agent prompt

❯ Find every customer account in EMEA approaching renewal in the next
  60 days that's getting hit by Reverb. For each, draft a save-play
  note for the CSM that includes the buyer name, the renewal amount,
  and the last three Slack threads in #cs-saves about that account.

→ deal_intelligence.discover()
→ deal_intelligence.renewals_at_risk({ days_to_renewal: 60, window: "30d" })
→ deal_intelligence.competitor_summary({ competitor: "Reverb", window: "30d" })
→ slack.search_threads({ channel: "#cs-saves", accounts: [...] })

Found 4 renewals at risk in EMEA touched by Reverb. Drafting save notes...

CRM sync

Salesforce and HubSpot, supported natively. New competitive activity writes to the matching Account, Contact, and Lead records as custom fields — trigger-ready signals your CRM workflows (and any tool that reads your CRM, like Clay) can act on directly.

# Salesforce custom fields (HubSpot uses the equivalent properties)
di_competitors__c            # semicolon-joined competitor list
di_latest_competitor__c      # most recent competitor
di_activity_types__c         # semicolon-joined activity types
di_latest_activity_type__c   # most recent activity type
di_latest_activity_date__c   # most recent activity date

Slack

Connect the Deal Intelligence Slack app and each qualified competitive activity is posted to your channel as a card: the buyer (name, title, company), the competitor they engaged, and links to the buyer's and the company's social. When your CRM is connected, the card also shows the matched account's status, owner, and any active open opportunity — and tags the owner — so reps can act without leaving Slack.

Slack delivery is enabled per account: select your channel in Deal Intelligence settings.

# Example card posted to your channel
Leonardo Do Carmo — Regional Sales Director at Sumo Logic recently engaged with your competitor.

Account:         Sumo Logic
Alert Type:      New Business
Account Details: Redwood City, California, US
                 837 employees · Software Development
Email:           ldocarmo@sumologic.com
Account SDR:     @Shoshi

Competitor:      Gong
Account Status:  Lead
Account Owner:   Jake Albro
Contact Location: Loughton, England, United Kingdom
Company Tier:    Tier 3
Tenure in Role:  3 months

[ View in CRM ]

Clay

Deal Intelligence flows into Clay through infrastructure you already run — your CRM or a webhook. Signals land in your Clay tables two ways:

Via your CRM (recommended — no extra setup)

CRM sync writes competitive-signal fields (di_latest_competitor__c, di_competitors__c, and more) onto your Salesforce or HubSpot records. Clay reads those objects natively, so the signals appear as columns in any Clay table sourced from your CRM — no extra setup on our side, and no separate key to manage.

Via webhook (event-driven)

Create a Clay table with a Webhook source, copy the per-table URL Clay generates, and add it as a webhook destination in your Deal Intelligence settings. Each new competitive activity posts a row into the table, where your downstream Clay steps — territory routing, owner assignment, sequence enrollment — run automatically.

Webhooks

Activities deliver to any HTTPS endpoint within minutes of observation. Each webhook delivery is signed with HMAC-SHA256. Verify the signature before acting on the payload.

// Configure a webhook in your account settings
POST https://api.dealintelligence.io/v1/webhooks
{
  "url": "https://your-app.com/webhooks/di",
  "events": ["competitive_activity", "churn_risk"],
  "filter": { "confidence_min": 0.97 }
}

// Delivery includes a signature header
X-DI-Signature: t=1716156128,v1=5257a869e7ecebeda32affa62cdca3fa...
X-DI-Event-Id:   evt_8H3K9PqR2nL
X-DI-Delivery:   d_29a8b3...

// Verify with HMAC-SHA256 over the raw body
const sig = req.headers['x-di-signature'];
const computed = crypto
  .createHmac('sha256', WEBHOOK_SECRET)
  .update(rawBody)
  .digest('hex');
if (computed !== sig.split('v1=')[1]) throw new Error('invalid');

Retries: failed deliveries (non-2xx response) retry with exponential backoff for 24 hours. After 24 hours the event is moved to a dead-letter queue, queryable via /webhooks/dead_letter. Replay any event via /webhooks/replay/{event_id}.

Troubleshooting

Most issues fall into one of the cases below. If you're still stuck, email support@dealintelligence.io.

Connecting in Claude

  • Connector won't add / "couldn't connect." Confirm the MCP URL is exactly https://api.dealintelligence.io/mcp (https, no trailing space). Claude discovers the OAuth server automatically via /.well-known/oauth-protected-resource — verify that returns JSON: curl -s https://api.dealintelligence.io/.well-known/oauth-protected-resource.
  • Sign-in succeeds but tools return nothing. Your account must be provisioned for the connector (paid plan). The first call returns a "your account isn't activated" message until mcp_entitled is set — contact sales@dealintelligence.io.
  • 401 / "unauthorized" on tool calls. The OAuth token expired or the connector lost its grant. Remove and re-add the connector in Settings → Connectors to re-run the sign-in.

Empty or partial results

  • A tool returns no rows. Your filter is likely too narrow. Widen the window (30d90d), or call discover first to see the competitor, industry, and owner values that actually exist in your tenant — pass those exact strings.
  • Accounts show but owner / stage / amount are blank. Those fields come from your connected CRM. Confirm Salesforce or HubSpot is connected in settings; CRM-cross tools (pipeline_at_risk, renewals_at_risk) need it.
  • A CRM-enriched call is slow or drops CRM fields. The CRM phase is capped at 25s; if your Salesforce is slow the tool returns the event data without enrichment rather than failing. Retry, or scope to a single account with account_activity.

Claude Code / local setups

  • Prefer an API key over browser OAuth. Generate one in Settings → API keys and pass it as a Bearer token (see Claude (MCP)).
  • Calls 401 after a redirect. Point the client at the path with the trailing slash (/mcp/) to avoid a redirect that can drop the Authorization header.
Explore FAQs →
How do I connect Deal Intelligence to Clay?
Deal Intelligence connects to Clay as an HTTP table. You add the endpoint and your API key, and new verified activities arrive as rows on your refresh cadence, ready to enrich, route, or trigger downstream steps.
How does the Deal Intelligence MCP server work?
Deal Intelligence ships a remote MCP server. One config block connects it to Claude or any MCP-compatible agent, which can then query the activity API directly: competitor reachouts across your book, activity tied to a named buyer, multi-competitor accounts, closed-lost revival, and pipeline at risk.
How do I get Deal Intelligence data into my CRM?
Activities write to Account, Contact, and Lead records as custom fields. Salesforce and HubSpot are supported natively, and any other CRM connects via webhook to an HTTPS endpoint. Your CRM keeps its source-of-truth role and the activities become trigger-ready fields.
What does it take to set up Deal Intelligence?
A CRM connection, Salesforce or HubSpot, and the competitors you want to track. Deal Intelligence syncs your accounts from the CRM, issues an API key, and calibrates routing. Setup takes about 15 minutes, then the 30-day pilot begins.
How fresh is the data and how is it delivered?
Verified competitor activity is refreshed daily and delivered into the surfaces you already run: Clay, Claude over MCP, your CRM, Slack, plus REST and webhooks. There is no separate dashboard to learn.
Does Deal Intelligence have a REST API and webhooks?
Yes. Every activity is available through a REST API and can be pushed to any HTTPS endpoint via webhook, so Deal Intelligence integrates with any system beyond the native Clay, Claude, CRM, and Slack connections.
Deal Intelligence

Win the deals you're in and get into the deals you're missing.

The best way to know what your competitors are doing in your accounts.

Start a 30-day pilot with an ROI guarantee.