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