Skip to main content

Market & Intelligence Tables

Markets and signals are the core intelligence model in Client Portal. Markets define tightly scoped candidate segments. Signals capture structured intelligence extracted from call conversations.

markets​

A market is a tightly defined candidate segment based on practice area, geography, seniority, and optionally firm tier. Markets are the fundamental unit of intelligence -- all signals roll up to a market.

ColumnTypeNullableDefaultDescription
iduuidNOgen_random_uuid()Primary key
client_iduuidNOFK to clients.id
nametextNOMarket name (e.g., Patent Litigation -- Multi-Market)
practice_areatextYESPrimary practice area (e.g., M&A, Litigation, IP)
geographytextYESGeographic scope (e.g., NYC, Chicago, Texas, National)
senioritytextYESTarget seniority (e.g., Associate, Senior Associate, Partner)
firm_tiertextYESFirm tier filter (e.g., amlaw_100, boutique)
statustextYES'active'active, paused, completed
descriptiontextYESMarket description
created_attimestamptzYESnow()
updated_attimestamptzYESnow()
Market Naming Convention

Market names follow the format [Specialization] -- [Scope] using an em dash (not a hyphen). Each name must be unique. Examples:

  • Patent Litigation -- Multi-Market
  • M&A Associates -- New York
  • White Collar Defense -- USA National

market_attorneys​

Join table linking attorneys to markets. An attorney can belong to multiple markets, and a market contains many attorneys.

ColumnTypeNullableDefaultDescription
iduuidNOgen_random_uuid()Primary key
market_iduuidNOFK to markets.id
attorney_iduuidNOFK to attorneys.id
added_attimestamptzYESnow()When the attorney was added to this market
added_byuuidYESFK to auth.users.id

Unique constraint: (market_id, attorney_id) -- an attorney can only appear once per market.


signals​

Structured market intelligence extracted from call conversations. Signals represent the commercial meaning behind a call -- movement state, timing, motivation, and relationship quality.

ColumnTypeNullableDefaultDescription
iduuidNOgen_random_uuid()Primary key
call_iduuidYESFK to calls.id (source evidence)
market_iduuidYESFK to markets.id
contact_iduuidYESFK to contacts.id
movement_statetextYESMovement intent (see table below)
timing_windowtextYESExpected timing for movement
motivation_drivertextYESPrimary motivation for considering a move
conversation_accesstextYESHow open the candidate was to conversation
relationship_permissiontextYESRelationship depth achieved
firm_stabilitytextYESStability signal about the candidate's current firm
authorizedbooleanYESfalseWhether this signal has been authorized as trusted truth
authorized_byuuidYESFK to auth.users.id (who authorized)
authorized_attimestamptzYESWhen authorized
notestextYESAdditional context
created_attimestamptzYESnow()
updated_attimestamptzYESnow()

Signal Field Values​

Movement State​

ValueDescription
Not MovingNo intent to change firms
Soft ListeningOpen to hearing about opportunities but not actively seeking
ExploringActively evaluating options
ActiveActively interviewing or in process

Timing Window​

ValueDescription
NowReady to move immediately
0-3 monthsLikely to move within the quarter
3-6 monthsConsidering movement in the medium term
6-12 monthsLonger-term consideration
12+ monthsNot considering for at least a year

Motivation Driver​

ValueDescription
CompensationPay is the primary driver
PromotionSeeking advancement/partnership track
PlatformWants a different firm platform or client base
CultureUnhappy with firm culture
BurnoutOverworked or burned out
GeographyWants to relocate
StabilityConcerned about firm stability

Conversation Access​

ValueDescription
ClosedWould not engage in conversation
NeutralEngaged politely but did not share
OpenOpenly discussed career situation

Relationship Permission​

ValueDescription
ClosedDoes not want further contact
WarmOpen to future outreach
Relationship BuildingActively building rapport
TrustedHigh-trust relationship established

Firm Stability​

ValueDescription
PositiveFirm is stable and growing
StableNo notable changes
NegativeFirm issues (departures, financial concerns, restructuring)
UnknownNo information available

Intelligence Authority Model​

Authorization Required

Signals are AI-generated drafts until explicitly authorized by setting authorized = true. Only authorized signals should be presented to clients as trusted intelligence. The authorized_by field tracks who approved the signal.

Entity Relationships​