| Column | Source of truth |
| Lead Date | GHL contact "Created" date — when the contact first existed in GHL. |
| Appointment Date | Opportunity "Appt Time" field in GHL; when that's empty (a GHL workflow race sometimes loses it), the contact's real GHL calendar appointment. |
| Lead Name / Phone | GHL contact record. |
| Setter / Closer | Entered by the team in the tracker's editable era — frozen since Aug 12 (tracker is read-only now). |
| Source / Sources | GHL contact field "Lead Sources" (can hold several; first one is the primary). |
| GHL Stage | The card's live stage in the unified pipeline — exact GHL names. |
| GHL Status + lost reason | The opportunity's outcome in GHL (open / won / lost / abandoned). When lost, the reason chosen from GHL's lost-reason list — written manually by the team or automatically by call dispositions (since Aug 12). |
| Status | Computed from GHL Stage + Status via a fixed mapping (e.g. lost + post-appointment stage → "DQ Post-Appt"). Never hand-edited. |
| Journey dates (Contacted, Appt Set, Showed, No Show, DQ, Closed) | Stamped when the tracker first sees the change — instantly for Solar CEOs (webhook), otherwise at the nightly sync (so ±1 day). Appointment-related dates were re-anchored Aug 12 to the calendar event's real booking date; historical cards with no calendar record show blank rather than a guess. |
| DQ Reason (Pre/Post) | Legacy hand-typed fields from the manual era — frozen, not synced. Trust the red reason under LOST instead. |
| GHL Notes | The contact's real GHL notes (call summaries, closer notes), newest first, HTML stripped, empty note shells skipped. Appointment and lost cards refresh on a nightly rotation (~150/night). |
| KPI tiles | Counts of GHL Stage among the filtered rows; WON/LOST tiles count the GHL opportunity status. |