Skip to main content
GET
The account-centric inverse of the per-competitor battlecard: every account any tracked competitor is touching, ranked, folded across all of them. Each row names which competitors are on the account and how many interactions each has, then layers your live CRM over it: owner, open deal (name, stage, amount, close date), and the at_risk flag: you own the account and have an open deal on it. we_own: false is white space (attack); we_own: true is a deal to defend. Two scores, and they answer different questions. signal_score is all-time magnitude: how much attention has this account had. courtship_score is recency-first: is it being courted right now, with courtship_velocity (positive = accelerating) and a courtship_label of hot, warming, active, cooling, dormant or none. Accounts are ranked by interactions, the count of interactions with people there over the window, in both directions: the competitor’s people engaging their posts, and them engaging the competitor’s people’s own posts. That count is the engagement score the Attack threshold is set in. courtship_score breaks ties. inbound_interactions and outbound_interactions split interactions by direction. Only people who match your keywords are counted.

Attack and Defense

Add scope to get one of the two competitor monitoring lists instead of the overview:
  • scope=attack: accounts that are not your customers, ranked by interactions over period. It covers any account where a competitor engaged someone who matches your buyer titles, whether it is a target account, in your CRM or neither.
  • scope=defense: your customers that competitors touched, with the interactions over 30 and 90 days, the competitors involved and the last interaction.
Customer means your client list, or a customer in your CRM (lifecycle stage customer, or a Closed Won deal); an open deal does not make an account a customer. Every direction counts (a salesperson engaging someone at the account, and someone at the account engaging a salesperson’s post). At your customers everyone counts, whatever their title; at every other account, target accounts and companies in your CRM included, only people who match your buyer titles count. Ignored interactions do not. A scoped account adds use_case, interactions (over the period), interactions_30d, interactions_90d, last_interaction_at, competitors[] with each competitor’s interactions, customer_of[] (the competitors you watch that the company is a confirmed or likely customer of: id, name, domain, label) and we_own (the company is in your CRM). It also carries people_engaged (the distinct people there engaged in the period), latest (the newest interaction: type, direction, at, competitor_id, competitor_name, rep_name, rep_title, target_name, target_title, post_url; absent on a customer-only row) and the company’s CRM owner and CS owner (owner_name, owner_email, cs_owner_name, cs_owner_email). The summary adds customer_accounts, how many accounts have a non-empty customer_of. The response adds has_more and next_offset. from and to are ignored with scope.

Every account at once

scope=all is one list: the accounts competitors touched on either side, plus every company that is a confirmed or likely customer of a competitor you watch, even when nobody interacted there. Each company is one row. A customer nobody interacted with has customer_only: true and zero counts, and comes after the others, by name. These filters narrow it, and only it (400 on attack or defense):
  • yours=true keeps your customers (your client list), yours=false every other account.
  • customer_of=any keeps the companies that are a customer of a competitor you watch, customer_of=<competitor id> of that one.
  • in_crm=true keeps the companies in your CRM, in_crm=false the others.
  • activity_only=true leaves out the customer-only rows, so every account has an interaction in the period.
  • owner=<email> keeps the companies that CRM account owner owns.
competitor_id narrows both the interactions and the customers to those competitors. On scope=all, my_accounts and white_space split the list on your client list.

People reached and pitches

Every scoped row also carries:
  • people: up to 10 of the people engaged at the company in the period, newest first, each with their newest interaction: linkedin_id, name, title, avatar_url, type, direction, at, post_url, the competitor’s person who did it (rep_name, rep_title, rep_avatar_url, competitor_id, competitor_name) and the comment classifier’s verdict on it (intent_label, is_critical, evidence_span, the words that sell). [] on a customer-only row. people_engaged stays the full count.
  • pitches: how many interactions in the period are pitches, a comment the classifier gave an intent label or flagged critical: a competitor’s person selling under someone’s post.
These work on every scope:
  • order=standing ranks your customers first, then the companies in your CRM, then the rest; inside each, a row with a pitch in the period comes first; then the usual order by interactions.
  • types keeps the interactions of one kind: like (every kind but a comment) or comment. Both when omitted.
  • pitch=true keeps the pitches only.
types and pitch decide which interactions count, so every count, people and latest follow them. On scope=all a competitor’s customer stays listed with zero counts; add activity_only=true to leave those out.

Open deals

Every scoped row also carries the company’s open deal in your CRM, the same one the Accounts page shows: has_open_deal, and when it is true, deal_name, deal_stage, deal_amount and deal_close_date of the first open deal, the one closing last first. It is read from your CRM each time you call, so a deal your CRM opened since the last competitor run is already there. Add open_deal=true to keep the accounts with an open deal only; it works on every scope and across pages. open_deals is still accepted and changes nothing.

Companies without a LinkedIn numeric id

Every scoped row also carries company_vanity_name, the company’s LinkedIn vanity: its page is https://www.linkedin.com/company/{company_vanity_name}. It is there even when company_numeric_id is not, which happens when the profile of the person engaged named their company page by its vanity alone. Such a company is sent to company enrichment by the competitor’s next monitoring run, and gets its company_numeric_id and company_domain once that lands; until then, link to it by company_vanity_name. Omitted when the company has no vanity.

Authorizations

Authorization
string
header
required

The API key you created on the API settings page of the Clustr app.

Query Parameters

account
string

Keeps the rows of this account, by its name. Repeat it for several accounts (a name may hold a comma, so it is never split).

competitor_id
string

Keeps the accounts touched by this tracked competitor, by its Clustr ID (cmp_…). Repeat the parameter for several competitors, or leave it out for all of them. The id from earlier responses also works.

from
string<date-time>

The start of the time window, as an RFC 3339 timestamp. Leave it out to cover all time.

to
string<date-time>

The end of the time window, as an RFC 3339 timestamp.

scope
enum<string>

attack (accounts that are not your customers), defense (your customers) or all (both, plus the companies your competitors sell to). Setting it switches the list to the ranking by interactions over period.

Available options:
attack,
defense,
all
yours
boolean

With scope=all only: true keeps the accounts on your client list, false the others.

customer_of
string

With scope=all only. any keeps the companies that are a customer of a competitor you watch, and a competitor's Clustr ID (cmp_…) keeps that competitor's customers. The competitor id from earlier responses also works.

in_crm
boolean

With scope=all only: true keeps the companies in your CRM, false the others.

activity_only
boolean

With scope=all only: true keeps only the accounts with an interaction in the period, dropping the customer-only entries.

owner
string

With scope=all only: keeps the companies this person owns in your CRM, by their email address.

cs_owner
string

With scope=all only: keeps the companies this person looks after as CS owner, by their email address: the CS owner set in Clustr, or else the one in your CRM.

order
enum<string>

With scope only: pass standing to rank your customers first, then the companies in your CRM, then the rest, with the accounts that have a pitch in the period first inside each group, then by interactions. Leave it out for the ranking by interactions.

Available options:
standing
types
string

With scope only: which interactions count, like (every kind except comments) or comment. Send a comma-separated list or repeat the parameter. Leave it out to count both.

pitch
boolean

With scope only: pass true to count only pitches, the interactions Clustr gave an intent label or flagged critical.

in_market
boolean

With scope only: pass true to keep only the accounts in market, where in the last 30 days two or more of their sales reps reached two or more people there on two or more posts, from two or more competitors or to three or more people.

intent
enum<string>

With scope only: keeps the accounts where someone's post showed buying intent in the period, any, or one intent: hiring_for, evaluating, migrating, rfp or budget_or_project.

Available options:
any,
hiring_for,
evaluating,
migrating,
rfp,
budget_or_project
open_deal
boolean

With scope only: pass true to keep only the accounts with an open deal in your CRM. Every scoped account carries its open deal (has_open_deal, deal_name, deal_stage, deal_amount, deal_close_date), the one the Accounts page shows.

open_deals
boolean

Accepted and ignored: every scoped account carries its open deal.

period
string

With scope only: the ranking window, from 1d to 365d. Defaults to 30d.

limit
integer

With scope only: the number of accounts per page, at most 500. Defaults to 100.

offset
integer

With scope only: the number of accounts to skip. Pass next_offset from the previous page.

Response

Ranked accounts and a summary

success
boolean
required
Example:

true

data
object
required