Skip to content

🧩 ClientVerse Modules — Whitespace Requires the ClientVerse Modules package. Clients on Core only won't see this.

Whitespace

Available since: ClientVerse Modules 0.1 (shipped). Roadmap code BD1.4 (Whitespace Analysis).

What it is

Whitespace finds untapped revenue opportunities by scoring each account against practice areas the firm could serve but doesn't yet — the "white space" on the coverage map. A scheduled batch scores every relevant account/practice-area combination on configurable factors, classifies the current coverage, recommends a next step, and surfaces the strongest opportunities in a digest so BD can act on them.

Who it's for

  • BD — works the prioritized list of coverage gaps.
  • Attorneys / relationship managers — own follow-up on opportunities for their accounts.
  • Executives — read the opportunity landscape as a cross-sell signal.

How scoring works

A scoring batch produces one Whitespace Opportunity (WhiteSpace_Opportunity__c) per account/practice-area gap, carrying an overall Opportunity_Score__c built from four component scores. Each component's contribution is capped by a weight, and the configuration is all custom metadata — cited from objects/whitespace.yaml.

The four components

Component score (WhiteSpace_Opportunity__c) What it measures
Score_Client_Tier__c How strategic the client is
Score_Peer_Coverage__c How well peer firms / the market serve this area
Score_Relationship_Strength__c Strength of the firm's relationship
Score_Revenue_Potential__c Estimated revenue upside

Weights

Each factor's maximum points come from Whitespace_Score_Weight__mdt (Factor_Name__cMax_Points__c, with Active__c to include/exclude a factor). Tuning these records reweights how opportunities rank — for example, raise Max_Points__c on revenue potential to push high-value gaps to the top. Because the weights are metadata, no code change is needed to re-tune the model.

Thresholds & coverage status

Coverage_Status__c (e.g. none / partial / active) is derived from worked-time against per-practice thresholds in Whitespace_Threshold__mdt:

  • Active_Hours_Threshold__c — hours above which coverage counts as active.
  • Partial_Hours_Threshold__c — hours above which coverage counts as partial.

Coverage hours draw on Core time data (Time_Entry__c). Coverage_Lapse__c flags an opportunity where previously-active coverage has since lapsed — a re-engagement signal.

Run configuration

The batch itself is governed by Whitespace_Scoring_Config__mdt: Active__c (enable scoring), Batch_Size__c, and the digest schedule (Send_Digest__c, Digest_Day_Of_Week__c, Digest_Hour__c, Top_Opportunity_Count__c).

The opportunity record

Each WhiteSpace_Opportunity__c is what the dashboard and digest present. Beyond the score and components it holds:

  • Account__c and Practice_Area__c — the gap being scored.
  • Recommended_Action__c — the suggested next step.
  • RM_Owner__c — the relationship manager who owns follow-up.
  • Last_Scored_Date__c — when the batch last refreshed the record.

The digest

When Send_Digest__c is on, Whitespace emails the top opportunities (count set by Top_Opportunity_Count__c) on the configured day/hour. Recipients see the highest-scoring coverage gaps with their recommended actions, so the strongest cross-sell signals reach the right people without anyone opening a report.

Acting on opportunities

  1. Review the digest or the Whitespace list of WhiteSpace_Opportunity__c records, ranked by Opportunity_Score__c.
  2. Read Coverage_Status__c and Coverage_Lapse__c to understand the current state, and the component scores to understand why the opportunity ranks where it does.
  3. Follow the Recommended_Action__c; the RM_Owner__c drives next steps with the account team.
  4. Re-scored automatically on the next batch (Last_Scored_Date__c updates) as relationships and worked time change.

Configuration

  • All tuning is custom metadata — no code changes:
  • Whitespace_Scoring_Config__mdt — enable scoring, batch size, digest schedule.
  • Whitespace_Score_Weight__mdt — per-factor maximum points (the weights).
  • Whitespace_Threshold__mdt — per-practice active/partial coverage thresholds.
  • See the Admin Guide for enabling the batch and digest, and the Configuration Reference for the metadata field detail.

Key objects

Cited from objects/whitespace.yaml (Whitespace ships 4 objects):

Object Role
WhiteSpace_Opportunity__c A scored account/practice-area coverage gap (the output)
Whitespace_Scoring_Config__mdt Batch + digest run settings
Whitespace_Score_Weight__mdt Per-factor weights (max points)
Whitespace_Threshold__mdt Per-practice active/partial coverage thresholds

Limits & known issues

  • Core dependency. Modules 0.4.0 requires Core 1.1.7 (declared dependency ClientVerse Core Unlocked@1.1.7-6). The floor moved up from 1.1.4 in this release, so an org running Modules 0.3.0 without trouble can still be below it — upgrade Core before Modules. See ../../_package-facts/sync-report.md.
  • Coverage accuracy depends on time data. Coverage status and the relationship/revenue components are only as good as the Time_Entry__c and relationship data flowing in from the PMS and ERM.
  • Scores refresh on the batch cadence, not in real time; a record reflects the data as of its Last_Scored_Date__c.