Buying Groups
Buying group intelligence identifies and tracks the committee of stakeholders involved in a purchase decision. GTM Clarity uses probabilistic role detection from multiple signals, completeness scoring against configurable role templates, and contact discovery from email and intent data.
Core Concepts
Roles
Every member of a buying group is assigned one of these roles:
| Role | Description |
|---|---|
champion | Internal advocate who drives the deal forward |
economic_buyer | Has budget authority and final sign-off |
technical_evaluator | Evaluates technical fit and capabilities |
end_user | Day-to-day user of the product |
legal_procurement | Handles contracts, compliance, and procurement |
coach | Provides insider guidance and navigational help |
blocker | Opposes or slows the purchase decision |
unknown | Role cannot be determined from available signals |
Every role assignment carries a confidence score (0.0--1.0). The UI always displays roles as "Likely [Role] (N% confidence)" --- never as absolute labels. This reflects the inherent uncertainty of role inference from indirect signals.
Buying Group Scope
A buying group is scoped to an account and optionally to a solution tag:
- Account-level group: One group per account, covering all products/solutions
- Solution-level group: One group per account per solution, allowing different buying committees for different products
Multi-Signal Role Detection
Role detection combines four signal sources, each with a different trust level:
| Signal Source | Weight | Description |
|---|---|---|
sf_contact_role | 0.9 | Salesforce OpportunityContactRole (explicit CRM data) |
title_parse | 0.6 | Job title heuristic parsing |
delivrai | 0.5 | Delivr.ai buying unit role data |
engagement_pattern | 0.3 | Behavioral pattern inference (lowest trust) |
Detection Algorithm
The detectRole function merges signals using weighted confidence fusion:
- Group signals by role --- Collect all signals that point to each possible role
- Compute weighted score per role --- For each role:
sum(signal.confidence * SIGNAL_WEIGHTS[signal.source]) - Select the winning role --- The role with the highest weighted score
- Normalize confidence --- Divide the winning score by the sum of weights for the winning role's sources, then clamp to
[0, 1]
Salesforce Role Mapping
When a Salesforce OpportunityContactRole is present, it is mapped to a buying group role:
| Salesforce Role | Buying Group Role |
|---|---|
| Decision Maker | economic_buyer |
| Economic Buyer | economic_buyer |
| Executive Sponsor | economic_buyer |
| Technical Buyer | technical_evaluator |
| Technical Evaluator | technical_evaluator |
| Evaluator | technical_evaluator |
| Business User | end_user |
| Other | unknown |
Title Parsing
Job titles are parsed using pattern matching to infer roles. For example, titles containing "VP Finance" or "CFO" suggest an economic buyer, while "Engineer" or "Developer" suggests a technical evaluator.
Detection Example
A contact with title "VP of Engineering", a Salesforce role of "Technical Evaluator", and a Delivr.ai role of "technical_evaluator":
Signals:
- title_parse → technical_evaluator (confidence 0.8, weight 0.6)
- sf_contact_role → technical_evaluator (confidence 1.0, weight 0.9)
- delivrai → technical_evaluator (confidence 0.8, weight 0.5)
Weighted score for technical_evaluator:
(0.8 * 0.6) + (1.0 * 0.9) + (0.8 * 0.5) = 0.48 + 0.90 + 0.40 = 1.78
Max possible weight: 0.6 + 0.9 + 0.5 = 2.0
Normalized confidence: 1.78 / 2.0 = 0.89
Result: technical_evaluator (89% confidence)
Role Templates
A role template defines which roles are expected for a complete buying group, along with weights and whether each role is required:
interface RoleTemplate {
id: string;
tenantId: string;
name: string;
solutionTag?: string;
roles: Array<{
role: BuyingGroupRole;
required: boolean;
weight: number;
}>;
isDefault: boolean;
}
Example template (Enterprise SaaS):
| Role | Required | Weight |
|---|---|---|
| champion | Yes | 3 |
| economic_buyer | Yes | 3 |
| technical_evaluator | Yes | 2 |
| end_user | No | 1 |
| legal_procurement | No | 1 |
Templates are configurable per tenant and optionally per solution tag.
Completeness Scoring
Completeness measures how many of the template's expected roles are filled in the actual buying group.
Algorithm
completenessScore = round(
sum(weight for each filled role in template)
/ sum(weight for all roles in template)
* 100
)
Example
Using the Enterprise SaaS template above (total weight = 10):
| Role | Filled? | Weight | Contribution |
|---|---|---|---|
| champion | Yes | 3 | 3 |
| economic_buyer | Yes | 3 | 3 |
| technical_evaluator | No | 2 | 0 |
| end_user | Yes | 1 | 1 |
| legal_procurement | No | 1 | 0 |
completenessScore = round((3 + 3 + 0 + 1 + 0) / 10 * 100) = 70
Result Structure
The completeness scorer returns:
interface CompletenessResult {
score: number; // 0-100
filledRoles: BuyingGroupRole[];
missingRoles: BuyingGroupRole[];
missingRequired: BuyingGroupRole[];
dataQualityNote?: string; // e.g., "Based on 2 of 6 contacts with role data"
}
The missingRequired array highlights roles that are both required by the template and absent from the buying group. These are the highest-priority gaps to fill.
Data Quality Context
The scorer accepts optional data quality context. If only some contacts have role data, the result includes a note like "Based on 2 of 6 contacts with role data" to flag that the completeness score may be understated.
Contact Discovery
GTM Clarity discovers new contacts that may belong to a buying group from two sources:
| Source | Discovery Method |
|---|---|
o365_email | Email threads involving known contacts |
o365_calendar | Calendar invitations with unknown attendees |
delivrai | Delivr.ai contact enrichment data |
Discovered contacts are marked with isDiscovered: true and their email is stored in discoveredEmail until they are matched to an existing person record or confirmed by a sales rep.
Member Status
Each buying group member has:
| Field | Description |
|---|---|
role | Assigned buying group role |
roleConfidence | Confidence score 0.0--1.0 |
roleSource | Which signal source determined the role |
isConfirmed | Whether a sales rep has manually confirmed the role |
isDiscovered | Whether the contact was auto-discovered |
discoverySource | o365_email, o365_calendar, or delivrai |
Configuration
Configure buying groups in Settings > Buying Groups:
- Create role templates --- Define which roles matter for your deals
- Set the default template --- Applied automatically to new buying groups
- Create solution-specific templates --- Different products may have different buying committees
- Review discovery settings --- Enable or disable O365 and Delivr.ai discovery
Related Pages
- Buying Group Heatmap --- Engagement velocity and going-dark alerts
- Account Scoring --- How buying group completeness influences account scores
- Scoring Overview --- Full pipeline context
- Tier Assignment --- How scores determine tiers