Docs / Guides

Complete Guide

Competitive Intelligence API: The Complete Guide to Automating Competitor Research

How to build automated competitive intelligence workflows that keep your team informed without the manual grind. From first API call to production-ready integrations.

Updated March 2026 · 25 min read

What is competitive intelligence and why does it matter?

Competitive intelligence (CI) is the systematic collection, analysis, and application of information about your competitors, their products, pricing, positioning, and strategic direction. It is the difference between reacting to market shifts after they happen and anticipating them before they impact your business.

For B2B SaaS companies, competitive intelligence directly impacts three critical areas:

Win rates

Teams with current competitive intel win 30% more competitive deals. When your AE knows the competitor just dropped a feature your prospect asked about, they can reframe the conversation in real time.

Product strategy

Understanding where competitors invest (and where they do not) reveals market gaps. The best product decisions come from seeing the full competitive landscape, not just your own roadmap.

Pricing power

If a competitor raises prices by 20% and you do not know about it for three months, you have left money on the table. Real-time pricing intelligence lets you adjust positioning and capture value.

The challenge is not whether competitive intelligence matters — every product leader, marketing director, and sales enablement manager knows it does. The challenge is doing it consistently, at scale, without burning hours of analyst time every week.

That is where a competitive intelligence API comes in. By programmatically accessing competitor data, you can build automated workflows that keep your entire organisation informed without anyone manually checking competitor websites.

The problem with manual competitor monitoring

Most companies start competitive intelligence the same way: someone bookmarks competitor websites and checks them periodically. Maybe there is a shared spreadsheet. Perhaps a product marketing manager spends Friday afternoons visiting each competitor's pricing page, blog, and feature list.

This approach fails for five predictable reasons:

01

Time sink: 5-10 hours per week

A typical B2B SaaS company monitors 5-15 competitors across pricing pages, feature pages, blogs, and about sections. At 3-5 minutes per page and 4-8 pages per competitor, a manual audit takes 2-5 hours. And that is just the checking — analysis and distribution take another 3-5 hours.

02

Missed changes happen constantly

Competitors do not announce when they update pricing or quietly remove a feature from their website. A weekly check means you might miss a change that happened on Monday until Friday — and by then, your sales team may have already lost a deal using outdated information.

03

Battle cards go stale within weeks

Sales battle cards are only valuable when they are current. Most companies update battle cards quarterly at best. In a fast-moving market, a three-month-old battle card can actively hurt your sales team by giving them outdated objection handling or incorrect pricing comparisons.

04

Knowledge stays siloed

When one person owns competitive intelligence, the insights live in their head, their notes, or a document nobody reads. Product teams miss it. Sales teams do not see it. Executives get a filtered summary once a quarter.

05

It does not scale

Adding a new competitor means adding hours of manual work. Entering a new market segment? Double the monitoring load. Manual CI is inherently limited by human bandwidth, and it is always the first thing that gets deprioritised when teams get busy.

The real cost of manual CI

A product marketing manager earning $120K/year spending 6 hours/week on competitor monitoring costs your company roughly $18,700/year in salary alone — not counting the opportunity cost of what they could be doing instead, or the deals lost because of stale competitive intel.

How an API transforms competitive intelligence

A competitive intelligence API does not just digitize manual work — it fundamentally changes what is possible. Instead of a person checking websites, software monitors competitors around the clock and exposes structured data through standard HTTP endpoints.

This shift enables four capabilities that manual processes cannot match:

REAL-TIME DETECTION

Changes detected in hours, not weeks

Automated monitoring runs on a schedule — daily for most plans, down to every 6 hours for high-priority competitors. When a change is detected, it is immediately available via the API and can trigger webhooks to notify your team.

STRUCTURED DATA

Machine-readable competitive insights

Raw webpage changes are transformed into structured JSON with categories, severity ratings, and AI-generated analysis. This data can flow directly into dashboards, CRMs, spreadsheets, and AI agents.

INTEGRATION

CI data flows to every tool your team uses

With an API, competitive intelligence is no longer trapped in a single dashboard. It can be pushed to Slack, pulled into Salesforce, synced to Notion, or consumed by AI agents that generate reports on demand.

SCALABILITY

Monitor 5 or 50 competitors with the same effort

Adding a new competitor is a single API call. The system handles discovery, page monitoring, change detection, and analysis automatically. Your CI coverage scales with your market, not your headcount.

The result is competitive intelligence that is always current, always accessible, and always actionable — without anyone spending their Friday afternoons clicking through competitor websites.

Architecture of a CI automation stack

A modern competitive intelligence stack has four layers. RivalCheck handles the first two and provides the data layer for the rest.

LAYER 1

Detection — RivalCheck monitors competitor pages

RivalCheck's crawler visits competitor pages on a schedule, takes screenshots, and uses AI vision to detect meaningful changes. Raw page data is compared, changes are categorised (pricing, features, messaging, content), and severity is assessed.

LAYER 2

Notification — Webhooks, email digests, in-app alerts

When changes are detected, RivalCheck can push notifications through multiple channels: webhook events to your endpoint, daily or weekly email digests, and in-app notifications. Webhooks are the bridge to custom automations.

LAYER 3

Integration — REST API + MCP for data access

The RivalCheck API provides RESTful endpoints for competitors, changes, battle cards, and the competitive landscape. The MCP server lets AI agents like Claude access the same data conversationally.

LAYER 4

Intelligence — AI analysis, battle cards, reporting

AI processes raw changes into strategic insights: what changed, why it matters, and what your team should do about it. Battle cards are generated and kept current. This layer can be extended with your own AI workflows using the structured data from Layer 3.

# The data flow

Competitor Website
    │
    ▼
RivalCheck Crawler (scheduled snapshots)
    │
    ▼
Change Detection Engine (AI vision + text diff)
    │
    ├──▶ Webhook Event ──▶ Slack / Your App / Zapier
    │
    ├──▶ Email Digest ──▶ Team Inboxes
    │
    ├──▶ REST API ──▶ Dashboards / CRM / Scripts
    │
    └──▶ MCP Server ──▶ Claude / AI Agents

The beauty of this architecture is that you choose your level of integration. Start with email digests (zero code required), add a Slack webhook when you want real-time alerts, then build custom integrations as your CI programme matures.

Step-by-step: Building your first competitive intelligence integration

Let us walk through building a practical integration from scratch. By the end, you will have a Python script that pulls competitor changes from the RivalCheck API, filters for pricing updates, and generates a formatted weekly report.

Step 1: Getting your API key

Navigate to Settings in your RivalCheck dashboard and click Generate API Key. Your key will start with rc_live_ for production or rc_test_ for sandbox. Store it securely — it provides full read access to your organisation's competitive data.

# Store your API key as an environment variable
export RIVALCHECK_API_KEY="rc_live_abc123def456..."

Step 2: Listing your competitors

First, let us verify your API key works and see which competitors you are monitoring:

curl -s -H "Authorization: Bearer $RIVALCHECK_API_KEY" \
  https://app.rivalcheck.com/api/v1/competitors | python3 -m json.tool

Response:

{
  "competitors": [
    {
      "id": 42,
      "name": "Acme Corp",
      "website_url": "https://acmecorp.com",
      "status": "active",
      "monitored_pages": 6,
      "last_checked_at": "2026-03-23T14:30:00Z",
      "changes_count": 23,
      "has_battle_card": true
    },
    {
      "id": 43,
      "name": "Nexus Software",
      "website_url": "https://nexus.io",
      "status": "active",
      "monitored_pages": 4,
      "last_checked_at": "2026-03-23T14:30:00Z",
      "changes_count": 15,
      "has_battle_card": true
    }
  ],
  "meta": { "total": 2, "page": 1, "per_page": 25 }
}

Step 3: Pulling the change feed

The changes endpoint returns all detected changes across your competitors, sorted by date. You can filter by competitor, category, severity, and date range:

# Get changes from the last 7 days
curl -s -H "Authorization: Bearer $RIVALCHECK_API_KEY" \
  "https://app.rivalcheck.com/api/v1/changes?since=2026-03-16&limit=50"

Each change includes structured metadata:

{
  "id": 891,
  "competitor": { "id": 42, "name": "Acme Corp" },
  "page_url": "https://acmecorp.com/pricing",
  "category": "pricing",
  "severity": "high",
  "title": "Enterprise plan price increased from $299 to $349/mo",
  "summary": "Acme Corp raised their Enterprise tier price by 17%. The Pro tier
    remains unchanged. They also added a new 'Starter' tier at $29/mo,
    suggesting a move to capture smaller accounts.",
  "strategic_analysis": "This price increase signals confidence in their
    enterprise value proposition. The new Starter tier opens a new segment
    they previously ignored. Consider whether your mid-market positioning
    now has more room to compete on value.",
  "detected_at": "2026-03-22T09:15:00Z",
  "screenshot_before_url": "https://cdn.rivalcheck.com/shots/...",
  "screenshot_after_url": "https://cdn.rivalcheck.com/shots/..."
}

Step 4: Filtering for pricing changes

For many teams, pricing changes are the most urgent competitive signal. The API lets you filter by category directly:

# Get only pricing changes, high severity
curl -s -H "Authorization: Bearer $RIVALCHECK_API_KEY" \
  "https://app.rivalcheck.com/api/v1/changes?category=pricing&severity=high"

Step 5: Getting battle cards

Battle cards synthesise everything RivalCheck knows about a competitor into an actionable sales document. They are generated by AI and updated when significant changes are detected:

# Get the battle card for Acme Corp (competitor ID 42)
curl -s -H "Authorization: Bearer $RIVALCHECK_API_KEY" \
  https://app.rivalcheck.com/api/v1/competitors/42/battle_card

See the Battle Card API guide for complete details on battle card generation and format options.

Step 6: Full example — Weekly competitive intelligence report

Here is a complete Python script that pulls the last week's changes, organises them by competitor and category, and generates a formatted report. Run this as a cron job or scheduled GitHub Action every Monday morning.

#!/usr/bin/env python3
"""
Weekly Competitive Intelligence Report Generator
Pulls data from the RivalCheck API and produces a formatted summary.
"""

import os
import json
import requests
from datetime import datetime, timedelta
from collections import defaultdict

API_BASE = "https://app.rivalcheck.com/api/v1"
API_KEY = os.environ["RIVALCHECK_API_KEY"]

headers = {"Authorization": f"Bearer {API_KEY}"}


def get_competitors():
    """Fetch all active competitors."""
    resp = requests.get(f"{API_BASE}/competitors?status=active", headers=headers)
    resp.raise_for_status()
    return resp.json()["competitors"]


def get_changes(since_date):
    """Fetch all changes since a given date."""
    all_changes = []
    page = 1
    while True:
        resp = requests.get(
            f"{API_BASE}/changes",
            headers=headers,
            params={"since": since_date, "page": page, "limit": 100}
        )
        resp.raise_for_status()
        data = resp.json()
        all_changes.extend(data["changes"])
        if len(all_changes) >= data["meta"]["total"]:
            break
        page += 1
    return all_changes


def get_battle_card(competitor_id):
    """Fetch the current battle card for a competitor."""
    resp = requests.get(
        f"{API_BASE}/competitors/{competitor_id}/battle_card",
        headers=headers
    )
    if resp.status_code == 404:
        return None
    resp.raise_for_status()
    return resp.json()


def generate_report():
    """Build the weekly CI report."""
    since = (datetime.utcnow() - timedelta(days=7)).strftime("%Y-%m-%d")
    competitors = get_competitors()
    changes = get_changes(since)

    # Group changes by competitor
    by_competitor = defaultdict(list)
    for change in changes:
        by_competitor[change["competitor"]["name"]].append(change)

    # Count by category
    by_category = defaultdict(int)
    for change in changes:
        by_category[change["category"]] += 1

    # Build report
    report = []
    report.append(f"# Weekly Competitive Intelligence Report")
    report.append(f"Period: {since} to {datetime.utcnow().strftime('%Y-%m-%d')}")
    report.append(f"Competitors monitored: {len(competitors)}")
    report.append(f"Total changes detected: {len(changes)}")
    report.append("")

    # Summary by category
    report.append("## Changes by Category")
    for category, count in sorted(by_category.items(),
                                   key=lambda x: x[1], reverse=True):
        report.append(f"  - {category.title()}: {count}")
    report.append("")

    # High-severity alerts
    high_severity = [c for c in changes if c["severity"] == "high"]
    if high_severity:
        report.append("## High-Priority Alerts")
        for change in high_severity:
            report.append(f"  [{change['competitor']['name']}] {change['title']}")
            report.append(f"  Analysis: {change['strategic_analysis']}")
            report.append("")

    # Per-competitor breakdown
    report.append("## Competitor Details")
    for comp_name, comp_changes in sorted(by_competitor.items()):
        report.append(f"\n### {comp_name} ({len(comp_changes)} changes)")
        for change in comp_changes:
            severity_marker = "!" if change["severity"] == "high" else "-"
            report.append(
                f"  {severity_marker} [{change['category']}] {change['title']}"
            )

    return "\n".join(report)


if __name__ == "__main__":
    report = generate_report()
    print(report)

    # Optionally save to file
    filename = f"ci_report_{datetime.utcnow().strftime('%Y%m%d')}.md"
    with open(filename, "w") as f:
        f.write(report)
    print(f"\nReport saved to {filename}")

Extend this example

This script outputs Markdown, but you can easily adapt it to send an email (using smtplib), post to Slack (using the Slack Web API), or upload to Confluence. The data is the same — only the output format changes.

Advanced patterns

Once you have the basics working, these patterns unlock the full value of API-powered competitive intelligence.

Competitive dashboard with real-time updates

Build a live dashboard that displays competitive activity alongside your own metrics. Use the changes endpoint with polling, or configure webhooks for push-based updates.

// React component polling the changes feed
const CompetitiveFeed = () => {
  const [changes, setChanges] = useState([]);

  useEffect(() => {
    const fetchChanges = async () => {
      const since = new Date(Date.now() - 7 * 86400000)
        .toISOString().split("T")[0];
      const resp = await fetch(
        `https://app.rivalcheck.com/api/v1/changes?since=${since}`,
        { headers: { Authorization: `Bearer ${API_KEY}` } }
      );
      const data = await resp.json();
      setChanges(data.changes);
    };
    fetchChanges();
    const interval = setInterval(fetchChanges, 300000); // 5 min
    return () => clearInterval(interval);
  }, []);

  return (
    <div className="competitive-feed">
      {changes.map(change => (
        <ChangeCard key={change.id} change={change} />
      ))}
    </div>
  );
};

For real-time updates without polling, configure a webhook endpoint and use server-sent events or WebSockets to push updates to your frontend.

Sales enablement: Auto-updating CRM with competitive intel

The highest-impact CI integration for most companies is connecting competitive data to their CRM. When a competitor changes pricing, every open deal against that competitor should be flagged.

# Webhook handler that updates Salesforce when a
# competitor pricing change is detected

from flask import Flask, request
from simple_salesforce import Salesforce

app = Flask(__name__)
sf = Salesforce(username="...", password="...", security_token="...")

@app.route("/webhooks/rivalcheck", methods=["POST"])
def handle_webhook():
    event = request.json

    if event["event"] != "change.detected":
        return "OK", 200

    change = event["data"]

    # Only act on pricing changes
    if change["category"] != "pricing":
        return "OK", 200

    competitor_name = change["competitor"]["name"]

    # Find open opportunities with this competitor
    opps = sf.query(
        f"SELECT Id, Name, OwnerId FROM Opportunity "
        f"WHERE Competitor__c = '{competitor_name}' "
        f"AND StageName NOT IN ('Closed Won', 'Closed Lost')"
    )

    # Add a task to each opportunity owner
    for opp in opps["records"]:
        sf.Task.create({
            "WhatId": opp["Id"],
            "OwnerId": opp["OwnerId"],
            "Subject": f"Competitive Alert: {change['title']}",
            "Description": change["strategic_analysis"],
            "Priority": "High",
            "Status": "Not Started"
        })

    return "OK", 200

This pattern ensures sales reps see competitive updates in context — right next to the deal they are working, not buried in a Slack channel they do not check.

Product strategy: Feeding CI data into planning tools

Product teams can use the API to automatically create planning items when competitors launch features or change their positioning. Here is an example that creates Linear issues for significant competitive moves:

# Create a Linear issue when a competitor ships a new feature
import requests

def create_competitive_insight_issue(change):
    """Create a Linear issue in the 'Competitive Insights' project."""
    linear_api = "https://api.linear.app/graphql"
    headers = {"Authorization": LINEAR_API_KEY}

    mutation = """
    mutation CreateIssue($input: IssueCreateInput!) {
        issueCreate(input: $input) {
            issue { id identifier url }
        }
    }
    """

    variables = {
        "input": {
            "teamId": PRODUCT_TEAM_ID,
            "projectId": CI_PROJECT_ID,
            "title": f"[CI] {change['competitor']['name']}: {change['title']}",
            "description": (
                f"## Competitive Change Detected\n\n"
                f"**Competitor:** {change['competitor']['name']}\n"
                f"**Category:** {change['category']}\n"
                f"**Severity:** {change['severity']}\n\n"
                f"### Summary\n{change['summary']}\n\n"
                f"### Strategic Analysis\n{change['strategic_analysis']}\n\n"
                f"*Auto-generated by RivalCheck API*"
            ),
            "priority": 2 if change["severity"] == "high" else 3,
            "labelIds": [COMPETITIVE_LABEL_ID]
        }
    }

    resp = requests.post(linear_api, json={
        "query": mutation, "variables": variables
    }, headers=headers)
    return resp.json()

Automated executive briefings

Combine the RivalCheck API with an LLM to generate executive-ready competitive briefings. Using the MCP integration, you can ask Claude to synthesize competitive data into a narrative format:

# Using the RivalCheck MCP server with Claude

# Claude has access to your competitive data via MCP.
# Prompt example for generating an executive briefing:

"""
Using the RivalCheck tools, pull all changes from the
last 7 days and generate a 1-page executive briefing that
covers:

1. Top 3 competitive moves we should respond to
2. Pricing landscape shifts
3. Feature parity changes
4. Recommended actions for product, sales, and marketing

Format it as a professional memo for our leadership team.
"""

This replaces the typical 2-3 hour process of a product marketing manager compiling a weekly competitive update for the exec team.

Manual vs API-powered competitive intelligence

Dimension Manual CI API-Powered CI
Detection speed Days to weeks Hours (same day)
Coverage 5-10 pages per competitor All monitored pages, continuously
Time investment 5-10 hours/week 30 minutes/week to review
Battle card freshness Updated quarterly Updated on every significant change
Distribution Email, shared doc Slack, CRM, dashboards, AI agents
Scalability Linear — more competitors = more time Constant — add competitors via API
Consistency Depends on the person, drops when busy Runs every scheduled cycle without fail
Analysis depth Surface-level, biased by familiarity AI-powered strategic analysis on every change
Historical data Whatever someone wrote down Complete change history with screenshots

What to track: The five pillars of competitive intelligence

Effective competitive monitoring goes beyond just checking pricing pages. Here are the five categories of competitor changes that drive strategic decisions, and how the RivalCheck API categorises each:

PRICING

Pricing and packaging changes

Price increases, decreases, new tiers, removed plans, changed feature gating, usage-based pricing shifts, enterprise pricing updates. These are typically the highest-severity changes because they directly affect your competitive positioning and sales conversations.

Pages to monitor: /pricing, /plans, comparison pages, individual plan pages

API filter: category=pricing

FEATURES

Feature and product changes

New feature launches, feature removals, product line expansions, integrations added, platform updates. Track feature pages, changelog, and product overview pages to understand where competitors are investing their engineering resources.

Pages to monitor: /features, /product, /changelog, /integrations, /what-s-new

API filter: category=features

MESSAGING

Messaging and positioning shifts

Tagline changes, value proposition updates, target audience shifts, new use cases highlighted, competitive comparisons added. These changes reveal strategic direction — when a competitor starts calling themselves an "enterprise platform" instead of a "startup tool," that is a signal.

Pages to monitor: Homepage, /about, /why-us, landing pages

API filter: category=messaging

CONTENT

Content and thought leadership

Blog posts, case studies, whitepapers, webinar announcements, press releases. Content changes reveal where competitors are focusing their marketing efforts and which customer segments they are targeting.

Pages to monitor: /blog, /resources, /customers, /case-studies

API filter: category=content

COMPANY

Company and team updates

Team page changes, leadership hires, job postings (via careers page), office locations, about page updates. A competitor adding a "Head of Enterprise Sales" to their team page tells you something about their strategic direction that their marketing will not reveal for months.

Pages to monitor: /about, /team, /careers, /company

API filter: category=company

How AI enhances competitive intelligence

The combination of automated monitoring and AI analysis creates a step change in competitive intelligence quality. Instead of raw "this page changed" alerts, you get structured, strategic insights.

AI-powered change detection

RivalCheck uses computer vision to compare page screenshots, not DOM structure. This means it catches visual changes that traditional text-diff tools miss — redesigns, new social proof badges, removed CTAs, layout shifts that signal repositioning. The AI then determines whether a change is cosmetic or strategically significant.

Example AI classification:

Change: "G2 Leader badge added to pricing page header"

Category: messaging

Severity: medium

Analysis: "Acme Corp has added third-party validation prominently to their pricing page, likely to reduce purchase hesitation. This suggests they are investing in social proof for conversion optimization. Consider whether your own G2 or Capterra ratings could serve a similar purpose."

Auto-generated battle cards

RivalCheck's AI synthesises all known information about a competitor — their pricing, features, messaging, recent changes, and positioning — into a structured battle card. These cards include sections for strengths, weaknesses, objection handling, and how to win, all kept current as new changes are detected.

Read the complete Battle Card API guide for details on generation, format options, and integration patterns.

Strategic analysis on every change

Every change detected by RivalCheck comes with an AI-generated strategic analysis field in the API response. This is not just a description of what changed — it is an assessment of why it matters to your business and what you might consider doing about it.

The analysis considers the change in context: a 10% price increase means different things for a bootstrapped startup versus a venture-backed competitor that just raised a Series C.

MCP: Conversational access to competitive data

The RivalCheck MCP server lets AI agents like Claude directly access your competitive intelligence data. This means you can have conversations like:

"What has Acme Corp changed on their pricing page in the last month?"

"Compare our pricing to all monitored competitors and identify where we are most expensive."

"Draft talking points for my sales call tomorrow against Nexus Software."

Getting started with RivalCheck

RivalCheck provides the complete competitive intelligence stack described in this guide: automated monitoring, AI-powered change detection, structured API access, webhooks, MCP integration, and auto-generated battle cards.

Start building in 5 minutes:

  1. 1. Create your free account — 14-day trial, no credit card required
  2. 2. Add your first competitor by pasting their URL. RivalCheck discovers and starts monitoring key pages automatically.
  3. 3. Generate your API key in Settings and make your first API call using the examples in this guide.
  4. 4. Configure webhooks for real-time notifications, or connect the MCP server to give AI agents access to your competitive data.