What this dashboard measures
This is a setter-side view of the SCI sales process — the work each setter does to feed the closer pipeline. The dashboard has two pages, selectable via the toggle at the top: Performance (the default) and Activity Analysis.
The Performance page is organized as four sections, each a different stage of the setter's contribution: Activity (raw call volume + intro-call performance), Bookings (the discoveries setters cause to be booked), New Money (the dollars that eventually fund from those discoveries — first-time investor fundings only), and Call Outcomes (donut charts showing meeting outcome breakdowns).
The Activity Analysis page contains Time of Day — Calls by Hour (a grouped bar chart showing when each setter makes calls), Inbound Intro Calls — Timing by Day & Hour (a table of when intro calls are scheduled to occur, by weekday and hour), and Speed to Lead (how quickly setters make first contact with new accredited leads).
Setters shown: Kayla Daughtrey, Cierra Milao, Alex White, Aidan Conner. Jamie Wright is inactive and excluded from the columns. For Bookings and New Money, records whose setter cascade resolved to a non-setter or didn't resolve land in the Unattributed column. Activity (Dials, Connections, Intros) intentionally leaves Unattributed blank — a closer's calls aren't "setter activity that happens to be unattributed," they belong on the closer dashboard.
Column order in every section: persons, then Unattributed, then Overall. Overall is the section-wide grand total. For Bookings and New Money rows, Overall = sum of persons + Unattributed (the row math sums cleanly left-to-right). For Activity rows, Unattributed is blank and Overall = sum of persons by design (no "unattributed setter activity" exists). The Overall column is highlighted to mark it as the grand total.
The four sections
Call Outcomes (top of dashboard)
Two donuts at the very top of the dashboard — Intro on the left, Discovery on the right. Each donut breaks down meeting outcomes for the call type: Completed (green), No-Show (red), Rescheduled (amber), Canceled (gray), Disqualified (purple). The number in the center of the donut is the resolved-cohort total — the denominator the percentages use.
Attribution differs by call type. Intro outcomes follow meeting.hubspot_owner_id (the setter ran the call directly). Discovery outcomes follow meeting.setter_owner_via_deal (the setter booked the call; the closer ran it). So Intro reflects setter-as-caller hygiene, Discovery reflects setter-as-booker quality.
Shared controls in the section header bar — one date picker, one "vs" comparison picker, and the Setter filter all sit in the bar above the two cards. The date and comparison apply to both donuts; the Setter picker narrows both donuts to a single setter's meetings.
The Setter picker only affects these donuts. The Activity, Bookings, and Investments sections always show every setter as a column — filtering those sections by setter hides information rather than adding it, so the picker is intentionally scoped to just the donuts.
Legend rows show current AND previous numbers side-by-side — each row has a count + % for the current period and a count + % for the comparison period, so you can scan one row and see how a given outcome's share is trending without doing math.
Pending bookings are excluded from the donut. A meeting scheduled for the future hasn't resolved yet — including it would drag completion % down artificially. The subtitle line tells you how many pending and how many un-dispositioned meetings were dropped, so you can spot data hygiene issues without them polluting the chart.
Click any slice or legend row to open the drill-down panel filtered to that outcome — e.g., click No-Show to see every contact who no-showed in the period.
Activity
Direct setter activity — calls dialed, connections made, intro calls scheduled and held. These are the raw inputs. Owned by the setter via call/meeting hubspot_owner_id.
Six rows: Dials, Connections (with connection rate of dials), Intro Calls Scheduled (with pending count), Intro Calls Held, Intro Calls Completed, Intro No-Shows. The Unattributed column shows N/A for activity rows by design — a non-setter's calls aren't unattributed setter activity, they're someone else's activity entirely.
Intro rows use the same cohort logic as the Bookings section (see Held vs Completed below). Held counts past bookings not explicitly failed, including un-dispositioned ones, rated against all bookings. Completed and No-Show rates use the resolved cohort — bookings whose scheduled time has passed — with still-pending bookings reported as a subline under Scheduled rather than dragging the rates down.
Scheduled means "booked for the range", not "booked in it. The intro row is anchored on the meeting's scheduled datetime, so it counts intros due to happen in the window regardless of when they were booked. That's why a setter can show intro calls against few or no dials in the same window — the calls that produced them were made earlier.
"Booked in range" is a separate cohort. The second subline counts intros whose create date falls in the window, irrespective of when they're scheduled. It is not a subset of the headline and can be larger: book five intros today for next week, and a today-only window reads 1 scheduled with 5 booked in range. This is the genuine booking-activity number, directly comparable to the Dials and Connections rows above it.
The "% of connections" rate uses the booked-in-range count, not the headline. The scheduled count is a different cohort from connections, so dividing one by the other measured nothing coherent and could err in either direction. Measured on 2026-08-03 for Kayla (today only): 3 scheduled, 5 booked, 15 connections — the row read 20% (3 ÷ 15) where the real booking rate was 33% (5 ÷ 15), an understatement, because 4 of the 5 intros she booked that day were scheduled for later dates and so never appeared in the scheduled count. Both numerator and denominator now describe activity inside the window. It remains an approximation at window edges, since a Friday connection can produce a Monday booking.
The rows deliberately don't sum. Held and No-Shows do not add up to Scheduled, and that's by design rather than a rounding problem. Held merges meetings tagged COMPLETED with meetings whose time has passed but which nobody has dispositioned yet, while CANCELED, DISQUALIFIED and RESCHEDULED bookings have no row of their own. To make all of it visible, the Scheduled row carries a reconciliation line beneath it — tagged · awaiting disposition · no-show · rescheduled · canceled · disqualified · still upcoming — showing only the non-zero buckets. Those segments always sum to the Scheduled count. "Awaiting disposition" sits inside Held, so Held minus Completed equals exactly that number.
A note on "awaiting disposition." HubSpot's not-yet-dispositioned state is the literal outcome value SCHEDULED, not an empty field, so a past meeting can carry an outcome and still be undocumented. Blank outcomes also occur and count in the same bucket.
Why this matters here specifically. Before v61.10 both intro rates were computed against every booking in the window, so RESCHEDULED, CANCELED, DISQUALIFIED, still-scheduled, and un-dispositioned meetings all sat in the denominator while counting toward neither rate. Because dispositioning lags by days, a recent week's completion rate then climbed on its own as tagging caught up — the same 30 bookings read 1 completed at 2 AM, 3 by early evening, and 8 fifteen minutes later on 2026-08-03. That made week-over-week comparison meaningless, since the current week is always partly dispositioned while the comparison week has settled. Held is the stable read; a large Held-minus-Completed gap is a tagging problem, not a setter problem.
Default range: This Week. Daily/weekly cadence — setters and managers want fresh activity numbers.
Setter-Attributed Funnel — Bookings
Discovery calls booked, where the setter gets credit via attribution cascade rather than direct meeting ownership (closers are usually the meeting owners on discoveries). For each cohort (all bookings, From Intro subset, No Intro subset) four rows: Booked, Held, Completed, No-Show.
Held vs Completed. "Held" counts past bookings whose outcome isn't explicitly a failure — NO_SHOW, RESCHEDULED, CANCELED, or DISQUALIFIED. It includes un-dispositioned past meetings because dispositioning is sparse and a meeting nobody tagged probably happened. "Completed" requires strict outcome === 'COMPLETED' and tracks dispositioning hygiene as much as actual outcome — when Held/Booked is high but Completed/Resolved is low, that's a dispositioning gap, not a closer performance problem. Both rates have value; they answer different questions.
The Bookings range anchors on booking creation date, not scheduled meeting date. When Kayla books a discovery on Friday for the following Monday, that booking counts toward Friday's week (when the work was done) — not the week the call eventually happens. This makes "Discoveries Booked This Week" mean "booked this week" rather than "scheduled this week," which is the operationally useful framing for setter activity.
Completion and no-show rates use the resolved cohort. For a given week's bookings, the completion / no-show rates measure "of the bookings that have already resolved (scheduled time has passed), what % completed?" — a true cohort follow-through rate. A booking made last Friday whose discovery happens today still counts toward last week's cohort, with outcome resolved when the meeting actually happens. Held rate uses bookings as the denominator (not resolved), since Held already excludes pending future-scheduled bookings.
Watch the From Intro vs No Intro completion gap. Higher From Intro completion = the inbound funnel is producing better-quality discoveries than direct outbound. Live data shows this gap clearly — a real lever for resourcing decisions.
Booking Rate — per Contact Dialed (v61.19). Of the unique contacts a setter dialed in the bookings range, what share turned into a booked discovery. Numerator = discoveries booked (the same cascade credit as the Discovery Calls Booked row above); denominator = distinct contacts that setter placed at least one call to (deduped by contact — many dials to the same person count once). This is the efficiency read raw call volume hides: a setter can dial the most unique people and still book the fewest per contact. The subtext shows "booked of dialed" (e.g. 16 of 313), and clicking the cell lists every dialed contact flagged Booked or Not booked, linked to HubSpot, so the rate is auditable.
Booking Rate — per Contact Reached (≥60s). The same numerator over a tighter denominator: unique contacts the setter had at least one call of 60+ seconds of talk time with. Talk time is used instead of the "Connected" disposition on purpose — call duration can't be gamed by tagging habits, whereas dispositioning is sparse and unreliable here. Treat this as conversation-quality color, not a true rate: a discovery can be booked on a short call, an inbound call, or a contact reached by someone else and cascade-credited, so bookings are not a strict subset of "reached" contacts and this row can read above 100%. The dialed row is the sound rate; this one is supporting context.
Attribution nuance (both rows). The denominator is credited by who dialed (call owner), while the numerator is credited by the booking cascade (setter_owner_via_deal). For the four setter columns these are the same person, so the rate is clean. In the Overall column both sides are team-scoped (team-booked ÷ team-dialed). The Unattributed column is intentionally blank — a non-setter's dials aren't setter activity, so there's no denominator to divide into. Both sides read the same bookings range, so the two can never fall out of sync the way independent range pickers would.
Default range: Last Month. Discovery cycles are short enough that month-level reads are accurate.
Booking Rate — per Opportunity (v61.21)
A stricter, accountability-focused rate: of the accredited "to-be-set" leads that were genuinely in a setter's custody, what share converted to a booked discovery. Where the two rates above use call activity as the denominator, this one uses custody windows.
An opportunity is a custody window, not a contact. From each lead's setter_owner assignment history, we reconstruct the stretches of time each setter held it. One lead reassigned three times can be three opportunities — potentially across three setters — each judged on its own. A lead that sat unworked and was then recalled counts against whoever sat on it; the setter who eventually books gets that credit. A window counts only if: its owner is a setter (closer/empty-owned windows go to Unattributed); it falls in 2025 or later (the assignment model started Dec 2024); it was held at least 72 hours (this drops same-day reassignment churn); and it overlaps the selected range. Its clock starts at the later of the assignment, a reactivation (latest_entry_time_stamp), or a delegation (lead_delegated_datetime_stamp) inside the window.
Booked = booked in-window. A window converts only if a discovery was booked (by creation time, i.e. while the setter held the lead) inside that window's span — so a discovery booked under a later setter's window can't credit an earlier holder. The rate is always ≤100%.
Two rates, and the churn between them. The headline per Opportunity rate is booked windows ÷ custody windows. The ↳ per unique lead (ever booked) row underneath is booked leads ÷ leads-with-an-opportunity — a pure conversion rate. The gap between them is reassignment drag: because a churned lead generates several opportunities but books at most once, heavy reassignment pulls the per-opportunity rate below the per-lead rate. The drill on either cell shows the reassignment multiplier (avg custody windows per lead) that quantifies it — the seed showed ~47% of leads with history were reassigned, so expect it well above 1.0.
Custody credit vs. booker credit. This rate credits the custody holder ("did the leads assigned to me convert"), which is a different question from Discovery Calls Booked at the top, which credits the booker. The same discovery can appear under different people in the two — that's intentional, two honest lenses.
Drill: click any Opportunity cell to see each window — the owner, the custody span (start → end or "open") and its length, and Booked/Not-booked (with the booking date). Data comes from a nightly worker cache (/cached-custody) that stores raw assignment history; all the window logic runs in-dashboard and is unit-tested.
Setter-Attributed Funnel — New Money
New money raised — first-time investor fundings credited to the setter via a three-tier cascade: the Investment record's own setter field first, then matching closed-won deal's setter_owner within ±30 days, then contact's setter_owner as fallback. Three rows: count of first-time investors acquired, total new money raised, average ticket.
Important — first-investment attribution. Only each contact's FIRST funded investment counts. Once an investor is acquired, post-acquisition relationship management and follow-on (repeat) fundings are owned by Account Managers — those repeat investments live on the AM dashboard, not here. So this dashboard's New Money Raised totals will be intentionally lower than the main Investment Dashboard, which sums every funded record including repeat and follow-on. The gap between them is the AM-owned repeat-funding volume.
Funded investments and their original discovery bookings can sit in different date ranges — a discovery booked in March can fund in April. The Bookings range and New Money range are independent windows, not a strict pipeline.
Default range: Last Quarter. Funding cycles run longer than booking cycles; quarterly read is the right granularity.
Speed to Lead
Measures how quickly setters make first contact with new accredited leads. For every contact created in the date range where are_you_accredited_ = Yes, the dashboard finds the first outbound call associated with that contact and computes the gap between contact creation and first call (adjusted by a 5-hour offset for timezone/business-hours alignment).
Only two setters shown: Kayla D. and Cierra M. These are the two setters who handle outbound calling on new leads. The other setters (Alex, Aidan) don't appear in this section.
Table columns. Each setter gets three sub-columns: Available (leads assigned — both called and uncalled), Made (leads actually called), and % Made (call-through rate). Six metric rows:
- Leads — count of accredited leads available vs actually called.
- Median Speed — median time from contact creation to first call (spans all three sub-columns). The single most useful number for "how fast is this setter responding?"
- Avg Speed — mean of the same. More sensitive to outliers than median — a few very slow responses will drag this up even if most leads are called quickly.
- < 1 Hour — count of leads called within one hour. The gold standard for speed to lead.
- < 1hr Rate — percentage of called leads reached within one hour (spans all three sub-columns).
- Beat Queue — leads where the speed was negative (the setter called before the offset window elapsed). A negative speed means the setter reached the lead faster than the baseline expectation — shown in green.
Three summary cards appear to the right of the table:
- Speed to Lead (teal) — overall median speed combining both setters' called leads. The headline number for the section.
- No Setter Owner (red) — contacts in the range with no
setter_owner assigned. These leads fell through the cracks — nobody is responsible for calling them. Click to drill down.
- Uncalled (amber) — contacts assigned to a setter but with zero associated calls. The setter owns them but hasn't reached out. Click to drill down.
Attribution. First call's hubspot_owner_id determines which setter column the lead lands in. If the caller isn't Kayla or Cierra, falls back to the contact's setter_owner field.
The 5-hour offset. Raw speed is first_call_timestamp − contact_createdate − 5 hours. The offset accounts for the fact that leads created overnight or outside business hours shouldn't penalize the setter's response time. A "Beat Queue" (negative speed) means the setter called within 5 hours of creation.
Default range: Last Month. Monthly cadence balances sample size with recency.
Activity Analysis page
The second page of the dashboard, accessed via the Activity Analysis tab at the top. This page groups analytical views that benefit from a wider viewport and don't need the same refresh cadence as the Performance page's daily/weekly metrics.
Time of Day — Calls by Hour
A grouped bar chart showing each setter's call volume by hour of the day (Eastern Time). Each setter is a separate colored series; each bar represents one hour bucket from 8 AM through 9 PM — hours outside that window (10 PM–7 AM) are hidden since they contain negligible activity and compress the useful bars.
Own date range picker. The chart has its own independent range selector in the section header (default: This Month). Changing it fetches call data for the selected range from HubSpot (if not already cached) and re-renders all three charts (volume, hourly rate, day-of-week donut). The TOD range is fully independent of the Activity, Bookings, and other section ranges — selecting "Last Year" on the TOD chart loads last year's call data without affecting anything else.
What it answers: "When are setters actually making calls?" Useful for spotting coverage gaps (e.g., no calls before 10a or after 4p), identifying peak dialing windows, and comparing work patterns across setters.
Timezone handling. Call timestamps are converted to approximate Eastern Time (UTC−4) for hourly bucketing. This is close enough for pattern analysis — the goal is relative distribution across the workday, not precise minute-level timing.
Connection Rate by Hour
A bar chart below the hourly volume chart showing connection rate % per hour (8 AM–9 PM), across all setters combined. Each bar shows what percentage of dials in that hour resulted in a connection.
What it answers: "What time of day produces the best connection rate?" Complements the volume chart above — high volume doesn't always mean high connection rate. An hour with fewer dials but a higher rate may be more efficient to target.
Threshold coloring. Hours meeting the 2% dial threshold are shown in purple; hours below the threshold are shown in amber to flag them as outliers. Hover any bar to see the rate, raw counts, and whether it's an outlier.
Connection Rate by Day of Week
A donut chart to the right of the hourly bar chart. The slices represent the days of the week (Sun–Sat), sized by connection rate — connections ÷ dials for that day, across all setters combined. Hover any slice to see the rate and raw counts.
2% minimum threshold. A day of the week must account for at least 2% of total dials in the period to appear in the donut. This prevents low-volume days (e.g., 2 calls on a Saturday) from dominating the chart with artificially high rates. The note below the donut shows the threshold and lists any excluded days. In the per-setter legend, excluded days cannot be the #1 "best day" — they still appear in the ranked list but are flagged as outliers (⚠) in amber so they draw attention without distorting the ranking.
What it answers: "Which days of the week produce the best connection rate?" This is more useful than raw connection count, which just follows dial volume — the rate reveals which days convert better regardless of effort.
Per-setter legend. Below the donut, each setter is listed with their total call count for the period and their best qualifying day (highest connection rate among days that meet the 2% threshold) shown as the headline — day name, rate %, and raw counts. Below each setter's best day, the remaining 6 days are listed in ranked order (2nd through 7th). Days that fell below the threshold are flagged with ⚠ and shown in amber with their counts — notable but not statistically reliable.
Loading state. When the range picker triggers a data fetch, the section dims and shows a "Loading…" indicator until the data arrives. This prevents confusion when switching to ranges that require new data from HubSpot.
Both charts share the same date range picker and filter the same underlying call data.
The chart renders on first visit to the Activity Analysis page and re-renders whenever new data loads (e.g., after a Refresh). If no call data is available, a placeholder message appears instead of the chart.
Inbound Intro Calls — Timing by Day & Hour
A table directly below the Calls by Hour & Day section showing when intro calls are scheduled to occur, bucketed by day of week and hour of day. Unlike the charts above (which are driven by dials/calls), this table is driven by intro meetings — meeting records whose type resolves to intro.
Rows are hour buckets in Eastern Time: Before 9a, then one row each for 9a through 6p, then After 7p (7 PM and later). Columns are Mon, Tue, Wed, Thu, Fri, and Sat/Sun combined (weekend intro volume is low enough that one column reads better than two). A Total column sums each hour row across days; a Total row sums each day column across hours; the bottom-right cell is the grand total.
Scheduled time, not booked time. Each intro is placed by its hs_timestamp — the datetime the call is due to occur — not by when the setter booked it. So this table answers "when do intro calls happen across the week?", which is a different question from "when do setters book intros?" (For meeting engagements hs_timestamp is the scheduled datetime, verified live against Cierra's intros where it equalled hs_meeting_start_time exactly.)
All outcomes, all setters. Every intro scheduled in the window is counted regardless of outcome — completed, no-show, canceled, rescheduled, or still un-dispositioned — so the table is a stable read that does not drift as dispositioning catches up (unlike the outcome-based rates on the Performance page). Intros owned by all four setters are pooled; there is no per-setter split here.
Reconciliation. The grand total equals the Activity section's intros scheduled ("all" setters) for the same date range by construction — both count type==='intro' meetings whose scheduled time falls in the window, owned by a setter. If the two ever disagree, the range pickers are set to different windows (this table uses the TOD/Activity Analysis range picker, independent of the Performance page ranges).
Timezone handling. Hour and day are derived in approximate Eastern Time (UTC−4), matching the calls charts above exactly so a given timestamp always lands in the same ET hour and day across every view on this page. Exact during Eastern Daylight Time; off by one hour during Eastern Standard Time — the same caveat the calls charts carry.
If no intros are scheduled in the selected range, a placeholder message appears in place of the table.
Speed to Lead (moved here from Performance page)
Speed to Lead lives on this page rather than the Performance page. It measures response time to new leads — a different analytical question than the daily activity/bookings/money metrics on the Performance page. See the Speed to Lead section above for full details.
How attribution works
Setter attribution is harder than closer attribution because the setter usually doesn't own the meeting record — the closer who runs the discovery does. Cascade logic resolves this:
- Activity (Dials, Intros): direct ownership via call or meeting
hubspot_owner_id. The setter ran the call or held the intro.
- Discoveries: deal-based cascade. We find the deal active at the time of the discovery and use its
setter_owner field. If no deal-side setter, we fall back to the contact's setter_owner.
- Investments: investment record's own
setter field first, then matching closed-won deal's setter_owner (within ±30 days of funds received), then contact's setter_owner as final fallback.
The Unattributed column captures funnel records (discoveries, investments) where the cascade resolved to null OR to a non-current setter — most commonly historical Jamie Wright records or mis-tagged closer ownership.
Drill-down rows on the setter dashboard show both the meeting's actual owner (usually a closer) and the setter who got cascade credit, so you can spot-check attribution surprises.
Date ranges and comparison
Each section has its own independent date range. Change one, the other two stay where they are — useful for focusing on different timeframes simultaneously (e.g., this week's activity while looking at last quarter's funded outcomes).
Each section also has its own compare dropdown:
- Previous Period — the period immediately before the base range. Last Month compares to the month before, This Week compares to last week's same-elapsed days.
- Same period previous year — shifts the base range back one calendar year. Apples-to-apples seasonal comparison. Use this when you want Q1 2026 vs Q1 2025.
- None — drop the comparison entirely.
- Specific period — compare to any named range.
- Custom dates — pick exact from/to dates.
Drill-down — clicking the numbers
Almost every number is clickable. Two click targets per cell:
- Click the headline number (the big bold figure) → opens a panel showing the underlying records for the current period.
- Click the delta line (the "↓ 18% prev: 125" subtitle) → opens the same panel for the comparison period (whichever you have set in the compare dropdown — Previous Period, Same period previous year, etc.).
The drill-down panel shows each underlying record: contact name, date, both owners (the closer who ran the meeting and the setter who got cascade credit), and outcome. Each row's contact name is a link — click it to open the HubSpot contact in a new tab. For meeting records, each row also shows whether that contact has ever funded — labeled Funded $X or Not funded.
Booked vs Scheduled dates. When a booking's creation date and its scheduled meeting time fall on different days, the drill-down row shows both: "Booked Apr 23 · Scheduled Apr 27." This makes the cohort relationship explicit — you can see at a glance that a booking belongs to last week's cohort even though the meeting happens this week. When booking and scheduled dates match, only one date is shown.
Reading the funnel together
The setter funnel: dials → connections → intro calls scheduled → intro calls completed → discoveries booked → discoveries completed → investments funded.
Activity rows answer "how hard are setters working?" The Bookings rows answer "how good is the work?" — completion and no-show rates of their booked discoveries. The Investments rows answer "what dollars do they ultimately drive?" Speed to Lead (on the Activity Analysis page) answers "how fast are setters responding to new leads?" — a leading indicator that feeds everything downstream. The Time of Day chart reveals when that work is happening across the day.
Key insight when reading: high activity with low completion rate = setters are booking volume but the discoveries aren't qualified enough. Low activity with high completion = a setter who books selectively. Both can be valid styles depending on team strategy.
Reading caveats
Pre-2026 dispositions are sparse. Disposition tracking (Completed / No-Show) wasn't enforced until 2026, so any historical period before 2026 will show suppressed completion rates that reflect data hygiene, not actual performance. When comparing 2026 numbers to anything earlier — Q4 2025, full 2025, year-over-year — expect huge "improvements" in completion rate that are mostly the data getting cleaner. The further back you look, the less reliable disposition-based metrics become; volume metrics (booked, count) are still trustworthy.
Pending bookings. Discovery calls scheduled for the future show as "X still pending" subtext under the Booked count. They count toward Booked but not toward Completed or No-Show — the rates use the resolved cohort (booked minus pending) so the rates reflect what actually happened, not what's still on the calendar.
Partial period warning. If the base period is in progress (This Week, This Month, This Quarter, This Year), the Previous Period comparison truncates to same-elapsed days for fairness — and a yellow pill in the section header says so. To compare full vs full, use Same period previous year instead.
Segment math sanity pill (Bookings section only). The "All" rate must mathematically lie between the From Intro and No Intro rates because All is a weighted average of the two. If a yellow warning pill fires, the underlying numbers are inconsistent — usually a data hygiene issue worth investigating, not a real performance signal.
Setter attribution gap on historical data. Many older closed-won deals (from 2023-2024) have a null setter_owner because the field wasn't populated routinely until 2025. Investments tied to those deals will land in the Unattributed column even though a setter likely did the work — known limitation worth flagging when reading historical totals.
Glossary
DCB — Discovery Call Booked. The pipeline stage and the moment the setter's work converts to closer's work.
Booking date — when the meeting record was created in HubSpot (i.e., when the booking was made). Used as the anchor for "Discoveries Booked" cohorts.
Scheduled date — when the meeting is supposed to happen. Used as the anchor for outcome resolution (Completed / No-Show / Pending) — outcomes only resolve once the scheduled time has passed.
From Intro / No Intro — segmentation on whether the contact had a completed intro call before the discovery booking. From Intro = inbound-warmed; No Intro = direct outbound or referral that skipped the intro.
Resolved cohort — bookings whose scheduled meeting time has already passed. Used as the denominator for completion rate and no-show rate, so the rates aren't dragged down by future bookings. Applies to both intro bookings (Activity) and discovery bookings (Bookings) as of v61.10.
Pending — an intro or discovery booking whose scheduled meeting time is still in the future. Counted in Scheduled / Booked, excluded from rate denominators, and reported as a subline on the count row.
Held — a past booking whose outcome is not explicitly a failure (NO_SHOW, RESCHEDULED, CANCELED, DISQUALIFIED). Deliberately includes un-dispositioned past meetings on the assumption a meeting nobody tagged probably happened. Rated against all bookings rather than the resolved cohort, since Held already excludes future-scheduled ones. The one outcome measure that doesn't drift as dispositioning catches up.
Cascade attribution — when the meeting owner isn't the setter (typical for discoveries), credit falls back to the deal's setter_owner field, then to the contact's setter_owner field. Lets the dashboard credit setters even when they don't own the meeting record directly.
Speed to Lead — time between a contact's createdate in HubSpot and the first outbound call to that contact, minus a 5-hour offset. Lower is better. Negative values ("Beat Queue") mean the setter called within the offset window.
Beat Queue — a Speed to Lead value that is negative, meaning the setter made first contact faster than the 5-hour baseline offset. Displayed in green.
Uncalled (Speed to Lead) — a contact assigned to a setter via setter_owner but with no associated calls in HubSpot. The setter owns the lead but hasn't reached out.