Data Readiness
PILLAR enforces data quality standards before computing scores. When your CRM data doesn’t meet the minimum standard, PILLAR will tell you exactly what’s missing and which accounts are affected.Readiness States
| State | Threshold | Behavior |
|---|---|---|
| Ready | 85%+ readiness, no critical issues | All scoring and signals operate normally |
| Degraded | 60-84% readiness, no critical issues | Scores compute but a warning banner displays. Some accounts may have incomplete scores. |
| Blocked | Below 60%, or any critical issues, or fewer than 5 scoring-ready accounts | Scoring is paused. A red banner displays with a link to the Data Health dashboard. |
Minimum CRM Sync Standard
Required Fields (Blocking)
These fields must be present for PILLAR to function. Missing these generates critical issues. Accounts:name— Account identifierstatus— Active/inactive lifecycle statearr— Must not be negative
name— Contact full nameaccount_id— Must reference a valid account (referential integrity)
name— Opportunity identifieraccount_id— Must reference a valid accountstage— Pipeline stageamount— Deal value
account_id— Must reference a valid accountrenewal_date— When the renewal occursarr— Renewal ARR value
account_id— Must reference a valid accounttype— Activity type (call, email, meeting, etc.)
Scoring Readiness Fields (Warning)
These fields aren’t required for sync, but scores will be incomplete without them.| Table | Field | Impact if Missing |
|---|---|---|
| Accounts | segment | No segment-based benchmarking |
| Accounts | health_score, risk_score | No pre-existing health data |
| Contacts | buying_role | Champion/sponsor detection unavailable |
| Contacts | is_champion, is_exec_sponsor | Stakeholder coverage signals won’t fire |
| Opportunities | probability | Weighted pipeline can’t compute |
| Opportunities | forecast_category | Forecast bands can’t compute |
What Makes an Account “Scoring Ready”
An account needs both of the following to be scored:- At least 1 contact linked to it
- At least 1 activity in the last 180 days
scoring_ready_accounts / total_active_accounts.
Record-Level Detail
PILLAR doesn’t just tell you “37 accounts have issues.” It tells you exactly which accounts are affected and what’s wrong with each one. The Data Health dashboard (/data-health) shows:
- Overall readiness percentage with progress bar
- Critical issues and warnings count
- Per-field completeness across all tables
- Scoring-ready vs needs-attention account counts
GET /api/data-readiness/affected-records) returns per-account detail:
GET /api/data-readiness/affected-records?issue=no_contacts
Issue Codes
| Code | Severity | Description |
|---|---|---|
no_contacts | Critical | No contacts linked to the account |
negative_arr | Critical | Account has negative ARR (data error) |
no_recent_activity | Warning | No activity recorded in the last 180 days |
missing_segment | Warning | Segment field is empty |
zero_arr | Warning | Active account with zero or missing ARR |
score_imbalance | Warning | health_score + risk_score deviates from 100 |
Post-Sync Validation
Every CRM sync automatically triggers a validation pass across 5 tables:- Accounts — Required fields, ARR positivity, score balance
- Contacts — Required fields, referential integrity, champion coverage
- Opportunities — Required fields, referential integrity, amount > 0, deal freshness
- Renewals — Required fields, referential integrity, ARR within 50-150% of account ARR
- Activities — Required fields, referential integrity
connector_sync_log and surfaced on the Data Health dashboard. A daily cron job at 6:00 AM UTC re-validates all data to detect drift.