Библиотека · Маркетинг, продажи и аналитика на AI

AI Конкурентная разведка — автоматический мониторинг рынка

Строитель60 минОбновлено: октябрь 2026
70 из 105 в библиотеке

Время: ~25 мин теории + 35 мин практики


Суть урока

🎨 Образ: Военная разведка работает непрерывно. Пока командир спит, разведчики наблюдают за позициями противника, фиксируют каждое движение, каждое изменение — и утром кладут на стол сводку. Раньше такую «разведку» в бизнесе вёл аналитик: 3 дня на ручной сбор данных, Excel, сводный отчёт раз в квартал. К тому моменту конкурент уже успел поднять цены, выпустить фичу и переориентировать сайт. Сейчас это делает автоматическая система за ночь — и утром ты получаешь готовую сводку прямо в Telegram.

В этом уроке ты построишь именно такую систему: настроишь автоматический мониторинг конкурентов и запустишь еженедельный AI-отчёт.


Ключевые концепции

  • Конкурентная разведка — систематический сбор и анализ данных о действиях конкурентов для принятия стратегических решений
  • Ahrefs MCP — интеграция SEO (эс-и-о — поисковая оптимизация)-данных Ahrefs в Claude для анализа органического трафика и ключевых слов конкурентов
  • Playwright — библиотека Microsoft для автоматизации браузера: позволяет скрейпить данные с любого сайта
  • ChangeDetection.io — сервис мониторинга изменений на веб-страницах с уведомлениями
  • SimilarWeb API (API — эй-пи-ай — интерфейс программирования) — данные об аудитории, источниках трафика и демографии посетителей конкурентов
  • Price scraping — автоматический сбор цен конкурентов на регулярной основе
  • Дифференциальный анализ — сравнение «было / стало» для выявления стратегических изменений
  • Синтез данных — когда Claude превращает разрозненные факты в связный стратегический отчёт

Теория

Конкурентная разведка: что изменилось с AI

До AI конкурентный анализ — это был ритуал раз в квартал. Нанимаешь стажёра или аналитика, он неделю копается в сайтах, выгружает данные из Semrush, строит таблицу. Ты смотришь на неё и понимаешь, что данные уже устарели: конкурент вчера запустил новую фичу.

Сейчас архитектура другая:

  • Данные собираются автоматически (Playwright, ChangeDetection, API)
  • Обновление — ежедневно или еженедельно, без участия человека
  • Анализ — мгновенно через Claude
  • Доставка — в Telegram или email утром в понедельник

Это не просто быстрее. Это другой класс инструмента — ты видишь рынок в реальном времени, а не снимок прошлого квартала.


Что мониторить: карта конкурентного наблюдения

Не всё одинаково важно. Вот что отслеживать в порядке приоритета:

Сигнал Что означает Инструмент
Изменение цен Конкурент тестирует новую модель монетизации Playwright скрейпинг
Новые страницы на сайте Заходят в новую нишу или запускают фичу ChangeDetection.io
Рост органического трафика Нашли работающую SEO-стратегию Ahrefs MCP / Semrush
Новые ключевые слова На что делают ставку в контенте Ahrefs / SpyFu
Изменение главной страницы Repositioning продукта или value prop ChangeDetection.io
Вакансии Куда инвестируют (нанимают разработчиков — будет продукт) Страница вакансий на сайте конкурента (ChangeDetection.io), LinkedIn вручную
Отзывы клиентов Слабые места (жалобы = твои возможности) G2, Capterra, App Store

🎨 Образ: Шахматист смотрит на всю доску, а не только на свои фигуры. Конкурентная разведка — это твой взгляд на чужую часть доски. Видишь куда двигаются их фигуры — понимаешь их план на 3 хода вперёд.


Ahrefs MCP: SEO-данные прямо в Claude

Ahrefs — лидирующий SEO-инструмент, который показывает органический трафик сайтов, ключевые слова по которым они ранжируются, и откуда идут ссылки. MCP (Model Context Protocol) интеграция позволяет запрашивать эти данные прямо через Claude без переключения между инструментами. MCP-подключение есть у Ahrefs и у Semrush; доступность зависит от тарифа, смотри в личном кабинете сервиса.

Что можно спросить через Ahrefs MCP:

  • Сколько органического трафика у competitor.com?
  • По каким ключевым словам они в топ-3 Google?
  • Какие страницы приносят им больше всего трафика?
  • Какие новые ключевые слова они начали ранжировать за последний месяц?

Практический пример запроса в Claude с Ahrefs MCP:

Напиши в чат
Используй Ahrefs MCP чтобы проанализировать конкурента [URL].

Мне нужно:
1. Общий органический трафик за последние 3 месяца (динамика)
2. Топ-10 страниц по трафику
3. Ключевые слова с позицией 4-10 (opportunity keywords — почти в топ)
4. Новые ключевые слова за последние 30 дней

По итогам анализа:
- Что работает у конкурента в SEO?
- Какие ключевые слова мне стоит атаковать?
- Есть ли контент-темы которые они пропустили?

Без MCP: альтернатива через Ahrefs API:

python
import requests
import anthropic
import json
from datetime import date

def get_ahrefs_data(domain: str, api_key: str) -> dict:
    """Получает основные SEO-метрики домена через Ahrefs API v3.
    API доступен на платных тарифах. Обязательные параметры и лимиты сверяй с docs.ahrefs.com:
    набор параметров у эндпоинтов меняется."""
    
    headers = {"Authorization": f"Bearer {api_key}"}
    base = "https://api.ahrefs.com/v3"
    
    # Органические метрики
    metrics_resp = requests.get(
        f"{base}/site-explorer/metrics",
        headers=headers,
        params={"target": domain, "mode": "domain", "date": date.today().isoformat()}
    )
    
    # Топ страницы
    pages_resp = requests.get(
        f"{base}/site-explorer/top-pages",
        headers=headers,
        params={"target": domain, "mode": "domain", "limit": 10}
    )
    
    return {
        "metrics": metrics_resp.json() if metrics_resp.ok else {},
        "top_pages": pages_resp.json() if pages_resp.ok else {}
    }

# Анализ через Claude
client = anthropic.Anthropic()

competitors = ["competitor1.com", "competitor2.com", "competitor3.com"]
# AHREFS_API_KEY = os.getenv("AHREFS_API_KEY")

# Для демонстрации — структура данных которую ты получишь:
demo_data = {
    "competitor1.com": {
        "organic_traffic": 45200,
        "organic_keywords": 3840,
        "top_pages": [
            {"url": "/blog/ai-automation-guide", "traffic": 8400},
            {"url": "/pricing", "traffic": 4200},
        ]
    }
}

message = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1500,
    messages=[{
        "role": "user",
        "content": f"""Проанализируй SEO-данные конкурентов:

{json.dumps(demo_data, ensure_ascii=False, indent=2)}

Мой сайт — [твой домен], ниша — AI-инструменты для малого бизнеса.

Ответь:
1. Кто лидирует в органике и почему?
2. Какие темы/страницы создают больше всего трафика?
3. Какие ключевые слова мне стоит атаковать первыми?
4. Что конкуренты упускают (контентные дыры)?"""
    }]
)
print("".join(b.text for b in message.content if b.type == "text"))

Playwright: скрейпинг любого сайта

Playwright — библиотека Microsoft для автоматизации браузера. В отличие от простых HTTP-запросов, Playwright запускает настоящий браузер — поэтому работает даже с сайтами которые рендерятся через JavaScript (React, Vue, Next.js).

Установка:

bash
pip install playwright
playwright install chromium

Скрейпинг цен конкурентов:

python
import asyncio
from playwright.async_api import async_playwright
import json
from datetime import datetime

async def scrape_pricing_page(url: str) -> dict:
    """Скрейпит страницу цен конкурента"""
    
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        
        # Представляемся обычным браузером; защиту сайта не обходим
        await page.set_extra_http_headers({
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
        })
        
        await page.goto(url, wait_until="networkidle", timeout=30000)
        
        # Извлекаем текст страницы
        content = await page.inner_text("body")
        
        # Ищем цены через JavaScript
        prices = await page.evaluate("""
            () => {
                const priceElements = document.querySelectorAll('[class*="price"], [class*="plan"], [class*="tier"]');
                return Array.from(priceElements).map(el => el.innerText.trim()).filter(t => t.length > 0);
            }
        """)
        
        await browser.close()
        
        return {
            "url": url,
            "scraped_at": datetime.now().isoformat(),
            "page_text": content[:5000],  # первые 5000 символов
            "price_elements": prices[:20]
        }

async def monitor_competitors(competitor_urls: list) -> list:
    """Мониторит список конкурентов параллельно"""
    tasks = [scrape_pricing_page(url) for url in competitor_urls]
    results = await asyncio.gather(*tasks, return_exceptions=True)
    
    return [r for r in results if not isinstance(r, Exception)]

# Запуск
competitors_pricing = [
    "https://competitor1.com/pricing",
    "https://competitor2.com/plans",
]

results = asyncio.run(monitor_competitors(competitors_pricing))

# Сохраняем с датой (для дифференциального анализа)
filename = f"competitor_data_{datetime.now().strftime('%Y-%m-%d')}.json"
with open(filename, 'w', encoding='utf-8') as f:
    json.dump(results, f, ensure_ascii=False, indent=2)

print(f"Данные сохранены: {filename}")

Скрейпинг и правила. Собирай только публичные страницы, читай robots.txt и условия использования сайта, не обходи защиту от ботов и не создавай лишней нагрузки: раз в неделю для мониторинга достаточно. Если нужна одна-две страницы без собственного кода, подойдёт Firecrawl (отдаёт страницу как чистый markdown).

Дифференциальный анализ (что изменилось):

python
import json
from datetime import datetime, timedelta

def find_changes(old_file: str, new_file: str) -> dict:
    """Сравнивает два снимка данных конкурентов"""
    
    with open(old_file) as f:
        old_data = json.load(f)
    with open(new_file) as f:
        new_data = json.load(f)
    
    changes = []
    
    old_by_url = {r['url']: r for r in old_data}
    new_by_url = {r['url']: r for r in new_data}
    
    for url in new_by_url:
        if url in old_by_url:
            old_text = old_by_url[url].get('page_text', '')
            new_text = new_by_url[url].get('page_text', '')
            
            # Простое сравнение — в продакшне используй difflib
            if old_text != new_text:
                changes.append({
                    "url": url,
                    "change_detected": True,
                    "old_length": len(old_text),
                    "new_length": len(new_text),
                    "delta": len(new_text) - len(old_text)
                })
    
    return changes

ChangeDetection.io: мониторинг без кода

Для страниц где не нужен сложный парсинг — ChangeDetection.io проще и надёжнее написания своего скрейпера.

Как настроить:

  1. Зарегистрируйся на changedetection.io (self-hosted версия бесплатна, облачная платная; цены на сайте)
  2. Добавь URL конкурента
  3. Укажи какие элементы отслеживать (можно через CSS-селектор)
  4. Настрой уведомление: email или webhook

Webhook → n8n → Claude → Telegram:

Код
ChangeDetection.io обнаружил изменение
→ Webhook POST на n8n
→ n8n: запрос к Claude с текстом "было" и "стало"
→ Claude анализирует: что изменилось стратегически?
→ Telegram-уведомление тебе с анализом

Пример n8n-воркфлоу (см. урок n8n и AI-воркфлоу) с дополнительным Claude-шагом:

Напиши в чат
Системный промпт для Claude в n8n:
Ты аналитик конкурентной разведки. 
Конкурент изменил страницу своего сайта.

Вот что было:
{old_content}

Вот что стало:
{new_content}

Проанализируй:
1. Что именно изменилось (конкретно)?
2. О чём это говорит стратегически?
3. Нужно ли нам реагировать и как?

Будь краток: 3-5 предложений.

SimilarWeb API: аудитория конкурентов

SimilarWeb показывает то, что Ahrefs не показывает: источники трафика (не только органика, но и платная реклама, direct, referral), географию аудитории, демографию и поведение.

Что важно знать:

  • Официальный API рассчитан на бизнес-аккаунты и стоит дорого (цены по запросу)
  • Для мониторинга малого количества конкурентов — достаточно бесплатного расширения SimilarWeb для браузера (снять данные вручную раз в месяц)
  • Неофициальные обёртки в маркетплейсах API встречаются, но их условия и качество данных проверяй сам

Что реально нужно знать о конкуренте из SimilarWeb:

  • % трафика из поиска vs direct vs социальных сетей (прямой трафик = лояльная аудитория)
  • Топ источники реферального трафика (партнёрства и упоминания которые работают)
  • Средняя продолжительность сессии (вовлечённость аудитории)
  • Страны с наибольшей аудиторией

Полный пайплайн: еженедельный отчёт разведки

Вот архитектура системы которую ты построишь:

Код
[ПОНЕДЕЛЬНИК 06:00 — автоматически]
    │
    ├─ Playwright scraper: собирает данные о ценах конкурентов
    ├─ ChangeDetection: проверяет изменения на сайтах
    └─ Ahrefs API: выгружает SEO-метрики
    │
    ▼
[Claude анализ]
    Объединяет все данные
    Сравнивает с прошлой неделей
    Составляет отчёт с выводами
    │
    ▼
[Telegram-бот — 08:00]
    📊 Еженедельный отчёт о конкурентах
    Конкурент 1: изменений нет
    Конкурент 2: ⚠️ Цена снижена с $49 → $39
    Конкурент 3: 🆕 Новая страница /ai-assistant
    
    Анализ Claude: [стратегические выводы]

Скрипт: автоматический еженедельный отчёт

python
import asyncio
import anthropic
import json
import os
from datetime import datetime
from playwright.async_api import async_playwright
import requests

ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")

COMPETITORS = [
    {
        "name": "Конкурент A",
        "pricing_url": "https://competitorA.com/pricing",
        "homepage": "https://competitorA.com"
    },
    {
        "name": "Конкурент B",
        "pricing_url": "https://competitorB.com/plans",
        "homepage": "https://competitorB.com"
    },
]

async def scrape_page_text(url: str) -> str:
    """Возвращает текстовое содержимое страницы"""
    try:
        async with async_playwright() as p:
            browser = await p.chromium.launch(headless=True)
            page = await browser.new_page()
            await page.goto(url, wait_until="domcontentloaded", timeout=20000)
            text = await page.inner_text("body")
            await browser.close()
            return text[:8000]
    except Exception as e:
        return f"Ошибка скрейпинга {url}: {e}"

def load_previous_data(filename: str) -> dict:
    try:
        with open(filename) as f:
            return json.load(f)
    except FileNotFoundError:
        return {}

def save_current_data(data: dict, filename: str):
    with open(filename, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

def send_telegram(message: str):
    url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
    requests.post(url, json={
        "chat_id": TELEGRAM_CHAT_ID,
        "text": message,
        "parse_mode": "Markdown"
    })

async def generate_weekly_report():
    print(f"Начинаю сбор данных: {datetime.now()}")
    
    # Загружаем прошлые данные
    prev_data = load_previous_data("competitor_snapshot.json")
    current_data = {}
    
    # Скрейпим всех конкурентов
    for competitor in COMPETITORS:
        print(f"  Скрейплю {competitor['name']}...")
        pricing_text = await scrape_page_text(competitor['pricing_url'])
        homepage_text = await scrape_page_text(competitor['homepage'])
        
        current_data[competitor['name']] = {
            "scraped_at": datetime.now().isoformat(),
            "pricing": pricing_text,
            "homepage": homepage_text
        }
    
    # Сохраняем текущий снимок
    save_current_data(current_data, "competitor_snapshot.json")
    
    # Строим контекст для Claude
    analysis_input = []
    for name, data in current_data.items():
        prev = prev_data.get(name, {})
        analysis_input.append({
            "competitor": name,
            "current_pricing": data['pricing'][:2000],
            "current_homepage": data['homepage'][:1000],
            "previous_pricing": prev.get('pricing', 'Нет данных')[:2000],
            "change_detected": data['pricing'] != prev.get('pricing', '')
        })
    
    # Анализ через Claude
    client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY)
    
    message = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=1500,
        messages=[{
            "role": "user",
            "content": f"""Это еженедельный отчёт конкурентной разведки.

Данные по конкурентам (текущая неделя vs прошлая):
{json.dumps(analysis_input, ensure_ascii=False, indent=2)}

Составь краткий (до 500 слов) отчёт для Telegram с эмодзи:
1. 🔍 Что изменилось у каждого конкурента
2. ⚠️ Важные сигналы которые требуют нашей реакции
3. 💡 Одна стратегическая рекомендация на эту неделю

Если изменений нет — тоже скажи об этом прямо."""
        }]
    )
    
    report = "".join(b.text for b in message.content if b.type == "text")
    
    # Отправляем в Telegram
    header = f"📊 *Еженедельная разведка* — {datetime.now().strftime('%d.%m.%Y')}\n\n"
    send_telegram(header + report)
    
    print("Отчёт отправлен в Telegram")

# Запуск
asyncio.run(generate_weekly_report())

Автоматизация через cron (запускать каждый понедельник в 06:00):

bash
# crontab -e
0 6 * * 1 cd /path/to/project && python competitive_monitor.py >> logs/ci_$(date +\%Y\%m\%d).log 2>&1

Практика

Задача: настроить мониторинг 3 конкурентов с еженедельным отчётом


Шаг 1: Подготовка окружения (5 минут)

bash
mkdir competitive-intel && cd competitive-intel
python3 -m venv venv && source venv/bin/activate
pip install playwright anthropic python-dotenv requests
playwright install chromium

# Создай .env файл:
# ANTHROPIC_API_KEY=sk-ant-...
# TELEGRAM_TOKEN=...
# TELEGRAM_CHAT_ID=...

Шаг 2: Первый ручной снимок (10 минут)

Создай first_snapshot.py — используй скрипт generate_weekly_report() из теории.

Запусти его вручную для получения базового снимка:

bash
python first_snapshot.py

Проверь что создался competitor_snapshot.json с реальными данными конкурентов.


Шаг 3: Настройка ChangeDetection.io (5 минут)

  1. Развернуй changedetection.io у себя (self-hosted версия бесплатна) или возьми облачную версию
  2. Добавь URL страниц цен всех трёх конкурентов
  3. Включи уведомления на email или webhook
  4. Установи расписание проверки: каждые 24 часа

Теперь при любом изменении на странице — ты получишь уведомление без запуска скриптов.


Шаг 4: Тест ручного анализа через Claude (10 минут)

python
# test_analysis.py
import anthropic
import json

client = anthropic.Anthropic()

# Загружаем снятые данные
with open('competitor_snapshot.json') as f:
    data = json.load(f)

# Форматируем для Claude
summary = ""
for name, info in data.items():
    summary += f"\n### {name}\n"
    summary += f"Страница цен (первые 500 символов):\n{info['pricing'][:500]}\n"

message = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1000,
    messages=[{
        "role": "user",
        "content": f"""Вот данные с сайтов конкурентов:

{summary}

Скажи:
1. Какую модель ценообразования использует каждый?
2. Кто самый дешёвый, кто самый дорогой?
3. Что в их предложении кажется самым сильным?
4. Какие слабые места видишь?"""
    }]
)

print("".join(b.text for b in message.content if b.type == "text"))

Шаг 5: Настройка автоматического запуска (5 минут)

Для Mac — через launchd или просто cron:

bash
# Открываем crontab
crontab -e

# Добавляем строку (каждый понедельник в 07:00)
0 7 * * 1 /Users/тебя/competitive-intel/venv/bin/python /Users/тебя/competitive-intel/competitive_monitor.py

Для VPS — та же строка в crontab пользователя.

Альтернатива: запустить через n8n Schedule Trigger (урок n8n и AI-воркфлоу) — никакой настройки сервера, просто нода с расписанием.


Инструменты и ресурсы

  • Playwright — автоматизация браузера для скрейпинга, бесплатно (Microsoft)
  • ChangeDetection.io — мониторинг изменений, self-hosted бесплатно, облачная версия платная
  • Ahrefs — SEO-данные конкурентов; есть бесплатный Ahrefs Free для проверки своего сайта, цены платных тарифов и условия API смотри на сайте
  • Semrush — альтернатива Ahrefs, есть пробный период
  • SpyFu — альтернатива с акцентом на данные по PPC (платный)
  • SimilarWeb — аудитория и трафик, бесплатное расширение браузера для базовых данных
  • Anthropic API — Claude для синтеза и анализа данных; названия моделей в коде урока даны на октябрь 2026, актуальные цены и версии: Актуальное сейчас
  • G2 / Capterra — отзывы клиентов конкурентов (кладезь их слабостей)

Ключевые выводы

«Конкурентная разведка раньше стоила 3 дня аналитика. Теперь — скрипт на 100 строк и Claude. Но ценность не в данных: ценность в том чтобы действовать на основе этих данных раньше, чем конкурент успел закрепить позицию.»

«Лучшая находка в конкурентном анализе — это не то что они делают хорошо, а то что они делают плохо. Отзывы клиентов конкурентов — это буквально список фич, которые нужно сделать, чтобы переманить их аудиторию.»

«Автоматический еженедельный отчёт — это не роскошь. Это гигиена. Рынок меняется каждую неделю. Тот кто смотрит на него раз в квартал — всегда отстаёт.»


Следующий урок

→ CRM на автопилоте — HubSpot + AI

Переходим от наблюдения за рынком к своим продажам: как Claude заполняет карточки клиентов, оценивает лидов и пишет follow-up.

Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс