Skip to main content

Build an AI-Powered Competitive Intelligence Dashboard (Claude + Apify + n8n)

· 8 min read
Yassine El Haddad
Software Developer & Automation Specialist

I build production AI agents, web scrapers, and automation pipelines. Most of what I publish here comes from the actual problems they run into: proxies that get banned, anti-bot stacks that fingerprint your client, RAG that drifts when the underlying data moves. Stack: Python, TypeScript, Go, FastAPI, LangChain, Crawlee, Playwright, deployed on AWS, GCP, and Cloudflare.

Enterprise competitive intelligence tools — Crayon, Klue, Kompyte, Similarweb — charge $300–$2,000/month (quote-based, plan-dependent) for competitive monitoring dashboards. This same monitoring can be built with Apify for data collection, Claude for analysis, n8n for orchestration, and a free dashboard — for under $50/month (starting cost; scales with competitor count, Actor fees, and proxy usage).

This guide builds it step by step: from identifying what to monitor, to automated daily scrapes, to AI-powered change detection that alerts your team in Slack when competitors make moves that matter.

TL;DR:

ComponentToolCost
Data collectionApify (5 competitors, daily)~$30/mo
AnalysisClaude API (change detection, summarization)~$5–15/mo
Orchestrationn8n (self-hosted)$0
DashboardGoogle Sheets or Grafana$0
AlertsSlack webhooks$0
Total~$35–45/mo

What to monitor

Not everything about your competitors matters. Focus on signals that inform decisions:

SignalBusiness valueData sourceFrequency
Pricing changesSales response, margin protectionPricing pagesDaily
Feature launchesProduct roadmap alignmentChangelog, blogDaily
Job postingsHiring signals → product directionCareers page, LinkedInWeekly
Review sentimentBrand perception, product qualityG2, Capterra, TrustpilotWeekly
SEO rankingsContent strategy gapsGoogle SERPsWeekly
Funding/pressStrategic moves, financial healthNews, CrunchbaseDaily

Start with pricing + feature launches — highest signal, lowest scraping cost.


Architecture

┌────────────────────────────────────────────────────────────────────┐
│ CI Dashboard Architecture │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Apify │──▶│ n8n │──▶│ Claude │──▶│ Store │ │
│ │ Actors │ │ (orch) │ │ (diff) │ │ (DB) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │
│ │ Scheduled daily/weekly │ │
│ │ ┌──────────┐ │
│ │ │Dashboard │ │
│ │ │(Sheets/ │ │
│ │ │ Grafana) │ │
│ │ └──────────┘ │
│ │ │ │
│ │ On change detected │ │
│ │ ┌──────────┐ │
│ └───────────────────────────────────│ Slack │ │
│ │ Alert │ │
│ └──────────┘ │
└────────────────────────────────────────────────────────────────────┘

Step 1: Configure Apify Actors for each competitor

Pricing page scraping

Use the Website Content Crawler for each competitor's pricing page:

{
"startUrls": [
{ "url": "https://competitor1.com/pricing" },
{ "url": "https://competitor2.com/pricing" },
{ "url": "https://competitor3.com/pricing" }
],
"maxCrawlPages": 1,
"crawlerType": "playwright:firefox",
"removeElementsCssSelector": "nav, footer, .cookie-banner"
}

Saved as an Apify Task — reusable with consistent inputs. Schedule daily at 06:00 UTC.

Changelog/feature scraping

{
"startUrls": [
{ "url": "https://competitor1.com/changelog" },
{ "url": "https://competitor2.com/blog/tag/product" }
],
"maxCrawlPages": 5,
"crawlerType": "cheerio"
}

Review sentiment

Use the Google Search Scraper for G2/Capterra reviews:

{
"queries": ["site:g2.com competitor1 reviews 2026"],
"maxPagesPerQuery": 1,
"countryCode": "us"
}

queries must be a JSON array of strings for apify/google-search-scraper — confirm field names on the Actor's input schema in Apify Console.


Step 2: n8n workflow for daily collection

Build this workflow in n8n (self-hosted). See n8n + Apify Integration for connection setup.

Workflow nodes:

  1. Schedule Trigger — Daily 06:00 UTC
  2. HTTP Request — Start Apify Task for pricing scraping
  3. Loop / HTTP Request — Poll GET https://api.apify.com/v2/actor-runs/{runId} (or use Apify's Webhook integration) until status is SUCCEEDED or FAILED — a fixed 60 second Wait is unreliable for Playwright crawls
  4. HTTP Request — Fetch Apify dataset results (/v2/datasets/{datasetId}/items)
  5. Code Node — Parse and structure scraped data
  6. Database or Sheets — Load previous snapshot (Postgres, S3, Google Sheets, etc. — pick one store and document the node)
  7. HTTP Request — Call Claude Messages API with previous + current JSON (set x-api-key, model id, and respect payload size limits)
  8. IF Node — Changes detected?
  9. Slack — Post change alert (if changes found)
  10. Google Sheets — Append new snapshot (always)

Claude diff analysis prompt

Compare these two competitive intelligence snapshots and identify meaningful changes.

PREVIOUS (yesterday):
[previous snapshot JSON]

CURRENT (today):
[current snapshot JSON]

Return a JSON response:
{
"changes_detected": true/false,
"changes": [
{
"competitor": "name",
"type": "pricing | feature | hiring | review",
"description": "What changed",
"significance": "high | medium | low",
"recommended_action": "What the team should consider"
}
],
"summary": "One paragraph executive summary"
}

Only report changes that would matter to a product or sales team. Ignore cosmetic changes, wording tweaks, and formatting differences.

Step 3: Dashboard setup

Option A: Google Sheets (simplest)

Create a sheet with tabs for each signal type. n8n appends new rows daily.

DateCompetitorSignalChangeSignificanceAction
2026-04-07AcmePricingPro plan $29→$39HighReview our pricing
2026-04-07Beta IncFeatureLaunched API v3MediumAssess feature gap

Use Google Sheets' built-in charts for trend visualization.

Option B: Grafana (advanced)

For teams that want real dashboards, push CI data to PostgreSQL and visualize with Grafana:

  1. Store snapshots in a ci_snapshots table
  2. Create Grafana panels for price trends, hiring velocity, review scores
  3. Set up Grafana alerts for threshold breaches

See Monitoring Scrapers with Grafana for the Grafana setup.


Step 4: Slack alert system

Configure a Slack Incoming Webhook for your CI channel:

{
"text": "🔔 *Competitive Intelligence Alert*",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "🏢 *Competitor:* Acme Corp\n📊 *Change:* Pro plan price increased $29 → $39\n⚡ *Significance:* High\n💡 *Action:* Review our pricing positioning — their increase opens opportunity for our mid-tier plan"
}
}
]
}

In n8n, the Slack node formats and sends alerts only when Claude's analysis returns changes_detected: true with significance: high or medium.


Step 5: Weekly CI digest

In addition to real-time alerts, generate a weekly summary:

Add a Friday 16:00 UTC scheduled workflow that:

  1. Collects all changes from the past 7 days
  2. Sends to Claude for strategic summarization
  3. Posts to a dedicated Slack channel or emails to stakeholders

Weekly digest prompt:

Summarize this week's competitive intelligence findings for our executive team.

Changes this week:
[aggregated changes JSON]

Format as:
1. **Top 3 takeaways** (most strategically important changes)
2. **Competitor-by-competitor summary** (2-3 sentences each)
3. **Recommended actions** (prioritized list)
4. **What to watch next week** (emerging patterns)

Write for a CEO audience: concise, action-oriented, no technical jargon.

Cost comparison: DIY vs enterprise CI tools

DIY (this guide)CrayonKlueSimilarweb
Monthly cost$35–45$500+$1,200+$300+
Competitors trackedUnlimitedPlan-dependentPlan-dependentPlan-dependent
CustomizationFull (you own the code)Template-basedTemplate-basedTemplate-based
Data freshnessDaily (configurable)DailyDailyMonthly
Setup time4–6 hours2–4 weeks2–4 weeks1–2 weeks
Maintenance1–2 hours/monthVendor-managedVendor-managedVendor-managed
AI analysisClaude (customizable prompts)Built-inBuilt-inLimited

When to use enterprise CI tools instead: You have 50+ competitors, need human analyst interpretation, require executive-ready reports with no technical maintenance, or compliance requires vendor SLAs and audit trails.


Frequently Asked Questions

Technically unlimited. The Apify Starter plan ($29/month) handles 5-10 competitors comfortably with daily pricing scrapes and weekly feature/hiring checks. Each additional competitor adds roughly $3-5/month in Apify compute costs.

Website Content Crawler handles most structural changes automatically because it extracts text content, not specific CSS selectors. For heavily dynamic sites, add a health check: if the scraped content is empty or drastically shorter than previous runs, trigger an alert to review the Actor configuration.

Yes. Make.com provides the same orchestration capabilities with a visual builder. It's slightly easier to set up but costs $9-29/month vs free for self-hosted n8n. See our Make.com + Apify guide for the visual workflow approach.

Use Apify's built-in proxy rotation. For aggressive anti-bot sites, switch from Cheerio to Playwright-based crawling and use residential proxies. As a last resort, monitor their publicly available RSS feeds, press releases, and social media accounts instead.

Google Alerts covers news and press mentions but misses pricing changes, feature updates, job postings, and review sentiment. This CI dashboard captures structured data that Google Alerts cannot — it's a complement, not a replacement.

Very accurate for structured changes (pricing, feature lists, job postings). Less reliable for nuanced changes (rewording marketing copy, subtle UI shifts). Provide the previous snapshot alongside the current one — Claude produces better diffs when it can compare directly rather than relying on memory.


A competitive intelligence dashboard is not a nice-to-have — it is an early warning system for the moves that affect your revenue, product roadmap, and market positioning. Building it yourself costs $35–45/month and 4–6 hours of setup versus $500+/month for enterprise tools.

Start scraping competitors on Apify and build your first n8n workflow today. For the no-code alternative, set up Make.com with Apify modules.

Common mistakes and fixes

Competitor pricing page returns different content on each scrape.

Many sites serve dynamic pricing based on geo/session. Pin proxy location, clear cookies, and use consistent request headers. Compare 3 consecutive scrapes to identify volatile vs stable fields.

Claude analysis produces inconsistent change reports.

Provide the previous snapshot alongside the current one in the prompt. Use structured JSON output with explicit before/after fields. Add few-shot examples of good change detection.

n8n workflow times out on large datasets.

Process competitors sequentially, not in parallel. Poll the Apify run status API until SUCCEEDED/FAILED instead of a fixed Wait. For long runs, check [n8n environment variables](https://docs.n8n.io/hosting/configuration/environment-variables/) for execution timeout settings — exact names vary by n8n version.