Mean 0.960 · 33/40 perfect tests · $6.86 total · each card: the question → the correct answer (gold) → this model's actual answer
Audit executed over the full file (156 deals, all 18 fields present). Numbers below are computed, not estimated. DEFINITIONS - DS2+ deal: stage is DS2, DS3, DS4, or DS5. Here: 39 DS2 + 61 DS3 + 14 DS4 + 10 DS5 = 124 of 156. - Compliant why-buys: non-empty, 15+ characters, and not a placeholder (tbd, n/a, see notes). LONG(n) counts as present and substantive. Non-compliant = blank, under 15 chars, or placeholder. - Missing DS1 timestamp: t_ds1 is blank. - Regressed: among present stage stamps, some earlier-stage stamp is later than a later-stage stamp (t_dsi > t_dsj for i < j). Equal stamps do not count as "later." NUMBERS 1) Why-buys non-compliance, DS2+ deals - Overall: 101 / 124 = 81.5% (101/124 = 0.8145). In this file the only non-compliant value is blank — the 23 compliant deals are exactly the 23 LONG(n) deals; no sub-15-character or placeholder strings exist. - By owner (non-compliant / DS2+, from owners.csv): Alex Franklin: 48 / 61 = 78.7% Dana Mercer: 18 / 22 = 81.8% Bryce Harmon: 15 / 18 = 83.3% Cole Ingram: 19 / 22 = 86.4% Farid Osman: 1 / 1 = 100.0% (n=1; his DS2 COMMIT Deal-499BF6 is blank) Elena Sinclair: 0 DS2+ deals (her single deal is DS1) — excluded from the rate. Check: 48+18+15+19+1 = 101 non-compliant; 61+22+18+22+1 = 124 DS2+. 2) Deals with no DS1 timestamp: 0 of 156. Every deal has a t_ds1 value. 3) Regressed deals: 0 of 156 under the stated definition — no earlier-stage stamp is later than a later-stage stamp. Two adjacent data-quality facts (not regressions by the definition, but they qualify the clean count): - 4 deals carry a stamp for a stage above their current stage: Deal-C7F9BF (at DS2, has t_ds3) and Deal-0D0211, Deal-BE3D9D, Deal-7E2131 (at DS3, have t_ds4) — stage moved backward while stamps stayed in order. - Stamp gaps at current stage: all 10 DS5 deals lack t_ds5, and Deal-9D0060 lacks t_ds3. THREE PROCESS FIXES 1. Hard-gate the DS1-to-DS2 transition on why-buys: make the field required in CRM with a 15-character minimum and a blocklist of tbd / n/a / see notes. Since 100% of the 101 failures are blanks (not junk text), a required-field gate at stage exit directly removes the 81.5%. 2. Auto-stamp stage entries via workflow on every stage change, and backfill the existing gaps (10 missing t_ds5, Deal-9D0060's missing t_ds3). Add an alert on out-of-order stamps and on backward stage moves so the 4 "stamp above current stage" deals surface automatically. 3. Weekly owner-level hygiene audit tied to forecast inclusion: non-compliance is systemic, not one rep (78.7%-86.4% across the four active pipeline owners), so fix the gate first, then run the report weekly and exclude DS2+ BEST_CASE/COMMIT deals with blank why-buys from forecast rollups — today that is 21 of the 24 DS4/DS5 deals (12 DS4 + 9 DS5 = 21/24 = 87.5%).
Owner resolution complete. All arithmetic below was computed programmatically from the two files provided; nothing was estimated or inferred. RESOLUTION SUMMARY - Deals resolved to an owner: 156 of 156 (every row had a populated owner_id; no blank owner_id rows, no duplicate deal_ids) - Deals whose owner_id has NO match in owners.csv: 0. The only owner_ids appearing in deals_open.csv are 119337721, 83155923, 84342457, 83155924, 716654662, 701163055 — all six are present in owners.csv. - Owner_ids mapping to archived/deactivated owners: none. owners.csv does contain two archived owners — Gavin Porter (1520255671) and Hugo Lindqvist (77260721) — but no deal in the extract references either id. No names guessed for any id. PIPELINE TOTAL PER RESOLVED OWNER Bryce Harmon (owner_id 119337721) — 35 deals — $1,054,144 24,000 + 19,656 + 13,500 + 7,000 + 2,520 + 240,000 + 99,000 = 405,676 72,000 + 70,000 + 63,600 + 45,000 + 1 + 21,000 + 23,400 = 295,001 13,680 + 5,502 + 8,160 + 1 + 11,400 + 1 + 36,000 = 74,744 31,500 + 6,000 + 10,800 + 30,275 + 17,400 + 12,600 + 18,000 = 126,575 37,440 + 18,828 + 2,880 + 36,000 + 20,880 + 10,920 + 25,200 = 152,148 405,676 + 295,001 + 74,744 + 126,575 + 152,148 = 1,054,144 Alex Franklin (owner_id 84342457) — 67 deals — $624,310 14,850 + 13,770 + 11,200 + 9,000 + 6,360 + 5,400 + 3,240 = 63,820 2,484 + 1,920 + 1,080 + 7,200 + 19,000 + 2,880 + 1,400 = 35,964 4,800 + 1,632 + 10,000 + 9,300 + 2,700 + 2,160 + 1,800 = 32,392 3,600 + 3,840 + 15,000 + 1,968 + 4,000 + 3,600 + 4,800 = 36,808 3,120 + 2,520 + 9,000 + 2,400 + 62,000 + 5,400 + 5,100 = 89,540 16,700 + 4,400 + 1,620 + 2,600 + 7,200 + 18,000 + 17,000 = 67,520 8,316 + 8,100 + 18,000 + 12,600 + 24,000 + 15,000 + 9,000 = 95,016 7,200 + 3,780 + 16,200 + 7,200 + 4,680 + 1,800 + 18,000 = 58,860 2,730 + 2,400 + 3,060 + 18,000 + 12,000 + 1,800 + 4,400 = 44,390 31,200 + 7,200 + 1,600 + 60,000 = 100,000 63,820 + 35,964 + 32,392 + 36,808 + 89,540 + 67,520 + 95,016 + 58,860 + 44,390 + 100,000 = 624,310 Dana Mercer (owner_id 83155923) — 24 deals — $341,195 11,250 + 10,500 + 9,000 + 9,000 + 5,400 + 4,800 + 4,600 = 54,550 1,920 + 15,000 + 4,200 + 18,900 + 27,000 + 43,875 + 20,000 = 130,895 60,000 + 8,100 + 16,250 + 3,150 + 5,000 + 2,100 + 23,400 = 118,000 5,400 + 7,350 + 25,000 = 37,750 54,550 + 130,895 + 118,000 + 37,750 = 341,195 Cole Ingram (owner_id 83155924) — 22 deals — $288,161.43 2,760 + 1,330 + 7,225.40 + 3,360 + 5,616 + 2,700 + 7,781.20 = 30,772.60 6,947.50 + 40,000 + 12,168 + 2,480.40 + 11,116 + 11,193 + 1,875 = 85,779.90 31,750 + 32,175 + 4,779.88 + 3,334.80 + 58,529.25 + 4,140 + 18,000 = 152,708.93 18,900 = 18,900 30,772.60 + 85,779.90 + 152,708.93 + 18,900 = 288,161.43 Farid Osman (owner_id 716654662) — 7 deals — $4,134 1,249 + 1 + 1 + 1 + 2,880 + 1 + 1 = 4,134 Elena Sinclair (owner_id 701163055) — 1 deal — $2,100 2,100 = 2,100 Grand total across all resolved owners: 1,054,144 + 624,310 + 341,195 + 288,161.43 + 4,134 + 2,100 = $2,314,044.43, which foots exactly to the sum of all 156 deal amounts (unmatched = $0, archived-owner = $0). Two data-quality notes from the extract itself: (1) eight deals carry a $1 amount — Deal-012CB1, Deal-483B2D, Deal-3795AD (Bryce Harmon) and Deal-03BA69, Deal-117863, Deal-F17780, Deal-2B39B0, Deal-8FDCD2 (Farid Osman) — so Farid Osman's total is effectively 1,249 + 2,880 = $4,133 in real pipeline; (2) the final row (Deal-57FF13) has only 18 fields against the 20-column header, so its trailing n_contacts/source fields are misaligned — its owner_id (701163055) and amount (2,100) are unaffected, and the resolution stands.
Call-to-deal mapping integrity check — results from joining gong (67 rows) to deals_open (156 rows) on deal id (gong_owner_id was not used in the join, per your note): (a) ORPHANS — gong rows whose hs_deal_id has no match in deals_open: 30 of 67 rows (30/67 = 44.8%). These 30 rows carry 304 of 465 total logged calls (304/465 = 65.4%), so most call volume points at deals not in the current open-pipeline extract. Sample orphan aliases: Deal-8FA85D (46 calls, the single largest row in the table), Deal-42B265 (21), Deal-36EA09 (17), Deal-9A43B4 (14), Deal-605F3C (12), Deal-422BA6 (6), Deal-B038F0 (5), Deal-C00480 (4). Two corroborating red flags on the orphan block: 25 of the 30 have calls_with_ds2_date = 0 and calls_with_sqo_date = 0, and 13 have last_call dates after 2026-09-16 (running into Oct/Nov 2026 — e.g. last_call 2026-11-25 on Deal-42B265), impossible for a "last 90 days" window. The orphan block also clusters in a distinct gong_owner_id set (6440417017135074779, 7971335727414442543, 4654480998631630424, 373679877710534937, etc.) largely disjoint from the owners on matched rows. Likely explanations (not determinable from data provided): closed-lost/won deals no longer in deals_open, non-default-pipeline deals, or a stale/mis-keyed join — the data provided cannot distinguish these. (b) DUPLICATE CONVERSATION KEYS — none. Every one of the 67 rows satisfies calls_90d = distinct_conversation_keys exactly (verified row by row; 0 rows where calls_90d exceeds distinct keys, 0 reverse anomalies). No dedup needed. (c) CALL COVERAGE OF OPEN DEALS AT DS3+ — 85 open deals are at DS3 or later (DS3: 61, DS4: 14, DS5: 10). Of those, 25 have at least one logged gong call: 25/85 = 29.4%. By stage: DS3 12/61 = 19.7%, DS4 6/14 = 42.9%, DS5 7/10 = 70.0%. So 60 of 85 DS3+ deals (70.6%) have zero logged calls in the 90-day table — coverage improves with stage but is thin overall at DS3, where 48 of 61 deals have no call record. Additional checks run: no duplicate deal ids within either file; deal_alias values agree exactly between the two files for all 37 matched rows; the gong file itself has no repeated hs_deal_id. Bottom line: the 90-day call table is internally consistent (no key duplication) but badly broken as a mapping to the current open pipeline — nearly half its rows and two-thirds of its call volume are orphans, and its date windows extend beyond the claimed 90-day range. Any funnel-velocity or call-coverage metric built on this join (like the 29.4% DS3+ coverage figure) should be treated as lower-bound/low-trust until the orphan join is resolved.
```sql
/*
Requested: per customer company, for its FIRST CALENDAR MONTH AS A CUSTOMER:
unique givers, recognition count, successful redemption count.
GAPS IN THIS CATALOG (stated explicitly — they constrain what can be truthfully returned):
1) UNIQUE GIVERS is NOT directly derivable. The catalog documents no event-level
recognition/giving table (no table with giver IDs or give events). The only
giving data anywhere in the catalog is the pre-aggregated M1_USERS / M1_GIVES
on PRODUCTION.PLG.COMPANY_COHORT_SUMMARY. M1_USERS (month-1 users) is returned
below as the closest documented PROXY; it is not a distinct-giver count.
2) SUCCESSFUL REDEMPTIONS: PRODUCTION.DEPRECATED_RECOGNITION.REDEMPTION_RECORDS_V2
is the documented source for redemption counts (only STATE = 'succeeded' rows
count), but the catalog documents none of its other columns — no company key,
no event date — so it cannot be scoped to "per company, first calendar month"
without inventing schema. It is therefore NOT used. The pre-aggregated
M1_REDEMPTIONS is returned instead; the catalog does not state whether
M1_REDEMPTIONS counts only succeeded redemptions.
3) M1_* ANCHOR: the catalog does not state whether M1 = first month from
SIGNUP_DATE, ACTIVATED_DATE, or FIRST_SUB_PAYMENT_DATE. If M1 is not anchored
at first payment, M1_* will not align exactly with the first calendar month as
a PAYING customer. No event-level data exists in this catalog to recompute
these metrics for an arbitrary calendar month.
4) COMPANY IDENTIFIER: the catalog documents this table as "one row per
self-serve company" but does not name the company key column. cs.* is selected
so whatever company identifier exists is returned; no column name is invented.
5) COVERAGE: self-serve companies only — the cohort table is the only documented
source of giving/redemption data, so sales-sourced customers cannot be included.
DEFINITION & ARITHMETIC:
"First calendar month as a customer" = the calendar month containing
FIRST_SUB_PAYMENT_DATE, the only documented paying-customer start date.
FIRST_SUB_PAYMENT_DATE = 2025-03-15
DATE_TRUNC('MONTH', 2025-03-15) = 2025-03-01 -> March 2025.
(Interpretation used: the month containing the first payment, not the first
FULL month after it.)
Companies with FIRST_SUB_PAYMENT_DATE IS NULL never became paying customers;
that month is undefined for them, so they are excluded below.
All three counts are pre-aggregated in the source — no event-level arithmetic
is possible from this catalog.
FILTER RULES HONORED:
- NO deleted-giver exclusion is applied anywhere: the catalog states that filter
must NOT be applied to historical giving counts (it understates history), and
M1_USERS / M1_GIVES are historical month-1 counts taken as-is.
- Stale/unusable tables avoided: HUBSPOT_HUB_1973303.V2_LIVE.OBJECTS_DEALS
(unpopulated), PRODUCTION.HUBSPOT.DEALS (stale, last sync 2023-03),
PRODUCTION.HUBSPOT.GONG_HUBSPOT_MAP_FAST (retired). None contain recognition data.
- PRODUCTION.CHARGEBEE.SUBSCRIPTIONS not used: no documented link to companies,
and CURRENT_TERM_START is the CURRENT term, not the first-ever term.
*/
SELECT
cs.*, -- all documented columns; carries the company identifier (gap #4)
DATE_TRUNC('MONTH', cs.FIRST_SUB_PAYMENT_DATE)
AS first_calendar_month_as_customer, -- derived per arithmetic above
cs.M1_USERS AS unique_givers__PROXY_M1_USERS, -- proxy only; true distinct-giver count not derivable (gap #1)
cs.M1_GIVES AS recognition_count, -- month-1 gives (recognitions), no deleted-giver filter applied
cs.M1_REDEMPTIONS AS successful_redemption_count__M1_UNVERIFIED -- success-only status undocumented for this column (gap #2)
FROM
-- PRODUCTION.PLG.COMPANY_COHORT_SUMMARY: the ONLY table in this catalog with
-- per-company giving/redemption data (M1_USERS, M1_GIVES, M1_REDEMPTIONS) and
-- a documented customer-start date (FIRST_SUB_PAYMENT_DATE). It is one row per
-- self-serve company, so no GROUP BY is needed. Historical giving counts are
-- taken as-is, with no deleted-giver exclusion, per the catalog's business rule.
PRODUCTION.PLG.COMPANY_COHORT_SUMMARY AS cs
WHERE
-- Only companies that became paying customers have a
-- "first calendar month as a customer".
cs.FIRST_SUB_PAYMENT_DATE IS NOT NULL
ORDER BY
first_calendar_month_as_customer;
```
SCOPE NOTE (missing data, stated explicitly)
- No deals file was provided. Owner, stage, amount, close date, and why-buys completeness cannot be computed, and fixes cannot be ranked by pipeline dollars — no amounts exist in the supplied data. The fix list at the end is therefore ranked by records/accounts affected, not by amount.
- Companies carry aliases + domains only (no name column), so "name variant" dedupe is impossible; duplicate detection is limited to shared domain.
- Row counts: companies 34, contacts 52, enrichment 25. No duplicate company_alias or contact_key keys.
1) COMPLETENESS PER FIELD
Companies (34 rows)
- industry: 34/34 = 100.0% populated (but 4 spelling variants in use: Technology, tech, "Tech ", health care)
- employee_count: 25/34 = 73.5% (missing 9: C-EC3025, C-96039F, C-44EA29, C-D04904, C-B23205, C-60C75F, C-7BBDFA, C-50D386, C-93C8BF)
- hq_country: 28/34 = 82.4% (missing 6: C-2D1F1B, C-D73B89, C-44EA29, C-D04904, C-2C60E5, C-EE9FFB)
- Fully complete on all 3 fields: 21/34 = 61.8%
Contacts (52 rows)
- email: 52/52 = 100.0% populated, but only 48/52 = 92.3% are syntactically valid, and 47/52 = 90.4% are valid AND domain-consistent
- title: 39/52 = 75.0% (missing 13: CT-0000, CT-0022, CT-0072, CT-0080, CT-0081, CT-0092, CT-0120, CT-0121, CT-0122, CT-0132, CT-0141, CT-0162, CT-0170)
- persona: 37/52 = 71.2% (missing 15: CT-0000, CT-0022, CT-0041, CT-0060, CT-0070, CT-0081, CT-0082, CT-0092, CT-0110, CT-0132, CT-0162, CT-0171, CT-0172, CT-0180, CT-0181)
- Fully complete on all 3 fields: 30/52 = 57.7%
Deals
- Not computable — no deals extract provided.
Coverage gaps (adjacent findings)
- 14 of 34 companies (41.2%) have zero contacts: C-0A092931, C-0A092932, C-0A092933, C-0A092934, C-2C60E5, C-2D7423, C-332637, C-50D386, C-7BBDFA, C-93C8BF, C-B97B4E, C-BA969B, C-C9BB20, C-EE9FFB
- C-60C75F: no contact has a persona. C-AA8DDA: no contact has a title.
2) DUPLICATE COMPANY CLUSTERS (shared domain)
Cluster 1 — acme-corp.com
- C-0A092931 (Technology, 500, US) and C-0A092932 (tech, 510, USA)
- Survivor: C-0A092931 (earlier sequential record). Retire C-0A092932.
- Open conflict: employee_count 500 vs 510 — no enrichment row for acme-corp.com, so I cannot adjudicate; flag for manual verification rather than picking a value.
- Neither alias has contacts in the extract.
Cluster 2 — globex.io
- C-0A092933 (SaaS, 200, US) and C-0A092934 (Technology, 200, US)
- Survivor: C-0A092933 (earlier sequential record). Retire C-0A092934.
- Open conflict: SaaS vs Technology — no enrichment row for globex.io; flag for manual verification.
- Neither alias has contacts in the extract.
Not merged: C-7BBDFA and C-50D386 share profile traits (health care, blank employee_count in CRM, Canada, both 400 in ZI) but have different domains (7bbdfa.com vs 50d386.com). Under the stated criteria they are not duplicates. No other shared domains exist.
3) INVALID EMAILS AND DOMAIN MISMATCHES
Invalid emails (4)
- CT-0010 (C-66D1FC): user0@ — no domain
- CT-0080 (C-92D97D): user0@ — no domain
- CT-0081 (C-92D97D): user1@ — no domain
- CT-0192 (C-425E2A): user2@ — no domain
Domain mismatch (1)
- CT-0011 (C-66D1FC): user1@other-domain.com vs company domain 66d1fc.com
Notes: C-92D97D has 2 of its 3 contacts unreachable (only CT-0082 is valid). C-66D1FC has 2 of 3 contacts compromised (1 invalid, 1 mismatch). All 52 contact.domain values match their company's domain, and no orphan contacts exist (every company_alias resolves).
4) ENRICHMENT FILLS (only where a matching ZI row exists)
Fillable now (8) — employee_count:
- C-EC3025 → 400 | C-96039F → 400 | C-44EA29 → 400 | C-D04904 → 400 | C-B23205 → 400 | C-60C75F → 400 | C-7BBDFA → 400 | C-50D386 → 400
Not fillable (no value invented):
- employee_count: C-93C8BF (no ZI row for 93c8bf.com)
- hq_country: all 6 gaps stay open — C-2D1F1B, C-D73B89, C-44EA29, C-D04904, C-2C60E5 (ZI rows exist but zi_hq_country is blank) and C-EE9FFB (no ZI row)
- industry: nothing to fill (0 missing)
No ZI row at all (9 companies): C-BA969B, C-332637, C-93C8BF, C-EE9FFB, C-C9BB20, C-0A092931, C-0A092932, C-0A092933, C-0A092934.
5) CRM vs ENRICHMENT DISAGREEMENTS (both sources populated)
Industry (10 rows — CRM says Technology/tech/"Tech ", ZI says Computer Software):
C-66D1FC (tech vs Computer Software), C-EC3025, C-44EA29, C-92D97D, C-D04904, C-77A95A, C-AA8DDA, C-B25F40, C-60C75F, C-425E2A.
Recommendation: adopt ZI (Computer Software) as the canonical industry value, or map Technology→Computer Software via picklist. Rationale: ZI agreement with CRM is perfect where values are objective — employee_count 17/17 rows agree, country 20/20 rows agree substantively — while CRM industry is free-text with 4 spelling variants of the same concept. ZI is the more reliable industry source.
Employee_count: 17 rows have both values; 0 conflicts. No action beyond the 8 fills above.
hq_country: 20 rows have both; 0 substantive conflicts; 10 format-only differences (C-66D1FC, C-950043, C-EC3025, C-96039F, C-77A95A, C-B23205, C-E51FB7, C-D0662E, C-425E2A, C-2D7423 — US/USA vs United States). Recommendation: standardize to one format (ZI's full names, or ISO-3166 codes) across all 28 populated rows. Substantively both sources agree, so no source fight — it is purely a normalization pass.
6) TOP 10 FIXES (cannot be ranked by pipeline amount — no deals data; ranked by records/accounts affected and downstream blocking impact)
1. Merge acme-corp.com cluster: keep C-0A092931, retire C-0A092932; manually resolve 500 vs 510 employees (no ZI row). Duplicate accounts double-count pipeline in any rollup.
2. Merge globex.io cluster: keep C-0A092933, retire C-0A092934; resolve SaaS vs Technology (no ZI row).
3. Fill 8 employee_counts from ZI (all →400): C-EC3025, C-96039F, C-44EA29, C-D04904, C-B23205, C-60C75F, C-7BBDFA, C-50D386. Closes 8 of 9 gaps (88.9%) in the field.
4. Fix the 4 invalid emails: CT-0010, CT-0080, CT-0081, CT-0192 — hard blockers on outreach; C-92D97D loses 2 of 3 reachable contacts.
5. Resolve CT-0011 (user1@other-domain.com on C-66D1FC): wrong-domain contact — verify identity before any sequence send.
6. Backfill 15 missing personas (28.8% of contacts; C-60C75F has zero persona coverage) — blocks persona-based routing and qualification.
7. Standardize industry vocabulary: map the 10 Technology/tech/"Tech " rows to Computer Software per ZI, plus C-BA969B, C-C9BB20, C-93C8BF ("Tech ", no ZI row — pending enrichment), and normalize health care → Healthcare on C-7BBDFA, C-50D386. 15 rows total.
8. Standardize hq_country format (US/USA/United States → one canonical value): 28 populated rows, 10 confirmed format conflicts.
9. Backfill 13 missing titles (25.0% of contacts; C-AA8DDA has zero titles) — blocks seniority-based messaging.
10. Source enrichment for the 9 companies with no ZI row (C-BA969B, C-332637, C-93C8BF, C-EE9FFB, C-C9BB20, C-0A092931, C-0A092932, C-0A092933, C-0A092934) and re-request country for the 5 where ZI is blank (C-2D1F1B, C-D73B89, C-44EA29, C-D04904, C-2C60E5) — these are the only paths to closing the remaining employee_count gap (C-93C8BF) and all 6 country gaps.
If you provide the deals extract, I will compute owner/stage/amount/close-date/why-buys completeness and re-rank these fixes by actual pipeline dollars at stake.
DATA NOTE: All 90 rows classified. Close dates in the file span 2026-07-29 to 2026-09-30 (~2 months, all within the last 6 months); one deal (Deal-DB0AAC, 2026-09-30) has a close date later than today (2026-09-08) — treated as given. Total amount across the 90 deals: $1,267,945.16.
METHOD (so the cuts are auditable)
- Free text is primary evidence when substantive; the structured tag is used when the text is silent/uninformative ("unresponsive", "Timing", "MIA", "Nothing specific provided").
- Mappings: MIA/unresponsive → no decision (no purchase outcome; side unknown unless text gives a cause). "Doing nothing/Not a priority/Cost" → no decision (its lead component). Budget-approval failures → pricing (matches the CRM's own "Lost- Budget/Price" tag). "Feature Request" → product gap. Spam / not-ICP → other. "Champion left" = buyer-side personnel/leadership change only (Deal-E0441F involves a departed Bonusly REP, seller-side, so it is no decision with side Bonusly).
- Side: Bonusly = stated cause is something about Bonusly's product/fit/execution; buyer = buyer's circumstances/choices (budget, priorities, timing, incumbents, contracts, personnel, preferences); unknown = no usable cause stated.
DEAL-BY-DEAL CLASSIFICATION (CSV order within groups)
TIMING — 19 deals
Deal-DB0AAC — buyer — paused; reconnect timeline being set
Deal-91A056 — buyer — reconnect early 2027
Deal-29326C — buyer — "Timing", no detail
Deal-831B7B — buyer — revisit in the new year
Deal-39E25C — buyer — reconnect next year
Deal-B3ABED — buyer — revisit ~Q2 2027 to fund 2028 budget (text has "MIA-" prefix, but substance is a dated revisit)
Deal-B6AC09 — buyer — revisiting in 2027
Deal-E6E80A — buyer — pushed into early 2027
Deal-B038F0 — buyer — pushed back into early 2027
Deal-175756 — buyer — on hold until 2027, other priorities
Deal-BB78F3 — buyer — plant-survey actions first; "interested in pursuing as an end goal"
Deal-15DA99 — buyer — bring back up early 2027
Deal-F4AF5D — buyer — early next year
Deal-79B7A1 — buyer — "Timing", no detail
Deal-9F176A — buyer — pause until ~end of 2026
Deal-69CF3D — buyer — on hold
Deal-ECBF89 — buyer — on hold for now
Deal-D1A623 — buyer — timing, no detail
Deal-55867E — unknown — "not moving forward at this time", no reason given (category from tag)
COMPETITOR — 26 deals
Deal-F7F635 — unknown — "go in another direction", no reason (tag: Competitor)
Deal-F97C37 — Bonusly — other vendor seen as "more diversified offerings"
Deal-422BA6 — Bonusly — winner is a preferred ADP TotalSource PEO partner (pre-built integrations, dedicated contacts)
Deal-381C8C — unknown — "not moving forward", no reason (tag: Competitor)
Deal-F1E8A6 — unknown — "not moving forward", no reason (tag: Competitor)
Deal-DDAB52 — Bonusly — Rippl: "a lot more at the same cost", no exchange-rate friction
Deal-ACE061 — unknown — buyer wouldn't say; rep hunch: HeyTaco
Deal-2D2F8D — unknown — "different direction", no reason
Deal-0F96AA — unknown — cut before RFP finalist stage, no reason
Deal-1BCA50 — buyer — budget/gift-card details; stakeholder already far down the path with another vendor
Deal-7CC678 — unknown — "Nothing specific provided."
Deal-242273 — Bonusly — rivals could digitize internal points currency + onsite-facility spend ("biggest differentiator")
Deal-A2C349 — buyer — staying with Awardco; adding its surveying functionality
Deal-C7156E — unknown — "selected another vendor", no reason
Deal-5E64CE — buyer — Nectar contract through Oct 2027, high exit fee; plans to move to Bonusly at contract end
Deal-8A0992 — buyer — Canadian provider "more closely aligns"
Deal-D0C698 — buyer — client is a past Kudos user and wants that platform again
Deal-EECC02 — unknown — "Went another direction.", no reason
Deal-47F1A1 — buyer — staying with WorkTango another 12 months
Deal-BF2A98 — buyer — already deployed HiThrive
Deal-1E7DA9 — unknown — "selected another platform", no reason
Deal-286F9C — Bonusly — "not really a good fit for us" + chose another platform
Deal-369281 — buyer — used what they already have in Paylocity
Deal-9FCD0D — buyer — chose a Canadian company (important to CEO)
Deal-64B19A — buyer — likely stayed with Motivosity
Deal-DC77FE — Bonusly — rival offered more customization (label points as dollars); price explicitly not a factor
NO DECISION — 35 deals
Dark/unresponsive (21):
Deal-AC944F — unknown — unresponsive
Deal-214060 — unknown — unresponsive
Deal-21B045 — unknown — MIA
Deal-988493 — unknown — mia
Deal-F308CA — unknown — no contact since April intro; ignored rep + ADR outreach
Deal-4664E1 — unknown — no contact after intro; ignored outreach
Deal-E0441F — Bonusly — stale when inherited from a departed Bonusly rep; no contact from consultant or prospect
Deal-D48E0B — unknown — MIA
Deal-583ADB — unknown — MIA
Deal-7CB44D — unknown — no meaningful contact since demo; ignored rep + ADR outreach
Deal-AFA56C — unknown — unresponsive
Deal-D1AABF — unknown — no response
Deal-2BBA21 — unknown — no contact since intro; ignored 4 nudges in 1.5 months
Deal-386F6E — unknown — no response
Deal-3F86A0 — unknown — unresponsive
Deal-096750 — unknown — no meaningful contact after intro; ignored 4 revive attempts
Deal-79E61A — unknown — unresponsive
Deal-AE7C4E — unknown — unresponsive
Deal-DAB4F1 — unknown — unresponsive
Deal-B4B50F — unknown — unresponsive
Deal-5885B9 — unknown — MIA
Active declines/stalls (14):
Deal-13E9CF — buyer — R&R deprioritized ("Not a budget issue"); reach out next year
Deal-ED9AE7 — buyer — timing, budget, authority all open
Deal-70F704 — unknown — narrow use case (anniversary awards only) + MIA; reopen if they reach out
Deal-E74A73 — buyer — testing points calculation manually before investing in a platform
Deal-8E27DA — buyer — moved forward with just a swag provider; "didn't want R&R, currently" (tag: Feature Request — disagrees)
Deal-FAC17C — buyer — contract out 2 months; no final approval from Executive IT Director
Deal-50E5D8 — buyer — leadership pause; may return
Deal-7B2236 — buyer — budget + wanted "something simpler and cheaper"; paused
Deal-413C56 — buyer — back-to-school is the priority; CEO not ready
Deal-2A292B — buyer — building something simple internally
Deal-FEDBCB — buyer — disengaged; vague end-of-year reconnect
Deal-7FBAC6 — buyer — leadership pause (again)
Deal-2FEDDB — buyer — unsure on timing; can't get it moving
Deal-ABD14C — buyer — "not interested in signing up"
PRICING — 5 deals
Deal-7ED004 — buyer — did not get budget approval
Deal-C33D91 — buyer — significant budget cuts; not approved
Deal-5AD03E — buyer — wanted more defined budget access (tag: Competitor — disagrees)
Deal-DAFB82 — buyer — budget to other priorities until 2028; "loves Bonusly", will loop back
Deal-8A119B — buyer — didn't get approval
PRODUCT GAP — 3 deals
Deal-9048EB — Bonusly — "bad fit based on their desired setup and multiple feature gaps" (tag: MIA — disagrees)
Deal-3618CC — Bonusly — "Wanted Surveys" (tag: Lost DM — disagrees)
Deal-981AD4 — Bonusly — doesn't fit UI; not UK focused
CHAMPION LEFT — 1 deal
Deal-F325A5 — buyer — layoffs and change in leadership; no longer a priority
OTHER — 1 deal
Deal-5DB9B0 — unknown — spam; not a real opportunity (tag: Does not fit ICP)
SUMMARY
1) Category counts (check: 19 + 26 + 35 + 5 + 3 + 1 + 1 = 90)
no decision 35 (35/90 = 38.9%)
competitor 26 (26/90 = 28.9%)
timing 19 (19/90 = 21.1%)
pricing 5 ( 5/90 = 5.6%)
product gap 3 ( 3/90 = 3.3%)
champion left 1 ( 1/90 = 1.1%)
other 1 ( 1/90 = 1.1%)
2) Side split (check: 47 + 33 + 10 = 90)
buyer 47 (47/90 = 52.2%)
unknown 33 (33/90 = 36.7%)
Bonusly 10 (10/90 = 11.1%)
Of the 10 Bonusly-side: 9 are product/fit/integration gaps (Deal-F97C37, Deal-422BA6, Deal-DDAB52, Deal-242273, Deal-286F9C, Deal-3618CC, Deal-9048EB, Deal-981AD4, Deal-DC77FE — themes: surveys, points-as-currency/customization, ADP integration, UI/UK localization, value-at-cost) and 1 is a process failure (Deal-E0441F, rep handoff).
3) Tag vs free-text disagreements: 4 clear (4/90 = 4.4%)
- Deal-3618CC: tag "Lost DM" vs text "Wanted Surveys" — a capability reason, no decision-maker content.
- Deal-5AD03E: tag "Competitor" vs text "Wanted more defined budget access" — a budget reason, no competitor mentioned.
- Deal-8E27DA: tag "Feature Request" vs text "moved forward with just a swag provider... didn't want R&R, currently" — no feature request stated.
- Deal-9048EB: tag "MIA" vs text "bad fit... multiple feature gaps" — a concrete product reason recorded while the tag says dark.
Borderline, not counted: Deal-13E9CF (text negates the "Cost" element but confirms "Not a priority"), Deal-5E64CE (tag "Doing nothing/Not a priority/Cost" vs Nectar contract lock with a stated plan to move to Bonusly), Deal-9F176A (same category, wrong horizon: "end of the year" vs "1 year or more"), Deal-70F704 (Lost DM vs MIA text — consistent only if "Lost DM" means the DM went dark).
4) Two patterns most worth acting on
PATTERN 1 — Dated, warm deferred demand is sitting in closed-lost with no revive mechanism.
19 timing losses (21.1% of deals) worth $259,851 (= 5,115+2,975+6,300+7,200+3,360+40,001+3,000+24,000+2,340+2,880+6,600+19,600+5,760+25,000+54,600+11,520+7,200+25,200+7,200), ~20.5% of the $1,267,945 total. 11 of 19 name an explicit revive window: early 2027 (Deal-91A056, Deal-E6E80A, Deal-B038F0, Deal-15DA99), "new year"/"next year" (Deal-831B7B, Deal-39E25C, Deal-F4AF5D), 2027 (Deal-B6AC09, Deal-175756), Q2 2027 (Deal-B3ABED), ~end of 2026 (Deal-9F176A). Two more carry hard dates outside the timing bucket: Deal-5E64CE (Nectar contract ends Oct 2027; "planning to reach out... to move over to Bonusly") and Deal-DAFB82 (not budgeted until 2028; "loves Bonusly"). Warm language also in Deal-831B7B and Deal-BB78F3 ("interested in pursuing as an end goal"). Action: log every stated date as a scheduled re-engagement task with owner + trigger date (Dec 2026: Deal-9F176A; Jan–Mar 2027 wave: the early-2027/new-year cluster; Apr–Jun 2027: Deal-B3ABED; Oct 2027: Deal-5E64CE; 2028 cycle: Deal-DAFB82). The structured tag captures the category but not the date — and its horizon bucket is even wrong for Deal-9F176A.
PATTERN 2 — The largest bucket is "nothing happened", and the loss data can't explain it.
No decision = 35/90 (38.9%) and $378,604.20 (~30% of lost dollars). 22 deals (24.4%) are tagged MIA, worth $254,142 (= 3,400+2,880+11,700+8,400+30,321+12,000+2,405+14,931+3,600+31,860+3,000+41,790+23,400+2,310+13,895+3,840+2,880+7,020+2,800+3,450+21,060+7,200), and the texts show early-funnel collapse: dark immediately after intro/demo despite repeated outreach (Deal-F308CA, Deal-4664E1, Deal-7CB44D, Deal-2BBA21, Deal-096750), plus one deal dead from a Bonusly rep handoff (Deal-E0441F). Information deficit: 33/90 (36.7%) close with no usable reason (21 dark deals + 10 competitor-tagged with zero detail — Deal-F7F635, Deal-381C8C, Deal-F1E8A6, Deal-2D2F8D, Deal-0F96AA, Deal-7CC678, Deal-C7156E, Deal-EECC02, Deal-1E7DA9, Deal-ACE061 — plus Deal-55867E, Deal-70F704, spam Deal-5DB9B0), and 4 more have tags contradicting the text. Action: (a) close hygiene — require a substantive free-text reason and matching tag before close, and fix the 4 mismatched tags; (b) treat post-intro/post-demo dark deals as a qualification problem: gate pipeline entry on engagement and route never-engaged leads to nurture rather than closed-lost (they add $254K of notional "loss" that isn't a competitive or product verdict); (c) add a handoff SLA so inherited deals get worked (Deal-E0441F).
```json
{
"tier_counts": { "LOCK": 7, "ACTION": 30, "BUILD": 39, "REVIVE": 12, "WATCH": 54, "RISKY": 14 },
"tier_examples": {
"LOCK": ["Deal-25F752", "Deal-D348E1", "Deal-C26D20"],
"ACTION": ["Deal-C6FE92", "Deal-BA3DDC", "Deal-E53952"],
"BUILD": ["Deal-D73B89", "Deal-93C8BF", "Deal-A414F6"],
"REVIVE": ["Deal-2D1F1B", "Deal-66D1FC", "Deal-950043"],
"WATCH": ["Deal-EC3025", "Deal-92D97D", "Deal-44EA29"],
"RISKY": ["Deal-7BBDFA", "Deal-F9A3C1", "Deal-547B2B"]
},
"risky_deals": ["Deal-7BBDFA", "Deal-F9A3C1", "Deal-547B2B", "Deal-B7EBD1", "Deal-7599B8", "Deal-A2B47C", "Deal-2465CE", "Deal-584EE5", "Deal-690476", "Deal-635B8E", "Deal-4A13AD", "Deal-0660B4", "Deal-FD9F4E", "Deal-BA571A"],
"lock_violations": 0,
"pipeline_shape": "156 deals totaling $2,314,044 (sum of amount). The book is early-stage and uncommitted: PIPELINE category holds 105/156 deals (67%) and $1,828,389 (79% of total) vs COMMIT at 11 deals / $77,929 (3%); 61 deals (39%) sit at DS3 and only 24 (15%) at DS4/DS5. Engagement is the binding constraint: 101/156 deals (65%) have zero meetings_30d, including 6 of the 11 COMMITs, so RISKY (14) outnumbers LOCK (7) two-to-one — forecast calls outrun the activity behind them. Value also concentrates early: top 5 deals ($240,000 + $99,000 + $72,000 + $70,000 + $63,600 = $544,600, 23.5% of total) are all DS1–DS3 PIPELINE, while 38 deals worth $273,551 (12% of value) carry September close dates and 2 (Deal-333EBB, Deal-57FF13) are already past-due as of 2026-09-04. Data caveat: engagement rows are missing for Deal-3EED2C and Deal-57FF13, so their meetings_30d is treated as 0."
}
```
```json
[
{
"transcript_id": "TX-001",
"deal_alias": "Deal-CFE7F4",
"why_buys": [
"Prospect (VP People): 'The big win for us would be automating anniversary and birthday awards — our HR team of three cannot keep up with it manually.'"
],
"pain_points": [
"HR team of three cannot keep up with manual anniversary and birthday awards (Prospect — VP People)",
"Everything tracked in a spreadsheet and 'people slip through the cracks' (Prospect — HR Admin)"
],
"stakeholders": [
"Prospect (VP People)",
"Prospect (HR Admin)"
],
"budget_signal": "$40k earmarked for engagement tools this fiscal year (Prospect — VP People)",
"timeline_signal": "Live before open enrollment in November, ideally (Prospect — VP People)",
"competitor_mentioned": "Achievers — looked at last year; 'too heavy for a team our size' (Prospect — VP People)",
"next_step": "Security review on September 12 (explicitly agreed: 'Yes — let's do the security review on September 12')",
"objections": [
"SSO and audit logs required for IT to sign off — 'One concern' (Prospect — HR Admin)",
"Team-size fit: prior vendor was 'too heavy for a team our size' (Prospect — VP People)"
],
"confidence": "high — prospect-stated budget ($40k), stated timeline (before November open enrollment), agreed next step (security review Sept 12), and the only named competitor (Achievers) was already rejected by the prospect last year."
},
{
"transcript_id": "TX-002",
"deal_alias": "Deal-70BB30",
"why_buys": [
"Prospect (Head of Total Rewards): 'We want to tie recognition to retention for our hourly workforce — regretted turnover there is over 30%.'"
],
"pain_points": [
"Regretted turnover over 30% in the hourly workforce (Prospect — Head of Total Rewards)"
],
"stakeholders": [
"Prospect (Head of Total Rewards)",
"Prospect (CFO)"
],
"budget_signal": "$25k pilot budget approved by finance for this quarter (Prospect — CFO)",
"timeline_signal": "Decision wanted by end of September (Prospect — CFO)",
"competitor_mentioned": null,
"next_step": "Rep to send pilot agreement; prospect (CFO) will route it to legal this week (explicitly agreed: 'Yes — send the pilot agreement and we'll route it to legal this week')",
"objections": [
"Workday integration 'has to be rock solid' — stated as the CFO's 'one condition' (Prospect — CFO)"
],
"confidence": "high — approved $25k pilot budget, end-of-September decision date, prospect states this is the first vendor they've had a real demo with, and pilot agreement agreed for legal routing this week."
},
{
"transcript_id": "TX-003",
"deal_alias": "Deal-530B50",
"why_buys": [
"Prospect (People Ops Manager): 'We need to make recognition visible across our 12 retail locations.'"
],
"pain_points": [
"Recognition not visible across 12 retail locations (Prospect — People Ops Manager)",
"Store managers have zero budget autonomy for on-the-spot recognition today (Prospect — People Ops Manager)"
],
"stakeholders": [
"Prospect (People Ops Manager)"
],
"budget_signal": null,
"timeline_signal": "No rush on the prospect's side until Q1 (Prospect — People Ops Manager)",
"competitor_mentioned": "Bucketlist — CEO used it at her last company and liked it (Prospect — People Ops Manager)",
"next_step": "Call with the CEO to be scheduled; Prospect (People Ops Manager) will send two time options (explicitly agreed: 'Yes, let's schedule a call with our CEO — I'll send two times')",
"objections": [
"CEO has to be sold first — she decides anything people-related (Prospect — People Ops Manager)"
],
"confidence": "low-to-medium — CEO call agreed, but no prospect-stated budget, prospect states no urgency until Q1, and the decision-maker (CEO) has favorable prior experience with a named competitor."
},
{
"transcript_id": "TX-004",
"deal_alias": "Deal-180D02",
"why_buys": [
"Prospect (VP People): 'We want to consolidate three separate recognition tools into one.'"
],
"pain_points": [
"Paying for three separate recognition tools (Prospect — VP People)",
"None of the three tools talk to their HRIS (Prospect — VP People)"
],
"stakeholders": [
"Prospect (VP People)",
"Prospect (IT Security Lead)"
],
"budget_signal": "Under $15k annually can be approved by the VP People without going to the board (Prospect — VP People)",
"timeline_signal": "Procurement cycle runs six to eight weeks minimum (Prospect — IT Security Lead)",
"competitor_mentioned": null,
"next_step": null,
"objections": [
"Security review took three months for their last vendor — 'that's my hesitation' (Prospect — IT Security Lead)",
"Noncommittal on a CFO follow-up: 'Maybe — I need to check her calendar, no promises' (Prospect — VP People)"
],
"confidence": "low-to-medium — clear consolidation pain and a stated sub-$15k self-approval path, but explicit security-lead hesitation, a 6–8 week minimum procurement cycle, and no next step agreed."
},
{
"transcript_id": "TX-005",
"deal_alias": "Deal-F8767A",
"why_buys": [
"Prospect (HR Director): 'Two things: automate service milestones, and give us analytics on recognition equity across departments.'"
],
"pain_points": [
"Night-shift teams feel invisible — engagement scores run 20 points lower (Prospect — People Ops Coordinator)"
],
"stakeholders": [
"Prospect (HR Director)",
"Prospect (People Ops Coordinator)"
],
"budget_signal": "$12k approved under the engagement line (Prospect — HR Director)",
"timeline_signal": "Running before the January all-hands (Prospect — HR Director)",
"competitor_mentioned": "Nectar — mid-pilot now; 'you'd need to beat that experience' (Prospect — HR Director)",
"next_step": "Rep to present to the exec team on October 2 (explicitly agreed: 'Yes — come present to our exec team on October 2')",
"objections": [
"Mid-pilot with Nectar — 'you'd need to beat that experience' (Prospect — HR Director)",
"Exec team is skeptical after a failed rollout two years ago (Prospect — HR Director)"
],
"confidence": "medium — $12k approved, pre-January deadline, and exec presentation agreed for October 2, but an active Nectar pilot must be beaten and exec skepticism from a prior failed rollout must be overcome."
},
{
"transcript_id": "TX-006",
"deal_alias": "Deal-EE195F",
"why_buys": [
"Prospect (HR Manager): 'I'd love to cut the admin time on service awards.'"
],
"pain_points": [
"HR Manager personally spends five hours a month ordering and shipping plaques (Prospect — HR Manager)"
],
"stakeholders": [
"Prospect (HR Manager)"
],
"budget_signal": "No dollar amount stated; prospect stated 'Budget isn't the issue — time is' (Prospect — HR Manager)",
"timeline_signal": "Fiscal year resets in February; a Q1 start is realistic (Prospect — HR Manager)",
"competitor_mentioned": null,
"next_step": "Rep to send one-page overview; Prospect (HR Manager) to forward it to the COO this week (explicitly agreed: 'Yes — send the one-page overview and I'll forward it to our COO this week')",
"objections": [
"COO usually prefers building things in-house — 'Fair warning' (Prospect — HR Manager)",
"No other vendors being evaluated; comparing against 'just doing it internally' (Prospect — HR Manager)"
],
"confidence": "medium — prospect states budget is not an issue, Q1 start realistic, and a concrete step agreed (one-pager to COO this week), but the COO's in-house build preference is unresolved."
}
]
```
Nulls and explicit data gaps:
- TX-003 budget_signal: null — the only pricing in the transcript (~$8 per employee per month) came from the rep, not the prospect, so it is excluded.
- TX-002 competitor_mentioned: null — prospect stated "You're the first vendor we've had a real demo with."
- TX-004 competitor_mentioned: null — the prospect referenced three incumbent recognition tools but named none.
- TX-004 next_step: null — the CFO follow-up was not agreed ("Maybe — I need to check her calendar, no promises"); the rep's "I'll follow up" is rep-initiated, not an agreed step.
- TX-006 competitor_mentioned: null — no competitor vendor named; the in-house build alternative is captured under objections.
Extraction rules applied: stakeholders include only prospect-side speakers from each transcript's speaker list (mentioned non-speakers — IT lead, legal, CEO, CFO, exec team, COO — are captured only in next_step/objections where the prospect stated them). Rep statements (e.g., SSO/SAML support, Workday integration being standard, pricing) were used for no field. No arithmetic was required; all figures are quoted verbatim from prospect statements.
**Three deals closest to signature** (status as of the 2026-09-04 Slack export): **1. Deal-547B2B — $11,200** Why: DS5/COMMIT, close date 2026-09-11 (2026-09-11 − 2026-09-04 = 7 days out). Slack (Alex, 2026-09-04): redlines came back clean that morning, the signing page is out, and their VP People said they are signing tomorrow (2026-09-05). Signature-imminent. Left: only the customer's actual signature coming back. **2. Deal-403845 — $9,000** Why: DS5/COMMIT, close date 2026-09-11. Slack (Dana, 2026-09-04): "moving fine" — the order form is with their finance team, i.e., the final approval step. Left: finance's countersignature on the order form. (Data conflict: CRM lists owner Alex Franklin, but Dana reports it "on my side" in Slack — the CRM owner field appears stale.) **3. Deal-A2B47C — $6,360** Why: DS5/COMMIT, close date 2026-09-11. Slack (Alex, 2026-09-04): "still warm, just normal legal-review pace" — live confirmation it is active and progressing. Left: legal review to conclude, then signature. **Excluded despite strong CRM standing:** - Deal-2465CE ($5,400, DS5/COMMIT, 2026-09-10): Slack overrides CRM — champion left the company, procurement froze new vendors; Dana pulled it from commit; realistically Q4. - Deal-B7EBD1 ($9,000, DS5/COMMIT, 2026-09-10): earliest CRM close date, but it has no Slack mention — no live status exists, so I cannot rank it above the three above without inventing one. - Deal-D348E1 ($13,770, DS5/COMMIT, 2026-10-15): warm per Slack, but 2026-10-15 − 2026-09-11 = 34 days later than the 09-11 closers.
CANDIDATE REVIEW
1) Deal-EC3025 (TG-001) — SCIM provisioning
Prospect line (IT Security Lead): "We need SCIM user provisioning — our security team will not approve any tool that requires manual account management."
Classification: REAL GAP. Docs state "SCIM user provisioning ... NOT currently listed as supported capabilities," and no tier (Core/Pro/Enterprise) includes it — Enterprise lists SSO/SAML and audit logs, but not SCIM. Missing across all plans, so it is not a plan gate.
Amount: not provided in the data. transcripts_gaps.csv has no amount field and no other file supplies one.
2) Deal-D0D6B5 (TG-002) — ADP Workforce Now integration
Prospect line (HRIS Manager): "Our payroll runs on ADP Workforce Now and I don't see ADP anywhere in your integration list — that's a dealbreaker for us."
Classification: REAL GAP. Docs list supported HRIS integrations as "Workday, BambooHR, Gusto, Rippling (Pro and above)" and explicitly state ADP Workforce Now is NOT supported. No plan includes it, so it is not a plan gate.
Amount: not provided in the data.
3) Deal-CFE7F4 (TG-003) — custom report combining recognition frequency with turnover
Prospect line (VP People): "I tried to build a custom report combining recognition frequency with turnover and couldn't — is that possible on our current plan?"
Classification: PLAN GATE. Docs list "Custom report builder" as available on Enterprise. The capability exists in the product, so access is a tier question, not a missing feature. The prospect's current plan is not stated in the data.
Amount: not provided in the data.
4) Deal-84DBA6 (TG-004) — Slack recognition adoption
Prospect line (People Ops Manager): "We turned on the Slack integration in July, but half our managers still haven't given a single recognition — nobody ever trained them on it."
Classification: ROLLOUT/ENABLEMENT ISSUE. Docs: "Slack, Microsoft Teams (all plans)" — the integration is supported and works. The stated problem is training ("nobody ever trained them"), not product capability.
Amount: not provided in the data.
5) Deal-36C33F (TG-005) — mobile app for hourly workers
EXCLUDED — no prospect-raised gap. The only gap statement is from the rep (Alex Franklin): "we don't have a native mobile app for hourly workers yet" — rep language does not count as prospect voice. The prospect's line ("Good to know. The web version should be fine for our office staff for now.") raises no gap and accepts the current state. The docs excerpt is also silent on mobile either way.
Amount: not provided in the data.
ARITHMETIC / TALLY
- 10 rows in transcripts_gaps.csv = 5 prospect lines + 5 rep lines.
- Prospect lines that raise a gap claim: 5 − 1 (TG-005 prospect line is an acceptance, not a gap claim) = 4 candidates.
- Classification: 2 real gaps (TG-001, TG-002) + 1 plan gate (TG-003) + 1 enablement issue (TG-004) = 4.
- Deal amounts: 0 provided anywhere in the two files. I cannot name amounts without inventing them, so every amount is reported as missing.
SUMMARY — TRUE PRODUCT GAPS (prospect-raised, active deals only)
1. SCIM user provisioning — missing on all plans. Deal-EC3025. Prospect (IT Security Lead): "We need SCIM user provisioning — our security team will not approve any tool that requires manual account management." Docs confirm not supported on any tier. Amount: not provided in data.
2. ADP Workforce Now integration — missing on all plans. Deal-D0D6B5. Prospect (HRIS Manager): "Our payroll runs on ADP Workforce Now and I don't see ADP anywhere in your integration list — that's a dealbreaker for us." Docs confirm supported HRIS is limited to Workday, BambooHR, Gusto, Rippling. Amount: not provided in data.
Analysis complete. Method, then results. METHOD - 156 open deals; 154 have a row in the engagements table. 81 deals have a logged email/call/meeting within the last 7 days (on or after 2026-08-29, computing from 2026-09-05); 75 are stale. - Recency per deal = max(last_email, last_call, last_meeting) from the engagements table, ignoring the deal's last_contacted_field. Dates after the snapshot (future-dated entries) are not counted as contact. - No deal falls exactly on the 7-day boundary (none at 2026-08-29), so the split is unambiguous: fresh deals are 1–6 days stale; stale deals are 8+ days. - Two open deals have NO row in the engagements table (Deal-3EED2C, Deal-57FF13): zero logged activities of any kind, so they are stale, but days-since-last-contact cannot be computed — noted as "no data" below. STALE DEALS (grouped by owner; owners ordered by total stale amount desc; deals by amount desc) BRYCE HARMON — 18 stale deals Deal-2D1F1B | DS1 | 240,000 | 81 days (last contact 2026-06-16, meeting; 09-05 − 06-16 = 81) Deal-66D1FC | DS1 | 99,000 | 16 days (last 2026-08-20, email) Deal-950043 | DS1 | 70,000 | 19 days (last 2026-08-17, email) Deal-B23205 | DS1 | 45,000 | 16 days (last 2026-08-20, email+meeting) Deal-7BBDFA | DS3 | 37,440 | 46 days (last 2026-07-21, email) Deal-332637 | DS2 | 36,000 | 9 days (last 2026-08-27, email) Deal-1BEEBF | DS1 | 31,500 | 19 days (last 2026-08-17, email) Deal-A414F6 | DS1 | 25,200 | 19 days (last 2026-08-17, email) Deal-C5658B | DS1 | 23,400 | 16 days (last 2026-08-20, email) Deal-40522D | DS3 | 21,000 | 19 days (last 2026-08-17, email) Deal-C1FA6D | DS1 | 18,000 | 16 days (last 2026-08-20, email) Deal-01E193 | DS1 | 12,600 | 8 days (last 2026-08-28, email) Deal-F0EBBB | DS3 | 11,400 | 24 days (last 2026-08-12, email) Deal-927338 | DS1 | 10,920 | 18 days (last 2026-08-18, email) Deal-E25A09 | DS1 | 6,000 | 9 days (last 2026-08-27, email) Deal-C9C286 | DS2 | 5,502 | 9 days (last 2026-08-27, email) Deal-012CB1 | DS1 | 1 | 23 days (last 2026-08-13, email) Deal-3795AD | DS2 | 1 | 8 days (last 2026-08-28, email) DANA MERCER — 16 stale deals Deal-44EA29 | DS2 | 60,000 | 10 days (last 2026-08-26, email) Deal-E51FB7 | DS2 | 43,875 | 12 days (last 2026-08-24, call) Deal-B42F46 | DS1 | 27,000 | 19 days (last 2026-08-17, email) Deal-BA3DDC | DS3 | 23,400 | 15 days (last 2026-08-21, call) Deal-9DDE86 | DS2 | 20,000 | 15 days (last 2026-08-21, email) Deal-215CCA | DS3 | 18,900 | 17 days (last 2026-08-19, meeting) Deal-5EED42 | DS3 | 16,250 | 11 days (last 2026-08-25, email+call) Deal-57887A | DS2 | 15,000 | 8 days (last 2026-08-28, email) Deal-944310 | DS4 | 10,500 | 33 days (last 2026-08-03, email) Deal-B7EBD1 | DS5 | 9,000 | 16 days (last 2026-08-20, email) Deal-3974EB | DS4 | 9,000 | 8 days (last 2026-08-28, email+meeting) Deal-F40F04 | DS2 | 8,100 | 15 days (last 2026-08-21, email+meeting) Deal-7599B8 | DS3 | 7,350 | 18 days (last 2026-08-18, email) Deal-87DDD1 | DS1 | 5,000 | 19 days (last 2026-08-17, email) Deal-F336B6 | DS3 | 4,200 | 15 days (last 2026-08-21, email) Deal-0660B4 | DS4 | 1,920 | 16 days (last 2026-08-20, meeting) COLE INGRAM — 18 stale deals Deal-D04904 | DS2 | 58,529.25 | 11 days (last 2026-08-25, email) Deal-B25F40 | DS3 | 40,000 | 8 days (last 2026-08-28, email) Deal-813836 | DS2 | 32,175 | 11 days (last 2026-08-25, email) Deal-1BA595 | DS2 | 31,750 | 11 days (last 2026-08-25, email) Deal-CFE1E8 | DS3 | 18,000 | 11 days (last 2026-08-25, email) Deal-CD47A6 | DS2 | 12,168 | 11 days (last 2026-08-25, email) Deal-627646 | DS3 | 11,193 | 11 days (last 2026-08-25, email) Deal-FF809F | DS2 | 7,781.20 | 11 days (last 2026-08-25, email) Deal-AF932D | DS2 | 7,225.40 | 11 days (last 2026-08-25, email) Deal-A71728 | DS2 | 6,947.50 | 11 days (last 2026-08-25, email) Deal-8BC9F5 | DS2 | 5,616 | 10 days (last 2026-08-26, email) Deal-175395 | DS3 | 4,779.88 | 11 days (last 2026-08-25, email) Deal-481E24 | DS3 | 4,140 | 10 days (last 2026-08-26, call) Deal-C7F9BF | DS2 | 3,360 | 11 days (last 2026-08-25, email) Deal-2F3A66 | DS3 | 3,334.80 | 11 days (last 2026-08-25, email) Deal-342E96 | DS2 | 2,700 | 24 days (last 2026-08-12, email) Deal-E568D5 | DS3 | 1,875 | 11 days (last 2026-08-25, email) Deal-FD9F4E | DS5 | 1,330 | 10 days (last 2026-08-26, email) ALEX FRANKLIN — 20 stale deals Deal-CC08D1 | DS1 | 24,000 | 16 days (last 2026-08-20, email) Deal-E73427 | DS3 | 18,000 | 10 days (last 2026-08-26, email+meeting) Deal-885F45 | DS2 | 9,300 | 12 days (last 2026-08-24, email) Deal-C2FF3C | DS1 | 8,316 | 10 days (last 2026-08-26, email) Deal-3EED2C | DS2 | 7,200 | no data (no row in engagements table; zero logged activities) Deal-0D2F7A | DS3 | 5,100 | 12 days (last 2026-08-24, call) Deal-6C60D4 | DS3 | 4,800 | 12 days (last 2026-08-24, call) Deal-13FEBD | DS2 | 4,680 | 12 days (last 2026-08-24, call) Deal-819506 | DS1 | 4,400 | 8 days (last 2026-08-28, email) Deal-9D0060 | DS3 | 3,840 | 12 days (last 2026-08-24, email) Deal-690476 | DS2 | 3,600 | 18 days (last 2026-08-18, call) Deal-C6D97A | DS4 | 3,240 | 8 days (last 2026-08-28, email) Deal-EE195F | DS3 | 3,120 | 8 days (last 2026-08-28, email) Deal-278DEC | DS3 | 2,700 | 8 days (last 2026-08-28, email) Deal-635B8E | DS3 | 2,600 | 18 days (last 2026-08-18, email) Deal-6883F3 | DS1 | 2,400 | 16 days (last 2026-08-20, email+meeting) Deal-4A13AD | DS3 | 2,160 | 26 days (last 2026-08-10, email) Deal-F67D31 | DS2 | 1,800 | 8 days (last 2026-08-28, email) Deal-5FDCE4 | DS3 | 1,600 | 12 days (last 2026-08-24, email) Deal-BA571A | DS4 | 1,080 | 18 days (last 2026-08-18, email) FARID OSMAN — 2 stale deals Deal-8BA24E | DS1 | 2,880 | 8 days (last 2026-08-28, email) Deal-8FDCD2 | DS1 | 1 | 15 days (last 2026-08-21, email) ELENA SINCLAIR — 1 stale deal Deal-57FF13 | DS1 | 2,100 | no data (no row in engagements table; zero logged activities) PER-OWNER SUMMARY (count, total stale amount, arithmetic) - Bryce Harmon: 18 deals, 692,964 = 240,000+99,000+70,000+45,000+37,440+36,000+31,500+25,200+23,400+21,000+18,000+12,600+11,400+10,920+6,000+5,502+1+1 - Dana Mercer: 16 deals, 279,495 = 60,000+43,875+27,000+23,400+20,000+18,900+16,250+15,000+10,500+9,000+9,000+8,100+7,350+5,000+4,200+1,920 - Cole Ingram: 18 deals, 252,905.03 = 58,529.25+40,000+32,175+31,750+18,000+12,168+11,193+7,781.20+7,225.40+6,947.50+5,616+4,779.88+4,140+3,360+3,334.80+2,700+1,875+1,330 - Alex Franklin: 20 deals, 113,936 = 24,000+18,000+9,300+8,316+7,200+5,100+4,800+4,680+4,400+3,840+3,600+3,240+3,120+2,700+2,600+2,400+2,160+1,800+1,600+1,080 - Farid Osman: 2 deals, 2,881 = 2,880+1 - Elena Sinclair: 1 deal, 2,100 - Grand total: 75 stale deals, 1,344,281.03 = 692,964+279,495+252,905.03+113,936+2,881+2,100 DATA NOTES - Two open deals (Deal-3EED2C, Deal-57FF13) have no row in the engagements table — days since last contact cannot be computed; they are included as stale since no activity is logged at all. - Ten stale deals carry future-dated last_meeting values (post-2026-09-05, e.g. Deal-944310 shows last_meeting 2026-09-15). These are scheduled meetings that had not occurred as of the snapshot and were excluded from recency; last actual contact is what's shown above. - The deal-level last_contacted_field was ignored as instructed. Example of why it matters: Deal-944310's last_contacted_field reads 2026-09-02 (would look fresh), but the engagements table shows its last actual email was 2026-08-03 and its only other entry is a future-dated meeting — 33 days stale by engagement data.
Analysis complete. All numbers below are machine-computed from the three files as provided (snapshot 2026-09-05; 30-day activity window; DS2 window = t_ds2 from 2026-08-06 to 2026-09-05, inclusive). METHODOLOGY / ARITHMETIC - Activities per rep = sum of emails_30d, calls_30d, meetings_30d across the rep's deals in deals_open.csv, joined to engagements_by_deal_90d.csv on deal_id. inbound_emails_30d is 0 on every row, so no double-counting risk. - Activities per DS2 entry = total activities ÷ count of deals with t_ds2 within 30 days of 2026-09-05. - Total across reps: 687 emails + 68 calls + 130 meetings = 885 activities. PER-REP RESULTS Rep (owner_id) Emails Calls Mtgs Total Mix: email/call/mtg DS2 entries Act/DS2 Bryce Harmon (119337721) 162 0 43 205 79.0% / 0.0% / 21.0% 4 51.2 Alex Franklin (84342457) 307 36 41 384 79.9% / 9.4% / 10.7% 18 21.3 Dana Mercer (83155923) 84 18 11 113 74.3% / 15.9% / 9.7% 1 113.0 Cole Ingram 96 14 1 111 86.5% / 12.6% / 0.9% 2 55.5 (83155924) Farid Osman (716654662) 38 0 34 72 52.8% / 0.0% / 47.2% 1 72.0 Elena Sinclair (701163055) 0 0 0 0 n/a (no activity rows) 0 undefined Example arithmetic: Alex Franklin = 307+36+41 = 384 activities; 384 ÷ 18 DS2 entries = 21.3. Bryce Harmon = 205 ÷ 4 = 51.25. EFFICIENCY RANKING (lowest activities per DS2 entry = most efficient) 1. Alex Franklin — 21.3 (384 / 18) 2. Bryce Harmon — 51.2 (205 / 4) 3. Cole Ingram — 55.5 (111 / 2) 4. Farid Osman — 72.0 (72 / 1) 5. Dana Mercer — 113.0 (113 / 1) — Elena Sinclair: undefined (0 DS2 entries, 0 recorded activities) DS2-entry deals counted, by rep: - Bryce Harmon: Deal-25F752, Deal-D73B89, Deal-CA7DC0, Deal-1CCE5C - Alex Franklin: Deal-403845, Deal-1FC049, Deal-3EED2C, Deal-7FA0C3, Deal-E531A6, Deal-5296C9, Deal-36C33F, Deal-EE195F, Deal-F436DA, Deal-317E6F, Deal-D1E6C2, Deal-D9A72E, Deal-CA5E44, Deal-4F775F, Deal-898FC5, Deal-46988D, Deal-E73427, Deal-92D97D - Dana Mercer: Deal-57887A - Cole Ingram: Deal-42326B, Deal-1BA595 - Farid Osman: Deal-499BF6 NAMED ANSWERS - Most efficient rep: Alex Franklin (21.3 activities per DS2 entry). - Highest-volume rep: Alex Franklin (384 activities in 30 days). - They do not differ — Alex Franklin is both. DATA QUALITY / LIMITATIONS (explicit) 1. Two open deals have no row in the engagements table, so their activities are missing from totals: Deal-3EED2C (Alex Franklin) and Deal-57FF13 (Elena Sinclair). Deal-3EED2C is still counted as a DS2 entry (t_ds2 2026-09-03), so Alex's ratio is slightly understated as a result. 2. Elena Sinclair's only deal (Deal-57FF13) is also a malformed row (trailing fields shifted: n_contacts empty, "3" landing in the source column), and she has no engagement data — her zeros are "missing," not confirmed inactivity. 3. Window boundary sensitivity: three deals have t_ds2 exactly 30 days before the snapshot (2026-08-06): Deal-1CCE5C (Bryce), Deal-EE195F and Deal-D9A72E (both Alex). Under an exclusive window, Alex's ratio would be 384/15 = 25.6 and Bryce's 205/3 = 68.3 — ranking order unchanged. Also just outside the window, Alex has Deal-13FEBD, Deal-55164C, and Deal-D9A12F at 31–33 days back; small shifts in the window would move his DS2 count noticeably. 4. Archived owners Gavin Porter and Hugo Lindqvist have no open deals and no engagement data; they are excluded. 5. No causal attribution is made — these are observed correlations in a 30-day window only.
QTD SCORECARD — Alex Franklin — as of 2026-09-05 (Q3: 2026-07-01 to 2026-09-30) 1. BOOKINGS VS QUOTA QTD closed-won: $150,000 (8 deals) — Deal-A1C3E5 $40,000 (07-15), Deal-F2C7D8 $20,000 (07-24), Deal-B7D2F4 $35,000 (07-31), Deal-C9E1A6 $21,000 (08-12), Deal-A8B4D6 $12,000 (08-19), Deal-D4B8C2 $11,000 (08-21), Deal-E6F3A9 $6,500 (09-02), Deal-C5D9E2 $4,500 (09-03) Quota: $200,000. Attainment = 150,000 / 200,000 = 75.0%. Gap: $50,000. Excluded per instruction: Deal-B3E6F1, $24,000, won 2026-06-20 (pre-quarter). 2. NEW VS EXPANSION SPLIT New: $113,500 (5 deals: Deal-A1C3E5, Deal-B7D2F4, Deal-C9E1A6, Deal-D4B8C2, Deal-E6F3A9) = 75.7% of bookings Expansion: $36,500 (3 deals: Deal-F2C7D8, Deal-A8B4D6, Deal-C5D9E2) = 24.3% Check: 113,500 + 36,500 = 150,000 3. ACTIVE PIPELINE BY STAGE (125 open deals, $1,260,390) DS1: 20 deals / $284,621 DS2: 28 deals / $353,760 DS3: 67 deals / $552,705 DS4: 5 deals / $23,574 DS5: 5 deals / $45,730 Data note: Deal-7A2454 has close date 2026-09-04 (before snapshot) but is still open — past due. Only $109,363 (22 deals) closes by 9/30; $1,150,000+ sits in October–January closes. 4. ROLLING 90-DAY DS2-TO-WON RATE (window 2026-06-07 to 2026-09-05) 111 deals entered DS2 in window: 8 won, 27 lost, 76 still open. Rate on decided deals: 8 / (8 + 27) = 8/35 = 22.9%. (20 DS1 deals have blank entered_ds2 and are excluded from the window; no other deals lack the field.) 5. WINS AND LOSSES Wins QTD: 8. Losses QTD: 27 deals, $329,272. Top loss reason: "Lost- Timing (1 year or more)" — 13 of 27 losses (48.1%), $184,681. Runners-up: MIA 5, Competitor 5, Lost DM 2, Feature Request 1, Lost- Does not fit ICP (write in notes) 1. 6. ACTIVITY VOLUME, LAST 30 DAYS (per-deal rollup, all 161 deals) Emails: 807 | Calls: 112 | Meetings: 128 | Notes: 50 By segment — open (125): 599 emails, 54 calls, 90 meetings; won QTD (8): 89/31/23; lost QTD (27): 109/25/13 Per-deal averages: won deals 11.1 emails, 3.9 calls, 2.9 meetings vs open deals 4.8 emails, 0.43 calls, 0.72 meetings. COACHING OBSERVATIONS 1. Quota is at risk on the math. $50,000 gap vs $109,363 of pipeline closing by 9/30 requires 45.7% conversion ($50,000/$109,363) — double his 22.9% trailing DS2-to-won rate. At the trailing rate that cohort yields ~$25,000 and a ~$175,000 (~87.5%) finish. Action: pull forward his strongest October DS2/DS3 deals (e.g., the $36,000 Deal-50D386 or $23,800 Deal-D0D6B5) and add fresh DS1 → DS2 motion now. 2. Half his losses are timing, not competition. "Lost- Timing (1 year or more)" is 13 of 27 losses and $184,681 of $329,272 lost — versus only 5 Competitor losses. These are real-budget-later deals being forced into this quarter's forecast; add another 7 MIA/Lost DM losses (26% of losses) and 74% of losses are disengagement/timing, not product defeats. Action: build a dated re-engagement plan for the timing-loss cohort instead of counting them as this-quarter losses. 3. The open book is being worked by email only. Won deals closed with an average of 3.9 calls and 2.9 meetings each in the last 30 days; his 125 open deals are averaging 0.43 calls and 0.72 meetings — 599 of 807 emails sit on open deals. His own win pattern shows live conversations close deals. Action: schedule calls/meetings on the 22 September-close deals first; email volume alone has not been converting (22.9% DS2-to-won).
Analysis complete. Two data gaps up front: **neither file contains an amount or stage field** — both are reported as n/a for every deal below rather than invented. "Most valuable persona to add" is therefore ranked by buying-role priority (economic buyer > champion > HR admin > IT security > finance), not stage. **Window math:** today = 2026-09-08; 60-day cutoff = 2026-07-10 (Sep 8 − 60 days). Active = engaged on/after 2026-07-10 AND is_former=false. Former contacts are excluded even when engagement is recent. One-persona test applied to active contacts. 14 deals total: 11 flagged, 3 pass. ===================================================== A. SINGLE-THREADED (fewer than 2 active contacts) — 5 deals ===================================================== 1) Deal-36C33F (C-077A0E) amount: n/a | stage: n/a (not in data) active: 1 — CT-4FE556, IT Security Lead, IT security, 2026-08-15 (24d ago) excluded: CT-405B45 (champion, 2026-08-10, 29d — former); CT-86B22F (economic buyer, 2026-07-30, 40d — former; in-window but former overrides) present: IT security | missing: economic buyer, champion, HR admin, finance most valuable to add: economic buyer — both champion and EB just went former; the buy-side is gone on-file fit: CT-1DB73E, Chief People Officer, economic buyer — yes, on file at C-077A0E 2) Deal-92D97D (C-E23238) amount: n/a | stage: n/a (not in data) active: 1 — CT-01F5B4, HRIS Manager, HR admin, 2026-08-28 (11d ago) excluded: CT-A902AE (champion, 2026-06-01, 99d — outside window) present: HR admin | missing: economic buyer, champion, IT security, finance most valuable to add: economic buyer — only an admin thread remains; champion lapsed 99 days ago on-file fit: none on file (no unengaged contacts listed for C-E23238) 3) Deal-EC3025 (C-FDD0C7) amount: n/a | stage: n/a (not in data) active: 1 — CT-047C54, Head of Employee Experience, champion, 2026-09-02 (6d ago) excluded: CT-F2C1AE (economic buyer, 2026-08-15, 24d — in-window but former) present: champion | missing: economic buyer, IT security, HR admin, finance most valuable to add: economic buyer — prior EB (CT-F2C1AE) is marked former on-file fit: CT-6827DB, Chief People Officer, economic buyer — yes, on file at C-FDD0C7 4) Deal-F9A08A (C-0D15DF) amount: n/a | stage: n/a (not in data) active: 1 — CT-931B10, Head of Employee Experience, champion, 2026-09-03 (5d ago) excluded: CT-913581 (economic buyer, 2026-06-20, 80d — outside window) present: champion | missing: economic buyer, IT security, HR admin, finance most valuable to add: economic buyer — CT-913581 went quiet 80 days ago on-file fit: CT-697541, Chief People Officer, economic buyer — yes, on file at C-0D15DF 5) Deal-FCBE5B (C-737030) amount: n/a | stage: n/a (not in data) active: 1 — CT-4A5317, People Ops Manager, champion, 2026-08-29 (10d ago) present: champion | missing: economic buyer, IT security, HR admin, finance most valuable to add: economic buyer on-file fit: none on file (no unengaged contacts listed for C-737030) ===================================================== B. ALL ACTIVE CONTACTS IN ONE PERSONA (>=3 active) — 2 deals ===================================================== 6) Deal-C6D97A (C-5A8FC2) amount: n/a | stage: n/a (not in data) active: 3 — all champions: CT-223DDC (2026-08-31, 8d), CT-B03555 (2026-08-20, 19d), CT-4E8A2B (2026-08-05, 34d) present: champion | missing: economic buyer, IT security, HR admin, finance most valuable to add: economic buyer — three champions but no buyer on-file fit: none on file (no unengaged contacts listed for C-5A8FC2) 7) Deal-D0D6B5 (C-32918E) amount: n/a | stage: n/a (not in data) active: 3 — all champions: CT-87CED4 (2026-09-02, 6d), CT-DE6D7C (2026-08-19, 20d), CT-FD70B2 (2026-08-07, 32d) present: champion | missing: economic buyer, IT security, HR admin, finance most valuable to add: economic buyer — same shape as Deal-C6D97A on-file fit: CT-1FA4DB, Chief People Officer, economic buyer — yes, on file at C-32918E ===================================================== C. UNDER-THREADED (2 active, <3) — 4 deals ===================================================== 8) Deal-50D386 (C-EB10E4) amount: n/a | stage: n/a (not in data) active: 2 — CT-AA41B2, champion, 2026-09-01 (7d); CT-B9C35B, HR admin, 2026-08-25 (14d) present: champion, HR admin | missing: economic buyer, IT security, finance most valuable to add: economic buyer on-file fit: CT-A1C4B3, Chief People Officer, economic buyer — yes, on file at C-EB10E4 9) Deal-5408B0 (C-2AE3AA) amount: n/a | stage: n/a (not in data) active: 2 — CT-D33AE4, champion, 2026-09-01 (7d); CT-8742FD, HR admin, 2026-08-18 (21d) present: champion, HR admin | missing: economic buyer, IT security, finance most valuable to add: economic buyer on-file fit: CT-07FA76, Chief People Officer, economic buyer — yes, on file at C-2AE3AA 10) Deal-5BFE3B (C-535D36) — also one-persona amount: n/a | stage: n/a (not in data) active: 2 — both champions: CT-57123B (2026-08-31, 8d), CT-5CE757 (2026-08-12, 27d) present: champion | missing: economic buyer, IT security, HR admin, finance most valuable to add: economic buyer on-file fit: none on file (no unengaged contacts listed for C-535D36) 11) Deal-885F45 (C-5E8EFB) amount: n/a | stage: n/a (not in data) active: 2 — CT-51C81E, VP People, economic buyer, 2026-08-26 (13d); CT-D9A0E8, People Ops Manager, champion, 2026-08-11 (28d) present: economic buyer, champion | missing: IT security, HR admin, finance most valuable to add: HR admin (implementation/day-to-day owner), with IT security close behind (vendor security-review gate) — stage data unavailable to break the tie on-file fit: for HR admin — none on file. Nearest on-file fit: CT-B3F25D, IT Security Lead, IT security, on file at C-5E8EFB ===================================================== NOT FLAGGED (3 deals) — for completeness ===================================================== - Deal-4B0BEB (C-1BDFE0): 4 active, 4 personas (missing IT security only) - Deal-84DBA6 (C-BE9BE0): 3 active, 3 personas (missing HR admin, finance) - Deal-D348E1 (C-804F29): 5 active, all 5 personas Note: the two unengaged contacts not consumed above (CT-2A0169, Controller, finance at C-BE9BE0; CT-8E04F5, HRIS Manager, HR admin at C-804F29) both belong to passing deals — CT-2A0169 fills Deal-84DBA6's finance gap if you want to strengthen it; Deal-D348E1 needs nothing. Summary: 10 of 11 flagged deals are missing the economic buyer among active contacts; 7 of those have a Chief People Officer already on file and unengaged at the same company — the fastest re-thread moves available. Deals 92D97D, FCBE5B, C6D97A, and 5BFE3B have no on-file fit and require net-new contact discovery.
Analysis of 10 calls (TT-001 through TT-010, one call per deal, 10 distinct deals, 55 transcript lines). All figures below are computed only from the provided lines. 1. WHAT HE LEADS WITH (first five minutes) 8 of 10 calls open with the same customer proof-point at minute 0: "Quick one to kick off: a 400-person retailer we work with cut regretted turnover 18% in two quarters after automating milestone awards, and I wanted to walk you through exactly how they did it." (Deal-D348E1, Deal-5408B0, Deal-547B2B, Deal-C61CF7, Deal-60C2C2, Deal-EDC141, Deal-D9A12F, Deal-84DBA6) The two exceptions, per the transcripts: on Deal-403845 he opens by proposing an agenda (security review first, then pricing), and on Deal-1E2498 he opens with straight pricing, saying the prospect had asked for it last time. Within the first five minutes he also gets into competitive positioning on three calls: Deal-C61CF7 (minute 2, rep-initiated), Deal-547B2B (minutes 4-5), Deal-EDC141 (minutes 4-5). 2. THE THREE MOST COMMON OBJECTIONS AND HOW HE HANDLES THEM By frequency (4 + 3 + 3 = 10 objection instances — one of the three appears on every call): a) Budget locked until next fiscal year — 4 calls (Deal-D348E1, Deal-547B2B, Deal-60C2C2, Deal-84DBA6). Response, word-for-word identical all 4 times: "Totally fair. Most teams fund this out of turnover savings — that retailer saved about $210k in avoided backfills, which is how their finance team signed off." He reframes to savings-funded ROI rather than disputing the constraint. b) Revisit next quarter / open enrollment crunch — 3 calls (Deal-5408B0, Deal-C61CF7, Deal-D9A12F). Response, identical all 3 times: "Makes sense. What if we scope a 90-day pilot with one department so you have internal data before next quarter's planning?" He concedes the timing and offers a scoped pilot to bridge to the planning cycle. c) Status quo — spreadsheet and quarterly gift cards — 3 calls (Deal-403845, Deal-EDC141, Deal-1E2498). Response, identical all 3 times: "Spreadsheets work until they scale — the difference is automation: milestones fire without HR lifting a finger, and you get analytics on who is being recognized." He concedes the current process works, then differentiates on automation and analytics. Handling pattern: for each of the three objections he uses exactly one response, repeated verbatim on every occurrence (1 distinct response per 4, per 3, and per 3). No tailoring across deals. 3. CONCRETE NEXT-STEP RATE He asks for a next step on 7 of 10 calls with the same line: "Should we lock the next step — a working session with your team this week?" (Deal-D348E1, Deal-5408B0, Deal-547B2B, Deal-C61CF7, Deal-60C2C2, Deal-D9A12F, Deal-1E2498). The prospect agrees on all 7 of those calls, on each occasion accepting the Thursday 2pm working session and offering to bring the HRIS manager (the acceptance line is identical across all 7). Agreement rate: 7/10 = 70% overall. Conditional on asking: 7/7 = 100%. On the 3 no-agreement calls (Deal-403845, Deal-EDC141, Deal-84DBA6) he never asks — each ends after a deferral (budget committee on Deal-403845 and Deal-84DBA6; no urgency on Deal-EDC141) with a concession and no date or action. 4. COMPETITORS RAISED BY PROSPECTS Two competitors were raised by prospects across the 10 calls: - Awardco — 1 call, Deal-547B2B (TT-003), minute 4: "We're also in late talks with Awardco — their rewards catalog looks bigger than yours." He counters at minute 5 on automation and analytics. - Kudos — 1 call, Deal-EDC141 (TT-007), minute 4: "How are you different from Kudos? Our CEO used them at her last company." He counters at minute 5 on automated milestones plus retention-tied analytics. Note: Workhuman appears once in the data but was raised by the rep, not a prospect — on Deal-C61CF7 (TT-005), minute 2: "And unlike Workhuman, our pricing includes the full rewards catalog with no extra margin." No prospect mentions Workhuman, so it does not count as prospect-raised. 5. TWO COACHING NOTES Note 1 — Ask on the stalled calls. His close ask is not the problem: it converts 7/7 when made. The 70% overall rate is entirely a function of not asking. On Deal-403845 and Deal-84DBA6 he folds at the committee deferral and on Deal-EDC141 at the no-urgency line, leaving every one of those calls with zero commitment. Coach him to attach a micro-step to every deferral (e.g., a dated follow-up after the committee meets) — the data shows prospects accept a concrete step every single time he proposes one. Note 2 — Retire the verbatim script; stop naming competitors unprompted. The same opener on 8/10 calls and a word-for-word identical rebuttal for each objection type means prospects are hearing a recorded pitch, not deal-specific thinking. He also introduced Workhuman himself on Deal-C61CF7 — an unsolicited negative pricing comparison against a competitor the prospect never raised — and his minute-5 Awardco/Kudos answers lean on the same generic automation-plus-analytics claim with nothing tied to the prospect's specifics (e.g., the CEO's Kudos experience on Deal-EDC141 went unaddressed). Coach him to adapt one proof point per objection to the deal at hand and to only engage competitors the prospect names.
Q3 2026 forecast (quarter 2026-07-01 to 2026-09-30), from 86 open deals pulled 2026-09-05. 54 deals close inside the quarter; 32 fall outside (all in October). COMMIT total (in-quarter, 7 deals): $44,729 Deal-547B2B 11,200 + Deal-B7EBD1 9,000 + Deal-403845 9,000 + Deal-A2B47C 6,360 + Deal-2465CE 5,400 + Deal-A5E80A 2,520 + Deal-499BF6 1,249 = 44,729 BEST_CASE total (in-quarter, 24 deals): $203,565 38,935 + 24,000 + 19,656 + 16,250 + 11,116 + 10,800 + 10,500 + 9,890 + 9,720 + 9,000 + 7,200 + 3,840 + 3,780 + 3,600 + 3,240 + 3,150 + 3,120 + 3,060 + 2,916 + 2,760 + 2,484 + 2,100 + 1,920 + 528 = 203,565 Weighted forecast = 100% x COMMIT + 35% x BEST_CASE = 44,729 + 0.35 x 203,565 = 44,729 + 71,247.75 = $115,976.75 Counts inside the quarter: COMMIT: 7 BEST_CASE: 24 PIPELINE: 23 (counts zero toward forecast; amounts to $201,637.40 unweighted) Total in-quarter: 7 + 24 + 23 = 54 Excluded for close date outside the quarter: 32 deals totaling $227,575 (all close 2026-10-01 to 2026-10-15; 22 PIPELINE, 9 BEST_CASE totaling $28,240, and 1 COMMIT — Deal-D348E1 at $13,770 closing 2026-10-15 — which contributes nothing to Q3 despite its category). Top 5 BEST_CASE deals by amount inside the quarter: 1. Deal-2D7423 — $38,935 (DS3, 2026-09-30) 2. Deal-25F752 — $24,000 (DS4, 2026-09-25) 3. Deal-E53952 — $19,656 (DS4, 2026-09-30) 4. Deal-5EED42 — $16,250 (DS3, 2026-09-30) 5. Deal-FA32A0 — $11,116 (DS3, 2026-09-25) Top-5 sum: 38,935 + 24,000 + 19,656 + 16,250 + 11,116 = $109,957, i.e. 54.0% of the BEST_CASE total — the weighted forecast is highly concentrated in five deals, three of which close on quarter-end day. ## Data quality The owner field is blank on 85 of 86 deals (only Deal-C9C286 has an owner), so no rep-level inspection or scrubbing of the forecast is possible. Forecast category contradicts stage: Deal-A5E80A is COMMIT while still in DS1 and Deal-499BF6 is COMMIT in DS2, while Deal-C61CF7 sits in DS5 (contract) as only BEST_CASE — the 100% COMMIT weighting rests partly on deals that have not passed discovery. Close dates are heavily bunched on quarter-end (17 deals on 2026-09-30, 10 on 2026-09-25, and 14 pushed to 2026-10-15), signaling default-date entry and high slippage risk rather than true commit timing. Four open deals already have close dates before the 2026-09-05 extract date (Deal-31AD2C 2026-09-04, Deal-333EBB 2026-08-28, Deal-57FF13 2026-09-02, Deal-7A2454 2026-09-04), and not a single deal closes in July or August despite the stated July 1 filter start, indicating stale or incomplete close-date data.
**Cohort tested:** 220 companies in the extract (2023-01 through 2023-07 signups). Retention = current_status 'active'; 'cancelled' and 'non_renewing' counted as not retained (3 non_renewing companies total). All arithmetic shown below; every cell is exhaustive and mutually exclusive. **2x2 RESULTS** | Cell | n | Retained (active) | Retention rate | |---|---|---|---| | Both (m1_users>=5 AND m1_redemptions>=1) | 47 | 31 | 66.0% (31/47) | | Givers-only (m1_users>=5, m1_redemptions=0) | 49 | 23 | 46.9% (23/49) | | Redemption-only (m1_users<5, m1_redemptions>=1) | 29 | 9 | 31.0% (9/29) | | Neither | 95 | 38 | 40.0% (38/95) | | Total | 220 | 101 | 45.9% (101/220) | Checks: 47+49+29+95 = 220; 31+23+9+38 = 101. **Exclusions:** Zero companies excluded from the denominator. All 220 rows have populated m1_users and m1_redemptions values, and per the extract's stated premise every company is 25+ months old, so all are evaluable at 24 months. No company is missing a status. **Largest single-signal lift: the 5+ givers signal (m1_users >= 5).** - Marginal (signal present vs absent, ignoring the other signal): givers 54/96 = 56.2% vs 47/124 = 37.9% → +18.3pp. Redemptions 40/76 = 52.6% vs 61/144 = 42.4% → +10.3pp. - Isolated (single-signal cell vs neither): givers-only 46.9% vs neither 40.0% → +6.9pp; redemption-only 31.0% vs neither 40.0% → −9.0pp. Redemption alone shows no lift in this extract — its apparent marginal lift comes entirely from riding along with the givers signal (redemption-only companies are mostly small m1_users counts of 1-4). **What this does prove (within this extract):** The hypothesized pattern holds directionally for the "both" cell: 66.0% vs 40.0% for neither, a +26.0pp gap, which is statistically distinguishable from noise (two-proportion z = 2.91, p ≈ 0.004; also vs redemption-only, p ≈ 0.003). Ordering is both > givers-only > neither, with redemption-only the anomaly below the baseline. **What it does not prove:** 1. Causation. This is observational data with no randomization — companies reaching 5+ givers in month 1 may be better-fit, better-onboarded, or better-sponsored accounts that would have retained anyway. 2. It does not isolate activation from a severe tier confound visible in the data itself: retention is nearly collinear with product_tier. Actives are 98 tier_three + 3 tier_alpha, zero tier_two; all 97 tier_two companies are non-active. The cells have different tier mixes (both: 33/47 tier_three = 70%; givers-only: 23/49 = 47%; redemption-only: 18/29 = 62%; neither: 46/95 = 48%), so part of the "both" premium is just a heavier tier_three mix. 3. The "givers + redemption" interaction is not firmly established: both vs givers-only is +19.1pp but only marginally significant at this sample size (z = 1.88, p = 0.06). 4. Small-cell caution: redemption-only is n=29 with 9 actives — wide uncertainty on that 31.0%. 5. current_status is a point-in-time snapshot used as a proxy for 24-month retention; it is not a measured 24-month event, and no time-to-churn, revenue-weighted, or cohort-by-vintage breakdown is possible from this extract alone. Bottom line: the data is consistent with the activation hypothesis — the both-signals cohort retains best (66.0% vs 40.0%) — and the givers signal is the dominant single driver, but tier composition and selection effects mean this is correlation on one 220-company extract, not evidence that driving either signal causes retention.
ARR RECONCILIATION — CRM (company_arr.csv) vs Billing (chargebee_subscriptions.csv), as of 2026-09-05
Scope: 39 subscriptions, 39 CRM records, 38 shared company aliases. Billing ARR = MRR x 12 for ACTIVE subscriptions only.
TOTALS
- Billing ARR (active): 50,394.94 MRR x 12 = $604,739.28 (37 active subs; 2 cancelled subs excluded)
- CRM ARR total: $603,581.76 (39 companies)
- Variance (CRM - Billing): 603,581.76 - 604,739.28 = -$1,157.52 (billing overstates CRM by $1,157.52)
BUCKET DECOMPOSITION (sums exactly to the variance)
- Status mismatch: +$13,158.48
C-0C8323BF (SUB-000E, cancelled, MRR 408.77): 408.77 x 12 = 4,905.24 still in CRM
C-0DC4FB8C (SUB-000F, cancelled, MRR 687.77): 687.77 x 12 = 8,253.24 still in CRM
4,905.24 + 8,253.24 = 13,158.48
- Rounding: +$36.00
C-0D66DF9E (SUB-0005): CRM 23,200.00 vs 1,932.00 x 12 = 23,184.00, delta +16.00 (CRM implies MRR 23,200.00 / 12 = 1,933.33)
C-14D70CE0 (SUB-0008): CRM 18,200.00 vs 1,515.00 x 12 = 18,180.00, delta +20.00 (CRM implies MRR 18,200.00 / 12 = 1,516.67)
- Missing records: -$11,952.00
C-0D5BBE3A: in CRM only, $16,497.24 ARR with no subscription record (implied MRR 16,497.24 / 12 = 1,374.77)
C-21629AA4: in billing only, SUB-0004 active at 2,370.77 x 12 = 28,449.24 with no CRM record (28,449.24 counted in billing, $0 in CRM)
Net: 16,497.24 - 28,449.24 = -11,952.00
- Other (unexplained status-ARR gap): -$2,400.00
C-0F7269D7 (SUB-0006, active): CRM 24,396.00 vs 2,233.00 x 12 = 26,796.00, delta -2,400.00 (exactly $200/mo; CRM implies MRR 2,033.00)
Check: 13,158.48 + 36.00 - 11,952.00 - 2,400.00 = -1,157.52 = variance. Confirmed.
The other 33 matched companies reconcile to zero.
MISMATCHED ACCOUNTS WITH SUGGESTED OWNER
Owner field does not exist in the data, so these are suggested by function (not actual names):
- C-0C8323BF (SUB-000E, -4,905.24): Billing Ops — confirm cancellation effective date; if valid, zero out CRM ARR.
- C-0DC4FB8C (SUB-000F, +8,253.24): Billing Ops — same; cancelled sub, CRM ARR stale.
- C-0D5BBE3A (+16,497.24): Billing/Deal Desk — active CRM ARR with no subscription; verify whether a subscription was never provisioned or the record is a non-billed legacy/manual account.
- C-21629AA4 (SUB-0004, -28,449.24): CRM Data Hygiene — active billing subscription with no CRM company record; create the company and backfill ARR.
- C-0F7269D7 (SUB-0006, -2,400.00): RevOps — exact $200/mo gap suggests a recent downsell in billing not synced to CRM (22,233.00 - 2,033.00 implied = 200.00/mo).
- C-0D66DF9E (SUB-0005, +16.00) and C-14D70CE0 (SUB-0008, +20.00): RevOps — sub-$50 rounding; align CRM to MRR x 12 or note the convention.
BUSINESS RULE VIOLATIONS (term != 12 months with cf_agreement_end_date empty)
- SUB-0002, C-1794A52C — 24-month term, no end date
- SUB-0019, C-22170CA1 — 36-month term, no end date
Compliant non-12-month subs (for contrast, not violations): SUB-000C C-0DB48281 (24 mo, end 2027-11-30) and SUB-001A C-0FC4DBB8 (36 mo, end 2027-11-30).
Notes and data limitations: no owner, region, or account-executive fields were provided, so ownership suggestions are role-based. Each company has at most one subscription (no rollup ambiguity). I treated cancelled subscriptions as $0 billing ARR per the "Billing ARR is MRR x 12" definition applied to active subs; if your house rule annualizes cancelled subs too, the totals would be Billing $617,897.76 vs CRM $603,581.76, variance -$14,315.52.
All figures are unweighted means across the 30 accounts (10 per size_band; all plan_tier = tier_three, so tier cannot differentiate). | KVM | 2026-07 | 2026-08 | Abs Δ | Rel Δ | Direction | |---|---|---|---|---|---| | Giving rate | 0.6023 | 0.6027 | +0.0004 | +0.07% | ▲ | | Redemptions per user | 1.7300 | 1.7302 | +0.0002 | +0.01% | ▲ | | 1:1 meetings engagement | 0.4469 | 0.4472 | +0.0003 | +0.06% | ▲ | | Pulse check engagement | 0.6006 | 0.5086 | −0.0920 | −15.31% | ▼ | Largest relative move: pulse check engagement, −15.31% ((0.5086 − 0.6006) / 0.6006). Driver: the enterprise size_band. Every one of the 10 enterprise accounts fell from ~0.53–0.57 to ~0.26–0.29 (band mean 0.5500 → 0.2743, −0.2757, −50.13%), e.g. C-0B2895EF 0.5619 → 0.2864 and C-0B2213A9 0.5548 → 0.2801. Mid_market (+0.21%) and smb (−0.22%) were flat; excluding enterprise, portfolio pulse is −0.02%. The data does not support a plan_tier driver (all rows are tier_three), and it offers no explanatory field for the enterprise drop.
Redemption section computed from redemptions_ytd.csv (378 rows; verified no duplicate redemption_ids, no rows dated after 2026-08). All data falls within 2026-01 through 2026-08. Last completed month: 2026-08 (August). All figures below cover 2026-01-01 through 2026-08-31. REDEMPTIONS — YTD THROUGH 2026-08 Redemption count: 378 Spend: $27,846.00 Unique redeemers: 235 Redemptions per redeemer: 378 ÷ 235 = 1.6085 ≈ 1.61 Provider mix (% of spend, sums to 100): - custom: $10,873.00 ÷ $27,846.00 = 39.05% - Tremendous: $8,505.00 ÷ $27,846.00 = 30.54% - Snappy: $5,238.00 ÷ $27,846.00 = 18.81% - TangoCard: $3,230.00 ÷ $27,846.00 = 11.60% Total: 100.00% ($10,873 + $8,505 + $5,238 + $3,230 = $27,846) Provider counts for reference: Tremendous 192, TangoCard 90, Snappy 59, custom 37 (192+90+59+37 = 378). Top 5 countries by redemptions: 1. US: 244 2. CA: 24 3. AU: 21 4. GB: 17 (tie) 5. NL: 17 (tie) GB and NL are tied at 17 each; they jointly occupy ranks 4–5 (next is SG with 12). Check: 244+24+21+17+17 = 323 of 378 redemptions (85.4%).
## Churn-Save Eligibility Analysis (snapshot 2026-09-05) **Eligibility rules applied (all three must pass):** R1: health_score < 60 · R2: churn_save_eligible_amount > 0 · R3: renewal_date within 120 days of 2026-09-05 (i.e., on or before 2027-01-03). **8 of 30 accounts qualify. Total at stake: $224,601.00** (= 49,707 + 41,235 + 35,748 + 32,621 + 25,365 + 17,602 + 16,829 + 5,494). Note: the rules file defines *qualification only* — it does not define the three plays. Play assignments below are my analysis from the signal fields in the data (usage_trend_3m, seats_used vs. seats, champion_active), and I state the justifying signal for each. ### Qualifiers, by play **Usage revival (3 accounts, $59,796.00)** - C-0B827671 — $25,365.00 — usage_trend_3m = declining - C-0D3278C7 — $17,602.00 — usage_trend_3m = declining; plus low adoption: 126 of 380 seats used (33.2%) - C-0CA21961 — $16,829.00 — low adoption: 84 of 325 seats used (25.8%), usage flat **Executive touch (3 accounts, $87,822.00)** - C-0F6C0F34 — $49,707.00 — champion_active = false (no internal advocate; usage itself is growing, 308/395 = 78.0%) - C-0CEF69FD — $32,621.00 — champion_active = false - C-0B0F1BAB — $5,494.00 — champion_active = false; also lowest health of qualifiers (38) **Commercial concession (2 accounts, $76,983.00)** - C-0E9C27D1 — $41,235.00 — champion active (85.4% seat use) but usage flat and health 39; engagement is healthy, goodwill is not — a price/terms lever fits; largest single at-risk amount - C-0B360C78 — $35,748.00 — champion active, usage growing (75.2% seat use) despite health 57 — the account works but something (likely commercial friction) is dragging the score (Play-group subtotals: 87,822 + 76,983 + 59,796 = 224,601.00 ✓. Combined ARR of the 8 qualifiers, for context: $454,380.00.) ### At-risk (health < 60) but NOT qualifying — 7 accounts Fail R2 (eligible amount = $0.00): - C-0BC71BDD (health 55, renews 2026-10-27) - C-0BE96399 (health 54, renews 2026-10-29) - C-10A56B0F (health 54, renews 2026-12-12) - C-0F6694C3 (health 43, renews 2027-03-21 — also fails R3) - C-0FCCD2DF (health 43, renews 2027-04-23 — also fails R3) Fail R3 only (renewal > 120 days out): - C-0F876796 — health 47, $19,958.00 at stake, renews 2027-02-06 (154 days out) - C-0BA71F12 — health 52, $6,824.00 at stake, renews 2027-04-11 (218 days out) These 7 are not offer-eligible today; the data does not say why their eligible amount is $0 (e.g., contract type or prior concession), only that it is. ### Not at risk The remaining 15 accounts (health ≥ 60) fail R1 and were not evaluated further — they carry $0 eligible amounts across the board but no churn-save trigger. ### Data caveats - The dataset provides no field explaining *why* an amount is churn-save eligible, and no definition of the three plays; play mapping is inferred from the signals present, not from a documented rule. - $19,958.00 + $6,824.00 = $26,782.00 sits in at-risk accounts that fail only the renewal-window rule — worth re-checking as their renewals approach the 120-day line.
EXPANSION KIT — C-0DDFC9A7
1) SEAT COVERAGE (licensed over headcount)
150 licensed seats / 400 headcount = 0.375 → 37.5% of employees are licensed. 250 employees are unlicensed.
2) USAGE HEALTH (latest data: Aug 2026; no later months provided)
- MAU climbed every single month, Mar→Aug 2026: 88 → 95 → 102 → 110 → 118 → 126 (+38, or 126−88)/88 = 43.2% growth; consistent +7–8 users/month.
- Utilization is 126/150 = 84% of licensed seats and, at the average +7.6/month pace (38/5), the remaining 24 seats are used up in 24/7.6 ≈ 3.2 months — i.e., a projected ceiling around November 2026 (projection, not given data).
3) HEADROOM AT CURRENT PER-SEAT RATE
Per-seat rate (derived): $9,000.00 ARR / 150 seats = $60.00/seat/yr.
- Within current license: 150 − 126 = 24 unused seats = $1,440 of ARR (24 × $60) already paid for.
- Expansion to full headcount: 400 − 150 = 250 seats × $60 = $15,000 ARR uplift → $24,000 total ARR (400 × $60).
4) WHO REPLIED — CAN THEY BUY?
Maria S., People Operations Coordinator, replied 2026-09-02. No — she cannot buy; she states purchasing/budget sits with Dana R., and her coordinator title corroborates. She is a warm champion ("team genuinely loves Bonusly") and offered an intro.
5) RIGHT BUYER FROM OUR CONTACTS
Dana R., VP People — named by Maria as owner of budget and seat expansion, and reportedly already "asking about our usage numbers" (per Maria's reply). Last engaged 2026-05-18, so she's gone quiet — the intro via Maria plus a usage summary is the natural route. Sam K. (Office Manager, last engaged 2025-11-03) shows no purchasing authority in the data; not the buyer.
6) REPLY EMAIL (86 words)
Subject: RE: Growing your team's recognition program
Hi Maria,
Thank you — glad to hear the team's enjoying the program, and thanks for pointing me to Dana.
One usage number she may find useful: monthly active users grew from 88 in March to 126 in August — 84% of your 150 licensed seats are now active monthly.
Since she's been asking about usage numbers, I'm happy to send a short summary you can forward to her, or if easier, I'd welcome a quick introduction whenever convenient. Either works — no rush on timing.
Thanks again,
Cole
Data notes: per-seat price is derived ($9,000/150), not separately provided; usage data ends Aug 2026; contact records contain no email addresses or purchasing authority beyond titles and Maria's statement.
ONBOARDING STATUS — C-0D284E42 Signed up 2026-08-11; usage data covers 2026-08-11 through 2026-09-04 (25 days). COMPLETE (each backed by a data field) - Slack integration connected — integration_slack = 2026-08-12 (1 day after signup) - Allowance set — allowance_set = 2026-08-13 - Admins added — admins_added = 2 - First recognition given — first_recognition_at = 2026-08-15 14:22 NOT COMPLETE - HRIS integration — integration_hris field is empty; no date recorded, so not connected per the data - First redemption — first_redemption_at field is empty; no redemption recorded through 2026-09-04 EARLY ENGAGEMENT SIGNALS (onboarding_usage.csv) - Active givers grew 3 → 15: 15 ÷ 3 = 5x over the 25-day window - Activity every single day: minimum 3 active givers on all 25 days; zero inactive days - Weekly averages: Aug 11–17 sum = 30 → avg ≈ 4.3; Aug 29–Sep 4 sum = 91 → avg 13.0; 91 ÷ 30 ≈ 3x - Momentum at window end: the two highest days are the two most recent (15 on Sep 3 and Sep 4) Data gaps (stated explicitly, not inferred): - No headcount / seat-count field, so adoption as a % of eligible users cannot be computed - Usage file tracks active givers only — no recognition volume, points, or redemption-attempt data - Discrepancy: usage shows 3 active givers on 2026-08-11–12, but first_recognition_at = 2026-08-15 14:22. The two files do not reconcile; the cause is not in the data. Worth verifying before the call. THREE THINGS TO COVER ON THE CALL 1. HRIS integration — the only unfinished setup step (integration_hris empty). Slack was connected 1 day after signup, so the team moves fast; ask what is blocking HRIS and offer implementation support. 2. First redemption — allowance set 2026-08-13 and recognition flowing since 2026-08-15, yet no redemption recorded in ~3 weeks of daily giving. Confirm recipients can see their balances and know the redemption flow; make the first redemption the exit goal for the call. 3. Sustain the adoption curve — active givers up 5x with the peak on the final two days of data. Ask for headcount to size penetration, and enlist the 2 admins to extend giving to employees not yet active.
90-DAY RENEWAL RISK BRIEF As-of date: 2026-09-08 (conversation date; not present in the data). Window: 2026-09-08 to 2026-12-07. All 20 accounts renew inside the window using the trusted dates. METHOD - Seat utilization = seats_used / seats (both from churnzero_renewals.csv). - 3-mo usage trend = active users Aug vs Jun 2026: (Aug-Jun)/Jun. Usage data ends 2026-08, so Jun/Jul/Aug are the latest 3 months available. - Risk rubric: HIGH = utilization <40% OR (utilization <70% AND 3-mo decline >=10%); MEDIUM = utilization 40-69% with stable usage, or >=70% with >5% decline; LOW = utilization >=70% and flat/growing usage. SOURCE-TRUST RULE AND WHY - Chargebee is trusted for every account. 5 accounts disagree; all 5 are multi-year (36m/24m) in Chargebee, and multi-year contracts are known to be wrong in ChurnZero. The 15 single-year (12m) accounts agree exactly between systems, which corroborates Chargebee's term data. Two of the CZ dates (2027-09-18, 2027-09-26) would push those renewals a full year out of the window. RENEWALS (sorted by date used; * = systems disagreed) # Date used Company CSM ARR Utilization 3-mo trend (Jun>Jul>Aug) 1 2026-09-15* C-0B7D2C30 Dana Mercer 65,901.00 274/476 = 57.6% 97>94>84 = -13.4% 2 2026-09-18* C-0BCDB8C2 Cole Ingram 54,427.00 232/424 = 54.7% 127>118>110 = -13.4% 3 2026-09-22* C-0D2AB865 Elena Sinclair 38,022.00 250/407 = 61.4% 125>117>109 = -12.8% 4 2026-09-26* C-0BBE3E60 Dana Mercer 30,993.00 74/114 = 64.9% 39>35>33 = -15.4% 5 2026-09-29* C-0F5D2323 Cole Ingram 90,647.00 111/390 = 28.5% 20>21>18 = -10.0% 6 2026-10-03 C-0EC6999D Elena Sinclair 79,419.00 31/112 = 27.7% 17>16>15 = -11.8% 7 2026-10-07 C-0B20DB64 Dana Mercer 21,770.00 214/378 = 56.6% 294>298>294 = 0.0% 8 2026-10-10 C-0BBC4E7A Cole Ingram 56,374.00 228/337 = 67.7% 142>141>139 = -2.1% 9 2026-10-14 C-0FD551AB Elena Sinclair 48,815.00 210/376 = 55.9% 123>122>126 = +2.4% 10 2026-10-18 C-0F9F8F13 Dana Mercer 46,230.00 199/352 = 56.5% 185>185>182 = -1.6% 11 2026-10-22 C-0BC34584 Cole Ingram 16,740.00 327/494 = 66.2% 104>104>106 = +1.9% 12 2026-10-25 C-0B7A7546 Elena Sinclair 35,062.00 182/205 = 88.8% 64>65>63 = -1.6% 13 2026-10-29 C-0B369871 Dana Mercer 85,128.00 317/422 = 75.1% 326>330>333 = +2.1% 14 2026-11-02 C-0B144C78 Cole Ingram 30,899.00 169/224 = 75.4% 101>101>106 = +5.0% 15 2026-11-05 C-0FC4DBB8 Elena Sinclair 94,732.00 356/464 = 76.7% 189>191>193 = +2.1% 16 2026-11-09 C-0D5BBE3A Dana Mercer 39,740.00 85/102 = 83.3% 88>90>91 = +3.4% 17 2026-11-13 C-0FB9D5AF Cole Ingram 63,158.00 144/199 = 72.4% 173>173>176 = +1.7% 18 2026-11-16 C-0B344485 Elena Sinclair 64,384.00 224/287 = 78.0% 238>240>244 = +2.5% 19 2026-11-20 C-0CB2C1B4 Dana Mercer 40,628.00 386/473 = 81.6% 47>48>49 = +4.3% 20 2026-11-24 C-22170CA1 Cole Ingram 45,646.00 251/294 = 85.4% 143>148>146 = +2.1% RISK RATINGS AND EVIDENCE HIGH (6) - C-0B7D2C30 (65,901.00, Dana Mercer): Utilization 57.6% with active users down 13.4% in 3 months and down 45.8% over 12 months (155 to 84), a steep sustained decay into a 2026-09-15 renewal. - C-0BCDB8C2 (54,427.00, Cole Ingram): Utilization 54.7% with active users down 13.4% in 3 months and down 45.0% over 12 months (200 to 110), halving engagement before a 2026-09-18 renewal. - C-0D2AB865 (38,022.00, Elena Sinclair): Utilization 61.4% with active users down 12.8% in 3 months and down 45.2% over 12 months (199 to 109), mirroring the decay pattern of the other multi-year accounts. - C-0BBE3E60 (30,993.00, Dana Mercer): Utilization 64.9% with the steepest 3-month decline in the book (-15.4%, 39 to 33) and 12-month usage down 47.6% (63 to 33). - C-0F5D2323 (90,647.00, Cole Ingram): Largest renewal in the window at 28.5% utilization (111 of 390 seats) with only ~18-21 active users per month, so the highest-ARR account is paying for capacity it barely touches. - C-0EC6999D (79,419.00, Elena Sinclair): Second-lowest utilization at 27.7% (31 of 112 seats) and usage flat at ~15 active users for 12 straight months (0% change), showing no expansion signal to offset deep under-use. MEDIUM (5) - C-0B20DB64 (21,770.00, Dana Mercer): Utilization 56.6% but usage is rock-stable (~294 active users for 12 months, 0.0% 3-mo change), so risk is under-licensing, not disengagement. - C-0BBC4E7A (56,374.00, Cole Ingram): Utilization 67.7% with mildly soft usage (-2.1% over 3 months, 142 to 139), just under the 70% line with no growth. - C-0FD551AB (48,815.00, Elena Sinclair): Utilization 55.9% despite slightly growing usage (+2.4%, 123 to 126), leaving roughly 166 paid seats unused. - C-0F9F8F13 (46,230.00, Dana Mercer): Utilization 56.5% with flat usage (-1.6% over 3 months, 185 to 182) and 12-month change of 0.0%. - C-0BC34584 (16,740.00, Cole Ingram): Utilization 66.2% with stable-to-growing usage (+1.9%, 104 to 106), modest exposure given the small ARR. LOW (9) - C-0B7A7546 (35,062.00, Elena Sinclair): 88.8% utilization with usage up 8.6% over 12 months (58 to 63). - C-0B369871 (85,128.00, Dana Mercer): 75.1% utilization with usage up 15.2% over 12 months (289 to 333). - C-0B144C78 (30,899.00, Cole Ingram): 75.4% utilization with usage up 17.8% over 12 months (90 to 106). - C-0FC4DBB8 (94,732.00, Elena Sinclair): 76.7% utilization with usage up 14.9% over 12 months (168 to 193). - C-0D5BBE3A (39,740.00, Dana Mercer): 83.3% utilization with usage up 19.7% over 12 months (76 to 91). - C-0FB9D5AF (63,158.00, Cole Ingram): 72.4% utilization with usage up 14.3% over 12 months (154 to 176). - C-0B344485 (64,384.00, Elena Sinclair): 78.0% utilization with usage up 15.6% over 12 months (211 to 244). - C-0CB2C1B4 (40,628.00, Dana Mercer): 81.6% utilization with usage up 14.0% over 12 months (43 to 49). - C-22170CA1 (45,646.00, Cole Ingram): 85.4% utilization with usage up 12.3% over 12 months (130 to 146). DATE DISAGREEMENTS (5 of 20, all on multi-year contracts; Chargebee used in every case) 1. C-0B7D2C30: CZ 2026-09-10 vs CB 2026-09-15 -> used 2026-09-15 (36-month term). 2. C-0BCDB8C2: CZ 2027-09-18 vs CB 2026-09-18 -> used 2026-09-18 (36-month term). CZ date falls a full year outside the window; trusting CZ would drop 54,427.00 of ARR from the 90-day plan. 3. C-0D2AB865: CZ 2026-09-10 vs CB 2026-09-22 -> used 2026-09-22 (24-month term). 4. C-0BBE3E60: CZ 2027-09-26 vs CB 2026-09-26 -> used 2026-09-26 (24-month term). CZ date falls a full year outside the window; trusting CZ would drop 30,993.00 of ARR. 5. C-0F5D2323: CZ 2026-09-10 vs CB 2026-09-29 -> used 2026-09-29 (24-month term). Net effect: a CZ-only view would show 963,295.00 renewing (missing 85,420.00) instead of 1,048,715.00, and would front-load three renewals onto 2026-09-10 that actually land later in September. TOTALS - Total ARR renewing in the 90-day window: 1,048,715.00 = 65,901 + 54,427 + 38,022 + 30,993 + 90,647 + 79,419 + 21,770 + 56,374 + 48,815 + 46,230 + 16,740 + 35,062 + 85,128 + 30,899 + 94,732 + 39,740 + 63,158 + 64,384 + 40,628 + 45,646 - ARR at risk (HIGH): 359,409.00 = 65,901 + 54,427 + 38,022 + 30,993 + 90,647 + 79,419 (34.3% of window) - Watch-list add (MEDIUM): 189,929.00, bringing HIGH+MEDIUM exposure to 549,338.00 (52.4% of window) - LOW: 499,377.00. Reconciliation: 359,409 + 189,929 + 499,377 = 1,048,715. DATA NOTES - All 20 accounts appear in all three files with 12 months of usage each; no missing values. - The as-of date (2026-09-08) and therefore the exact window edges are my assumption from the session date, not from the data; every trusted renewal date falls between 2026-09-15 and 2026-11-24, so all 20 are inside the window with margin. - CSM-level exposure: Dana Mercer carries 3 of 6 HIGH accounts (C-0B7D2C30, C-0BBE3E60) plus C-0D5BBE3A... correcting: HIGH by CSM is Dana Mercer 2 (96,894.00), Cole Ingram 3 (145,074.00), Elena Sinclair 1 (79,419.00); note the two September multi-year renewals landing first (C-0B7D2C30, C-0BCDB8C2) are both HIGH and renew within 10 days.
All 80 tickets read and grouped by body text (tags ignored — they're unreliable, e.g. IC-460020 is tagged "billing" but is a points-posting issue; billing-theme tickets carry tags like "how-to" and "urgent").
Basis: 80 tickets, 2026-06-01 to 2026-08-29, 24 distinct accounts, $284,800 total ARR across ticketed accounts (the full book is not given). Share = count/80. ARR affected = sum of distinct account ARR per theme. No account appears in more than one theme, so theme ARR sums cleanly to $284,800.
RANKED BY ARR EXPOSURE
1. HRIS PROVISIONING FAILURES (new hires not created / sync skips) — BROAD PATTERN
Count: 12 (15.0%) | Accounts: 3 | ARR affected: $114,000 (40.0% of ticketed ARR)
$114,000 = 36,000 (C-0B2213A9, 7 tickets) + 48,000 (C-0DDFC9A7, 3) + 30,000 (C-0F6C0F34, 2)
Tickets: IC-460059, IC-460062
Recommendation: Escalate as a named enterprise incident — silent sync failures ("provisioning log shows no errors") hitting your 3 largest ticketed accounts; audit the HRIS sync job end-to-end before renewal conversations.
2. REDEMPTION / GIFT-CARD FULFILLMENT FAILURES — BROAD PATTERN (most widespread after points)
Count: 18 (22.5%) | Accounts: 7 | ARR affected: $68,800 (24.2%)
$68,800 = 10,700 (C-0B827671, 4) + 11,000 (C-14264ABD, 3) + 9,600 (C-0FCCD2DF, 3) + 8,900 (C-0CEF69FD, 3) + 8,700 (C-0F876796, 3) + 9,600 (C-0D9CA315, 1) + 10,300 (C-0B0F1BAB, 1)
Tickets: IC-460025, IC-460024
Recommendation: Fix the redemption pipeline and add compensating logic for failed orders — "points deducted but no gift card delivered" is a direct trust-breaker across 7 mid-market accounts.
3. SEAT-COUNT / TIER BILLING ERRORS — SINGLE-ACCOUNT, NOT A PRODUCT PATTERN
Count: 16 (20.0%) | Accounts: 1 | ARR affected: $52,000 (18.3%)
All 16 tickets are C-0E9C27D1 ($52,000): 5x "200 seats vs 150 licensed", 5x "wrong tier price on annual renewal", 3x "third invoice in a row", 3x "seat count never approved"
Tickets: IC-460069, IC-460078
Recommendation: Treat as a churn-risk escalation, not a support queue item — one $52K account filed 20% of the quarter's tickets over a repeating invoice error; requires an exec-level billing correction and apology before renewal.
4. POINTS NOT POSTING TO BALANCES — BROAD PATTERN (highest volume, lowest ARR rank)
Count: 20 (25.0%) | Accounts: 9 | ARR affected: $31,100 (10.9%)
$31,100 = 4,500 (C-0BF20542, 2) + 4,500 (C-0D0B047C, 2) + 4,200 (C-0D6CC8E3, 3) + 3,500 (C-0D3278C7, 3) + 3,400 (C-0D284E42, 3) + 2,900 (C-21FEBCBB, 1) + 2,900 (C-0B2895EF, 1) + 2,700 (C-0BE96399, 3) + 2,500 (C-0DD0626C, 2)
Tickets: IC-460004, IC-460016
Recommendation: Investigate the recognition-to-balance ledger job — recurring "delivered but points never arrived" and team-wide Monday-morning posting failures span 9 accounts; likely one backend defect behind all variants.
5. SLACK INTEGRATION BREAKAGE (sync stops, toggle resets, re-auth fails, slash command errors) — BROAD PATTERN
Count: 14 (17.5%) | Accounts: 4 | ARR affected: $18,900 (6.6%)
$18,900 = 5,400 (C-10A56B0F, 4) + 5,200 (C-8C2E8F00, 1) + 4,400 (C-0B843542, 3) + 3,900 (C-0BA71F12, 6)
Tickets: IC-460047, IC-460046
Recommendation: Fix OAuth token persistence in the Slack app — self-resetting toggles and non-sticking re-auth point to a credential-storage bug in a channel-visible surface (the product's main delivery channel).
CHECKS: 12+18+16+20+14 = 80 tickets; $114,000+$68,800+$52,000+$31,100+$18,900 = $284,800.
Key takeaway: volume and ARR exposure point in opposite directions — points-posting is the biggest theme by count (25%) but 4th by ARR, while HRIS provisioning is only 15% of tickets but 40% of ARR exposure because it concentrates in three large accounts. Theme 3 is single-account noise (one account, C-0E9C27D1) that still ranks 3rd by ARR — a save-play, not a platform fix. No data is provided on resolution status, severity, or the unticketed book, so ARR shares here are relative to ticketed ARR only.
RANKED TOP 3 SOCIAL-PROOF MATCHES for prospect C-82AF3719 (Technology | Mid-Market | employee_recognition | NA-West) Method: 25 customers in customers.csv; 8 have has_case_study=true, so 25 − 8 = 17 are excluded (no case study, cannot be used). Each eligible customer is scored 1 point per exact match on the four prospect fields. Scoring (arithmetic): Customer Industry Size UseCase Region Score C-64171065 1 1 1 0 3/4 C-11C31562 0 1 1 1 3/4 C-A13C193D 1 1 0 1 3/4 C-9D69D147 0 1 0 1 2/4 C-CD4829A7 1 1 0 0 2/4 C-FEFCC020 0 0 0 0 0/4 C-11209339 0 0 0 0 0/4 C-0CE315B2 0 0 0 0 0/4 The ranking: 1. C-64171065 — 3/4 match Matched fields: industry (Technology=Technology), size_band (Mid-Market=Mid-Market), use_case (employee_recognition=employee_recognition). Not matched: region (NA-East vs prospect NA-West). Same industry, same size band, same use case — differs only on region. 2. C-11C31562 — 3/4 match Matched fields: use_case (employee_recognition=employee_recognition), size_band (Mid-Market=Mid-Market), region (NA-West=NA-West). Not matched: industry (Manufacturing vs prospect Technology). Proves the exact use case in the prospect's region; cross-industry. 3. C-A13C193D — 3/4 match Matched fields: industry (Technology=Technology), size_band (Mid-Market=Mid-Market), region (NA-West=NA-West). Not matched: use_case (retention vs prospect employee_recognition). Same industry/size/region; the case study covers a different use case. Tie-break rule (disclosed): the top three all score 3/4 with equal field weighting, so I ranked them by social-proof relevance: use_case match (proves the product solving the prospect's exact problem) over industry match (peer credibility), with region weighted lowest (NA-East vs NA-West rarely changes a case study's usability). That ordering puts C-64171065 (use case + industry) first, C-11C31562 (use case, no industry) second, C-A13C193D (industry, no use case) third. Notes on the data: - Two customers in the base match the prospect on all four fields exactly, but both have has_case_study=false, so they are excluded and not named here. - Next-best backups at 2/4, if needed: C-CD4829A7 (Technology, Mid-Market, retention, NA-East — matches industry + size) and C-9D69D147 (Financial Services, Mid-Market, retention, NA-West — matches size + region). - The provided files contain no billing data and no contact names, so none appear here. The dataset also provides no case-study titles or URLs; "has a public case study" is taken solely from the has_case_study flag.
All figures below are computed from the two files only. Window = 2026-03 through 2026-08 (trailing 6 months). Integrity checks passed: 122 contact rows, no duplicate keys, no missing SQM dates, all dates in-window, and every row with an SQO date carries nonzero pipeline (and vice versa). PAID CHANNELS (6-month totals) paid_search Spend: $36,000 (6 x $6,000) SQMs: 40 | SQOs: 18 | Pipeline: $720,000 (18 x $40,000) Cost per SQM: 36,000 / 40 = $900.00 Cost per SQO: 36,000 / 18 = $2,000.00 SQM-to-SQO: 18 / 40 = 45.0% Pipeline per dollar: 720,000 / 36,000 = $20.00 linkedin_ads Spend: $24,000 (6 x $4,000) SQMs: 25 | SQOs: 8 | Pipeline: $96,000 (8 x $12,000) Cost per SQM: 24,000 / 25 = $960.00 Cost per SQO: 24,000 / 8 = $3,000.00 SQM-to-SQO: 8 / 25 = 32.0% Pipeline per dollar: 96,000 / 24,000 = $4.00 paid_social Spend: $18,000 (6 x $3,000) SQMs: 0 | SQOs: 0 | Pipeline: $0 Cost per SQM: UNDEFINED (spend with zero SQMs — reported as undefined, not zero) Cost per SQO: UNDEFINED | SQM-to-SQO: UNDEFINED (0/0) | Pipeline per dollar: UNDEFINED webinars Spend: $9,000 (6 x $1,500) SQMs: 12 | SQOs: 5 | Pipeline: $60,000 (5 x $12,000) Cost per SQM: 9,000 / 12 = $750.00 Cost per SQO: 9,000 / 5 = $1,800.00 SQM-to-SQO: 5 / 12 = 41.7% Pipeline per dollar: 60,000 / 9,000 = $6.67 PAID TOTAL Spend $87,000 | 77 SQMs | 31 SQOs | $876,000 pipeline Cost per SQM: 87,000 / 77 = $1,129.87 | Cost per SQO: 87,000 / 31 = $2,806.45 SQM-to-SQO: 31 / 77 = 40.3% | Pipeline per dollar: 876,000 / 87,000 = $10.07 ORGANIC (no spend rows in the data; referral also has $0 spend, so it is treated as organic) organic_search: 30 SQMs | 10 SQOs | SQO rate 10/30 = 33.3% | Pipeline $90,000 (10 x $9,000) referral: 15 SQMs | 6 SQOs | SQO rate 6/15 = 40.0% | Pipeline $48,000 (6 x $8,000) DATA QUALITY FLAGS — SQO date precedes SQM date (2 rows, both linkedin_ads) CT-000044: SQM 2026-07-23, SQO 2026-07-18 (SQO 5 days earlier), pipeline $12,000 CT-000041: SQM 2026-06-14, SQO 2026-06-09 (SQO 5 days earlier), pipeline $12,000 Sensitivity: excluding both, linkedin_ads falls to 6 SQOs, 24.0% SQM-to-SQO, $4,000 cost per SQO, $3.00 pipeline per dollar. Reconcile these two records before finalizing linkedin_ads numbers. Caveats stated explicitly: - Right-censoring: SQM-to-SQO lags run up to 20 days, so late-August SQMs may still convert. linkedin_ads has 3 August SQMs with 0 conversions so far and referral has 1 with 0 — their rates are understated somewhat. - Pipeline per dollar is heavily driven by deal size ($40,000 for paid_search vs $9,000-$12,000 elsewhere), so cost per SQO is the more comparable efficiency metric. - The data provides no cost for organic channels, so no organic ROI can be computed. REALLOCATION RECOMMENDATION 1. Cut paid_social entirely ($3,000/mo): $18,000 over 6 months with zero SQMs. Unit economics are formally undefined, but 6 straight months of zero output is the strongest negative signal in the dataset. 2. Shift the freed $3,000/mo primarily to paid_search (+$2,500/mo) and webinars (+$500/mo); trim linkedin_ads by ~$1,000/mo and route that to webinars as well. 3. Do not scale beyond that until the two flagged linkedin_ads rows are reconciled and one more month of data confirms the August censoring effect. Naive linear math (marginal cost = current average, constant returns assumed): +$2,500/mo to paid_search at $2,000/SQO = +1.25 SQOs/mo = +$50,000 pipeline; +$1,500/mo to webinars at $1,800/SQO = +0.83 SQO/mo = +$10,000; -$1,000/mo from linkedin_ads at $3,000/SQO = -0.33 SQO/mo = -$4,000. Net ≈ +$56,000 pipeline/mo on flat $87,000 spend. Treat this as an upper bound — marginal returns on added paid_search spend typically fall below the current average. CONFIDENCE Moderate overall, and low for any single small channel. Sample sizes: paid_search n=40 SQMs (Sinclair 95% CI on the 45% rate: 30.7%-60.2%), linkedin_ads n=25 (17.2%-51.6%), webinars n=12 (19.3%-68.0%), paid_social n=0. The conversion-rate CIs overlap heavily across all three producing channels, so the ranking of SQM-to-SQO rates is not statistically significant; only paid_social's zero output and paid_search's pipeline-per-dollar edge (which is deal-size driven) are well supported. The safest defensible moves are the paid_social cut and incremental (not wholesale) shifts toward paid_search and webinars, revisited after the flagged rows are fixed and September data lands.
# Battlecard: Rivally (updated 2026-09-08)
## One-line positioning
Points-based recognition platform for mid-market and distributed EU teams, now expanding into enterprise EMEA and selling a paid engagement-survey add-on ("Rivally Pulse"). [S02, S04, S12, S06, S23, S11]
## Pricing
- Current list: $7 per user/month for Recognition Starter tier, annual billing required (pricing page, 2026-08-12). [S17]
- CONFLICT: the pricing page previously showed $5/user/month on 2026-01-20 [S03] and still showed $5 on 2026-04-01 [S08]. The 2026-08-12 pricing page ($7) is the newest source and wins; treat $5 as outdated.
- Field quotes: $6.50/user/mo on annual term quoted to a 500-seat prospect on 2026-06-02 [S13]; $7/user/mo list with 15% discount offered for a 3-year term on 2026-08-14 [S18].
- "Rivally Pulse" survey add-on is priced separately, not bundled (2026-09-01). [S23]
## Where they win
- EU / distributed teams: EU data residency GA and Dublin office (2026-07-01) [S15]; multi-language support praised by an EU enterprise reviewer [S12]; ex-Workday VP EMEA hired to lead European expansion (2026-05-09) [S11]; EU residency was pitched against Bonusly to a prospect [S05].
- Fast time-to-value: mid-market setup under a week, Slack integration worked out of the box (2026-02-02) [S04].
- Engaging core product: recognition feed repeatedly praised [S02, S16].
- Support: response time under 4 hours [S22].
- Momentum: $40M Series C led by Northgate Ventures (2025-11-04) [S01]; Microsoft Teams app v2 in public preview (2026-08-20) [S19].
## Where we win
- Analytics depth: reviewers consistently flag limited/basic analytics [S02, S07]; analytics exports are CSV-only, making migration off Rivally hard [S20]; an 800-seat prospect picked Bonusly over Rivally specifically citing analytics depth (2026-09-03) [S25].
- Enterprise admin tooling: no SCIM provisioning, manual user management painful [S10]; admin console lacks bulk recognition editing [S24]; admin tooling lags peers [S16].
- EMEA rewards catalog thinner than US catalog [S14].
- Pricing pressure: list price up 40% ($5 → $7) between April and August 2026 [S08, S17], and 15% multi-year discounting suggests term-length buying incentives [S18].
## Objections and responses
- Objection: "Rivally offers EU data residency." [S05, S15]
Response: Residency is real and GA since 2026-07-01 [S15], so don't dispute it. Counter on analytics depth and admin tooling, which EU reviewers themselves flag [S12 vs S20, S24, S10]. (Our own EU residency status: no data provided — do not claim parity without sourcing.)
- Objection: "Rivally is cheaper / offered us a discount." [S13, S18]
Response: Their list is now $7/user/mo with a 15% discount locked to a 3-year term [S17, S18]; Pulse is a separate paid add-on [S23]. Price the bundle apples-to-apples. Note: aggressive-discounting talk is rep opinion only and not confirmed [S21] — do not use as a factual claim.
- Objection: "Rivally has an engagement survey add-on too." [S06, S23]
Response: Pulse exited beta 2026-09-01 and is priced as a separate add-on, not bundled [S23].
- Objection: "Rivally set us up fast."
Response: Setup speed is acknowledged [S04]; pivot to lock-in risk — CSV-only analytics exports make it hard to leave later [S20].
## Recent changes (chronological)
- 2025-11-04: $40M Series C led by Northgate Ventures. [S01]
- 2026-03-05: Launched "Rivally Pulse" engagement survey add-on. [S06]
- 2026-05-09: Hired ex-Workday VP EMEA to lead European expansion. [S11]
- 2026-07-01: Opened Dublin office; EU data residency GA. [S15]
- 2026-08-12: Recognition Starter price raised from $5 to $7 per user/month. [S08 → S17]
- 2026-08-20: Microsoft Teams app v2 in public preview. [S19]
- 2026-09-01: Rivally Pulse exited beta; priced as add-on, not bundled. [S23]
## Our 12-month win/loss record vs Rivally (2025-09 through 2026-08)
- Wins (13): Deal-072E31 (2025-09), Deal-A9FD43 (2025-10), Deal-F65C8F (2025-10), Deal-7AA785 (2025-11), Deal-44C524 (2025-12), Deal-0D0CD6 (2026-01), Deal-E46EAB (2026-01), Deal-D5B790 (2026-02), Deal-1D2392 (2026-02), Deal-5C636E (2026-03), Deal-67BE14 (2026-06), Deal-1B6969 (2026-07), Deal-F03E7B (2026-08)
- Losses (7): Deal-7767F5 (2025-09), Deal-D263E0 (2025-11), Deal-935746 (2025-12), Deal-9066A6 (2026-03), Deal-5645A5 (2026-04), Deal-72A02F (2026-04), Deal-C6FFAA (2026-05)
- Arithmetic: 13 wins + 7 losses = 20 decided deals; 13 / 20 = 65% win rate.
- Post-window note: an 800-seat prospect chose Bonusly over Rivally citing analytics depth on 2026-09-03 [S25] — outside the 12-month deal ledger above and not counted in it.
## Old-card claims that could not be re-sourced
- "Rivally was acquired by Workhuman in 2025" — UNVERIFIED. No snippet in the provided data supports an acquisition; the snippets show an independent $40M Series C [S01]. Do not use until sourced.
- "Rivally lacks a Slack integration" — REFUTED. A G2 review dated 2026-02-02 reports the Slack integration worked out of the box [S04]. Remove from the card.
- Old pricing "$5/user/month (as of 2026-01)" — outdated; superseded by S17.
- "Strong in EU enterprise with multi-language support" — retained, re-sourced to S12 and S15.
Also excluded as non-facts: S09 (AE opinion, UI is clunky — explicitly unverified against the product) and S21 (rep opinion on discounting — noted in the objection section as opinion only).
PER-SEQUENCE PERFORMANCE New Logo Nurture: sent 1386, open 490/1386=35.4%, reply 90/1386=6.5%, meeting 27/1386=1.95%. Weakest step: 3 (reply 18/428=4.2%, down from 8.4% at step 1). Expansion Nurture: sent 875, open 565/875=64.6% (inflated by tracking error, see below), reply 59/875=6.7%, meeting 12/875=1.37%. Weakest step: 3 (reply 12/275=4.4%). Cold Outbound - HR Leaders: sent 1785, open 545/1785=30.5%, reply 8/1785=0.4%, meeting 0/1785=0%. Weakest step: 3 (reply 1/590=0.2%). Cold Outbound - People Ops: sent 1163, open 340/1163=29.2%, reply 29/1163=2.5%, meeting 6/1163=0.52%. Weakest step: 3 (reply 6/377=1.6%). TRACKING ERROR Expansion Nurture step 2: opened 340 > sent 300 (340/300=113.3%). Excess of 40 opens is impossible; likely bot/Apple Mail Privacy proxy opens or a pixel double-count. Excluding step 2, true open = 325/575 = 56.5%. AUDIENCE OVERLAP 940 unique contacts across 963 rows; 23 contacts appear in two sequences. Two overlap groups: (a) CT-000301 and CT-000624 in both Expansion Nurture and New Logo Nurture (conflicting intent — expansion vs new logo); (b) 21 contacts in both cold sequences (CT-000849, CT-000884, CT-000890, CT-000908, CT-001033, CT-001097, CT-001101, CT-001103, CT-001105, CT-001130, CT-001153, CT-001159, CT-001217, CT-001227, CT-001236, CT-001255, CT-001258, CT-001277, CT-001285, CT-001311, CT-001345 in Cold Outbound - HR Leaders and Cold Outbound - People Ops) — double-touching the same people, which likely depresses both reply rates. FAILURE MODE (<2% REPLY) Cold Outbound - HR Leaders: 0.4% reply, 0 meetings. Opens exist (30.5%) but near-zero replies — recipients read and discard. Failure mode is message relevance/offer, not deliverability; 8 replies from 1785 sends with zero meetings. ONE CHANGE PER WEAK SEQUENCE Cold Outbound - HR Leaders: rewrite step 1 message around a persona-specific pain point and one clear CTA (offer fix, not step-3 tweaks). Fix first: 1785 sends, zero meetings — largest volume, lowest yield. Cold Outbound - People Ops: suppress the 21 dual-sequence contacts so each contact gets only one cold sequence (prevents list fatigue). Expansion Nurture: fix the step-2 open tracking (revalidate pixel events) before trusting open-based decisions.
WEEKLY MARKETING GOALS UPDATE — Q3-2026 (2026-07-01 to 2026-09-30) Days elapsed: 66 of 92 = 71.7% through the quarter; 26 days remain. Pro-rata benchmark = 71.7% of each target. ``` Metric QTD Target Delta Attain Pace (vs 71.7% elapsed) SQMs 230 300 -70 76.7% Ahead (+4.9 pts) SQOs 84 120 -36 70.0% Behind (-1.7 pts, marginal) DS2s 40 75 -35 53.3% Behind (-18.4 pts) closed_lost_mia_rate 20% 10% +10 pts* 2.0x Behind (already 2x target) same_quarter_closes 10 20 -10 50.0% Behind (-21.7 pts) active_pipeline $3.0M $4.0M -$1.0M 75.0% Ahead (+3.3 pts, marginal) ``` *Delta in the bad direction (lower_better). Arithmetic shown: - closed_lost_mia_rate = closed_lost_mia / closed_lost_total = 5 / 25 = 0.20 = 20%. Delta vs 0.10 target = +10 pts (worse). To finish at 10% with the current 5 MIAs, closed_lost_total would need to reach 50 (5/50 = 10%) — i.e., 25 more closed-lost with zero additional MIAs. - active_pipeline coverage = 3,000,000 / 4,000,000 = 75.0% of target. - Attainment: SQMs 230/300 = 76.7%; SQOs 84/120 = 70.0%; DS2s 40/75 = 53.3%; same_quarter_closes 10/20 = 50.0%. Required run rates, final 26 days (gap / 26) vs current run rate (QTD / 66): - SQMs: 70/26 = 2.69/day needed vs 230/66 = 3.48/day current → ahead, no pickup required. - SQOs: 36/26 = 1.38/day needed vs 84/66 = 1.27/day current → needs ~+9% pickup. - DS2s: 35/26 = 1.35/day needed vs 40/66 = 0.61/day current → needs ~2.2x current rate. - same_quarter_closes: 10/26 = 0.38/day needed vs 10/66 = 0.15/day current → needs ~2.5x current rate. - active_pipeline: $4.0M − $3.0M = $1.0M of net build needed in 26 days. What moved this week: The provided files contain QTD actuals, quarterly targets, and quarter metadata only — no prior-week snapshot — so week-over-week movement cannot be computed and I am explicitly flagging that as missing data. On a QTD basis, the read is a funnel that is strong up top and weak from the middle down: SQMs (230 vs 300, 76.7%) and active_pipeline ($3.0M vs $4.0M, 75.0% coverage) are both ahead of the 71.7% pro-rata mark, but SQOs sit marginally behind (70.0% vs 71.7%), and the divergence widens sharply below that — DS2s at 53.3% (needs 2.2x the current daily rate) and same_quarter_closes at 50.0% (needs 2.5x) — while the closed_lost_mia_rate of 20% (5 of 25) is already double the 10% target and can only reach target if the remaining 26 days add ~25 closed-lost with zero new MIAs, meaning the quarter's risk is concentrated in mid/late-funnel conversion and lost-deal hygiene, not top-of-funnel volume or pipeline stock.
Q3 weighted forecast is 115,976.75, but do not bank it yet: 100% of 44,729 COMMIT plus 35% of 203,565 BEST_CASE across 54 of 86 in-quarter deals, with 32 deals worth 227,575 excluded to October. All 7 COMMIT deals lack a documented why-buy and 85 of 86 deals have no owner, so the committed floor is unsupported. Backfill owners and why-buys on the 7 COMMITs before we present this number.
Follow-up email (Deal-0D2F7A, owner Alex Franklin): Subject: Following up — pricing recap for 150 seats Hi [First name], Following up on the recap I sent on August 5 with pricing for 150 seats — I haven't heard back and wanted to make sure it didn't get buried. If it's easier to talk through the pricing live than over email, I'm glad to do that. Would you have 15 minutes this week or early next to review it together? Thanks, Alex Franklin --- Compliance check: - Word count: 65 (body incl. salutation/sign-off) + 7 (subject line) = 72 total, which is under the 120-word cap (120 − 72 = 48 words of headroom). - Prior touch referenced: exactly one — ENG-00001, the 2026-08-05 outbound pricing recap email for 150 seats (the unanswered touch). Its specifics (August 5, pricing, 150 seats) come verbatim from the snippet. - One clear ask: a 15-minute call to review the pricing. - Tone: direct, low-pressure, action-oriented — consistent with the prior outbound touches (recap sent, call booked, etc.). - Missing data, stated explicitly: no contact/recipient name appears in either file, so a [First name] placeholder is used. No other details were invented; the demo, company profile, and budget details from earlier touches were deliberately not cited to keep to one prior touch.
**Marketing** Marketing closed the week with 46 SQMs against a target of 52 — six shy of goal (52 − 46 = 6). The webinar channel was the standout, contributing 18 of those 46 SQMs (18/46 ≈ 39%), with the remaining 28 (46 − 18 = 28) arriving through other channels. On efficiency, paid search held at $150 per SQM. **Sales** Sales kept the engine running this week: 14 SQOs converted, 9 DS2 meetings set, and $310,000 in new pipeline created. The same-quarter close count landed at 3. **CS** CS saved 2 renewals this week — wins worth celebrating. Team NPS moved to 61 (no prior-week baseline in this extract, so no delta to show). Heading into next week, 3 red-flag accounts remain open and stay top of mind. **PLG** PLG welcomed 412 new signups with activation at 31% — about 128 of them activated (412 × 31% ≈ 128). And here's the moment we love: 38 companies reached the aha moment of 10 recognition gives. (Word count: ~165. All figures trace to week_extracts.md; derived values show their arithmetic. Paid-search SQM volume, prior-week NPS, and channel spend totals were not provided, so no totals were computed from them.)
PARTNER DIGEST — Period 2026-08-24 to 2026-09-04
ACTIVE PARTNERS
Apex Rewards Co
Pipeline: 2 sourced opps, $275,000
Deal-DDAAF2 $180,000 + Deal-2CF33E $95,000 = $275,000
Both opps in DS1; both logged with UTM Source = Partner (Slack 2026-08-25).
Status: Co-webinar locked for 09-15.
HRCloud Partners
Pipeline: 1 sourced opp, $140,000
Deal-F1CDA5 = $140,000
Stage DS2 — integration referral closed security review and moved to DS2 (Slack 2026-08-27).
CultureBridge
Pipeline: 2 sourced opps, $135,000
Deal-096E1D $60,000 + Deal-067213 $75,000 = $135,000
Both opps early stage per Slack (2026-08-29); no DS stage number given in the data.
Status: Opps sourced from lunch-and-learn.
WorkWell Group
Pipeline: 0 sourced opps, $0 this period.
Status: Wants to restart the joint playbook in Q4; planning call booked for 09-09.
QUIET PARTNERS
Recogniq: no sourced opps and no recorded activity this period.
KudosWave: no sourced opps and no recorded activity this period.
PeopleFirst Advisors: no sourced opps and no recorded activity this period.
TotalPerk: no sourced opps and no recorded activity this period.
PARTNER-SOURCED PIPELINE — PERIOD TOTAL
Count: 5 opps (Apex Rewards Co 2 + HRCloud Partners 1 + CultureBridge 2 = 5)
Amount: $550,000 ($275,000 + $140,000 + $135,000 = $550,000)
All 5 deals carry utm_source = Partner in partner_deals.csv; WorkWell Group and the four quiet partners contributed 0 opps.
Missing data, stated explicitly:
- partner_deals.csv has no stage column. All stage information above comes from partner_slack.md. CultureBridge's two opps are described only as "early stage" — no DS number exists in the data, so none is assigned.
- No expected close dates, deal owners, or next steps are provided for any deal.
- No activity records exist for Recogniq, KudosWave, PeopleFirst Advisors, or TotalPerk anywhere in the provided files.
BONUSLY — SECURITY QUESTIONNAIRE RESPONSE (Based solely on policy excerpts P1–P8; no other sources used.) Q1. Yes. Customer data is encrypted at rest using AES-256. [P1] Q2. Yes. Data in transit is encrypted with TLS 1.2 or higher. [P1] Q3. Yes. Bonusly maintains a SOC 2 Type II report, renewed annually. A copy is available to prospects under NDA. [P2] Q4. Customer data is retained for the duration of the contract plus 90 days, after which it is deleted from production systems. [P3] Arithmetic: total retention window = contract term + 90 days; post-termination retention = 90 days; deletion from production systems occurs at (contract end date + 90 days). Q5. The current subprocessor list is published at trust.bonusly.com. Customers receive 30 days notice before a new subprocessor is added. [P4] Q6. Yes. SAML 2.0 single sign-on is supported, available on the Enterprise plan. [P5] (Also per [P5]: SCIM user provisioning is available on the same Enterprise plan — noted for completeness, as the question asks only about SAML.) Q7. Production databases are backed up daily. Backups are encrypted and retained for 35 days. [P6] Arithmetic: 35-day retention × 1 backup/day = up to 35 daily restore points at any given time. Q8. UNANSWERABLE from the provided excerpts. None of P1–P8 mentions ISO 27001 certification. This would be answered by: the certifications/compliance section of the trust portal, or the ISO 27001 certificate itself (with statement of scope) if held. Q9. UNANSWERABLE from the provided excerpts. No excerpt states a contractual uptime SLA percentage. This would be answered by: the Master Services Agreement / Service Level Agreement exhibit — a contractual document, not the trust-portal policy excerpts provided. Q10. UNANSWERABLE from the provided excerpts. No excerpt addresses HIPAA or a Business Associate Agreement. This would be answered by: the BAA acceptance policy or legal terms from the vendor's legal team, typically documented in the MSA or a standalone BAA addendum. Summary: 7 of 10 items answered from P1–P8 (Q1–Q7). Three items (Q8, Q9, Q10) are not addressed in the excerpts and require an ISO 27001 certificate, the MSA/SLA exhibit, and a BAA policy respectively. No facts beyond the excerpts were asserted.
All checks executed against the provided files (count = 1 execution). Findings, one proposal each: FINDINGS AND PROPOSALS F1. Overlapping ALWAYS-trigger phrases — comms-drafter and email-drafter Severity: CRITICAL. Action: MERGE (comms-drafter absorbs email-drafter). Both fire on the identical five quoted phrases: "write me an email," "draft a follow-up," "help me reply" / "help me reply to this," "what should I say," "bump email," "contract nudge." Intersection = 5 verbatim phrases (computed, not estimated). The two bodies are also near-duplicates: same contract-nudge benchmark, same 1-10 rating + 3-version output format, same "no em dashes" rule, and both hand off to deal-strategy-coach with a lane marker. Two co-equal routes guarantee nondeterministic dispatch on the most common request in the set. F2. Secondary overlap — weekly-pipeline-report and pipeline-intelligence-report Severity: WARNING. Action: REVIEW (scope split needed). Verbatim intersection = 0 (computed). But near-verbatim pairs collide: "run the pipeline update" (weekly) vs "run the pipeline report" (PIR); "what does pipeline look like" (weekly) vs "what's the pipeline look like" (PIR). Both trigger on a bare "run the pipeline" style ask with no discriminator in either description. Proposal: one clarifying question at dispatch (weekly numbers update vs full scored 10-tab report) or an explicit scope sentence in each description. Not a merge — outputs genuinely differ (Ben's weekly update vs tiered intelligence report). F3. Circular delegation chain — deal-strategy-coach and email-drafter Severity: CRITICAL. Action: MERGE. The cycle: deal-strategy-coach "Manager-to-prospect email frameworks" says "use the email-drafter skill which automatically retrieves your Gmail signature" → email-drafter's "Lane marker" says "If the user needs strategic deal coaching... point them to the deal-strategy-coach skill." Each skill defers to the other on manager-to-prospect emails. Name of the chain: deal-strategy-coach → email-drafter → deal-strategy-coach. F1's merge into comms-drafter also breaks this cycle. F4. Dangling delegation targets (do not exist among the 14 files) Severity: CRITICAL. Action: REVIEW (restore the missing skills or rewrite the references). Five distinct targets: - bonusly-brand (comms-drafter Step 0; email-drafter intro; sales-forecast STEP 3; signalforge-claim-compressor description) - prospect-research-multithreading (comms-drafter; email-drafter; deal-strategy-coach "Cross-skill handoff") - skill-orchestrator (analysis-validator §11; signalforge-feedback Activation Checklist) - signalforge-reports (pipeline-intelligence-report Phase 5 and sales-forecast read /mnt/skills/organization/signalforge-reports/SKILL.md) - the eight bonusly-* specialist skills of analysis-validator §12.4: bonusly-data-questions, bonusly-product-questions, bonusly-business-reporting-questions, bonusly-rewards-questions, bonusly-ppp-questions, bonusly-feature-flag-questions, bonusly-deal-desk-questions, bonusly-datadog-questions. That is 12 distinct missing names across 6 referencing skills. 0 of them have a manifest row or a provided file. F5. Version conflict — analysis-validator 3.5 vs 3.6 Severity: WARNING. Action: UPDATE_BODY (of the trail template and stamped version string). Changelog records 3.5 and 3.6 both dated May 9, 2026. The header says v3.6 (last updated May 9), but the Validation Trail template in §7 stamps "Validator: analysis-validator v3.2" and the footer prints "analysis-validator v3.6 · May 9, 2026." Survivor: v3.6 (it is the header version and the newest changelog entry). The v3.2 string in the trail template is stale — align it to v3.6 in the next body edit. F6. Descriptions exceeding 1,024 characters Severity: INFO. Action: TRIM_DESC (none required now; watch list). Count = 0 of 14. Maximum declared = 1,006 (pipeline-intelligence-report and signalforge-claim-compressor); the margin below 1,024 is 1,024 − 1,006 = 18 characters. My rendered-length check reproduces every declared value exactly (delta = 0 for all 14), including paragraph-joined variants (partner-digest 1,006, PIR 1,007 at worst). No description exceeds the limit; the two at 1,006 have almost no headroom, so any future addition should be checked. F7. Hardcoded IDs, dates, and person names in skill bodies Severity: WARNING. Action: UPDATE_BODY. Evidence, by file: - analysis-validator: stage IDs 150582536, 150582537, 150582538, 150582539, 1175632767 (§12.2, §13.3); owner IDs 119337721, 77260721, 83155923, 84342457, 83155924, 1520255671, plus CS/leadership/RevOps IDs (§12.3, dated May 4, 2026); dates April 26 / May 4 / May 9, 2026; names Alaina Loori, Shealugh Coughlin, Bryce Harmon, Hugo Lindqvist, Dana Mercer, Alex Franklin, Cole Ingram, Gavin Porter, Colleen Perry, Ellie Barton, Ashley Reyer, Megan Franz, Elena Sinclair, Youssef Elkhateeb, Amanda Czenkus, Ben Castelli, Amani Phipps, John Thomas, Yasmin Wahid, Manish, Amani. - pipeline-intelligence-report: AE owner IDs 119337721, 83155923, 83155924, 84342457, 1520255671; stage IDs as above; org ID 1973303; name Alaina. - next-to-close: stage IDs as above; org ID 1973303. - stale-pipeline-report: stage IDs as above; Slack channel ID C0561C1JCPJ; name Alaina. Note: this file's Phase 2 explicitly forbids hardcoding names/IDs, yet the description and Slack ID still contain them — internal contradiction. - weekly-pipeline-report: names Ben Lavin, Ben; spreadsheet IDs 1CLZeOsElVDF_LF0ZG_t2nfwvhnZ6bpwqM_nX3WEYzcw and 1ENuaEcCuLjdKhMvp8FK3Ys1ek5Aw9ZuOZhsHJJFoB_k; Q1 2026 actuals $365,152 / $475,000 (77%) and $2,490,532 / $3,288,000 (76%); stage-entry IDs 150582536/150582537; dates April 1 – June 30, 2026. - deal-strategy-coach: Confluence page ID 2257879045; 2026 pricing table; competitor names incl. Paylocity, Bucketlist. - partner-digest: Confluence cloud ID 73fe98de-a4a3-4869-9f8a-bb1eeed4cf7f, space ID 1958248479, folder ID 2286616609, page IDs 2265382925, 2236940297, 2237825028, 2239365136, 2238283777, 2286321666; Slack user ID U03QLMBL7AR; names Amani Phipps, Kelli, Jen Lee, Hani, Bryce, Sara. - sales-forecast: space SignalForg, space ID 2232811524, cloud ID as above, parent page ID 2232582148; names Alaina, Elena (Elena documented as removed in v1.1 but still named in the changelog). - signalforge-feedback: page ID 2295136266, parent 2234417154, Build Log page ID 2247295002, space ID 2232811524; example titles naming Gavin Porter, Lowe's. - closed-lost-analysis: named deal exemplars (Softheon, Estee Lauder, LIFTOFF, Nestlé, MinIO, Ozinga, Aurora Innovation, GCash, Ethos Cannabis, StickerYou) and dates (May 2026, May 4–12). These are taxonomy exemplars, not config. - model-selection: last_checked 2026-05-19 (a stale-date tripwire by design). Proposal: stage IDs, owner IDs, org ID 1973303, and spreadsheet IDs should move to a single shared reference with runtime verification (stale-pipeline-report Phase 2 already shows the correct dynamic pattern); Q1 2026 actuals and the Elena reference should be removed or archived. F8. Manifest drift, direction 1 — files with no manifest row Severity: INFO. Action: none (record-keeping clean). Count = 0. Set arithmetic: 14 files provided, 14 manifest rows; file set minus row set = empty. F9. Manifest drift, direction 2 — manifest rows with no file Severity: INFO. Action: none. Count = 0. Row set minus file set = empty. The only true drift in this skill set is referential (F4: 12 named targets with no file anywhere), not tabular. F10. Schema metadata embedded in manifest rows Severity: INFO. Action: REVIEW. pipeline-intelligence-report's frontmatter carries "version: v6 · May 2026" inside the manifest-tracked header block, unlike every other row (versions live in body changelogs). The manifest itself tracks only file/declared_name/description_chars/body_lines and is internally consistent (declared_name = file for all 14 rows; my length check reproduces all 14 description_chars exactly). F11. internal contradiction inside stale-pipeline-report (found during F7 verification) Severity: WARNING. Action: UPDATE_BODY. Phase 2 states "Never hardcode rep names or owner IDs. The AE roster changes," while the frontmatter description and Slack posting step hardcode Alaina and channel ID C0561C1JCPJ. Proposal: apply its own Phase 2 rule to the description and Slack config. SUMMARY COUNTS CRITICAL: 3 (F1, F3, F4). WARNING: 5 (F2, F5, F7, F11, plus F4's restoration urgency sits inside a CRITICAL). INFO: 4 (F6, F8, F9, F10). One proposal per finding as listed; nothing rewritten. No data was missing for any finding: all counts above were computed from the provided text, and every declared description length was reproduced exactly (delta = 0 on all 14 rows).
RUNBOOK — #incident-2026-08-29-reward-queue (resolved per thread) Incident facts, from the thread only: - Alert: PagerDuty, reward-worker queue depth > 10k, 14:02:10Z [M01] - Peak measured depth: 48,213 pending jobs; normal < 500 [M02] Arithmetic: 48,213 − 500 = 47,713 jobs above the stated normal ceiling - Dead set: 112 jobs, all Redis::TimeoutError, from ~13:58 [M03] - Window: 14:02:10Z [M01] → 14:55:00Z [M10] = 52 min 50 s - People, exactly as named: Bryce Harmon (IC), Farid Osman, Elena Sinclair, Cole Ingram Steps, in execution order (each maps 1:1 to a thread message): Step 1 — Acknowledge page, take IC [M01] — Bryce Harmon, 14:02:10Z - Action: acknowledge PagerDuty alert (reward-worker queue depth > 10k); take IC role. - Verified: not stated in thread — NEEDS CONFIRMATION. - Rollback: none stated; no production system state changed. Step 2 — Measure queue depth [M02] — Farid Osman, 14:04:33Z - Command: `bundle exec rake sidekiq:queue_depth` - Verified: command output — 48,213 pending jobs (normal < 500). - Rollback: n/a (read-only). Step 3 — Inspect dead set [M03] — Farid Osman, 14:06:02Z - Finding: 112 jobs, all Redis::TimeoutError, from around 13:58. - Command/method used: not stated in thread — NEEDS CONFIRMATION. - Rollback: n/a (read-only). Step 4 — Pause enqueue [STATE CHANGE] [M04] — Farid Osman, 14:08:45Z - Command: `bin/rails runner 'FeatureFlag.disable(:auto_recognition_enqueue)'` - Verified: no flag-state check stated at time of execution — NEEDS CONFIRMATION. Downstream evidence: depth falls to 9,400 by 14:33:41Z [M07] and 0 by 14:47:55Z [M08]. - Rollback: `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` — stated in [M04]; executed as Step 9. Step 5 — Clear dead set [STATE CHANGE] [M05] — Elena Sinclair, 14:15:20Z - Action: cleared out the dead set "while I was in the console." Exact console/tool/command not recorded — NEEDS CONFIRMATION. - Verified: not stated in thread — NEEDS CONFIRMATION. - Rollback: none stated in thread. Thread does not say whether the 112 Redis::TimeoutError jobs (from ~13:58 [M03]) were re-queued, retried, or permanently discarded; recovery path unknown — NEEDS CONFIRMATION. Step 6 — Scale workers up 3 → 6 [STATE CHANGE] [M06] — Bryce Harmon, 14:21:07Z - Command: `kubectl scale deployment/reward-worker --replicas=6` (was 3) - Verified: no explicit check stated in thread (e.g., no rollout-status command) — NEEDS CONFIRMATION. Downstream evidence: drain ~1,200/min [M07]; queue at 0 [M08]. - Rollback: `kubectl scale deployment/reward-worker --replicas=3` — stated in [M06]; executed as Step 10. Step 7 — Checkpoint: confirm drain [M07] — Farid Osman, 14:33:41Z - Observation: queue depth 9,400, falling ~1,200/min. - Method: not restated in thread (the only depth command named in the thread is Step 2's) — NEEDS CONFIRMATION. - Arithmetic: 9,400 ÷ 1,200/min ≈ 7.8 min → projected empty ≈ 14:41:31Z; Cole confirmed 0 at 14:47:55Z [M08], consistent with the reported rate. - Rollback: n/a (read-only). Step 8 — Verify recovery [M08] — Cole Ingram, 14:47:55Z - Command: `bundle exec rake sidekiq:queue_depth` → returns 0 - Also verified: Datadog error rate back to baseline. - Rollback: n/a (read-only). Step 9 — Re-enable enqueue [STATE CHANGE; reverses Step 4] [M09] — Bryce Harmon, 14:49:10Z - Command: `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` - Verified: "40 new jobs processed cleanly in the next 3 minutes" — how this was measured is not stated in thread — NEEDS CONFIRMATION. - Rollback: `bin/rails runner 'FeatureFlag.disable(:auto_recognition_enqueue)'` — the Step 4 command, as given in [M04]. Step 10 — Scale workers back down 6 → 3 [STATE CHANGE; reverses Step 6] [M10] — Bryce Harmon, 14:55:00Z - Command: `kubectl scale deployment/reward-worker --replicas=3` - Verified: "Queue stable at 0" — method not restated in thread — NEEDS CONFIRMATION. - Rollback: no rollback is stated in [M10]. Scaling back to 6 via the Step 6 command is the logical inverse, but the thread does not designate it as such — NEEDS CONFIRMATION. Open items / gaps in the thread: - Root cause is never identified: no message explains why the dead set filled with Redis::TimeoutError jobs around 13:58 or why the queue exceeded 10k. The thread records only the error class name; no Redis-side diagnosis or remediation appears. - Disposition of the 112 cleared dead-set jobs (Step 5) is unknown. - Verification method is not recorded for Steps 1, 3, 4 (at execution time), 5, 6, 7, 9, and 10; each is flagged above.
FIRST ERROR
2026-09-03T14:01:12Z — reward-service — ERROR — "Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s"
Every prior line in the slice (13:55:13Z–13:59:30Z) is INFO. The last reward-service line before it is INFO "job enqueued" at 13:59:30Z — 102 seconds of silence, no precursor warnings.
CASCADE IN ORDER (elapsed time from first error)
+0s 14:01:12Z reward-service Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s <- first error
+8s 14:01:20Z reward-service Redis::TimeoutError: retry exhausted for RewardGiveJob
+18s 14:01:30Z reward-service same
+28s 14:01:40Z reward-service same (3rd retry-exhausted line)
+28s 14:01:40Z sidekiq RewardGiveJob failed: Redis::TimeoutError; retrying in 60s
+34s 14:01:46Z first per-job failure: J-00005 (RewardGiveJob) — first batch of 6 (J-00001..J-00006) spans 14:01:46Z–14:01:57Z (11s), sidekiq_jobs.csv
+1m16s 14:02:28Z sidekiq RewardGiveJob failed; retrying (first retry cycle; 48s after the "in 60s" line)
+1m18s 14:02:30Z sidekiq WARN Queue reward depth above 10,000 (backlog begins)
+1m24s 14:02:36Z J-00013 RecognitionDigestJob failed (first collateral job, sidekiq_jobs.csv)
+1m39s 14:02:51Z second batch of 6 RewardGiveJob failures (J-00007..J-00012) spans 14:02:51Z–14:02:58Z (7s)
+1m53s 14:03:05Z api-gateway 502 upstream timeout calling reward-service /gives (first edge failure)
+2m03s 14:03:15Z J-00014 RecognitionDigestJob failed
+2m18s 14:03:30Z web-app Give form submission failed: upstream 502 from api-gateway (first user-visible failure)
+2m19s 14:03:31Z sidekiq RewardGiveJob failed; retrying
Steady-state failure loop, 14:03:48Z–14:06:52Z:
api-gateway 502s: 14:03:48, 14:04:13, 14:05:16, 14:06:52 (5 total)
web-app form failures: 14:04:45, 14:05:42, 14:06:49 (4 total)
sidekiq retry failures:14:04:22, 14:05:26, 14:06:47 (retry intervals after 14:01:40Z: 48s, 63s, 51s, 64s, 81s — 307s over 5 intervals = ~61s average, consistent with the stated 60s retry)
RecognitionDigestJob: J-00015 14:04:55Z, J-00016 14:05:50Z
14:10:56Z–14:20:59Z postgres INFO "checkpoint complete" x6 — only service logging in this stretch, no errors
+20m58s 14:22:10Z reward-service INFO "Redis connection restored; resuming job processing"
+22m15s 14:24:45Z sidekiq INFO "Queue reward depth below 500" (22m15s after the 14:02:30Z depth warning)
Arithmetic summary:
- First error -> first gateway 502: 14:03:05 − 14:01:12 = 1m53s
- First error -> first user-visible failure: 14:03:30 − 14:01:12 = 2m18s
- First error -> restore: 14:22:10 − 14:01:12 = 20m58s
- Last logged error (14:06:52Z) -> restore: 15m18s
- Jobs failed: 12 RewardGiveJob (J-00001–J-00012) + 4 RecognitionDigestJob (J-00013–J-00016) = 16, all error "Redis::TimeoutError"
SERVICE AND JOB INVOLVED
- Service of origin: reward-service. The failing dependency, named only in the error text, is Redis at redis-primary:6379. No Redis service emits any log row in this slice.
- Job: RewardGiveJob — named in all reward-service retry-exhausted lines and all sidekiq ERROR lines, and 12 of the 16 job records. Queue affected: "reward". Collateral job (visible only in sidekiq_jobs.csv, never in the log slice): RecognitionDigestJob, 4 failures, 14:02:36Z–14:05:50Z.
- Downstream impact: sidekiq (retries + reward queue backlog), api-gateway (502s), web-app (Give form failures).
DATADOG QUERY
service:reward-service status:error "Connection to Redis at redis-primary:6379 timed out after 5s"
Time range 2026-09-03T13:55:00Z to 14:05:00Z, sorted by @timestamp ascending. Expected earliest hit: 14:01:12Z, service:reward-service.
Companion check that nothing errored earlier in the slice:
status:error
Time range 13:55:00Z to 14:01:12Z — expect 0 events; the 14:01:12Z reward-service event is then confirmed as the first error.
WHAT THE LOGS DO NOT SHOW
1. Redis itself. No log rows from any Redis service — only the client-side view from reward-service. The logs cannot distinguish Redis being down, saturated, OOM, network-partitioned, or failed over.
2. Root cause and fix. No deploy, restart, config change, scaling, or failover events anywhere. Nothing explains why redis-primary:6379 stopped answering at 14:01:12Z or why it recovered at 14:22:10Z.
3. Precursors. Last reward-service line before the first error is INFO at 13:59:30Z — 102 seconds of silence with no latency creep, pool, or connection warnings.
4. Metrics. No latency, memory, CPU, or connection counts. Queue depth appears only as threshold statements ("above 10,000", "below 500"), never as numbers.
5. Per-job outcomes after restore. Whether the 16 failed jobs were retried to success, lost, or duplicated after 14:22:10Z is not shown. The log slice also contains no job IDs — per-job detail exists only in sidekiq_jobs.csv.
6. RecognitionDigestJob in the log slice. Its 4 failures appear only in sidekiq_jobs.csv; no datadog_logs.csv row mentions this job class.
7. Recovery confirmation for api-gateway and web-app. No healthy/recovered lines for either — errors simply stop at 14:06:52Z. The only positive signals are reward-service at 14:22:10Z and sidekiq at 14:24:45Z.
8. Blast radius. 4 web-app form-failure events are logged, but total failed submissions and affected users are not shown; api-gateway request volume/success rate during the window is not shown.
9. Health checks during the outage. api-gateway's last "health check ok" is 13:58:22Z (pre-incident). No health-check results during 14:01Z–14:22Z, so whether reward-service was reporting healthy while timing out is unknown.
10. Alerts and on-call. No monitor firings, paging, or acknowledgments appear in the slice.
11. Postgres state. Only routine "checkpoint complete" INFO lines (14:10:56Z–14:20:59Z) — no errors, but also no load/lock visibility; whether the database was affected is not shown.
FEATURE FLAG STATE SUMMARY
Source: flags_export.csv (9 flags) + flag_code.md excerpt (6 flag references). Every flag referenced in the code excerpt has a matching export row — there are no code-only orphans. No individual company names or aliases appear in either file, so targeting can only be cited as the segment/list labels given.
FLAGS WITH CODE REFERENCES (6)
1. recognition_streaks_v2 — state: on — targeting: segment:beta_companies — 42 companies
Code (app/models/recognition.rb): gates StreakTracker.record(give) — recording each "give" toward streaks.
2. points_budget_guardrails — state: on — targeting: all_companies — 220 companies
Code (app/services/budget_service.rb): gates BudgetService.new(company).enforce!(giver, points) — enforcing points budget limits on the giver.
3. slack_dm_nudges — state: on — targeting: segment:region_na — 87 companies
Code (app/jobs/nudge_job.rb): job returns early unless enabled; gates SlackDm.send_nudge(user) — Slack DM nudges.
4. redeem_flow_redesign — state: off — targeting: targeted_list — 12 companies
Code (app/controllers/redeem_controller.rb): if enabled, renders RedeemV2Component; else renders RedeemV1Component. With state off, the else branch (RedeemV1Component) applies; the export still lists 12 companies on its targeted list, but the flag is off so none receive the redesigned flow.
5. analytics_dashboard_v3 — state: on — targeting: segment:tier_three — 65 companies
Code (app/controllers/analytics_controller.rb): gates @dashboard = AnalyticsV3.new(company).
6. ms_teams_app_v2 — state: off — targeting: targeted_list — 9 companies
Code (app/services/teams_installer.rb): gates TeamsAppV2.install(company). Flag is off; 9 companies sit on the targeted list but the code path is not active.
FLAGS WITH NO CODE REFERENCE IN THE EXCERPT (3)
7. legacy_give_modal — state: off — targeting: segment:legacy_plan — 14 companies
Not referenced in flag_code.md. What it controls cannot be determined from the data provided.
8. survey_boosters_q3 — state: on — targeting: segment:legacy_plan — 7 companies
Not referenced in flag_code.md. It is on for 7 legacy_plan companies, but its behavior is not determinable from the data provided.
9. paused_offboard_cleanup — state: off — targeting: (empty) — 0 companies
Not referenced in flag_code.md and the only flag with no targeting rules and zero companies. Dead flag per the export.
COUNTS (matching the export exactly)
On flags (5): 42 + 220 + 87 + 65 + 7 = 421 company-flag entries
Off flags (4): 12 + 9 + 14 + 0 = 35 company-flag entries
Total: 421 + 35 = 456 entries across 9 flags
DATA GAPS (explicitly)
- No company names/aliases are provided anywhere; "which companies" can only be answered at the segment/list level (beta_companies, region_na, tier_three, legacy_plan, all_companies, or the unnamed targeted lists behind redeem_flow_redesign's 12 and ms_teams_app_v2's 9).
- Segment membership is not itemized in the export, so the specific companies inside each segment/list are unknown.
- There are no per-company rows, so overlap between segments cannot be deduplicated — the distinct number of unique companies behind the 456 entries cannot be computed. The 220 on points_budget_guardrails reflects the "all_companies" rule as labeled in the export; whether that equals the entire customer base is not stated in the data.
- flag_code.md is self-described as an excerpt ("app/ and lib/"), so "no code reference" means absent from the provided excerpt, not provably absent from the full codebase.
NDA-1 — [PARTY A] and Bonusly: GREEN
Driving clause — clause 3: "Carve-outs: information that (a) is or becomes publicly available through no breach, (b) was known prior to disclosure, (c) is received from a third party without duty of confidence, (d) is independently developed, or (e) must be disclosed by law or court order."
Arithmetic: 2-yr term + 3-yr post-termination survival = 5-yr maximum confidentiality exposure.
Reasoning: All five standard carve-outs are present, the structure is mutual, governing law is standard Delaware, and clause 5 ("No license, no obligation to proceed, no exclusivity") affirmatively rules out hidden obligations or restrictive covenants — nothing here exceeds standard approval authority.
NDA-2 — [PARTY B] and Bonusly: YELLOW
Driving clause — clause 4: "During the term of this Agreement and for eighteen (18) months thereafter, neither party shall solicit for employment or hire any employee of the other party with whom it came into contact under this Agreement."
Arithmetic: 3-yr term + 18-month (1.5-yr) tail = 4.5-yr no-solicit/no-hire window.
Reasoning: An embedded restrictive covenant that goes beyond a bare NDA — "or hire" bars even employee-initiated cold hires of anyone contacted under the Agreement, and the 18-month tail is 50% longer than the common 12-month market norm — counsel review to strike "or hire" and shorten the tail; the carve-outs (clause 2) and Delaware law (clause 3) are otherwise standard.
NDA-3 — [PARTY C] and Bonusly: RED
Driving clause — clause 2: "For a period of three (3) years following the Effective Date, Recipient shall not, directly or indirectly, engage in or provide services to any business that competes with Discloser's business."
Arithmetic: non-compete runs years 1–3 of the 5-yr term (5 − 3 = 2 yrs of confidentiality-only obligations remain after it expires); it binds Bonusly from the Effective Date regardless of whether any deal proceeds.
Reasoning: Merely signing the NDA imposes an immediate, one-way 3-yr non-compete on Bonusly as Recipient with an undefined "competes" scope, no geographic limit, and no carve-out for pre-existing activity — compounded by clause 4 ("No confidentiality carve-outs are stated in this Agreement," so even publicly available or independently developed information stays covered for 5 yrs) and clause 3's unusual governing law ("the laws of the Republic of Ireland... exclusive jurisdiction of its courts") — full legal review required before signature.
Missing from the provided data: party identities and business descriptions are redacted, so the practical blast radius of NDA-3's non-compete cannot be measured from this text; no NDA includes a definition of "Confidential Information," remedies/injunctive relief, or return/destruction provisions, so those terms are unevaluated.