Skip to main content
Competitor Monitoring watches the Sales and Customer Success teams of your competitors on LinkedIn, starting from nothing but their company page URLs, and tells you which accounts they interact with.
  • Attack: accounts that are not your customers and that a competitor’s salespeople are actively working, plus the comments in which a competitor’s rep pushes their product.
  • Defense: a competitor’s salesperson engaging with one of your current customers.
An account is one or the other, never both: your customers are your client list and the customers in your CRM (lifecycle stage customer, or a Closed Won deal). Every two weeks Clustr collects the likes and comments of every monitored person in both directions, keeps the ones whose counterpart works at one of your customers or matches your buyer titles, links each one to that person’s company, and alerts your Attack and Defense channels. Every month it also refreshes each competitor’s team.
Competitor Monitoring is an add-on. Your workspace needs the feature enabled and a slot allowance granted by Clustr. Contact support to turn it on. Calls return 403 with code FEATURE_NOT_ENABLED when the feature is off.

How it works

  1. Add competitors by pasting one or more LinkedIn company page URLs. Preview Competitors resolves each page (name, logo, headcount), says whether it is already monitored, and counts the Sales and CS people found and the slots they would take. Register them, one or several at once: their people are monitored up to your free slots, and adding a competitor starts its first scan immediately.
  2. Scans then repeat every two weeks, on Mondays at 11:00 Europe/Paris by default, for as long as you have competitors. Move the day and time or switch it off in Monitoring settings, or run one now. See When scans run.
  3. Read the results three ways: the live Signals feed (one row per interaction), the accounts overview (one row per account, ranked, with your CRM context), and the periodic attack/defend report.
  4. Receive competitor alerts in your Attack and Defense Slack channels, by email or on your webhook, and a report-ready notification through any channels you have configured (email, Slack, webhook).

In the app

Competitor monitoring has three tabs, and each competitor’s page has the same lists for that one competitor. Manage competitors, in the ⋯ menu or behind “Watching N competitors” under the title, lists the competitors you watch with the people we follow there, adds one with New competitor, and stops following one.
  • Activity opens first. “Needs your attention” sits on top: the accounts where their activity is yours to act on, which are your customers, your open deals, a sales pitch, and accounts in your CRM their sales people keep coming back to. Under it is every like and comment by the people you follow, newest first, with the comment and why it was flagged when it was a sales pitch. The Their team filter keeps their sales people or their customer success people.
  • Accounts lists the companies where their people liked or commented in the last 30 days, your customers first, with what their activity most likely means, how many weeks it went on and the latest move. With a CRM connected, the deal stage column shows each open deal as the Accounts page does, and the Open deal filter keeps those accounts.
  • Customers lists the companies that buy from them, with the strongest proof first: a case study, a testimonial, their logo on the competitor’s site or a LinkedIn post. Pick Possible in the Confidence filter to add the companies that rest only on their customer success people keeping in touch there.

What their activity means

Nearly everything their people do on LinkedIn is a like, and most companies get only one. So each account says what the activity most likely is, from who did it, how often and over how long: Only their team’s outreach counts as working an account. An account is In market when, in the last 30 days, two or more of their sales people reached two or more people there on two or more posts, from two or more competitors or to three or more people. Customer success people keeping in touch don’t count: that is a customer, not a prospect. Clustr flags these accounts on This week and in Attack alerts. The counts name the kind and the span, such as “6 likes across 5 weeks”, because coming back week after week is the strongest sign of account work in this data. “Your customer” on an account comes from your client list, set in Targeting › Clients, and from your CRM: a company at lifecycle stage customer, or with a Closed Won deal. An open deal on a customer leaves it your customer. “In your CRM” matches the company by its domain or any parent of it, then by its LinkedIn page.

The slot model

A slot is a monitored person. Each monitored person takes one slot, whatever the competitor, and you can track as many competitors as you like. Your slot limit comes from your plan, set by Clustr: 50, 100 or 200 slots, or a custom number. Only monitored people take a slot and only their activity is collected. Everyone else is still listed on the Team and keeps their history: Get Competitor Slots returns the counter, and GET /competitors and the people lists carry the same slot_usage:
  • When a new competitor’s team is found, its people are monitored up to your free slots, highest ranked first, and the rest are added Paused (no slot). Preview Competitors tells you how many slots a company will take before you add it.
  • Adding someone by hand, validating a joiner or resuming a paused person takes a slot. When every slot is in use the call answers 409 NO_SLOT: pause someone else, or swap the two in one step.
  • Removing or pausing a person, a person leaving the competitor, and deleting a competitor all free slots.
  • Need more? Contact Clustr to raise your limit.
  • If your limit goes down, the lowest-ranked monitored people are paused until you fit again. Nobody is deleted, and you choose who to monitor from the paused list.
active and limit in slot_usage are older names for used and total. competitor_monitor_slot_limit, which used to count competitors, no longer applies.

The Team

Each competitor has a Team: the people whose LinkedIn activity Clustr watches. The team search finds the competitor’s current Sales and CS staff (AEs, SDRs and BDRs, account managers, CSMs, heads of Sales and CS) when you add it. The titles it looks for are your workspace’s title list, which you can change or reset. Each person on the Team has a title, a function (Sales, CS or Other), a status (see the slot model), a source (found by the search, added by hand, or detected at a refresh), the date monitoring started, and the number of interactions kept over the last 30 days. List one competitor’s Team, or every monitored person across competitors, filtered by competitor, function and status and searched by name. Add people by LinkedIn profile URL or from the competitor’s other employees, and pause or monitor them one at a time. Once a month, at the start of one of the scheduled collections, Clustr refreshes the Team. It runs the Sales and CS search again, and new people are joiners, followed automatically while you have free slots; past your limit they are added Paused, not followed. Then it checks the LinkedIn profile of every monitored and paused person, not only the ones the search stopped finding: those who now work elsewhere are leavers, marked Left the company with their new company, and those still there in a role outside Sales and CS are flagged as a role change. Nobody is marked on doubt. A profile that cannot be read or placed is checked again three days later, up to three times a month, and anyone the refresh did not reach in time is checked within the hour. Each refresh, and each of those follow-up checks, is recorded with its joiners, leavers and role changes and how many profiles it checked (list them), and you can refresh a team now without waiting for the month. List the Team, add someone it missed by LinkedIn profile URL, or remove someone who should not be there; a removed person is not added back by the next scan.

Their customers

Clustr finds the companies each competitor sells to on the competitor’s own website and LinkedIn posts, and shows a customer only when the evidence is strong. Nothing is guessed: no evidence, no customer. The website. Each competitor has a website_url, its marketing site. That is the site Clustr reads, so set it when you add the competitor (it defaults to https://<domain>). The read is shared by every workspace that watches the same site and refreshed about once a month; Get Competitor Site shows when it was last read and which pages, and an admin can read it again now once a day. Signals. Each piece of evidence is a signal with a weight: A company named as an investor, partner, integration or technology, the competitor itself, you, or another competitor you track never counts as a customer. Likes and comments by a competitor’s customer success team alone never make a customer. Labels. The weights of the distinct signals add up to a score (at most 100):
  • Confirmed: 80 or more, one strong signal. Confirming a customer yourself also makes it Confirmed.
  • Likely: 50 to 79.
  • Possible: under 50. Hidden by default everywhere; the API returns them only with include_possible=true.
A rejected customer is hidden everywhere and never comes back. A customer whose evidence was removed from the competitor’s site is kept and marked possible churn. Contacts. Each customer lists the people found and how: quoted in a testimonial, tagged in a competitor post, a possible buying committee member (they engaged with the competitor’s post about the customer), or a CS counterpart (the competitor’s CS reps engage them). List one competitor’s customers or every competitor’s (filter by label and signal), confirm or reject one, or set its renewal date, add a customer you already know of, or look up which competitors a set of your companies buys from. With renewal tasks on, Clustr creates a task in your CRM for the account owner when a confirmed competitor customer is one of your accounts.

Attack and Defense views

List Competitor Accounts with scope=attack ranks the accounts that are not your customers by how much competitors’ salespeople engage them, filterable by competitor; scope=defense lists your customers that competitors touched, with the interactions over 30 and 90 days and the competitors involved, so CS can prioritise. Get Competitor Account breaks one account down per competitor: interactions over 30 and 90 days, the salespeople involved, the last interaction and 13 weeks of counts. A false positive is handled where it starts: mark a company as not a customer, or ignore an interaction for good (undo, list).

On the Accounts table

Competitor activity also shows on your Accounts. List Accounts (and list_accounts over MCP) returns competitor_activity on every account a watched competitor has touched: which competitors, the latest touch and pitch, pitches in the last 30 days, repeat engagement with competitors’ own posts, and whether the account is a customer, a target or has an open deal. Filter accounts with competitor, competitor_pressure, competitor_last_touch, competitor_side, competitor_active_days and competitor_pitch_days, and rank them with sort=lastCompetitorActivity, lastCompetitorPitch, competitorPitches or pressure_path. The Customer of column, which competitors each account buys from, is Lookup Competitor Customers By Company.

In your data store

If you export Clustr to your own database (Supabase, Postgres, BigQuery or Snowflake), your competitor data can go there too. Turn on Competitor monitoring in the data store’s settings, or call update_data_store_options with export_competitors over MCP. Two tables, written by every sync and right after each competitor scan:
  • clustr_competitor_activity: one row per like or comment, as the Activity tab lists them.
  • clustr_competitor_accounts: one row per account a competitor ever touched, with the competitors, the reading, the owners and the open deal in your CRM.
Both join to clustr_accounts on company_id. The columns are listed on each data store’s page: Supabase, BigQuery, Snowflake.

Authentication

All /api/public/* requests authenticate with your workspace API key as a Bearer token. The key resolves to your workspace, so you never pass a workspace id yourself.
See Authentication for creating and managing keys. The same key drives the MCP server.

Quickstart

1

Preview the companies

Each URL comes back resolved, with people_found and slots_needed, or flagged as already monitored or as a personal profile.
2

Register a competitor

The response echoes the created competitor and your updated slot_usage. Note the id.
3

Wait for the first scan

Registering started it. Watch it with:
A scan takes several minutes per competitor.
4

Read the Signals feed

One row per interaction between a competitor’s rep and a person at one of your accounts, with the ICP verdict, your CRM state and the LLM critical verdict:
Or ask the account-level question instead — which of your accounts are being worked, ranked:
5

Read the report

List reports (newest first), then fetch one by id for the full attack/defend payload:
See the report schema for every field.

When scans run

A competitor scan fires on three events:
  1. You add a competitor. Registering one starts its first scan straight away. It reads the last 90 days of the team’s activity, so a new competitor has history within minutes.
  2. The slot comes. Collection is every two weeks. The schedule is a weekly slot, Mondays at 11:00 Europe/Paris by default, and each competitor is scanned at every other one: a competitor that already ran in the last ten days skips the slot, so your competitors can alternate between two weeks. Each scheduled scan reads from the competitor’s previous scan, minus a week of overlap. The team refresh stays monthly, inside one of the scans. Read the schedule with GET /competitor-monitoring/schedule, and move the day and time or switch it off with the PUT or in Monitoring settings. cadence is pinned to weekly, the slot.
  3. You run one now. POST /competitor-monitoring/run, the run_competitor_monitoring MCP tool, or “Scan now” in the app, for one competitor or all of them. It is throttled per workspace, and a competitor whose scan is already running is skipped.
Each scan collects four kinds of interaction for every monitored person: the comments and likes they leave on other people’s posts, and the comments and likes other people leave on their own posts. Everyone at your customers is kept, whatever their title; at every other account, only people who match your buyer titles. Use GET /competitor-runs to see what is in flight.

Run it from your AI assistant

The MCP server exposes Competitor Monitoring as tools, so you can drive the whole loop in natural language from Claude, Cursor, or ChatGPT: Everything on this page is available as an MCP tool — anything you can do in the app you can do from your assistant, and from the API. Example prompts:
  • “Add Globex and Initech as competitors to monitor”
  • “Who joined or left Globex’s sales team this month?”
  • “Which of my open-deal accounts did competitors touch this week?”
  • “Show me every critical signal from Globex’s founders and AEs in the last 30 days”
  • “Who at Northwind Trading have our competitors been talking to?”
  • “Show me the latest competitor report and which accounts are at risk”

Competitor alerts

There are two alerts, side by side, each with its own Slack channel and email:
  • Defense: a competitor engages someone at one of your customers (a like or a comment, either way round). It tags the account’s CS owner.
  • Attack: a competitor engages someone at a prospect, any account that is not a customer. It tags the account’s sales owner. Each Attack alert says whether the account is a Target account or an Other account (account_scope in the webhook). To alert on target accounts only, turn off Other accounts (attack_other_accounts).
One alert per account. After each monitoring run, an account gets one message with its name and every person a competitor engaged there: their name and title, the competitor’s salesperson, and a link to the interaction. People new since the last alert are marked new. The account alerts again only when someone new is engaged. Each alert has its own rule, and every message states it, for example “a comment, or 2+ people engaged, in the last 30 days (comments, likes)”:
  • Interactions that count: comments, likes, or both (defense_interaction_kinds, attack_interaction_kinds). Both by default.
  • Minimum people engaged: how many people at the account must have been engaged (defense_min_people, attack_min_people). 2 by default.
  • A comment is enough: when it is on, a single comment at the account in the period also alerts, even below the minimum people (defense_comment_alone, attack_comment_alone). On by default.
  • Period: how far back those people are counted (defense_period_days, attack_period_days). 30 days by default.
Before you save, the alert settings show an example message built from one of your real recent accounts, with who it goes to.
  • Owners: the CS owner is the one set in Clustr, else the CS owner field you map in Settings > CRM > Owner fields. The sales owner is your CRM’s account owner. Clustr reads them when it sends the alert. With no owner, the alert names nobody.
  • Email: per alert, optionally email it to its owner and to extra addresses. With no owner and no extra address, the alert is not emailed.
  • Webhook: optionally, every alert is also POSTed to your endpoint, signed with your secret. See Webhook payloads.
  • No channel, no email and no webhook means no alerts.
  • Customers are your client list and the customers in your CRM: a company at lifecycle stage customer, or with a Closed Won deal. Mark a company “Not a client” to leave it out.
Read and change it with Get Competitor Alerts and Update Competitor Alerts, see what an alert would send before saving a change with Preview Competitor Alert, check your endpoint with Test Competitor Alert Webhook, or in the app under Settings > Notifications.

Delivery

When a run completes, Clustr fans the report out to the channels enabled in your workspace’s competitor delivery config:
  • Email: a summary email with the attack/defend counts and a link to the full report. Sent to your configured recipients.
  • Slack: a one-line summary posted to your configured channel.
  • Webhook: a competitor_monitoring.report_ready event POSTed to your endpoint. See webhook payload.
Delivery is best-effort per channel: a failure on one channel never blocks the others.