Mean 0.962 · 34/40 perfect tests · $3.88 total · each card: the question → the correct answer (gold) → this model's actual answer
STAGE HYGIENE AUDIT — open pipeline (156 deals, deals_open.csv)
DEFINITIONS USED
- DS2+ deal: stage in {DS2, DS3, DS4, DS5}.
- Why-buys compliant: why_buys is non-empty, >= 15 characters, not a placeholder (tbd / n/a / see notes etc.), OR of the form LONG(n) (truncated real text = treated as present and substantive).
- Missing DS1 timestamp: t_ds1 blank.
- Regressed: among non-blank t_ds1..t_ds5, some earlier-stage timestamp is later than a later-stage timestamp (e.g., t_ds2 > t_ds3).
- Owner names from owners.csv.
WHY-BUYS NON-COMPLIANCE, DS2+ DEALS
Overall: 101 of 124 DS2+ deals non-compliant.
101 / 124 = 0.8145 → 81.5%
By owner (non-compliant / DS2+ total = %):
- Bryce Harmon: 15 / 18 = 83.3%
- Dana Mercer: 18 / 22 = 81.8%
- Alex Franklin: 48 / 61 = 78.7%
- Cole Ingram: 19 / 22 = 86.4%
- Farid Osman: 1 / 1 = 100.0%
Check: 15+18+48+19+1 = 101; 18+22+61+22+1 = 124 ✓
(Archived owners Gavin Porter and Hugo Lindqvist hold no open deals.)
Note: every populated why_buys in the file is a LONG(n) value; all 101 failures are blanks — no placeholder-text cases were found.
DEALS WITH NO DS1 TIMESTAMP
Count: 0 (t_ds1 populated on all 156 rows).
REGRESSED DEALS
Count: 0 (no deal has an earlier-stage t_dsN later than a later-stage t_dsN).
THREE PROCESS FIXES
1. Hard validation gate at stage advance: block DS1→DS2 (and any move to DS2+) in the CRM unless why_buys contains >= 15 characters — a required-field enforcement kills the 81.5% blank-rate at the source instead of via retro audits.
2. Backfill sprint with owner quotas: assign the 101 flagged DS2+ deals back to their owners (Alex Franklin's 48 is the largest block) with a deadline before the next forecast call; freeze forecast-category COMMIT for DS2+ deals with blank why_buys until filled.
3. Weekly automated hygiene report: a scheduled query on t_ds1..t_ds5 ordering, blank DS1 timestamps, and DS2+ why_buys blanks, routed to each rep and their manager — the ordering/DS1 checks are clean today, and a standing check keeps them that way.
Owner resolution report — deals_open.csv joined to owners.csv on owner_id 1) DEALS RESOLVED 156 of 156 open deal rows resolved to an owner name (every owner_id in deals_open.csv has exactly one match in owners.csv). 2) UNMATCHED OWNER IDS None. No deal's owner_id is missing from the owners table, so no deal is left unresolved and no name had to be guessed. 3) ARCHIVED/DEACTIVATED OWNERS The owners table flags two archived owners: Gavin Porter (1520255671) and Hugo Lindqvist (77260721). However, NEITHER archived owner id appears on any open deal, so no open-deal owner ids map to archived/deactivated owners. (Listed names for completeness: Gavin Porter, Hugo Lindqvist — both have zero open deals.) 4) TOTAL PIPELINE AMOUNT PER RESOLVED OWNER (sum of amount, all 156 rows) Bryce Harmon (119337721) — 35 deals 24000+19656+13500+7000+2520+240000+99000+72000+70000+63600+45000+1+21000+23400+13680+5502+8160+1+11400+1+36000+31500+6000+10800+30275+17400+12600+18000+37440+18828+2880+36000+20880+10920+25200 = 1,054,144 Alex Franklin (84342457) — 67 deals 14850+13770+11200+9000+6360+5400+3240+2484+1920+1080+7200+19000+2880+1400+4800+1632+10000+9300+2700+2160+1800+3600+3840+15000+1968+4000+3600+4800+3120+2520+9000+2400+62000+5400+5100+16700+4400+1620+2600+7200+18000+17000+8316+8100+18000+12600+24000+15000+9000+7200+3780+16200+7200+4680+1800+18000+2730+2400+3060+18000+12000+1800+4400+31200+7200+1600+60000 = 624,310 Dana Mercer (83155923) — 24 deals 11250+10500+9000+9000+5400+4800+4600+1920+15000+4200+18900+27000+43875+20000+60000+8100+16250+3150+5000+2100+23400+5400+7350+25000 = 341,195 Cole Ingram (83155924) — 22 deals 2760+1330+7225.4+3360+5616+2700+7781.2+6947.5+40000+12168+2480.4+11116+11193+1875+31750+32175+4779.88+3334.8+58529.25+4140+18000+18900 = 288,161.43 Farid Osman (716654662) — 7 deals 1249+1+1+1+2880+1+1 = 4,134 Elena Sinclair (701163055) — 1 deal 2100 = 2,100 Cross-check: 1,054,144 + 624,310 + 341,195 + 288,161.43 + 4,134 + 2,100 = 2,314,044.43 total across all 156 open deals (35+67+24+22+7+1 = 156 rows accounted for).
Call-to-deal mapping integrity check Files: gong_calls_by_deal_90d.csv (67 rows, 67 unique hs_deal_id) vs deals_open.csv (156 rows, 156 unique deal_id). Aliases agree on every matched id (0 alias mismatches). (a) Orphans — gong rows with no match in deals_open: 30 of 67 (67 − 37 matched = 30). Sample aliases (all from the gong table): - Deal-8FA85D (46 calls) - Deal-8FC3F9 (24 calls) - Deal-3B7945 (21 calls) - Deal-42B265 (21 calls) - Deal-9CCC42 (17 calls) - Deal-36EA09 (17 calls) - Deal-9A43B4 (14 calls) Notably, the orphan block is exactly the tail of the gong file with calls_with_ds2_date = calls_with_sqo_date = 0 and distinct gong_owner_ids (e.g. 6440417017135074779, 373679877710534937, 7971335727414442543) — consistent with closed/won-lost or non-default-pipeline deals, but their disposition is NOT in the data provided, so I can't confirm that. (b) Duplicate conversation keys: 0 rows. For every one of the 67 rows, calls_90d == distinct_conversation_keys (checked all; none has calls_90d > distinct_conversation_keys). (c) Open deals at DS3 or later with ≥1 logged call: - Open deals at DS3/DS4/DS5: 85 - Of those, matched to a gong row with calls_90d ≥ 1: 25 (no DS3+ match had zero calls) - Share: 25 / 85 = 0.294 → 29.4% Matched aliases include Deal-25F752, Deal-E53952, Deal-5408B0, Deal-D348E1, Deal-C26D20, Deal-C6FE92 (full list of 25 computed from the join). Additional integrity flag (not asked, but material): the gong table is labeled "last 90 days," yet 14 rows carry last_call dates in Oct–Nov 2026 (e.g. Deal-8FA85D last_call 2026-11-05, Deal-9CCC42 2026-11-27) — after the data's apparent as-of window and beyond the most recent dates elsewhere (~2026-09-04). Those future-dated rows fall entirely within the orphan set, suggesting the orphan block may come from a different extract/pipeline. The data provided does not say, so I flag rather than conclude.
```sql
-- =====================================================================
-- Requested: per customer company, for its FIRST CALENDAR MONTH as a
-- customer: unique givers, recognition count, successful redemption count.
--
-- DATA AVAILABILITY NOTES (from the catalog only):
-- 1) UNIQUE GIVERS: NOT AVAILABLE. The catalog documents no giving/
-- recognition event-level table (no giver IDs, no giving timestamps).
-- PRODUCTION.PLG.COMPANY_COHORT_SUMMARY exposes M1_USERS, M1_GIVES and
-- M1_REDEMPTIONS, but no unique-giver metric, and M1_USERS (users) is
-- not the same as givers. Rather than invent a source, unique givers is
-- returned as NULL.
-- 2) COMPANY KEY: The catalog says COMPANY_COHORT_SUMMARY is "one row per
-- self-serve company" but does not document the company identifier
-- column name. SELECT cs.* is used so the row's actual company key is
-- returned without inventing a column name.
-- 3) "First calendar month" is taken as the M1_* window, the only
-- first-month metrics documented in the catalog.
-- =====================================================================
SELECT
cs.*, -- one row per customer company (includes the undocumented company key)
cs.M1_GIVES AS m1_recognition_count,
cs.M1_REDEMPTIONS AS m1_successful_redemption_count,
CAST(NULL AS INTEGER) AS m1_unique_givers -- NOT DERIVABLE from the provided catalog (see note 1)
-- PRODUCTION.PLG.COMPANY_COHORT_SUMMARY: the ONLY table documenting
-- per-company first-calendar-month (M1_*) giving and redemption metrics.
-- Chosen over event-level alternatives because:
-- * PRODUCTION.DEPRECATION.REDEMPTION_RECORDS_V2 -- actually named
-- PRODUCTION.DEPRECATED_RECOGNITION.REDEMPTION_RECORDS_V2 -- documents
-- no company key or event date columns, so redemptions cannot be
-- restricted to a company's first month from it; the catalog's
-- STATE='succeeded' rule is the definition behind M1_REDEMPTIONS.
-- * No giving-events table exists in the catalog at all.
-- M1_GIVES is used as-is: per the documented business rule, the
-- "exclude deleted givers" filter must NOT be applied to historical
-- giving counts, and no such filter is applied here.
FROM PRODUCTION.PLG.COMPANY_COHORT_SUMMARY AS cs
;
-- Tables deliberately NOT used, per catalog notes:
-- HUBSPOT_HUB_1973303.V2_LIVE.OBJECTS_DEALS (unpopulated)
-- PRODUCTION.HUBSPOT.DEALS (stale, last sync 2023-03)
-- PRODUCTION.HUBSPOT.GONG_HUBSPOT_MAP_FAST (retired pattern)
-- HubSpot/Gong/Chargebee tables generally: they carry no recognition,
-- giving, or per-company first-month redemption data.
```
CRM DATA AUDIT
===============
CRITICAL DATA GAP: No deals file was provided (no deals.csv or equivalent in the extract). Every deal-level requirement of this audit — owner, stage, amount, close date, why-buys completeness, and the pipeline-amount ranking — CANNOT be computed. I will not invent deal data. Company and contact audits follow.
1. COMPLETENESS PER FIELD
-------------------------
Companies (34 rows):
domain 34/34 = 100.0%
industry 34/34 = 100.0% (but heavily inconsistent — see §4)
employee_count 25/34 = 73.5%
hq_country 28/34 = 82.4%
Contacts (52 rows):
email (valid) 48/52 = 92.3% (4 syntactically invalid, see §3)
title 39/52 = 75.0%
persona 37/52 = 71.2%
Deals (0 rows provided): completeness not computable for owner, stage, amount, close date, why-buys.
2. DUPLICATE COMPANY CLUSTERS
-----------------------------
Cluster A — shared domain acme-corp.com:
Members: C-0A092931 (Technology, 500, US) and C-0A092932 (tech, 510, USA)
Conflict: employee_count 500 vs 510; no enrichment row exists to arbitrate.
Survivor: C-0A092931 — chosen only on the tie-break that 500/US are the more internally consistent pair; the employee-count conflict is UNRESOLVED and requires a source-of-truth call, not a data-derived answer.
Cluster B — shared domain globex.io:
Members: C-0A092933 (SaaS, 200, US) and C-0A092934 (Technology, 200, US)
Conflict: industry SaaS vs Technology; employee_count and hq_country agree.
Survivor: C-0A092934 — industry value "Technology" matches the taxonomy used elsewhere in this CRM; "SaaS" appears nowhere else. No enrichment row exists for globex.io.
No other shared-domain or name-variant clusters exist (all other 30 domains are unique). Note: the extract carries no company names, only aliases, so name-variant matching beyond domain was not possible.
3. INVALID EMAILS AND DOMAIN MISMATCHES (contacts)
--------------------------------------------------
Invalid emails (no local part after @):
CT-0010 "user0@" (company C-66D1FC, stated domain 66d1fc.com)
CT-0080 "user0@" (company C-92D97D, stated domain 92d97d.com)
CT-0081 "user1@" (company C-92D97D, stated domain 92d97d.com)
CT-0192 "user2@" (company C-425E2A, stated domain 425e2a.com)
Domain mismatches (valid email, but email domain ≠ company domain):
CT-0011 user1@other-domain.com vs company domain 66d1fc.com
Note: I did NOT "repair" these by guessing user0@66d1fc.com etc. — that would be inventing values. Pattern-suggests but does not prove.
4. CRM vs ENRICHMENT (zoominfo_enrichment.csv)
----------------------------------------------
Enrichment coverage: 25 of 34 companies have a matching enrichment row. No enrichment row exists for: C-BA969B (ba969b.com), C-332637 (332637.com), C-93C8BF (93c8bf.com), C-EE9FFB (ee9ffb.com), C-C9BB20 (c9bb20.com), C-0A092931/C-0A092932 (acme-corp.com), C-0A092933/C-0A092934 (globex.io). Their gaps cannot be filled.
A. MISSING FIELD FILLS (CRM empty, enrichment populated — safe, no conflict):
employee_count = 400 for: C-EC3025, C-96039F, C-44EA29, C-D04904, C-B23205, C-60C75F, C-7BBDFA, C-50D386 (8 fills, all from matching enrichment rows)
hq_country: enrichment is ALSO blank for every company missing it (C-2D1F1B, C-D73B89, C-44EA29, C-D04904, C-2C60E5, C-EE9FFB; enrichment blank for 2d1f1b.com, d73b89.com, 44ea29.com, d04904.com, 2c60e5.com, and no row for ee9ffb.com). Zero hq_country fills possible.
employee_count for C-93C8BF: missing in CRM AND no enrichment row. Cannot fill.
B. DISAGREEMENTS (both sides populated). Two classes:
Class 1 — cosmetic/normalization only (same real-world value, different string). Recommend: keep either; canonicalize to enrichment form (it is the more standardized taxonomy):
hq_country: "US"/"USA" (CRM) vs "United States" (ZI) — C-66D1FC, C-950043, C-EC3025, C-96039F, C-77A95A, C-B23205, C-E51FB7, C-D0662E, C-425E2A, C-2D7423
industry: "tech"/"Tech " (with trailing space)/"Technology" (CRM) vs "Computer Software" (ZI) — C-66D1FC, C-EC3025, C-44EA29, C-92D97D, C-D04904, C-77A95A, C-AA8DDA, C-B25F40, C-60C75F, C-425E2A
Recommendation: adopt ZI values as the canonical taxonomy (enrichment vendor is the external source of record for firmographics), but flag that "Technology" vs "Computer Software" is a genuine taxonomy choice the team should ratify once and apply globally.
Class 2 — substantive (no disagreement of this class found beyond the acme-corp.com internal 500-vs-510 employee conflict noted in §2, which enrichment cannot arbitrate because acme-corp.com has no enrichment row).
5. TOP 10 FIXES — PIPELINE AMOUNT AT STAKE
------------------------------------------
CANNOT BE RANKED BY PIPELINE AMOUNT. No deal records were provided, so no fix can be tied to a dollar figure. Ranking them by pipeline amount would require inventing numbers, which I will not do. What I can offer is a severity ranking with the amount-at-stake column explicitly NULL pending the deals extract:
# Fix Amount at stake
1 Supply deals extract; re-run this audit UNKNOWN (blocks all below)
2 Resolve acme-corp.com duplicate cluster (C-0A092931 vs UNKNOWN
C-0A092932) incl. 500-vs-510 employee conflict
3 Resolve globex.io duplicate cluster (C-0A092933 vs UNKNOWN
C-0A092934) incl. SaaS-vs-Technology conflict
4 Fix 4 invalid emails: CT-0010, CT-0080, CT-0081, CT-0192 UNKNOWN
(re-verify at source; do not auto-complete the domain)
5 Resolve domain mismatch CT-0011 (user1@other-domain.com UNKNOWN
on 66d1fc.com) — wrong-company contact risk
6 Apply 8 employee_count fills from enrichment (all =400, UNKNOWN
§4A) — zero-conflict, mechanical
7 Fill 13 missing contact titles (§1 list) UNKNOWN
8 Fill 15 missing contact personas (§1 list) — persona gaps UNKNOWN
include economic-buyer-blind accounts C-60C75F, C-B25F40
9 Canonicalize industry/hq_country strings per §4B Class 1 UNKNOWN
(20 records)
10 Escalate 6 unfillable hq_country gaps + C-93C8BF UNKNOWN
employee_count (no enrichment coverage) to manual research
Send me the deals file (owner, stage, amount, close date, why-buys) and I will complete §1 for deals and re-rank the top 10 with actual dollars at stake.
CLASSIFICATION — all 90 lost deals (CSV order)
Rules applied: free-text governs when tag and text conflict; "MIA / unresponsive / no contact since intro" → no decision (buyer disengaged); incumbent renewals (Nectar, Kudos, WorkTango, Awardco, Motivosity, Paylocity, HiThrive) → competitor; spam/ICP-fit and mixed-reason notes → other; side = buyer (buyer-side constraint/choice), Bonusly (text shows a Bonusly capability/ecosystem shortfall drove the loss), unknown (text too vague to attribute).
Tag key: TIM=Lost-Timing (1yr+), COMP=Competitor, MIA=MIA, ICP=Does not fit ICP, DNP=Doing nothing/Not a priority/Cost, BUD=Lost-Budget/Price, DM=Lost DM, FR=Feature Request
```
# alias tag category side
1 Deal-DB0AAC TIM timing buyer
2 Deal-F7F635 COMP competitor unknown
3 Deal-AC944F MIA no decision buyer
4 Deal-214060 MIA no decision buyer
5 Deal-91A056 TIM timing buyer
6 Deal-29326C TIM timing buyer
7 Deal-5DB9B0 ICP other unknown ("Spam.")
8 Deal-831B7B TIM timing buyer
9 Deal-F97C37 COMP competitor Bonusly (vendor had "more diversified offerings")
10 Deal-13E9CF DNP no decision buyer (program deprioritized, "not a budget issue")
11 Deal-39E25C TIM timing buyer
12 Deal-7ED004 BUD pricing buyer
13 Deal-21B045 MIA no decision buyer
14 Deal-B3ABED TIM timing buyer (revisit Q2 next yr, budget for 2028)
15 Deal-422BA6 COMP competitor Bonusly (ADP TotalSource PEO partner won)
16 Deal-ED9AE7 DM other buyer ("Timing, budget, authority" — mixed)
17 Deal-988493 MIA no decision buyer
18 Deal-381C8C COMP competitor unknown (no context in text; tag only)
19 Deal-F308CA MIA no decision buyer
20 Deal-F1E8A6 COMP competitor unknown (no competitor named in text)
21 Deal-B6AC09 TIM timing buyer
22 Deal-70F704 DM no decision buyer (narrow anniversary-awards need, then MIA)
23 Deal-E6E80A TIM timing buyer
24 Deal-B038F0 TIM timing buyer
25 Deal-4664E1 MIA no decision buyer
26 Deal-175756 TIM timing buyer
27 Deal-E74A73 DNP no decision buyer (testing points calc manually first)
28 Deal-DDAB52 COMP competitor Bonusly (Rippl: "more at the same cost", no FX issue)
29 Deal-ACE061 COMP competitor unknown (HeyTaco is rep's guess, buyer wouldn't say)
30 Deal-BB78F3 TIM timing buyer (survey action items first, still interested)
31 Deal-D48E0B MIA no decision buyer
32 Deal-15DA99 TIM timing buyer
33 Deal-F4AF5D TIM timing buyer
34 Deal-79B7A1 TIM timing buyer
35 Deal-583ADB MIA no decision buyer
36 Deal-8E27DA FR no decision buyer (swag only, "didn't want R&R")
37 Deal-2D2F8D COMP competitor unknown ("different direction", nothing more)
38 Deal-E0441F MIA no decision Bonusly (stale, inherited from departed rep)
39 Deal-7CB44D MIA no decision buyer
40 Deal-0F96AA COMP competitor unknown (cut before finalist demo, no reason)
41 Deal-1BCA50 COMP competitor buyer (budget+gift cards; stakeholder down path w/ other vendor)
42 Deal-7CC678 COMP competitor unknown ("Nothing specific provided.")
43 Deal-FAC17C DM no decision buyer (Exec IT Director approval never came)
44 Deal-242273 COMP competitor Bonusly (rival could digitize internal points currency)
45 Deal-50E5D8 DNP no decision buyer (leadership paused)
46 Deal-A2C349 COMP competitor buyer (staying with Awardco + adding surveys)
47 Deal-9F176A TIM timing buyer
48 Deal-7B2236 DNP pricing buyer ("budget… simpler and cheaper for now")
49 Deal-AFA56C MIA no decision buyer
50 Deal-C7156E COMP competitor unknown ("selected another vendor", unnamed)
51 Deal-C33D91 BUD pricing buyer (budget cuts)
52 Deal-9048EB MIA product gap Bonusly ("bad fit… multiple feature gaps")
53 Deal-5E64CE DNP competitor buyer (Nectar contract to Oct 2027; plans to switch to Bonusly after)
54 Deal-8A0992 COMP competitor buyer (Canadian provider alignment)
55 Deal-D0C698 COMP competitor buyer (returning to Kudos)
56 Deal-69CF3D TIM timing buyer
57 Deal-ECBF89 TIM timing buyer
58 Deal-3618CC DM product gap Bonusly ("Wanted Surveys")
59 Deal-EECC02 COMP competitor unknown ("Went another direction.")
60 Deal-5AD03E COMP other unknown ("Wanted more defined budget access" — ambiguous)
61 Deal-D1A623 TIM timing buyer
62 Deal-413C56 DNP no decision buyer (back-to-school priority, CEO not ready)
63 Deal-47F1A1 COMP competitor buyer (staying with WorkTango 12 more months)
64 Deal-BF2A98 COMP competitor buyer (HiThrive recently deployed)
65 Deal-2A292B DNP other buyer (building simple thing internally)
66 Deal-D1AABF MIA no decision buyer
67 Deal-FEDBCB DNP timing buyer (reconnect closer to end of year)
68 Deal-1E7DA9 COMP competitor unknown ("selected another platform")
69 Deal-2BBA21 MIA no decision buyer
70 Deal-286F9C COMP competitor unknown ("not really a good fit", unnamed rival)
71 Deal-7FBAC6 DNP no decision buyer (leadership paused "again")
72 Deal-369281 COMP competitor buyer (using what's in Paylocity)
73 Deal-386F6E MIA no decision buyer
74 Deal-9FCD0D COMP competitor buyer (Canadian company, CEO preference)
75 Deal-55867E TIM no decision unknown (polite "not moving forward at this time")
76 Deal-DAFB82 BUD pricing buyer (no budget until 2028)
77 Deal-2FEDDB DNP no decision buyer (unsure on timing, low engagement)
78 Deal-64B19A COMP competitor buyer ("Likely stayed with Motivosity")
79 Deal-3F86A0 MIA no decision buyer
80 Deal-096750 MIA no decision buyer
81 Deal-F325A5 DM champion left buyer (layoffs + leadership change)
82 Deal-ABD14C DNP no decision buyer
83 Deal-79E61A MIA no decision buyer
84 Deal-8A119B BUD pricing buyer ("Didn't get approval.")
85 Deal-AE7C4E MIA no decision buyer
86 Deal-DAB4F1 MIA no decision buyer
87 Deal-B4B50F MIA no decision buyer
88 Deal-981AD4 FR product gap Bonusly (UI fit, not UK-focused)
89 Deal-DC77FE COMP competitor Bonusly (customization: label points as dollars; "price… wasn't a factor")
90 Deal-5885B9 MIA no decision buyer
```
SUMMARY
Category counts (n=90):
- no decision: 32 (35.6%) — 32/90 = 0.356
- competitor: 26 (28.9%)
- timing: 19 (21.1%)
- pricing: 5 (5.6%)
- other: 4 (4.4%) — Deal-5DB9B0 (spam), Deal-ED9AE7 (mixed), Deal-2A292B (build internally), Deal-5AD03E (ambiguous)
- product gap: 3 (3.3%) — Deal-9048EB, Deal-3618CC, Deal-981AD4
- champion left: 1 (1.1%) — Deal-F325A5
Check: 32+26+19+5+4+3+1 = 90 ✓
Side split:
- buyer: 67 (74.4%)
- unknown: 14 (15.6%)
- Bonusly: 9 (10.0%) — Deal-F97C37, Deal-422BA6, Deal-DDAB52, Deal-E0441F, Deal-242273, Deal-9048EB, Deal-3618CC, Deal-981AD4, Deal-DC77FE
Check: 67+14+9 = 90 ✓
Tag clearly disagrees with free text: 5 deals
1. Deal-9048EB — tag MIA; text describes "bad fit… multiple feature gaps" (product gap, not disengagement).
2. Deal-8E27DA — tag Feature Request; text: "moved forward with just a swag provider and didn't want R&R" — no feature request stated.
3. Deal-3618CC — tag Lost DM; text is "Wanted Surveys" — a product need, no decision-maker loss mentioned.
4. Deal-FAC17C — tag Lost DM; text: contract out two months, Exec IT Director wouldn't approve — the DM existed; this was blocked approval, not a lost DM.
5. Deal-5E64CE — tag Doing nothing/Not a priority/Cost; text: active plan to switch to Bonusly when the Nectar contract ends Oct 2027 — that's timing/competitor, not "doing nothing."
(A further 4 deals — Deal-381C8C, Deal-F1E8A6, Deal-2D2F8D, Deal-7CC678 — carry Competitor tags with no competitor evidence in the text; I kept the tag's category since the text is silent rather than contradictory, but side is unknown.)
Two patterns most worth acting on
1. Disengagement is the #1 killer, not competition. No decision (32) plus much of timing (19, mostly "on hold / paused / reconnect next year") means ~57% of losses ended with the buyer going quiet or deferring — and the MIA rows repeatedly say "no contact since intro" with n_contacts of 2–3 (Deal-2BBA21, Deal-096750, Deal-FEDBCB). This points to a qualification and multi-threading problem early in the funnel: deals are advancing past intro on single-threaded, low-engagement contacts. A gate at intro-stage (second stakeholder engaged or deal doesn't advance) would attack the largest bucket. Deal-E0441F also shows one loss caused by Bonusly's own rep turnover with no coverage handoff.
2. Where competitors actually win, they win on ecosystem and localization — not price. The named/described competitor losses cluster on concrete differentiators: ADP PEO partnership with pre-built integrations (Deal-422BA6), digitizing internal points currency (Deal-242273), point-labeling customization (Deal-DC77FE, where the buyer explicitly said Bonusly "was competitive in price so that wasn't a factor"), broader offering at same cost + no FX friction (Deal-DDAB52), and Canadian-provider preference three times (Deal-8A0992, Deal-9FCD0D, FX angle in Deal-DDAB52). Incumbent stickiness also recurs (Awardco, Kudos, WorkTango, Motivosity, Paylocity, HiThrive, Nectar — 7 deals). A competitive playbook covering PEO/HRIS partner integrations, points-currency/customization use cases, and a Canada/FX story addresses the losses where Bonusly, not the buyer's circumstances, was the deciding factor.
{
"tier_counts": {"LOCK": 6, "ACTION": 45, "BUILD": 50, "REVIVE": 4, "WATCH": 45, "RISKY": 6},
"tier_examples": {
"LOCK": ["Deal-25F752", "Deal-D348E1", "Deal-C26D20"],
"ACTION": ["Deal-E53952", "Deal-9AAE5F", "Deal-C61CF7"],
"BUILD": ["Deal-66D1FC", "Deal-950043", "Deal-B23205"],
"REVIVE": ["Deal-2D1F1B", "Deal-7BBDFA", "Deal-3EED2C"],
"WATCH": ["Deal-5408B0", "Deal-6787C2", "Deal-62D607"],
"RISKY": ["Deal-547B2B", "Deal-B7EBD1", "Deal-A2B47C"]
},
"risky_deals": ["Deal-547B2B", "Deal-B7EBD1", "Deal-A2B47C", "Deal-2465CE", "Deal-584EE5", "Deal-FD9F4E"],
"lock_violations": 0,
"pipeline_shape": "The 156 open deals form a wide, early-stage funnel: roughly 95 sit in DS1/DS2 PIPELINE (BUILD/WATCH territory) while only ~26 are DS4/DS5 late-stage, and the biggest dollar value (Deal-2D1F1B at $240,000; Deal-66D1FC at $99,000; Deal-C6FE92 at $72,000) is concentrated in DS1–DS3 PIPELINE/BEST_CASE deals with thin or stale engagement, so top-of-book value is unproven. Near-term COMMIT coverage is fragile: 6 of the 12 COMMIT deals are RISKY (zero meetings_30d contradicts the commit call), and only 6 deals clear the LOCK bar (DS4/DS5 + ≥1 meeting_30d + contact within 30 days + ≥3 contacts). Engagement skews to recent email touches (most deals contacted 2026-08-17 or later) with meetings rare — the healthy late-stage motion is narrow and the quarter leans on a large body of early deals that still need qualification work. Two deals (Deal-3EED2C, Deal-57FF13) have no row in engagements_by_deal_90d.csv; they were tiered REVIVE for lack of engagement evidence rather than assumed stale. Arithmetic check: 6+45+50+4+45+6 = 156 = total deal count; lock_violations = 0 because LOCK required meetings_30d ≥ 1 by construction."
}
```json
[
{
"transcript_id": "TX-001",
"deal_alias": "Deal-CFE7F4",
"why_buys": [
"Automating anniversary and birthday awards — 'our HR team of three cannot keep up with it manually' (VP People)"
],
"pain_points": [
"Manual tracking in a spreadsheet; 'people slip through the cracks' (HR Admin)",
"HR team of three cannot keep up with manual awards (VP People)"
],
"stakeholders": ["Prospect (VP People)", "Prospect (HR Admin)"],
"budget_signal": "~$40k earmarked for engagement tools this fiscal year (VP People)",
"timeline_signal": "Live before open enrollment in November (VP People)",
"competitor_mentioned": "Achievers — 'We looked at Achievers last year, but it was too heavy for a team our size' (VP People)",
"next_step": "Security review with IT lead on September 12 — explicitly agreed (VP People: 'Yes — let's do the security review on September 12')",
"objections": [
"Needs SSO and audit logs for IT to sign off (HR Admin)"
],
"confidence": "high"
},
{
"transcript_id": "TX-002",
"deal_alias": "Deal-70BB30",
"why_buys": [
"Tie recognition to retention for hourly workforce — 'regretted turnover there is over 30%' (Head of Total Rewards)"
],
"pain_points": [
"Regretted turnover over 30% among hourly workforce (Head of Total Rewards)"
],
"stakeholders": ["Prospect (Head of Total Rewards)", "Prospect (CFO)"],
"budget_signal": "$25k pilot budget approved by finance for this quarter (CFO)",
"timeline_signal": "Decision by end of September (CFO)",
"competitor_mentioned": null,
"next_step": "Rep sends pilot agreement; CFO routes it to legal this week — explicitly agreed (CFO: 'Yes — send the pilot agreement and we'll route it to legal this week')",
"objections": [
"Workday integration must be 'rock solid' — stated as CFO's one condition"
],
"confidence": "high"
},
{
"transcript_id": "TX-003",
"deal_alias": "Deal-530B50",
"why_buys": [
"Make recognition visible across 12 retail locations (People Ops Manager)",
"Give store managers on-the-spot recognition capability — they have 'zero budget autonomy' today (People Ops Manager)"
],
"pain_points": [
"Recognition not visible across 12 retail locations",
"Store managers have zero budget autonomy for on-the-spot recognition"
],
"stakeholders": ["Prospect (People Ops Manager)"],
"budget_signal": null,
"timeline_signal": "'Honestly there's no rush on our side until Q1' (People Ops Manager)",
"competitor_mentioned": "Bucketlist — 'My CEO used Bucketlist at her last company and liked it' (People Ops Manager)",
"next_step": "Schedule a call with the CEO; People Ops Manager to send two times — explicitly agreed",
"objections": [
"'The CEO has to be sold first — she decides anything people-related' (People Ops Manager)"
],
"confidence": "medium"
},
{
"transcript_id": "TX-004",
"deal_alias": "Deal-180D02",
"why_buys": [
"Consolidate three separate recognition tools into one (VP People)",
"Current tools don't talk to their HRIS (VP People)"
],
"pain_points": [
"Paying for three tools, none of which integrate with the HRIS (VP People)"
],
"stakeholders": ["Prospect (VP People)", "Prospect (IT Security Lead)"],
"budget_signal": "'If it's under $15k annually, I can approve it without going to the board' (VP People)",
"timeline_signal": "Procurement cycle runs six to eight weeks minimum (IT Security Lead)",
"competitor_mentioned": null,
"next_step": null,
"objections": [
"Security review took three months for last vendor — IT Security Lead's stated hesitation",
"CFO follow-up not committed: 'Maybe — I need to check her calendar, no promises' (VP People)"
],
"confidence": "medium"
},
{
"transcript_id": "TX-005",
"deal_alias": "Deal-F8767A",
"why_buys": [
"Automate service milestones (HR Director)",
"Analytics on recognition equity across departments (HR Director)"
],
"pain_points": [
"Night-shift teams 'feel invisible' — engagement scores run 20 points lower (People Ops Coordinator)",
"Exec team skeptical after a failed rollout two years ago (HR Director)"
],
"stakeholders": ["Prospect (HR Director)", "Prospect (People Ops Coordinator)"],
"budget_signal": "$12k approved under engagement line (HR Director)",
"timeline_signal": "Running before January all-hands (HR Director)",
"competitor_mentioned": "Nectar — 'We're mid-pilot with Nectar right now, so you'd need to beat that experience' (HR Director)",
"next_step": "Rep presents to exec team on October 2 — explicitly agreed (HR Director: 'Yes — come present to our exec team on October 2')",
"objections": [
"Must beat the in-flight Nectar pilot experience",
"Exec team skepticism from failed rollout two years ago"
],
"confidence": "high"
},
{
"transcript_id": "TX-006",
"deal_alias": "Deal-EE195F",
"why_buys": [
"Cut admin time on service awards — 'I personally spend five hours a month ordering and shipping plaques' (HR Manager)"
],
"pain_points": [
"Five hours/month of manual plaque ordering and shipping (HR Manager)"
],
"stakeholders": ["Prospect (HR Manager)"],
"budget_signal": "'Budget isn't the issue — time is' (HR Manager) — budget explicitly stated as not a constraint; no dollar figure given",
"timeline_signal": "Fiscal year resets in February; 'a Q1 start is realistic' (HR Manager)",
"competitor_mentioned": null,
"next_step": "Rep sends one-page overview; HR Manager forwards it to COO this week — explicitly agreed",
"objections": [
"'Our COO usually prefers building things in-house' (HR Manager)",
"Evaluating against doing it internally rather than a rival vendor"
],
"confidence": "medium"
}
]
```
Extraction notes (per the "never fill from the rep" rule):
- TX-003 budget_signal is null: the $8/employee/month figure came from Alex Franklin (the rep), not the prospect. The CEO and TX-004's CFO and TX-006's COO are mentioned but do not appear in the speaker lists, so they are excluded from stakeholders.
- TX-002 competitor_mentioned is null: the prospect said they had demoed no other vendors; that is an evaluation-stage fact, not a competitor.
- TX-004 next_step is null: the CFO follow-up was declined non-committally ("Maybe… no promises"), so nothing was explicitly agreed.
- TX-006 competitor_mentioned is null: the alternative raised was internal build vs. buy, not a named competitor.
Top 3 closest to signature (as of Slack thread 2026-09-04; today 2026-09-06): 1. Deal-547B2B — $11,200 (Alex Franklin, DS5/COMMIT, close 2026-09-11) Why close: Slack (Franklin, 09-04) — redlines came back clean, signing page is out, VP People said they are signing "tomorrow" (≈09-05). Most advanced signal in either source. Left: Confirm the signature actually landed; nothing outstanding per Slack. 2. Deal-403845 — $9,000 (CRM owner: Alex Franklin; DS5/COMMIT, close 2026-09-11) Why close: Slack (Dana Mercer, 09-04) — order form is with the customer's finance team. Left: Finance countersignature/processing. Note: Slack implies Dana is working this deal but CRM lists Alex Franklin as owner — a data discrepancy worth reconciling; I'm citing both exactly as given. 3. Deal-B7EBD1 — $9,000 (Dana Mercer, DS5/COMMIT, close 2026-09-10) Why close: Earliest close date of any remaining DS5/COMMIT deal, and Slack contains no contradicting status. Left: Unknown — no Slack mention; status rests on CRM stage alone. Explicitly excluded despite DS5/COMMIT: - Deal-2465CE ($5,400, close 09-10): Slack says champion left, procurement freeze, pulled from commit — Q4 at best. CRM is stale. - Deal-A2B47C ($6,360) and Deal-D348E1 ($13,770): Slack calls both "warm, normal legal-review pace" — not signature-imminent. Combined value of the 3: 11,200 + 9,000 + 9,000 = $29,200.
CLASSIFICATION OF CANDIDATES
1. TG-001 — Deal-EC3025
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. Product docs state "SCIM user provisioning ... NOT currently listed as supported capabilities." Not a tier gate — absent from all plans.
Amount: not provided in the data.
2. TG-002 — Deal-D0D6B5
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 HRIS integrations as Workday, BambooHR, Gusto, Rippling only, and explicitly note "ADP Workforce Now integrations are NOT currently listed as supported capabilities."
Amount: not provided in the data.
3. TG-003 — Deal-CFE7F4
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, not a gap. Docs show Custom report builder exists on the Enterprise tier (— / — / yes). Capability exists; prospect's plan lacks it.
Amount: not provided in the data.
4. TG-004 — Deal-84DBA6
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. Slack integration is supported on all plans per docs; the failure is adoption/training, not product capability.
Amount: not provided in the data.
5. TG-005 — Deal-36C33F
EXCLUDED. The mobile-app statement ("we don't have a native mobile app for hourly workers yet") is rep language (Alex Franklin), not prospect voice. The prospect's only line ("The web version should be fine for our office staff for now.") raises no gap. Additionally, mobile apps are not addressed in the product docs excerpt, so no classification against docs is possible.
SUMMARY — TRUE PRODUCT GAPS (prospect-raised, confirmed against docs)
- SCIM user provisioning — raised by Prospect (IT Security Lead), Deal-EC3025. Amount: missing from provided data.
- ADP Workforce Now integration — raised by Prospect (HRIS Manager), Deal-D0D6B5. Amount: missing from provided data.
Data gap note: no deal amounts appear anywhere in transcripts_gaps.csv or product_docs.md; I cannot state them without inventing numbers.
STALE OPEN DEALS — snapshot 2026-09-05 Method: for each open deal, last contact = max(last_email, last_call, last_meeting) from engagements_by_deal_90d.csv, counting only dates on/before 2026-09-05. Days since = 2026-09-05 minus that date. Stale = days > 7 (i.e., last contact before 2026-08-29). No engagement date in the data equals 2026-08-29, so the >7 vs ≥7 boundary distinction changes nothing. The deal's last_contacted_field was ignored per instruction. Example arithmetic: Deal-2D1F1B — last_email 2026-06-11, last_meeting 2026-06-16 → max = 2026-06-16; Jun 16→30 = 14 days, + 31 (Jul) + 31 (Aug) + 5 (Sep) = 81 days. 156 open deals total; 75 stale. Grouped by owner, amount descending: == Bryce Harmon (owner_id 119337721) — 18 stale deals, total $692,964.00 Deal-2D1F1B DS1 $240,000.00 last contact 2026-06-16 (meeting) 81 days Deal-66D1FC DS1 $99,000.00 last contact 2026-08-20 (email) 16 days Deal-950043 DS1 $70,000.00 last contact 2026-08-17 (email) 19 days Deal-B23205 DS1 $45,000.00 last contact 2026-08-20 (email) 16 days Deal-7BBDFA DS3 $37,440.00 last contact 2026-07-21 (email) 46 days Deal-332637 DS2 $36,000.00 last contact 2026-08-27 (email) 9 days Deal-1BEEBF DS1 $31,500.00 last contact 2026-08-17 (email) 19 days Deal-A414F6 DS1 $25,200.00 last contact 2026-08-17 (email) 19 days Deal-C5658B DS1 $23,400.00 last contact 2026-08-20 (email) 16 days Deal-40522D DS3 $21,000.00 last contact 2026-08-17 (email) 19 days Deal-C1FA6D DS1 $18,000.00 last contact 2026-08-20 (email) 16 days Deal-01E193 DS1 $12,600.00 last contact 2026-08-28 (email) 8 days Deal-F0EBBB DS3 $11,400.00 last contact 2026-08-12 (email) 24 days Deal-927338 DS1 $10,920.00 last contact 2026-08-18 (email) 18 days Deal-E25A09 DS1 $6,000.00 last contact 2026-08-27 (email) 9 days Deal-C9C286 DS2 $5,502.00 last contact 2026-08-27 (email) 9 days Deal-012CB1 DS1 $1.00 last contact 2026-08-13 (email) 23 days Deal-3795AD DS2 $1.00 last contact 2026-08-28 (email) 8 days == Dana Mercer (owner_id 83155923) — 16 stale deals, total $279,495.00 Deal-44EA29 DS2 $60,000.00 last contact 2026-08-26 (email) 10 days Deal-E51FB7 DS2 $43,875.00 last contact 2026-08-24 (call) 12 days Deal-B42F46 DS1 $27,000.00 last contact 2026-08-17 (email) 19 days Deal-BA3DDC DS3 $23,400.00 last contact 2026-08-21 (call) 15 days Deal-9DDE86 DS2 $20,000.00 last contact 2026-08-21 (email) 15 days Deal-215CCA DS3 $18,900.00 last contact 2026-08-19 (meeting) 17 days Deal-5EED42 DS3 $16,250.00 last contact 2026-08-25 (email/call) 11 days Deal-57887A DS2 $15,000.00 last contact 2026-08-28 (email) 8 days Deal-944310 DS4 $10,500.00 last contact 2026-08-03 (email) 33 days Deal-B7EBD1 DS5 $9,000.00 last contact 2026-08-20 (email) 16 days Deal-3974EB DS4 $9,000.00 last contact 2026-08-28 (email/meeting) 8 days Deal-F40F04 DS2 $8,100.00 last contact 2026-08-21 (email) 15 days Deal-7599B8 DS3 $7,350.00 last contact 2026-08-18 (email) 18 days Deal-87DDD1 DS1 $5,000.00 last contact 2026-08-17 (email) 19 days Deal-F336B6 DS3 $4,200.00 last contact 2026-08-21 (email) 15 days Deal-0660B4 DS4 $1,920.00 last contact 2026-08-20 (meeting) 16 days == Alex Franklin (owner_id 84342457) — 20 stale deals, total $113,936.00 Deal-CC08D1 DS1 $24,000.00 last contact 2026-08-20 (email) 16 days Deal-E73427 DS3 $18,000.00 last contact 2026-08-26 (email/meeting) 10 days Deal-885F45 DS2 $9,300.00 last contact 2026-08-24 (email) 12 days Deal-C2FF3C DS1 $8,316.00 last contact 2026-08-26 (email) 10 days Deal-3EED2C DS2 $7,200.00 NO ENGAGEMENT ROW — days unknown, counted stale for lack of any logged contact Deal-0D2F7A DS3 $5,100.00 last contact 2026-08-24 (call) 12 days Deal-6C60D4 DS3 $4,800.00 last contact 2026-08-24 (call) 12 days Deal-13FEBD DS2 $4,680.00 last contact 2026-08-24 (call) 12 days Deal-819506 DS1 $4,400.00 last contact 2026-08-28 (email) 8 days Deal-9D0060 DS3 $3,840.00 last contact 2026-08-24 (email) 12 days Deal-690476 DS2 $3,600.00 last contact 2026-08-18 (call) 18 days Deal-C6D97A DS4 $3,240.00 last contact 2026-08-28 (email) 8 days Deal-EE195F DS3 $3,120.00 last contact 2026-08-28 (email) 8 days Deal-278DEC DS3 $2,700.00 last contact 2026-08-28 (email) 8 days Deal-635B8E DS3 $2,600.00 last contact 2026-08-18 (email) 18 days Deal-6883F3 DS1 $2,400.00 last contact 2026-08-20 (email/meeting) 16 days Deal-4A13AD DS3 $2,160.00 last contact 2026-08-10 (email) 26 days Deal-F67D31 DS2 $1,800.00 last contact 2026-08-28 (email) 8 days Deal-5FDCE4 DS3 $1,600.00 last contact 2026-08-24 (email) 12 days Deal-BA571A DS4 $1,080.00 last contact 2026-08-18 (email) 18 days == Cole Ingram (owner_id 83155924) — 18 stale deals, total $252,905.03 Deal-D04904 DS2 $58,529.25 last contact 2026-08-25 (email) 11 days Deal-B25F40 DS3 $40,000.00 last contact 2026-08-28 (email) 8 days Deal-813836 DS2 $32,175.00 last contact 2026-08-25 (email) 11 days Deal-1BA595 DS2 $31,750.00 last contact 2026-08-25 (email) 11 days Deal-CFE1E8 DS3 $18,000.00 last contact 2026-08-25 (email) 11 days Deal-CD47A6 DS2 $12,168.00 last contact 2026-08-25 (email) 11 days Deal-627646 DS3 $11,193.00 last contact 2026-08-25 (email) 11 days Deal-FF809F DS2 $7,781.20 last contact 2026-08-25 (email) 11 days Deal-AF932D DS2 $7,225.40 last contact 2026-08-25 (email) 11 days Deal-A71728 DS2 $6,947.50 last contact 2026-08-25 (email) 11 days Deal-8BC9F5 DS2 $5,616.00 last contact 2026-08-26 (email) 10 days Deal-175395 DS3 $4,779.88 last contact 2026-08-25 (email) 11 days Deal-481E24 DS3 $4,140.00 last contact 2026-08-26 (call) 10 days Deal-C7F9BF DS2 $3,360.00 last contact 2026-08-25 (email) 11 days Deal-2F3A66 DS3 $3,334.80 last contact 2026-08-25 (email) 11 days Deal-342E96 DS2 $2,700.00 last contact 2026-08-12 (email) 24 days Deal-E568D5 DS3 $1,875.00 last contact 2026-08-25 (email) 11 days Deal-FD9F4E DS5 $1,330.00 last contact 2026-08-26 (email) 10 days == Farid Osman (owner_id 716654662) — 2 stale deals, total $2,881.00 Deal-8BA24E DS1 $2,880.00 last contact 2026-08-28 (email) 8 days Deal-8FDCD2 DS1 $1.00 last contact 2026-08-21 (email) 15 days == Elena Sinclair (owner_id 701163055) — 1 stale deal, total $2,100.00 Deal-57FF13 DS1 $2,100.00 NO ENGAGEMENT ROW — days unknown, counted stale for lack of any logged contact PER-OWNER SUMMARY Bryce Harmon 18 stale deals $692,964.00 Dana Mercer 16 stale deals $279,495.00 Alex Franklin 20 stale deals $113,936.00 Cole Ingram 18 stale deals $252,905.03 Farid Osman 2 stale deals $2,881.00 Elena Sinclair 1 stale deal $2,100.00 TOTAL 75 stale deals $1,344,281.03 (692,964 + 279,495 + 113,936 + 252,905.03 + 2,881 + 2,100 = 1,344,281.03) DATA CAVEATS (stated explicitly, not invented): 1. Two open deals have no row in engagements_by_deal_90d.csv: Deal-3EED2C (64623982954, Alex Franklin) and Deal-57FF13 (64524667574, Elena Sinclair). Days-since-last-contact is not computable for them; I counted them stale because no email/call/meeting is logged at all. Flag if you want them excluded. 2. Some engagements rows carry future-dated last_meeting values (e.g., Deal-927338 = 2026-09-17, Deal-BB8880 = 2026-09-15, Deal-8BA24E = 2026-09-15, Deal-499BF6 meeting blank but others similar). Dates after the 2026-09-05 snapshot were excluded from recency; the past-dated email/call was used instead. 3. The instruction to distrust last_contacted_field is validated: e.g., Deal-944310 field says 2026-09-02 but the engagement table's newest real contact is 2026-08-03 (33 days); Deal-CC08D1 field says 2026-09-02 vs 2026-08-20 (16 days); Deal-927338 field says 2026-09-01 vs 2026-08-18 (18 days). 4. Owners Gavin Porter and Hugo Lindqvist are archived and own no open deals in this snapshot; they do not appear.
SNAPSHOT: 2026-09-05 | 30-day window: 2026-08-06 through 2026-09-05 (inclusive) ACTIVITY DATA CAVEAT: Two deals have NO row in engagements_by_deal_90d.csv and contribute 0 to activity totals: Deal-3EED2C (Alex Franklin) and Deal-57FF13 (Elena Sinclair). Deal-3EED2C entered DS2 on 2026-09-03 and IS counted in the DS2 tally. PER-REP TOTALS (summed across that rep's deals; arithmetic shown) Alex Franklin (owner_id 84342457, 67 deals) Emails 307 + Calls 36 + Meetings 41 = 384 total activities Mix: emails 307/384 = 79.9%, calls 36/384 = 9.4%, meetings 41/384 = 10.7% DS2 entries in window: 18 (Deal-EE195F 08-06, Deal-D9A72E 08-06, Deal-7FA0C3 08-07, Deal-E531A6 08-07, Deal-36C33F 08-11, Deal-D1E6C2 08-11, Deal-317E6F 08-12, Deal-4F775F 08-17, Deal-F436DA 08-19, Deal-CA5E44 08-24, Deal-46988D 08-26, Deal-5296C9 08-28, Deal-898FC5 08-28, Deal-E73427 08-28, Deal-403845 09-02, Deal-92D97D 09-02, Deal-1FC049 09-03, Deal-3EED2C 09-03) Activities per DS2 entry: 384 / 18 = 21.3 Bryce Harmon (119337721, 35 deals) Emails 162 + Calls 0 + Meetings 43 = 205 total Mix: 162/205 = 79.0% emails, 0/205 = 0.0% calls, 43/205 = 21.0% meetings DS2 entries in window: 4 (Deal-1CCE5C 08-06, Deal-25F752 08-10, Deal-CA7DC0 08-12, Deal-D73B89 09-03) Ratio: 205 / 4 = 51.3 Dana Mercer (83155923, 24 deals) Emails 84 + Calls 18 + Meetings 11 = 113 total Mix: 84/113 = 74.3% emails, 18/113 = 15.9% calls, 11/113 = 9.7% meetings DS2 entries in window: 1 (Deal-57887A 08-07) Ratio: 113 / 1 = 113.0 Cole Ingram (83155924, 22 deals) Emails 96 + Calls 14 + Meetings 1 = 111 total Mix: 96/111 = 86.5% emails, 14/111 = 12.6% calls, 1/111 = 0.9% meetings DS2 entries in window: 2 (Deal-1BA595 08-12, Deal-42326B 08-26) Ratio: 111 / 2 = 55.5 Farid Osman (716654662, 7 deals) Emails 38 + Calls 0 + Meetings 34 = 72 total Mix: 38/72 = 52.8% emails, 0/72 = 0.0% calls, 34/72 = 47.2% meetings DS2 entries in window: 1 (Deal-499BF6 08-26) Ratio: 72 / 1 = 72.0 Elena Sinclair (701163055, 1 deal) Her only deal (Deal-57FF13) has no engagement row — emails/calls/meetings all MISSING, treated as 0 available data. DS2 entries in window: 0 (t_ds2 blank on Deal-57FF13) Ratio: undefined (0 DS2 entries — division not possible) EFFICIENCY RANKING (lowest activities per DS2 entry = most efficient) 1. Alex Franklin — 21.3 2. Bryce Harmon — 51.3 3. Cole Ingram — 55.5 4. Farid Osman — 72.0 5. Dana Mercer — 113.0 — Elena Sinclair — not rankable (0 DS2 entries, no activity data) MOST EFFICIENT REP: Alex Franklin (21.3 activities per DS2 entry) HIGHEST-VOLUME REP: Alex Franklin (384 total activities in the last 30 days) They do NOT differ — the same rep is both the most efficient and the highest-volume. No causal attribution is made; these are window totals only. BOUNDARY NOTE: Deals with t_ds2 just OUTSIDE the window and excluded: Deal-D9A12F (2026-08-03), Deal-13FEBD (2026-08-04), Deal-55164C (2026-08-05). Deals on 2026-08-06 (Deal-1CCE5C, Deal-EE195F, Deal-D9A72E) are exactly 30 days before the snapshot and included.
QTD SCORECARD — Alex Franklin — as of 2026-09-05 (Q3 2026, quarter start 2026-07-01)
1. BOOKINGS VS QUOTA
QTD closed-won (close_date on/after 2026-07-01):
Deal-A1C3E5 $40,000 2026-07-15 new
Deal-F2C7D8 $20,000 2026-07-24 expansion
Deal-B7D2F4 $35,000 2026-07-31 new
Deal-C9E1A6 $21,000 2026-08-12 new
Deal-A8B4D6 $12,000 2026-08-19 expansion
Deal-D4B8C2 $11,000 2026-08-21 new
Deal-E6F3A9 $6,500 2026-09-02 new
Deal-C5D9E2 $4,500 2026-09-03 expansion
Sum: 40,000+20,000+35,000+21,000+12,000+11,000+6,500+4,500 = $150,000
Quota (quota.csv, 2026-Q3): $200,000
Attainment: 150,000 ÷ 200,000 = 75.0%
Excluded per instruction: Deal-B3E6F1 ($24,000, closed-won 2026-06-20 — before quarter start).
2. NEW VS EXPANSION SPLIT (QTD bookings only)
New: 40,000+35,000+21,000+11,000+6,500 = $113,500 (5 deals, 75.7% of bookings)
Expansion: 20,000+12,000+4,500 = $36,500 (3 deals, 24.3% of bookings)
Check: 113,500+36,500 = 150,000 ✓
3. ACTIVE PIPELINE BY STAGE (status = open, 125 deals, $1,260,390 total)
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
Sum: 284,621+353,760+552,705+23,574+45,730 = $1,260,390 ✓
4. ROLLING 90-DAY DS2-TO-WON RATE (entered_ds2 between 2026-06-07 and 2026-09-05)
Cohort: 111 deals entered DS2 in window
Won: 8 (Deal-A1C3E5, Deal-F2C7D8, Deal-B7D2F4, Deal-C9E1A6, Deal-A8B4D6, Deal-D4B8C2, Deal-E6F3A9, Deal-C5D9E2)
Lost: 27 | Still open: 76
Rate (all cohort): 8 ÷ 111 = 7.2%
Rate (closed-only): 8 ÷ (8+27) = 22.9%
Note: all 8 QTD wins fall in this cohort; 76 of 111 (68.5%) haven't resolved yet, so 7.2% is a floor. Deal-B3E6F1 entered DS2 2026-05-10, outside the window.
5. WINS / LOSSES (closed in quarter through 2026-09-05)
Wins: 8 ($150,000)
Losses: 27 ($329,272)
Win rate on closed: 8 ÷ 35 = 22.9%
Loss reasons:
Lost- Timing (1 year or more): 13 ← top reason
MIA: 5
Competitor: 5
Lost DM: 2
Feature Request: 1
Lost- Does not fit ICP (write in notes): 1
Total: 13+5+5+2+1+1 = 27 ✓
6. ACTIVITY VOLUME, LAST 30 DAYS (ae_engagements.csv, all 161 deals)
Emails: 807
Calls: 112
Meetings: 128
Notes: 50
Total: 807+112+128+50 = 1,097 touches (~6.8 per deal)
Caveat: file gives 30-day counts per deal with no dates, so activity cannot be attributed to specific days or filtered by deal status beyond per-deal totals.
7. THREE COACHING OBSERVATIONS
1) Timing/qualification is the leak, not effort. "Lost- Timing (1 year or more)" accounts for 13 of 27 losses (48%), including the two largest QTD losses (Deal-B3ABED $40,001; Deal-D1A623 $25,200). With 1,097 touches in 30 days, volume isn't the issue — discovery-stage timing/fit screening is. Tighten DS2 exit criteria before investing cycles.
2) Deal-size drift down within the quarter. July wins averaged $31,667 (3 deals, $95,000); August averaged $14,667 (3 deals, $44,000); September-to-date averages $5,500 (2 deals, $11,000). To hit the remaining $50,000 of quota with 25 days left, Alex needs larger deals — and the DS3-heavy pipeline ($552,705 across 67 deals, avg ~$8,249) suggests focusing the few big late-stage tickets (e.g., Deal-403845 $9,000 and Deal-A2B47C $6,360 in DS5) rather than spreading across 125 open deals.
3) Expansion is underweighted and MIA losses signal engagement gaps. Expansion is only $36,500 of $150,000 (24.3%), and 5 losses were "MIA" — prospects going dark. On open DS1/DS2 deals (48 deals, $638,381), several show near-zero 30-day activity (e.g., Deal-3EED2C 0/0/0/0, Deal-690476 0/1/0/0, Deal-0D2F7A 0/1/0/0); a cadence reset there would attack both the MIA pattern and the coverage needed for Q4.
THREADING AUDIT — reference date 2026-09-06 (today)
Active window: last 60 days = engaged on/after 2026-07-08 (2026-09-06 − 60 days). Active = last_engaged_date ≥ 2026-07-08 AND is_former = false.
DATA GAP — stated up front:
- Deal amount: NOT PROVIDED in either file. Cannot be reported for any deal.
- Deal stage: NOT PROVIDED in either file. "Most valuable persona to add given the stage" therefore cannot be stage-conditioned. Below I give the highest-value missing persona as a stage-agnostic default (economic buyer first, since it gates every stage; otherwise the most senior missing persona) and flag the gap per deal.
FLAG CRITERIA: single-threaded = <2 active contacts; under-threaded = <3 active contacts OR all active contacts in one persona.
FLAGGED DEALS (11 of 14):
1. Deal-EC3025 (C-FDD0C7) — SINGLE-THREADED
Amount: missing. Stage: missing.
Active contacts: 1 of 2. CT-047C54 (champion, 2026-09-02 ≥ 07-08, not former) ACTIVE. CT-F2C1AE (economic buyer, 2026-08-15) is_former=true → EXCLUDED.
Personas present: champion. Missing: economic buyer, HR admin, IT security, finance.
Most valuable add: economic buyer (stage unknown — default; buyer coverage was just lost to a former contact).
Unengaged on file: CT-6827DB, Chief People Officer, economic buyer — FITS.
2. Deal-92D97D (C-E23238) — SINGLE-THREADED
Amount: missing. Stage: missing.
Active contacts: 1 of 2. CT-01F5B4 (HR admin, 2026-08-28) ACTIVE. CT-A902AE (champion, 2026-06-01): 06-01 < 07-08 → stale, EXCLUDED (not former, just unengaged >60 days).
Personas present: HR admin. Missing: economic buyer, champion, IT security, finance.
Most valuable add: economic buyer (default; also note the champion went dark — re-engagement candidate).
Unengaged on file: none on file for C-E23238.
3. Deal-50D386 (C-EB10E4) — UNDER-THREADED (2 active < 3)
Amount: missing. Stage: missing.
Active contacts: 2 of 2. CT-AA41B2 (champion, 2026-09-01), CT-B9C35B (HR admin, 2026-08-25) — both ≥ 07-08, not former.
Personas present: champion, HR admin. Missing: economic buyer, IT security, finance.
Most valuable add: economic buyer (default).
Unengaged on file: CT-A1C4B3, Chief People Officer, economic buyer — FITS.
4. Deal-D0D6B5 (C-32918E) — UNDER-THREADED (all one persona)
Amount: missing. Stage: missing.
Active contacts: 3 of 3. CT-87CED4 (2026-09-02), CT-DE6D7C (2026-08-19), CT-FD70B2 (2026-08-07) — all ≥ 07-08, not former. Count is fine (3), but all three are champions → persona concentration flag.
Personas present: champion. Missing: economic buyer, HR admin, IT security, finance.
Most valuable add: economic buyer (default).
Unengaged on file: CT-1FA4DB, Chief People Officer, economic buyer — FITS.
5. Deal-5BFE3B (C-535D36) — UNDER-THREADED (2 active < 3; also single persona)
Amount: missing. Stage: missing.
Active contacts: 2 of 2. CT-57123B (champion, 2026-08-31), CT-5CE757 (champion, 2026-08-12).
Personas present: champion. Missing: economic buyer, HR admin, IT security, finance.
Most valuable add: economic buyer (default).
Unengaged on file: none on file for C-535D36.
6. Deal-36C33F (C-077A0E) — SINGLE-THREADED
Amount: missing. Stage: missing.
Active contacts: 1 of 3. CT-4FE556 (IT security, 2026-08-15) ACTIVE. CT-405B45 (champion, 2026-08-10) former → EXCLUDED. CT-86B22F (economic buyer, 2026-07-30) former → EXCLUDED. Both a champion and a buyer were lost.
Personas present: IT security. Missing: economic buyer, champion, HR admin, finance.
Most valuable add: economic buyer (default; buyer seat is vacant via former contact).
Unengaged on file: CT-1DB73E, Chief People Officer, economic buyer — FITS.
7. Deal-885F45 (C-5E8EFB) — UNDER-THREADED (2 active < 3)
Amount: missing. Stage: missing.
Active contacts: 2 of 2. CT-51C81E (economic buyer, 2026-08-26), CT-D9A0E8 (champion, 2026-08-11).
Personas present: economic buyer, champion. Missing: HR admin, IT security, finance.
Most valuable add: IT security (default — buyer and champion already covered; security is the typical late-stage blocker; stage unknown).
Unengaged on file: CT-B3F25D, IT Security Lead, IT security — FITS.
8. Deal-FCBE5B (C-737030) — SINGLE-THREADED
Amount: missing. Stage: missing.
Active contacts: 1 of 1. CT-4A5317 (champion, 2026-08-29) ACTIVE.
Personas present: champion. Missing: economic buyer, HR admin, IT security, finance.
Most valuable add: economic buyer (default).
Unengaged on file: none on file for C-737030.
9. Deal-5408B0 (C-2AE3AA) — UNDER-THREADED (2 active < 3)
Amount: missing. Stage: missing.
Active contacts: 2 of 2. CT-D33AE4 (champion, 2026-09-01), CT-8742FD (HR admin, 2026-08-18).
Personas present: champion, HR admin. Missing: economic buyer, IT security, finance.
Most valuable add: economic buyer (default).
Unengaged on file: CT-07FA76, Chief People Officer, economic buyer — FITS.
10. Deal-C6D97A (C-5A8FC2) — UNDER-THREADED (all one persona)
Amount: missing. Stage: missing.
Active contacts: 3 of 3. CT-223DDC (2026-08-31), CT-B03555 (2026-08-20), CT-4E8A2B (2026-08-05) — all champions, all ≥ 07-08.
Personas present: champion. Missing: economic buyer, HR admin, IT security, finance.
Most valuable add: economic buyer (default).
Unengaged on file: none on file for C-5A8FC2.
11. Deal-F9A08A (C-0D15DF) — SINGLE-THREADED
Amount: missing. Stage: missing.
Active contacts: 1 of 2. CT-931B10 (champion, 2026-09-03) ACTIVE. CT-913581 (economic buyer, 2026-06-20): 06-20 < 07-08 → stale (78 days), EXCLUDED. Not former — re-engagement candidate.
Personas present: champion. Missing: economic buyer, HR admin, IT security, finance.
Most valuable add: economic buyer (default; the seated buyer is dormant, not gone).
Unengaged on file: CT-697541, Chief People Officer, economic buyer — FITS.
NOT FLAGGED (properly threaded):
- Deal-84DBA6 (C-BE9BE0): 3 active (champion 09-02, economic buyer 08-30, IT security 08-20), 3 distinct personas.
- Deal-4B0BEB (C-1BDFE0): 4 active (champion, economic buyer, HR admin, finance), 4 personas.
- Deal-D348E1 (C-804F29): 5 active, all 5 personas present.
SUMMARY ARITHMETIC: 14 deals total; 11 flagged (4 single-threaded by active count <2: EC3025, 92D97D, 36C33F, FCBE5B, F9A08A — that is 5; correcting: 5 single-threaded, 6 under-threaded). Of 11 flagged, 7 have a fitting unengaged contact on file (EC3025, 50D386, D0D6B5, 36C33F, 885F45, 5408B0, F9A08A); 4 have none on file (92D97D, 5BFE3B, FCBE5B, C6D97A).
Note on the unengaged file: CT-8E04F5 (HR admin) exists on file for C-804F29, but Deal-D348E1 at that company is not flagged, so it is not recommended here.
REP: Alex Franklin — 10 calls (TT-001 through TT-010), 2026-07-28 to 2026-09-03
1) WHAT HE LEADS WITH (first five minutes)
- 8 of 10 calls open with the identical customer-proof story (TT-001, TT-002, TT-003, TT-005, TT-006, TT-007, TT-008, TT-010): "Quick one to kick off: a 400-person retailer we work with cut regretted turnover 18% in two quarters after automating milestone awards..."
- 2 of 10 open with a tailored frame: TT-004 (Deal-403845) "I put together a short agenda — security review first, then pricing." and TT-009 (Deal-1E2498) "You asked for straight pricing last time, so let's start there."
2) THREE MOST COMMON OBJECTIONS AND HANDLING
a. Budget locked — 4x (TT-001/Deal-D348E1, TT-003/Deal-547B2B, TT-006/Deal-60C2C2, TT-010/Deal-84DBA6). Handled by reframing funding source: "Totally fair. Most teams fund this out of turnover savings — that retailer saved about $210k in avoided backfills..."
b. Timing / "revisit next quarter" — 3x (TT-002/Deal-5408B0, TT-005/Deal-C61CF7, TT-008/Deal-D9A12F). Handled by shrinking commitment: "Makes sense. What if we scope a 90-day pilot with one department so you have internal data before next quarter's planning?"
c. Status quo (spreadsheet + gift cards) — 3x (TT-004/Deal-403845, TT-007/Deal-EDC141, TT-009/Deal-1E2498). Handled by scale/automation contrast: "Spreadsheets work until they scale — the difference is automation..."
Not in the top three but present: committee/stall objections 3x (TT-004 min 11, TT-007 min 14, TT-010 min 11) — these were conceded, not handled ("Fair enough.").
3) CONCRETE NEXT STEP AGREED — RATE
- Rep proposed a next step in 7 of 10 calls ("Should we lock the next step — a working session with your team this week?"); all 7 got explicit agreement ("Yes, Thursday at 2pm works — send the invite and I'll bring our HRIS manager."): TT-001, TT-002, TT-003, TT-005, TT-006, TT-008, TT-009.
- No next step asked or agreed: TT-004, TT-007, TT-010.
- Rate: 7 ÷ 10 = 70%.
4) COMPETITORS RAISED BY PROSPECTS
- Awardco — TT-003 (Deal-547B2B): "We're also in late talks with Awardco — their rewards catalog looks bigger than yours."
- Kudos — TT-007 (Deal-EDC141): "How are you different from Kudos? Our CEO used them at her last company."
- (Workhuman appears in TT-005 but was raised by the rep, not the prospect, so it is excluded per the question.)
COACHING NOTES
1. The three calls that died (TT-004, TT-007, TT-010) are exactly the ones with committee/no-urgency stalls — he never made the next-step ask there, answering with "Understood — I'll leave it with you." Build one committee-specific play: offer to prepare the committee material himself and lock a date anyway. That alone could move the 70% next-step rate toward 100%.
2. His competitor responses are strong (acknowledge, then differentiate on automation/analytics), but 8 of 10 openers and all 7 closes are verbatim identical, including prospects' matching replies — the script is working but is one-dimensional; the two tailored opens (TT-004, TT-009) show he can adapt when he has prior-call context, so make pre-call personalization a habit rather than the exception.
Re-verifying the excluded deals directly against the extract (the garbled lookup above was an error on my part — here is the clean, verified result): Q3 2026 FORECAST Pull date 2026-09-05 · Quarter = 2026-07-01 to 2026-09-30 · Extract = 86 deals Weighting: 100% COMMIT + 35% BEST_CASE + 0% PIPELINE; only in-quarter close dates count. 1. IN-QUARTER CATEGORY TOTALS AND COUNTS COMMIT — 7 deals — $44,729 11,200 (Deal-547B2B, 09-11) + 9,000 (Deal-B7EBD1, 09-10) + 9,000 (Deal-403845, 09-11) + 6,360 (Deal-A2B47C, 09-11) + 5,400 (Deal-2465CE, 09-10) + 2,520 (Deal-A5E80A, 09-11) + 1,249 (Deal-499BF6, 09-30) = 44,729 BEST_CASE — 24 deals — $203,565 PIPELINE — 23 deals — $201,637.40 (weight 0%, contributes $0) Total in-quarter deals: 7 + 24 + 23 = 54 2. WEIGHTED FORECAST COMMIT: 1.00 × $44,729 = $44,729.00 BEST_CASE: 0.35 × $203,565 = $71,247.75 PIPELINE: 0.00 × $201,637.40 = $0.00 Weighted forecast = 44,729.00 + 71,247.75 + 0 = $115,976.75 3. EXCLUDED — CLOSE DATE OUTSIDE THE QUARTER Count: 32 deals · Total: $227,575.00 (All 32 fall after 2026-09-30; none before 2026-07-01.) By category: 22 PIPELINE, 9 BEST_CASE ($28,240), 1 COMMIT. The excluded COMMIT is Deal-D348E1, $13,770, close 2026-10-15 — note this is 30.8% of all COMMIT dollars in the extract, pushed into Q4. Excluded BEST_CASE deals: Deal-C61CF7 ($5,400), Deal-48B656 ($5,160), Deal-901332 ($3,600), Deal-47AE31 ($3,600), Deal-15D24F ($3,600), Deal-ED725A ($2,400), Deal-8AD4A5 ($1,800), Deal-5FDCE4 ($1,600), Deal-F5A622 ($1,080). 4. TOP 5 BEST_CASE DEALS IN THE QUARTER (by amount) 1. Deal-2D7423 — $38,935 — DS3 — closes 2026-09-30 2. Deal-25F752 — $24,000 — DS4 — closes 2026-09-25 3. Deal-E53952 — $19,656 — DS4 — closes 2026-09-30 4. Deal-5EED42 — $16,250 — DS3 — closes 2026-09-30 5. Deal-FA32A0 — $11,116 — DS3 — closes 2026-09-25 (Top 5 subtotal: $109,957 = 54% of in-quarter BEST_CASE; at 35% weighting they alone contribute $38,484.95 of the forecast.) ## Data quality Owner is blank on 85 of 86 deals (only Deal-C9C286 has "Bryce Harmon"), so no rep-level rollup, accountability, or territory cut is possible. Stage and forecast category contradict each other — Deal-A5E80A is DS1 (discovery) yet COMMIT, Deal-499BF6 is DS2 yet COMMIT, and Deal-C61CF7 is DS5 (contract) yet BEST_CASE — meaning the category field driving the weighting cannot be trusted. why_buys_chars is 0 on 71 of 86 deals, so the large majority have no documented purchase rationale behind their forecast category. Finally, the close-date distribution is implausibly compressed (nothing before 2026-08-28 despite a July 1 quarter start, and heavy stacking on 2026-09-30 and 2026-10-15), suggesting dates are defaulted placeholders rather than real expected closes.
2x2 ACTIVATION ANALYSIS — plg_company_cohort_2023.csv (220 companies) Definitions applied exactly as specified: giver signal = m1_users >= 5; redemption signal = m1_redemptions >= 1; retained = current_status 'active'. FULL 2x2 (n = cohort size, retention = active / n) | Cohort | n | Active | Retention | |---|---|---|---| | Both signals | 47 | 31 | 31/47 = 65.96% | | Givers-only (m1_users>=5, m1_redemptions=0) | 49 | 23 | 23/49 = 46.94% | | Redemption-only (m1_users<5, m1_redemptions>=1) | 29 | 9 | 9/29 = 31.03% | | Neither | 95 | 38 | 38/95 = 40.00% | Check: 47+49+29+95 = 220 ✓; 31+23+9+38 = 101 actives ✓. EXCLUSIONS FROM DENOMINATOR None. All 220 companies have determinate outcomes: 101 'active', 3 'non_renewing', 116 'cancelled'. Per the stated rule, only 'active' counts as retained at 24 months, so non_renewing and cancelled are non-retained outcomes, not exclusions. No rows have missing m1_users or m1_redemptions values, and all rows are already 25+ months old by construction. LARGEST SINGLE-SIGNAL LIFT: the givers signal (m1_users >= 5). Marginal comparison: - Givers: any-giver-signal 54/96 = 56.25% vs no-giver-signal 47/124 = 37.90% → +18.35 pts - Redemptions: any-redemption-signal 40/76 = 52.63% vs none 61/144 = 42.36% → +10.27 pts The givers signal is roughly 1.8x the redemption signal's marginal lift. WHAT THIS PROVES - In this cohort, holding both signals is associated with the best observed retention (65.96% vs 40.00% baseline for neither, +25.96 pts). The activation hypothesis is directionally supported: two signals > one > (mostly) none. - The givers signal is the stronger single correlate of retention. WHAT THIS DOES NOT PROVE - Causation. This is an observational association; activated companies may simply be larger/more engaged from the start (selection), and nothing in the extract randomizes exposure to the signals. - Redemption-only is actually WORSE than neither (31.03% vs 40.00%, -8.97 pts) — small n (29, 9 actives) makes this noisy, but it means the pattern is not a clean monotone "more signals = better" story for every single-signal cell; the combined lift is carried mainly by the givers signal. - No statistical significance testing was requested or performed; cell sizes (especially redemption-only at 29) give wide confidence intervals. - No conclusions about mechanism, about the 3 'non_renewing' companies beyond counting them as non-retained, or beyond this single 2023 cohort/extract.
ARR RECONCILIATION — CRM vs BILLING, as of 2026-09-05 TOTALS - Billing ARR (all 39 subscriptions, MRR x 12): $617,897.76 (If cancelled subs are excluded: $604,739.28 — but per-account CRM values match the cancelled subs exactly, so the reconciliation below uses all subs.) - CRM ARR (39 company records, hubspot_arr): $603,581.76 - Variance (CRM − Billing): −$14,316.00 VARIANCE DECOMPOSITION (sums exactly to −$14,316.00) 1. Missing CRM record: −$28,449.24 C-21629AA4 (SUB-0004, MRR $2,370.77 x 12 = $28,449.24) has a billing subscription but no company_arr record. 2. Missing billing record: +$16,497.24 C-0D5BBE3A has hubspot_arr $16,497.24 but no subscription in chargebee_subscriptions.csv. 3. Other (rate mismatch, non-rounding): −$2,400.00 C-0F7269D7 (SUB-0006): MRR $2,233.00 x 12 = $26,796.00 vs CRM $24,396.00. Delta −$2,400.00 — too large for rounding; likely stale MRR or a discount/credit not reflected in billing. 4. Rounding: +$36.00 C-0D66DF9E (SUB-0005): $1,932.00 x 12 = $23,184.00 vs CRM $23,200.00 (+$16.00) C-14D70CE0 (SUB-0008): $1,515.00 x 12 = $18,180.00 vs CRM $18,200.00 (+$20.00) Both consistent with CRM rounding up to the nearest $100. 5. Status mismatch: $0.00 variance impact SUB-000E (C-0C8323BF, $4,905.24) and SUB-000F (C-0DC4FB8C, $8,253.24) are cancelled in billing, but CRM still carries identical ARR for both — $13,158.48 of cancelled ARR remains on the books in BOTH systems. It nets to zero variance but is a data-quality issue: CRM should zero out or explain these. Check: −28,449.24 + 16,497.24 − 2,400.00 + 36.00 + 0.00 = −14,316.00 ✓ MISMATCHED ACCOUNTS & SUGGESTED OWNERS Note: neither file contains an owner/rep field, so I cannot name account owners from the data. Suggested owners are functional roles: - C-21629AA4 (SUB-0004) — missing CRM record → Sales Ops (create/link HubSpot company record) - C-0D5BBE3A — missing billing record → Billing Ops (locate orphaned/expired subscription or remove stale CRM ARR) - C-0F7269D7 (SUB-0006) — $2,400.00 rate mismatch → Billing Ops + account owner to verify contract rate - C-0D66DF9E (SUB-0005) — +$16.00 rounding → Sales Ops (low priority) - C-14D70CE0 (SUB-0008) — +$20.00 rounding → Sales Ops (low priority) - C-0C8323BF (SUB-000E), C-0DC4FB8C (SUB-000F) — cancelled but ARR still in CRM → Sales Ops (zero out or confirm renewal/churn date) BUSINESS-RULE VIOLATIONS (term ≠ 12 months requires cf_agreement_end_date) Non-12-month subscriptions: SUB-0002 (24), SUB-000C (24), SUB-0019 (36), SUB-001A (36). - SUB-0002 — C-1794A52C — term 24, active, cf_agreement_end_date EMPTY → VIOLATION - SUB-0019 — C-22170CA1 — term 36, active, cf_agreement_end_date EMPTY → VIOLATION - SUB-000C — C-0DB48281 — term 24, end date 2027-11-30 → compliant - SUB-001A — C-0FC4DBB8 — term 36, end date 2027-11-30 → compliant All other 35 subscriptions are 12-month terms; rule does not apply.
Four core KVMs, 2026-08 vs 2026-07 (unweighted means across all 30 companies; n=30 each month, all tier_three): | KVM | Jul-26 | Aug-26 | Abs Δ | Rel Δ | Dir | |---|---|---|---|---|---| | 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% | ↓ | Arithmetic example (pulse): 0.5086 − 0.6006 = −0.0920; −0.0920 / 0.6006 = −15.31%. Largest relative move: pulse check engagement (−15.31%). The data supports segment attribution: by size_band, smb moved −0.22% (0.6588→0.6573) and mid_market +0.21% (0.5930→0.5942), while enterprise fell −50.13% (0.5500→0.2743). All 10 enterprise aliases (C-0B2895EF, C-0B2213A9, C-0D6CC8E3, C-0D0B047C, C-0D3278C7, C-0FCCD2DF, C-0F6C0F34, C-8C2E8F00, C-0B827671, C-0BA71F12) show pulse engagement collapsing from ~0.53–0.57 to ~0.26–0.29 in August — a uniform, segment-wide break consistent with a data/measurement issue rather than organic decline. plan_tier is constant (tier_three), so no tier attribution is possible. Other three KVMs were effectively flat (all <0.1% moves).
REDEMPTION SECTION — WEEKLY REWARDS REPORT Last completed month: 2026-08 (August 2026). All rows in redemptions_ytd.csv fall between 2026-01 and 2026-08, so the full YTD file (378 rows) is in scope through 2026-08. CORE METRICS - Redemption count: 378 - Total spend: $27,846.00 - Unique redeemers (distinct user_key): 235 - Redemptions per redeemer: 378 / 235 = 1.61 PROVIDER MIX (percent of spend) Spend by provider: custom $10,873.00; Tremendous $8,505.00; Snappy $5,238.00; TangoCard $3,230.00 Check: 10,873 + 8,505 + 5,238 + 3,230 = 27,846 ✓ Exact shares (provider spend / 27,846 × 100): - custom: 10,873 / 27,846 × 100 = 39.05% - Tremendous: 8,505 / 27,846 × 100 = 30.54% - Snappy: 5,238 / 27,846 × 100 = 18.81% - TangoCard: 3,230 / 27,846 × 100 = 11.60% Sum of exact shares = 100.00% Rounded to whole percent (largest-remainder so shares sum to 100): custom 39% + Tremendous 30% + Snappy 19% + TangoCard 12% = 100% (Snappy 18.81→19 and TangoCard 11.60→12 get the remainder points). TOP 5 COUNTRIES BY REDEMPTION COUNT 1. US — 244 2. CA — 24 3. AU — 21 4. GB — 17 (tie) 4. NL — 17 (tie) GB and NL are tied at 17 redemptions each; the data provides no tiebreaker, so both are shown at rank 4. All figures computed directly from redemptions_ytd.csv as provided; no data was missing for any requested metric.
ELIGIBILITY SCREEN (snapshot 2026-09-05) Rules applied conjunctively: R1 health_score < 60, R2 churn_save_eligible_amount > 0, R3 renewal_date within 120 days (i.e., on or before 2027-01-03). QUALIFIED ACCOUNTS — 8 total, $224,601 at stake 1. C-0F6C0F34 — $49,707 | health 51 (R1 ✓), amount >0 (R2 ✓), renewal 2026-10-03 = 28 days (R3 ✓) Play: EXECUTIVE TOUCH. Signal: champion_active = false despite 78% seat utilization (308/395) and growing usage — risk is relational, not adoption. 2. C-0B827671 — $25,365 | health 56 ✓, amount >0 ✓, renewal 2026-11-14 = 70 days ✓ Play: USAGE REVIVAL. Signal: usage_trend_3m = declining with 56% utilization (113/202 seats); champion is active, so re-engagement can run through them. 3. C-0B360C78 — $35,748 | health 57 ✓, amount >0 ✓, renewal 2026-10-28 = 53 days ✓ Play: COMMERCIAL CONCESSION. Signal: growing usage, 75% utilization (246/327), active champion — no adoption or relationship gap; near-term renewal (53 days) with sub-60 health points to commercial terms as the lever. 4. C-0B0F1BAB — $5,494 | health 38 ✓, amount >0 ✓, renewal 2026-09-23 = 18 days ✓ Play: EXECUTIVE TOUCH. Signal: champion_active = false with the most urgent renewal in the book (18 days) and health 38 — needs sponsor escalation now, not an adoption program. 5. C-0CA21961 — $16,829 | health 58 ✓, amount >0 ✓, renewal 2026-12-28 = 114 days ✓ Play: USAGE REVIVAL. Signal: severe underutilization — 84 of 325 seats used (25.8%), trend flat. Value is not being realized; revival before renewal. 6. C-0E9C27D1 — $41,235 | health 39 ✓, amount >0 ✓, renewal 2026-09-24 = 19 days ✓ Play: COMMERCIAL CONCESSION. Signal: usage is healthy (134/157 = 85.4%, flat) and champion is active, yet health is 39 with renewal in 19 days — the documented data shows no adoption/relationship deficit to fix, leaving terms as the only in-data lever. 7. C-0CEF69FD — $32,621 | health 53 ✓, amount >0 ✓, renewal 2026-11-21 = 77 days ✓ Play: EXECUTIVE TOUCH. Signal: champion_active = false; usage is growing (71% utilization, 97/136), so the gap is sponsorship. 8. C-0D3278C7 — $17,602 | health 54 ✓, amount >0 ✓, renewal 2026-11-12 = 68 days ✓ Play: USAGE REVIVAL. Signal: usage_trend_3m = declining plus 33% utilization (126/380 seats) — the worst adoption trend among qualified accounts. Total at stake: 49,707 + 25,365 + 35,748 + 5,494 + 16,829 + 41,235 + 32,621 + 17,602 = $224,601 AT RISK BUT NOT QUALIFIED — 7 accounts - C-0BC71BDD — health 55, renewal 2026-10-27 (54 days), but churn_save_eligible_amount = $0.00 → fails R2. - C-0BE96399 — health 54, declining usage, renewal 2026-10-29 (54 days), amount = $0.00 → fails R2. - C-10A56B0F — health 54, declining usage, renewal 2026-12-12 (98 days), amount = $0.00 → fails R2. - C-0F6694C3 — health 43, declining usage, amount = $0.00 → fails R2; renewal 2027-03-21 (197 days) → also fails R3. - C-0FCCD2DF — health 43, amount = $0.00 → fails R2; renewal 2027-04-23 (230 days) → also fails R3. - C-0BA71F12 — health 52 ✓, amount $6,824 ✓, declining usage, but renewal 2027-04-11 = 218 days out → fails R3. Re-enters eligibility around 2026-12-12 (when it falls inside the 120-day window). - C-0F876796 — health 47 ✓, amount $19,958 ✓, declining usage, but renewal 2027-02-06 = 154 days out → fails R3. Re-enters eligibility around 2026-10-09. Remaining 15 accounts have health_score ≥ 60 (fail R1) and all carry $0 eligible amounts — not at risk under the documented rules. Notes on method: play assignment uses only fields present in the data — champion_active, usage_trend_3m, and seat utilization (seats_used/seats). Where both a usage gap and an inactive champion exist (C-0B0F1BAB, 66% utilization), executive touch takes priority because the renewal timeline (18 days) does not permit a usage program to land first. The eligibility rules file does not itself specify play mapping; that mapping is my analytic judgment from the cited signals.
EXPANSION KIT — C-0DDFC9A7 1) Seat coverage Licensed 150 ÷ headcount 400 = 37.5% coverage. 2) Usage health (two lines) - MAU rose every month: 88 → 95 → 102 → 110 → 118 → 126 (Mar–Aug 2026), +38 users or +43.2% over six months, averaging +7.6/month. - Aug utilization is 126 ÷ 150 = 84% of licensed seats — healthy adoption with only 24 unused seats before the license cap binds. 3) Headroom at the current per-seat rate Per-seat rate: $9,000 ARR ÷ 150 seats = $60/seat/year. - Unused licensed headroom: 150 − 126 = 24 seats → 24 × $60 = $1,440 ARR. - Expansion runway to full headcount: 400 − 150 = 250 seats → 250 × $60 = $15,000 ARR. Note: at +7.6 users/month, the remaining 24 licensed seats are consumed in ~3 months. 4) Who replied / can they buy? Maria S., People Operations Coordinator (last engaged 2026-09-02). No — she explicitly states purchasing and seat expansion sit with Dana R. She offered an introduction. 5) Right buyer from contacts Dana R., VP People — confirmed by Maria's reply; last engaged 2026-05-18. (Sam K., Office Manager, is not indicated as a buyer.) 6) Reply email (to Maria S., 118 words) Subject: RE: Growing your team's recognition program Hi Maria, Thanks so much for the quick, honest reply — and for the kind words about the team's experience with Bonusly. The numbers back you up: monthly active users grew from 88 in March to 126 in August, a 43% climb in six months. That's exactly the kind of usage Dana will want to see. Yes, an introduction to Dana would be great — no pressure on timing. If it's helpful, I'm glad to send over a one-page usage summary beforehand so she has the adoption trends and seat picture in front of her when you connect. Thanks again for pointing me the right way. Best, Cole Ingram Data caveats: No data provided on pricing tiers beyond the derived $60/seat blended rate, contract renewal date, or Dana's budget authority limits — flagged rather than assumed.
ONBOARDING PREP — Account C-0D284E42 (signup 2026-08-11) COMPLETE (per onboarding_account.csv) - Slack integration connected: 2026-08-12 (1 day after signup) - Allowance set: 2026-08-13 (2 days after signup) - Admins added: 2 (field populated; no date given) - First recognition given: 2026-08-15 14:22 (4 days after signup) NOT COMPLETE - HRIS integration: integration_hris field is empty — not connected - First redemption: first_redemption_at field is empty — no redemption recorded as of the last usage date (2026-09-04). That is 20 days after first recognition with zero redemptions on file. EARLY ENGAGEMENT SIGNALS (onboarding_usage.csv, active_givers) - Steady upward trend, no drop-off: - Week 1 (08-11 to 08-17): (3+3+4+4+5+4+7) = 30 / 7 ≈ 4.3 avg/day - Week 2 (08-18 to 08-24): (5+7+6+9+8+9+9) = 53 / 7 ≈ 7.6 avg/day - Week 3 (08-25 to 08-31): (9+11+10+10+11+13+11) = 75 / 7 ≈ 10.7 avg/day - Last 4 days (09-01 to 09-04): (13+13+15+15) = 56 / 4 = 14.0 avg/day - Growth: 3 givers on day 1 → 15 on 09-03/09-04 = +12 givers, a 400% increase (12/3 × 100). - Signal read: recognition behavior is compounding weekly; adoption of giving is healthy. The missing signal is on the receiving/spending side (no redemption). THREE THINGS TO COVER ON THE CALL 1. Close the HRIS gap — integration_hris is empty. Get it connected (or document why it's deferred), since it's the only unchecked setup item besides redemption. 2. Drive the first redemption — 20 days of recognition activity with first_redemption_at still empty suggests employees may not know how to spend points or the catalog/launch step wasn't covered. Push for a first redemption before the next checkpoint. 3. Validate admin coverage against growth — only 2 admins on file while active givers went from 3 to 15 in ~3.5 weeks (5x). Ask whether 2 admins can handle approvals/support at this trajectory and whether more should be added. Data note: no benchmarks, employee headcount, points balances, or redemption-catalog fields were provided, so admin-load and redemption conclusions are directional flags, not measured gaps.
90-DAY RENEWAL RISK BRIEF
As-of date: 2026-09-06. Window: 2026-09-06 through 2026-12-05 (90 days). All 20 accounts in the data renew inside this window.
SYSTEM-OF-RECORD RULE (per account)
Rule given: multi-year contracts are known to be wrong in ChurnZero. So:
- If Chargebee says is_multi_year=true (term 24/36 months) -> trust Chargebee (cb_renewal_date).
- If term is 12 months -> ChurnZero and Chargebee agree on every account anyway; no arbitration needed.
DISAGREEMENTS FLAGGED (all 5 are multi-year; Chargebee date used in each case):
1. C-0B7D2C30 — CZ 2026-09-10 vs CB 2026-09-15 (36-mo). Used CB.
2. C-0BCDB8C2 — CZ 2027-09-18 vs CB 2026-09-18 (36-mo). Used CB. (Note: the CZ 2027 date is internally consistent with a 36-month term, but per the stated rule, multi-year CZ data is untrustworthy, so CB governs.)
3. C-0D2AB865 — CZ 2026-09-10 vs CB 2026-09-22 (24-mo). Used CB.
4. C-0BBE3E60 — CZ 2027-09-26 vs CB 2026-09-26 (24-mo). Used CB. (Same caveat as #2.)
5. C-0F5D2323 — CZ 2026-09-10 vs CB 2026-09-29 (24-mo). Used CB.
RISK RUBRIC (applied uniformly; no other signals in the data)
- HIGH: 3-month active-user change ≤ -10% OR seat utilization < 40%
- MEDIUM: utilization < 60% AND usage flat (3-month change within ±10%)
- LOW: everything else
3-month trend = (Aug-2026 users - Jun-2026 users) / Jun-2026 users. Utilization = seats_used / seats.
RENEWAL REGISTER (sorted by date used)
1) C-0B7D2C30 | Dana Mercer | ARR $65,901 | 2026-09-15 (CB) | Util 274/476 = 57.6% | Trend 97->94->84 = -10/97 = -13.4% (12-mo: 155->84 = -45.8%)
RISK: HIGH — steepest 12-month decline in the book (-45.8%) and utilization under 60% nine days out.
2) C-0BCDB8C2 | Cole Ingram | ARR $54,427 | 2026-09-18 (CB; DISAGREES w/ CZ 2027-09-18) | Util 232/424 = 54.7% | Trend 127->118->110 = -17/127 = -13.4% (12-mo: 200->110 = -45.0%)
RISK: HIGH — usage halved over 12 months and declining every single month; if the CZ 2027 date were actually right, urgency drops, so verify the contract before acting.
3) C-0D2AB865 | Elena Sinclair | ARR $38,022 | 2026-09-22 (CB; DISAGREES w/ CZ 2026-09-10) | Util 250/407 = 61.4% | Trend 125->117->109 = -16/125 = -12.8% (12-mo: 199->109 = -45.2%)
RISK: HIGH — consistent month-over-month churn in active users (-45.2% YoY) into a renewal 16 days away.
4) C-0BBE3E60 | Dana Mercer | ARR $30,993 | 2026-09-26 (CB; DISAGREES w/ CZ 2027-09-26) | Util 74/114 = 64.9% | Trend 39->35->33 = -6/39 = -15.4% (12-mo: 63->33 = -47.6%)
RISK: HIGH — worst 3-month decline in the book (-15.4%) on top of the worst 12-month decline (-47.6%).
5) C-0F5D2323 | Cole Ingram | ARR $90,647 | 2026-09-29 (CB; DISAGREES w/ CZ 2026-09-10) | Util 111/390 = 28.5% | Trend 20->21->18 = -2/20 = -10.0% (12-mo: 21->18 = -14.3%)
RISK: HIGH — only 111 of 390 seats used (28.5%); largest ARR in the September cohort buying ~3.5x the seats it uses.
6) C-0EC6999D | Elena Sinclair | ARR $79,419 | 2026-10-03 (CZ = CB) | Util 31/112 = 27.7% | Trend 17->16->15 = -2/17 = -11.8% (12-mo: 15->15 = 0.0%)
RISK: HIGH — utilization of 27.7% and negative 3-month trend on $79.4K ARR; no growth anywhere in the 12-month series.
7) C-0B20DB64 | Dana Mercer | ARR $21,770 | 2026-10-07 (CZ = CB) | Util 214/378 = 56.6% | Trend 294->298->294 = 0.0% (12-mo: +0.3%)
RISK: MEDIUM — usage perfectly flat but utilization under 60%; no decline signal, just unused seats.
8) C-0BBC4E7A | Cole Ingram | ARR $56,374 | 2026-10-10 (CZ = CB) | Util 228/337 = 67.7% | Trend 142->141->139 = -2/142 = -2.1%
RISK: LOW — stable utilization and usage within noise (-2.1%).
9) C-0FD551AB | Elena Sinclair | ARR $48,815 | 2026-10-14 (CZ = CB) | Util 210/376 = 55.9% | Trend 123->122->126 = +3/123 = +2.4%
RISK: MEDIUM — utilization 55.9% is below 60% despite flat/slightly up usage; expansion risk on unused seats at renewal.
10) C-0F9F8F13 | Dana Mercer | ARR $46,230 | 2026-10-18 (CZ = CB) | Util 199/352 = 56.5% | Trend 185->185->182 = -3/185 = -1.6%
RISK: MEDIUM — flat usage but sub-60% utilization (199 of 352 seats).
11) C-0BC34584 | Cole Ingram | ARR $16,740 | 2026-10-22 (CZ = CB) | Util 327/494 = 66.2% | Trend 104->104->106 = +2/104 = +1.9%
RISK: LOW — modest growth, adequate utilization.
12) C-0B7A7546 | Elena Sinclair | ARR $35,062 | 2026-10-25 (CZ = CB) | Util 182/205 = 88.8% | Trend 64->65->63 = -1/64 = -1.6% (12-mo: 58->63 = +8.6%)
RISK: LOW — 88.8% utilization with flat-to-up 12-month trend; expansion candidate.
13) C-0B369871 | Dana Mercer | ARR $85,128 | 2026-10-29 (CZ = CB) | Util 317/422 = 75.1% | Trend 326->330->333 = +7/326 = +2.1% (12-mo: 289->333 = +15.2%)
RISK: LOW — second-largest ARR, 75% utilization, +15.2% YoY growth.
14) C-0B144C78 | Cole Ingram | ARR $30,899 | 2026-11-02 (CZ = CB) | Util 169/224 = 75.4% | Trend 101->101->106 = +5/101 = +5.0% (12-mo: 90->106 = +17.8%)
RISK: LOW — accelerating usage and 75.4% utilization.
15) C-0FC4DBB8 | Elena Sinclair | ARR $94,732 | 2026-11-05 (CZ = CB) | Util 356/464 = 76.7% | Trend 189->191->193 = +4/189 = +2.1% (12-mo: 168->193 = +14.9%)
RISK: LOW — largest ARR in the book, 76.7% utilization, steady growth.
16) C-0D5BBE3A | Dana Mercer | ARR $39,740 | 2026-11-09 (CZ = CB) | Util 85/102 = 83.3% | Trend 88->90->91 = +3/88 = +3.4% (12-mo: 76->91 = +19.7%)
RISK: LOW — 83.3% utilization, +19.7% YoY.
17) C-0FB9D5AF | Cole Ingram | ARR $63,158 | 2026-11-13 (CZ = CB) | Util 144/199 = 72.4% | Trend 173->173->176 = +3/173 = +1.7% (12-mo: 154->176 = +14.3%)
RISK: LOW — consistent monthly growth, healthy utilization.
18) C-0B344485 | Elena Sinclair | ARR $64,384 | 2026-11-16 (CZ = CB) | Util 224/287 = 78.0% | Trend 238->240->244 = +6/238 = +2.5% (12-mo: 211->244 = +15.6%)
RISK: LOW — 78% utilization, +15.6% YoY.
19) C-0CB2C1B4 | Dana Mercer | ARR $40,628 | 2026-11-20 (CZ = CB) | Util 386/473 = 81.6% | Trend 47->48->49 = +2/47 = +4.3% (12-mo: 43->49 = +14.0%)
RISK: LOW — 81.6% utilization, growing slowly. (Note: seats_used 386 far exceeds Aug active_users 49 — the data does not explain this gap; likely different definitions of "used seat" vs "active user," but the files give no definition.)
20) C-22170CA1 | Cole Ingram | ARR $45,646 | 2026-11-24 (CZ = CB) | Util 251/294 = 85.4% | Trend 143->148->146 = +3/143 = +2.1% (12-mo: 130->146 = +12.3%)
RISK: LOW — highest utilization among the November cohort, positive trend.
TOTALS (arithmetic)
Total ARR renewing in 90 days (all 20 accounts):
65,901 + 54,427 + 38,022 + 30,993 + 90,647 = 280,990 (Sep)
+ 79,419 + 21,770 + 56,374 + 48,815 + 46,230 + 16,740 + 35,062 + 85,128 = 389,538 (Oct)
+ 30,899 + 94,732 + 39,740 + 63,158 + 64,384 + 40,628 + 45,646 = 379,187 (Nov)
= $1,048,715
ARR at risk (HIGH rated):
65,901 + 54,427 + 38,022 + 30,993 + 90,647 + 79,419 = $359,409 (34.3% of renewing ARR: 359,409 / 1,048,715 = 0.3427)
DATA GAPS (stated explicitly)
- No NRR/GRR, health scores, support tickets, sponsor changes, or contract values beyond ARR are provided; risk ratings rest solely on seat utilization and active-user trend.
- The relationship between seats_used (ChurnZero) and active_users (usage file) is not defined in the data; where they diverge sharply (e.g., C-0CB2C1B4: 386 seats used vs 49 active users) I cannot explain it from the given files.
- For the two accounts where CZ shows 2027 dates (C-0BCDB8C2, C-0BBE3E60), the CZ date may reflect a multi-year term end rather than an error — but per the stated rule I trusted Chargebee; both should be verified against the signed contract, since $54,427 + $30,993 = $85,420 of "at-risk" ARR hinges on which date is real.
Quarter support-ticket synthesis — 80 tickets total (2026-06-01 to 2026-08-29), classified by reading body_text, ignoring tags. Tags were confirmed unreliable (e.g., IC-460055 tagged "billing" but body is HRIS provisioning; IC-460040 tagged "how-to" but body is a Slack bug).
All 80 tickets fall into 5 text-based themes (12+18+16+20+14 = 80; 25.0%+22.5%+20.0%+17.5%+15.0% = 100%). ARR affected = sum of distinct accounts' ARR (each account counted once even with repeat tickets).
RANKED BY ARR EXPOSURE
1. HRIS provisioning failures — BROAD PATTERN
Count: 12 | Share: 15.0% (12/80) | Distinct accounts: 3
ARR affected: $114,000 = 48,000 (C-0DDFC9A7) + 36,000 (C-0B2213A9) + 30,000 (C-0F6C0F34)
Ticket ids: IC-460059, IC-460062
Highest ARR exposure in the book; all three affected accounts are mid-market/enterprise ($30K+). New hires not provisioned means seats go unused — direct expansion/renewal risk. Recommendation: escalate to engineering as P1, audit the silent sync failures ("log shows no errors"), and have CSMs proactively contact all three accounts before renewal conversations start.
2. Redemption / gift-card checkout failures — BROAD PATTERN
Count: 18 | Share: 22.5% (18/80) | Distinct accounts: 7
ARR affected: $68,800 = 11,000 + 10,700 + 10,300 + 9,600 + 9,600 + 8,900 + 8,700 (C-14264ABD, C-0B827671, C-0B0F1BAB, C-0FCCD2DF, C-0D9CA315, C-0CEF69FD, C-0F876796)
Ticket ids: IC-460025, IC-460030
Worst breadth-to-value ratio: checkout hangs, gift-card emails never arrive, and points are deducted on failed orders (IC-460024, IC-460023, IC-460026, IC-460037) — customers paying for goods they don't receive. Recommendation: fix the points-deducted-on-error bug first (refund/credit sweep), then stabilize the checkout and email-delivery pipeline.
3. Billing/invoice errors — SINGLE-ACCOUNT NOISE (in volume), but real ARR risk
Count: 16 | Share: 20.0% (16/80) | Distinct accounts: 1 (C-0E9C27D1)
ARR affected: $52,000
Ticket ids: IC-460071, IC-460069
20% of all tickets come from ONE account: repeated seat-count overbilling (200 charged vs 150 licensed), wrong renewal tier pricing, "third invoice in a row." This is single-account concentration, not a platform-wide pattern — but at $52K ARR with 16 touches over 10 weeks and unresolved repeat invoices, it reads as churn-in-progress. Recommendation: exec-sponsor outreach, full billing audit and credit for the seat/tier errors, and confirm the root cause is account-specific contract data rather than the billing engine.
4. Points not posting / balances not updating — BROAD PATTERN (highest volume, lowest ARR)
Count: 20 | Share: 25.0% (20/80) | Distinct accounts: 9
ARR affected: $31,100 = 4,500 + 4,500 + 4,200 + 3,500 + 3,400 + 2,900 + 2,900 + 2,700 + 2,500 (C-0BF20542, C-0D0B047C, C-0D6CC8E3, C-0D3278C7, C-0D284E42, C-21FEBCBB, C-0B2895EF, C-0BE96399, C-0DD0626C)
Ticket ids: IC-460004, IC-460016
The single most common complaint and the widest account spread, but concentrated in small accounts (all ≤$4.5K). Core-product trust issue: recognitions show "delivered" but points never land. Recommendation: instrument the points-award pipeline end-to-end and reconcile delivered-vs-credited events; volume here will keep support costs high even though ARR exposure is modest.
5. Slack integration failures — BROAD PATTERN
Count: 14 | Share: 17.5% (14/80) | Distinct accounts: 4
ARR affected: $18,900 = 5,400 (C-10A56B0F) + 5,200 (C-8C2E8F00) + 4,400 (C-0B843542) + 3,900 (C-0BA71F12)
Ticket ids: IC-460041, IC-460047
Distinct failure modes: sync stops posting, the toggle resets itself, re-auth doesn't stick, slash commands error. Recommendation: treat the self-resetting toggle and re-auth persistence as one OAuth/token-refresh bug and ship a fix; Slack is likely the primary recognition surface for these accounts.
NOTES ON DATA
- No tickets were unclassifiable; no missing ARR values.
- Broad patterns: themes 1, 2, 4, 5 (3–9 distinct accounts each). Single-account noise: theme 3 (all 16 tickets from C-0E9C27D1).
- Ranking is by ARR exposure as instructed; note volume rank is the inverse at the top (points is #1 by volume, #4 by ARR; HRIS is #1 by ARR, last by volume).
- Total ARR touched by tickets: $284,800 across 24 distinct accounts (114,000 + 68,800 + 52,000 + 31,100 + 18,900).
**Prospect:** C-82AF3719 — Technology / Mid-Market / employee_recognition / NA-West **Eligible pool:** only customers with has_case_study=true (10 of 25). Scored on exact matches across the 4 similarity fields (industry, size_band, use_case, region), max 4. Scores for all case-study customers: | Alias | Matches | Score | |---|---|---| | C-64171065 | industry, size_band, use_case | 3/4 | | C-A13C193D | industry, size_band, region | 3/4 | | C-11C31562 | size_band, use_case, region | 3/4 | | C-CD4829A7 | industry, size_band | 2/4 | | C-9D69D147 | size_band, region | 2/4 | | C-FEFCC020 | — | 0/4 | | C-11209339 | — | 0/4 | | C-0CE315B2 | — | 0/4 | Three customers tie at 3/4, so they are the top three. Tie-break: for social proof, a use_case match (same buyer problem) outweighs a region match, and an industry mismatch (Manufacturing vs Technology) outweighs an intra-NA region mismatch (NA-East vs NA-West). **Ranking:** 1. **C-64171065** — Technology ✓, Mid-Market ✓, employee_recognition ✓; region ✗ (NA-East vs prospect NA-West). Strongest: same industry, size, and exact use case; only miss is a minor same-continent region difference. 2. **C-A13C193D** — Technology ✓, Mid-Market ✓, NA-West ✓; use_case ✗ (retention vs employee_recognition). Same industry buyer in the same size band and exact region; use case is adjacent but not identical. 3. **C-11C31562** — Mid-Market ✓, employee_recognition ✓, NA-West ✓; industry ✗ (Manufacturing vs Technology). Exact use case, size, and region, but the industry mismatch makes it the weakest of the three. Note: the data provides no similarity weights, so the tie-break above is an explicitly stated judgment call, not a value present in the files. No customer outside these three scored above 2/4, and no non-case-study customer was considered. No billing data or contact names exist in the provided files, so none were used.
CHANNEL PERFORMANCE — TRAILING 6 MONTHS (2026-03 through 2026-08) Window coverage: all 6 spend months and all SQM dates fall in 2026-03..2026-08. No data outside window; no missing months. PAID CHANNELS paid_search Spend: 6 × $6,000 = $36,000 SQMs: 40 | SQOs: 18 Cost/SQM: 36,000 / 40 = $900.00 Cost/SQO: 36,000 / 18 = $2,000.00 SQM→SQO: 18 / 40 = 45.0% Pipeline: 18 × $40,000 = $720,000 Pipeline/$: 720,000 / 36,000 = 20.00x linkedin_ads Spend: 6 × $4,000 = $24,000 SQMs: 25 | SQOs: 8 Cost/SQM: 24,000 / 25 = $960.00 Cost/SQO: 24,000 / 8 = $3,000.00 SQM→SQO: 8 / 25 = 32.0% Pipeline: 8 × $12,000 = $96,000 Pipeline/$: 96,000 / 24,000 = 4.00x paid_social Spend: 6 × $3,000 = $18,000 SQMs: 0 | SQOs: 0 Cost/SQM: UNDEFINED (18,000 / 0 — spend with zero SQMs) Cost/SQO: UNDEFINED SQM→SQO: UNDEFINED (0 / 0) Pipeline: $0 Pipeline/$: 0 / 18,000 = 0.00x webinars Spend: 6 × $1,500 = $9,000 SQMs: 12 | SQOs: 5 Cost/SQM: 9,000 / 12 = $750.00 Cost/SQO: 9,000 / 5 = $1,800.00 SQM→SQO: 5 / 12 = 41.7% Pipeline: 5 × $12,000 = $60,000 Pipeline/$: 60,000 / 9,000 = 6.67x Paid total: spend $87,000 | 77 SQMs | 31 SQOs | $1,129.87/SQM | $2,806.45/SQO | 40.3% SQM→SQO | $876,000 pipeline | 10.07x pipeline/$ ORGANIC (organic_search — no spend in file) Volume (SQMs): 30 SQOs: 10 → SQO rate: 10 / 30 = 33.3% Pipeline: 10 × $9,000 = $90,000 Cost metrics: n/a (no spend recorded) Also present, unrequested but noted for completeness: referral — 15 SQMs, 6 SQOs (40.0%), $48,000 pipeline, no spend in file. DATA-QUALITY FLAGS (SQO date precedes SQM date) CT-000044 (linkedin_ads): SQM 2026-07-23, SQO 2026-07-18 — 5 days inverted, $12,000 CT-000041 (linkedin_ads): SQM 2026-06-14, SQO 2026-06-09 — 5 days inverted, $12,000 Both are counted as SQOs above; if excluded, linkedin_ads would be 6 SQOs, $4,000/SQO, $72,000 pipeline, 3.00x — the flags don't change its rank. REALLOCATION RECOMMENDATION 1. Kill or fully restructure paid_social ($18,000 over 6 months, zero SQMs). Undefined cost efficiency with $18K burn is the clearest cut. 2. Shift the freed $18,000 to paid_search: best cost/SQO ($2,000), best SQM→SQO (45.0%), and 20.0x pipeline/$ — 5x the efficiency of the next-best paid channel. At observed rates, $18,000 ≈ 20 SQMs ≈ 9 SQOs ≈ $360,000 pipeline (vs. $0 today). 3. Hold webinars ($750 cost/SQM is cheapest, 41.7% conversion, 6.67x pipeline/$) but note small volume — consider a modest test increase rather than a large bet. 4. Reduce linkedin_ads ($3,000 cost/SQO, 32% conversion, 4.0x pipeline/$, plus both date-integrity flags). Reallocate partially to paid_search and partially to webinars testing. 5. Investigate attribution/tracking for paid_social before permanent kill — zero SQMs on $18K spend could also mean broken first-touch attribution. CONFIDENCE: MODERATE, not high. - paid_search (40 SQMs / 18 SQOs): reasonably sized — highest confidence. - linkedin_ads (25 / 8) and organic_search (30 / 10): moderate. - webinars (12 / 5) and referral (15 / 6): small — a ±1-2 SQO swing moves rates by 8-17 points. - paid_social (0 SQMs): absence of evidence is strong for the cut, but can't distinguish "channel doesn't work" from "attribution gap." - Pipeline values are uniform per channel ($40K/$12K/$9K/$8K), so pipeline/$ ratios are driven entirely by SQO counts — treat them as directional. Only 6 months, single cohort, no close/won data: this supports a reallocation direction, not a precise budget formula.
BATTLECARD: RIVALLY — UPDATED (as of 2026-09-03, latest snippet) ONE-LINE POSITIONING Points-based employee recognition aimed at mid-market, now pushing into EU enterprise with data residency and multi-language support [S02, S04, S12, S15]. PRICING (newer source wins; conflict noted) - CURRENT: $7/user/month, Recognition Starter tier, annual billing required — pricing page, 2026-08-12 [S17]. - Prior list: $5/user/month — pricing page, 2026-01-20 [S03], confirmed still live 2026-04-01 [S08]. - CONFLICT: $5 [S03, S08] vs $7 [S17]. S17 is newer (2026-08-12 vs 2026-04-01), so $7 wins. This is a ~40% list-price increase: (7 − 5) ÷ 5 = 0.40. - Deal-intel quotes (not list pricing): $6.50/user/mo quoted to a 500-seat prospect, annual term, 2026-06-02 [S13]; $7/user/mo list with 15% discount offered for a 3-year term, 2026-08-14 [S18]. Effective price in S18: $7 × 0.85 = $5.95/user/mo. - Rivally Pulse (survey add-on) is priced separately, not bundled — press, 2026-09-01 [S23]. Add-on price not stated in the data; missing. WHERE THEY WIN - Engaging recognition feed / points-based model, repeatedly praised [S02, S16]. - Fast setup (<1 week) and out-of-the-box Slack integration [S04]. - Distributed EU teams: multi-language support praised [S12]; EU data residency GA since 2026-07-01 [S15]; Dublin office opened [S15]; ex-Workday VP EMEA hired 2026-05-09 to lead European expansion [S11]. - Support responsiveness: under-4-hour response time praised [S22]. WHERE WE WIN - Analytics and reporting depth: their analytics are limited [S02], dashboards basic vs enterprise tools [S07], admin tooling lags peers [S16]. An 800-seat prospect picked Bonusly over Rivally citing analytics depth, 2026-09-03 [S25]. - Enterprise admin: no SCIM provisioning, manual user management painful [S10]; no bulk recognition editing [S24]. - Data portability: analytics exports are CSV-only, making migration off Rivally hard [S20]. - EMEA rewards catalog thinner than US [S14]. OBJECTIONS AND RESPONSES - "Rivally is cheaper." List is now $7/user/mo [S17], up from $5 [S03]; their discounting is term-dependent (15% off for 3 years [S18]). Counter with analytics depth and SCIM/admin gaps [S07, S10, S24] — the reason the 800-seat deal went our way [S25]. - "They have EU data residency." True and GA as of 2026-07-01 [S15] — don't contest it; pivot to EMEA catalog thinness [S14] and reporting gaps [S07]. - "Their Slack integration just works." Verified true [S04]. Don't deny; steer to enterprise admin needs (SCIM [S10], bulk editing [S24]). - "Their support is great." Praise is on record [S22]; acknowledge and pivot to product gaps [S16, S20]. - "Switching later is fine." Their own reviewer reports migration off Rivally was hard due to CSV-only exports [S20] — lock-in risk cuts against them. RECENT CHANGES (last ~90 days) - 2026-07-01: Dublin office opened; EU data residency GA [S15]. - 2026-08-12: List price raised $5 → $7/user/mo [S17]. - 2026-08-19: Microsoft Teams app v2 in public preview [S19]. - 2026-09-01: Rivally Pulse exited beta; sold as add-on, not bundled [S23]. - Ongoing reviewer complaints: no SCIM [S10], no bulk recognition editing [S24], CSV-only exports [S20]. 12-MONTH WIN/LOSS RECORD VS RIVALLY (2025-09 through 2026-08; no Rivally deals dated 2026-09) Wins: Deal-A9FD43, Deal-7AA785, Deal-44C524, Deal-0D0CD6, Deal-D5B790, Deal-5C636E, Deal-67BE14, Deal-1B6969, Deal-F03E7B, Deal-072E31, Deal-F65C8F, Deal-E46EAB, Deal-1D2392 = 13 Losses: Deal-7767F5, Deal-5645A5, Deal-C6FFAA, Deal-D263E0, Deal-935746, Deal-9066A6, Deal-72A02F = 7 Math: 13 + 7 = 20 total; win rate = 13 ÷ 20 = 65%. Note: 4 of the 7 losses came in 2026-03 through 2026-05 (Deal-9066A6, Deal-5645A5, Deal-72A02F, Deal-C6FFAA) — a losing streak that predates the price increase; we went 3-0 in 2026-06 through 2026-08 (Deal-67BE14, Deal-1B6969, Deal-F03E7B). Deal-level loss reasons are not in the data; missing. OLD CARD DISPOSITION - "Points-based recognition for mid-market" — VERIFIED [S02, S04]. - "Starts at $5/user/month, annual (as of 2026-01)" — SUPERSEDED; now $7 [S17]. - "Rivally lacks a Slack integration" — FALSE; Slack integration works out of the box per reviewer [S04]. Removed. - "Rivally was acquired by WorkHuman in 2025" — UNVERIFIED; no snippet sources any acquisition, and S01 (2025-11-04) describes an independent $40M Series C led by Northgate Ventures, which is inconsistent with a 2025 acquisition. Marked unverified. EXCLUDED (rep opinion, not fact) - S09: Bryce Harmon's "UI is clunky" — AE opinion, not verified against product. - S21: Elena Sinclair's "discounting aggressively" — rep opinion, unconfirmed. (S13/S18 quotes are used only as deal-intel data points, not as a pattern claim.)
SEQUENCE REVIEW (3-step totals; reply/meeting rates on sent) New Logo Nurture — sent 1,386 (500+458+428); open 490/1,386 = 35.4%; reply 90/1,386 = 6.5%; meeting 27/1,386 = 1.9%. Funnel: open→reply 90/490 = 18.4%, reply→meeting 27/90 = 30%. Weakest step: open→reply. Healthy overall. Expansion Nurture — sent 875; open 565/875 = 64.6%; reply 59/875 = 6.7%; meeting 12/875 = 1.4%. Reply→meeting 12/59 = 20%. Weakest step: open→reply (59/565 = 10.4%) — but the open figure is corrupted (see below), so treat 64.6% as unreliable. Cold Outbound - HR Leaders — sent 1,785; open 545/1,785 = 30.5%; reply 8/1,785 = 0.4%; meeting 0/1,785 = 0%. Weakest step: open→reply (8/545 = 1.5%). Cold Outbound - People Ops — sent 1,163; open 340/1,163 = 29.2%; reply 29/1,163 = 2.5%; meeting 6/1,163 = 0.5%. Reply→meeting 6/29 = 20.7%. Weakest step: open→reply (29/340 = 8.5%). TRACKING ERRORS Expansion Nurture step 2: opened 340 > sent 300 — impossible. Inflates the sequence open rate; likely double-counted opens or pixel firing on forwarded/previewed mail. No other step has opened > sent. AUDIENCE OVERLAP - Cold Outbound - HR Leaders x Cold Outbound - People Ops: 21 shared contacts (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). - Expansion Nurture x New Logo Nurture: 2 shared (CT-000301, CT-000624). FAILURE MODE UNDER 2% REPLY Only HR Leaders qualifies (0.4%, declining 5→2→1, zero meetings). Opens ~30% means delivery and subject lines work — the failure is message/offer resonance or targeting: the wrong job-title segment or a CTA worth ignoring. The 21-contact overlap with People Ops (which replies at 2.5%) suggests list segmentation, not deliverability, is broken. ONE CHANGE PER WEAK SEQUENCE - HR Leaders: rewrite the offer/CTA in step 1 using the People Ops messaging as the control; suppress the 21 overlapping contacts. - Expansion Nurture: fix open tracking (deduplicate pixel fires) before any optimization — the 64.6% open rate can't be trusted. - People Ops: tighten step 1 copy/CTA to lift open→reply (8.5%) toward HR-free benchmark levels. FIX FIRST: Expansion Nurture tracking — it's a data-integrity defect corrupting reporting; then HR Leaders, the largest spend (1,785 sends) producing zero meetings.
WEEKLY MARKETING GOALS UPDATE — Q3-2026 (2026-07-01 to 2026-09-30) Days elapsed: 66 / 92 = 71.7% of quarter. Pace benchmark = target x 0.7174. METRIC | QTD ACTUAL | TARGET | DELTA | PACE-EXPECTED @ 66d | PACE SQMs | 230 | 300 | -70 | 213.0 (300x66/92) | AHEAD (230 > 213.0; 76.7% of target vs 71.7% time) SQOs | 84 | 120 | -36 | 86.1 (120x66/92) | BEHIND, marginally (84 < 86.1; 70.0% vs 71.7%) DS2s | 40 | 75 | -35 | 53.8 (75x66/92) | BEHIND (40 < 53.8; 53.3% vs 71.7%) Closed-lost MIA rate | 20.0% (5/25) | 10.0% | +10.0pp worse | n/a (rate, not paced) | BEHIND (lower_better; 2x target) Same-quarter closes | 10 | 20 | -10 | 14.3 (20x66/92) | BEHIND (10 < 14.3; 50.0% vs 71.7%) Active pipeline | $3,000,000 | $4,000,000 | -$1,000,000 | $2,869,565 (4Mx66/92) | AHEAD on time-proration (3.0M > 2.87M); note pipeline is a stock metric, so time-proration is an approximation — coverage is 75.0% of target WHAT MOVED THIS WEEK Missing data: the files contain only a QTD snapshot with no prior-week values, so week-over-week movement cannot be computed from the data provided. Based solely on the QTD position: the top of funnel is the bright spot — SQMs (230 vs 213.0 pace-expected) are ahead of time-proration and active pipeline ($3.0M vs ~$2.87M pace-expected) is marginally ahead. The problem is conversion depth and quality: SQOs sit just under pace, DS2s (53.3% of target at 71.7% of the quarter) and same-quarter closes (50.0% of target) are materially behind, and the closed-lost MIA rate is 20.0% (5 of 25), double the 10% target — meaning one in five lost deals is being lost without a recorded reason, which understates our ability to diagnose the DS2/close shortfall. With 26 days left, closing the DS2 gap requires 35 more DS2s (~9.6/week vs the 3.0/week QTD average of 40/13 weeks implied — actual weekly rate not derivable from data given).
Q3 weighted forecast is $115,976.75 ($44,729 COMMIT plus 35% of $203,565 BEST_CASE), but don't run the business on it yet. All 7 COMMIT deals lack documented why-buys and owner is blank on 85 of 86 deals, so nothing is verifiable against quota. Require owners to document why-buys and re-confirm the 32 deals ($227,575) pushed past quarter end before we lock guidance.
Subject: Following up on 150-seat pricing — Deal-0D2F7A Hi [VP People], I sent over a recap of our July 28 demo with pricing for 150 seats on August 5, and I wanted to check in since I haven't heard back. Your team's reaction to the automated milestone awards and points catalog stuck with me — especially given birthdays and anniversaries are still tracked manually today. Could we grab 15 minutes in the next week or two to walk through the pricing together and answer any questions from you and the two HR admins who joined the demo? Happy to work around your calendar. Best, Alex Franklin — Notes: 118 words. Referenced touch: ENG-00001 (Aug 5 outbound pricing recap email). Single ask: a 15-minute call to review pricing. All details drawn from the engagement history; recipient name isn't in the data, so it's left as a placeholder.
Weekly GTM Digest — Week of 2026-08-31 Marketing: This week's engine delivered 46 SQMs against a target of 52 — we came up short, and we're owning it. The bright spot: our webinar channel punched above its weight with 18 of those SQMs, proving that when we bring people together, recognition-worthy conversations follow. Paid search kept its discipline with cost per SQM holding steady at $150, so the gap was volume, not efficiency. Same playbook, more swings next week. Sales: The team turned 46 SQMs into 14 SQOs and booked 9 DS2 meetings — real momentum moving deals deeper into the pipeline. New pipeline created hit $310,000, and 3 same-quarter closes landed in the week, proof that speed and quality can coexist. That's the kind of hustle worth celebrating: disciplined qualification feeding a pipeline that's building for the quarter ahead, not just the week in front of us. CS: Two renewals saved this week — two customer relationships kept growing where they might have walked. Team NPS moved to 61, a number that says our customers feel seen and valued. We're also carrying 3 open red-flag accounts into next week, and the plan is simple: get in front of them, listen hard, and turn things around. Recognition isn't just our product; it's how we show up for every account. PLG: 412 new signups joined the platform this week, with activation at 31 percent. The most exciting number: 38 companies reached the aha moment of 10 recognition gives — the point where teams feel what a culture of appreciation actually does. That's 38 workplaces where recognition went from idea to habit. Our job now is widening the path from signup to that moment. — All figures sourced from week_extracts.md (week of 2026-08-31). Word count: ~260. No data was missing from the extracts for the requested teams; nothing has been added beyond what was provided.
PARTNER DIGEST — 2026-08-24 to 2026-09-04 ACTIVE PARTNERS 1. Apex Rewards Co Status: Active. Co-webinar locked for 09-15. Two sourced opps this week, both in DS1 (logged with UTM Source = Partner, per Cole Ingram). Pipeline: 2 deals — Deal-DDAAF2 ($180,000) + Deal-2CF33E ($95,000) = $275,000 Arithmetic: 180,000 + 95,000 = 275,000 2. HRCloud Partners Status: Active. Integration referral closed security review; opp moved to DS2. One sourced opp this period (per Alex Franklin). Pipeline: 1 deal — Deal-F1CDA5 ($140,000) = $140,000 3. CultureBridge Status: Active. Lunch-and-learn produced two sourced opps, both early stage (per Farid Osman). Pipeline: 2 deals — Deal-096E1D ($60,000) + Deal-067213 ($75,000) = $135,000 Arithmetic: 60,000 + 75,000 = 135,000 4. WorkWell Group Status: Active. Wants to restart joint playbook in Q4; no sourced deals this period; planning call booked for 09-09 (per Dana Mercer). Pipeline: 0 deals — $0 QUIET PARTNERS (no activity in data this period) 5. Recogniq — Quiet; no sourced deals or Slack activity in the provided data. 6. KudosWave — Quiet; no sourced deals or Slack activity in the provided data. 7. PeopleFirst Advisors — Quiet; no sourced deals or Slack activity in the provided data. 8. TotalPerk — Quiet; no sourced deals or Slack activity in the provided data. PERIOD TOTALS (all UTM Source = Partner) Partner-sourced pipeline: 5 deals Total amount: 275,000 + 140,000 + 135,000 + 0 = $550,000 Arithmetic check: 180,000 + 95,000 + 140,000 + 60,000 + 75,000 = 550,000 — matches the 5 rows in partner_deals.csv. Reconciliation notes: - Slack counts match deal data: Apex 2 sourced opps = 2 deals; HRCloud 1 sourced opp = 1 deal; CultureBridge 2 sourced opps = 2 deals; WorkWell 0 = 0 deals. - No deal aliases or partners appear in the data beyond those listed. No additional facts available for the quiet partners beyond roster status.
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. A SOC 2 Type II report is maintained and renewed annually. A copy is available to prospects under NDA. [P2] Q4 — 90 days after the end of the contract. Data is retained for the duration of the contract plus 90 days, then deleted from production systems. [P3] 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, along with SCIM user provisioning, on the Enterprise plan. [P5] Q7 — Production databases are backed up daily. Backups are encrypted and retained for 35 days. [P6] Q8 — UNANSWERABLE from the provided excerpts. No excerpt addresses ISO 27001. The SOC 2 Type II report is mentioned [P2], but that is a different certification and should not be substituted. Documents that would answer this: Bonusly's certification page/compliance section of the trust portal (trust.bonusly.com) or a completed security questionnaire from the vendor. Q9 — UNANSWERABLE from the provided excerpts. No excerpt states an uptime SLA percentage. Document that would answer this: the order form, Master Subscription Agreement (MSA), or the SLA/uptime page on the trust portal. Q10 — UNANSWERABLE from the provided excerpts. No excerpt mentions HIPAA or a Business Associate Agreement (BAA). Documents that would answer this: the BAA itself (if offered), the MSA/DPA, or vendor confirmation from the compliance team via the trust portal. Additional context the excerpts do provide that may support the unanswerable items: incident notification within 72 hours for confirmed security incidents affecting customer data [P7], and employee production access under role-based access control with MFA [P8]. Neither covers Q8, Q9, or Q10.
RECONCILIATION REPORT — 14 skill files vs skill_manifest.csv
Method note: all findings below are derived solely from the provided manifest and file contents. Nothing was re-queried live.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 1 — Duplicate ALWAYS-trigger phrases: comms-drafter vs email-drafter
Severity: CRITICAL · Action: MERGE
Evidence (verbatim overlap in both descriptions' trigger lists):
- "write me an email," "draft a follow-up," "help me reply," "what should I say," "bump email," "contract nudge" — appear in BOTH
- Both also trigger on "user pastes an existing message/email and asks for feedback, rewrite, or rating"
- Both cover identical scopes: outbound, follow-ups, post-demo recaps, pricing/contract follow-up, EOQ pushes, renewal/expansion, QBR follow-ups, onboarding, check-ins
- Bodies are near-duplicates: same contract follow-up tone benchmark paragraph, same "Recommended / Option 2 Softer / Option 3 Firmer" output format, same lane marker pointing to deal-strategy-coach
comms-drafter is the superset (adds Intercom/support, partner/channel, rewards-vendor comms). email-drafter's only unique capability is the Gmail signature retrieval procedure.
Proposal: Merge email-drafter into comms-drafter — port the "Retrieve Gmail signature" section into comms-drafter's sales-communications step, delete email-drafter, and remove its manifest row in the same change.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 2 — Duplicate ALWAYS-trigger phrases: pipeline-intelligence-report vs weekly-pipeline-report
Severity: CRITICAL · Action: TRIM_DESC
Evidence (side by side):
- pipeline-intelligence-report: "run the pipeline report", "pipeline update", "what's the pipeline look like"
- weekly-pipeline-report: "run the pipeline update", "generate the pipeline report", "do the pipeline report", "update the pipeline", "what does pipeline look like"
"what's the pipeline look like" vs "what does pipeline look like" is the same phrase with one word swapped; both skills declare ALWAYS-trigger and both claim to be the pipeline report. (next-to-close is NOT implicated — it explicitly disambiguates itself from pipeline-intelligence-report in its description.)
Proposal: TRIM_DESC on weekly-pipeline-report — restrict its triggers to demand-gen-specific phrases ("weekly pipeline report", "SQM/SQO/DS2 metrics", "bookings MTD", "Ben's weekly update") and delete the generic phrases ("pipeline update", "run the pipeline report", "what does pipeline look like"), leaving pipeline-intelligence-report as the owner of generic pipeline phrasing.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 3 — Circular delegation chain
Severity: WARNING · Action: REVIEW
Chain (named): deal-strategy-coach → email-drafter → deal-strategy-coach
- deal-strategy-coach body: "When drafting manager-to-prospect emails, use the `email-drafter` skill"
- email-drafter body (Lane marker): "If the user needs strategic deal coaching ... point them to the deal-strategy-coach skill. If they need both strategy and a draft, do the draft here and suggest they use deal-strategy-coach"
A session that follows both instructions literally can bounce coach → drafter → coach indefinitely. comms-drafter feeds the same cycle via its identical lane marker (comms-drafter → deal-strategy-coach → email-drafter → deal-strategy-coach).
No other cycles found: pipeline-intelligence-report → closed-lost-analysis and next-to-close → pipeline-intelligence-report are one-way; analysis-validator → 8 specialists are one-way.
Proposal: Make the handoff strictly one-way — drafting skills (email-drafter/comms-drafter) may only SUGGEST deal-strategy-coach to the user in prose (never invoke/delegate), while deal-strategy-coach keeps its delegation to the drafter.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 4 — Dangling delegation targets (referenced skills absent from manifest AND from the provided file set)
Severity: WARNING · Action: REVIEW
Dangling targets (named), with referrers:
- bonusly-brand — comms-drafter, email-drafter, sales-forecast, signalforge-claim-compressor
- prospect-research-multithreading — comms-drafter, email-drafter, deal-strategy-coach
- skill-orchestrator — analysis-validator (§11), signalforge-feedback (activation checklist)
- caveman — signalforge-claim-compressor ("Relationship to Caveman Skill")
- signalforge-reports — pipeline-intelligence-report, weekly-pipeline-report (via /mnt/skills/organization/ path)
- analysis-validator §12.4 specialists (8): 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
Total: 13 distinct targets. Per the data provided, none exists. Caveat stated explicitly: several are referenced as org-level or path-based skills (/mnt/skills/organization/...), so they may exist outside this manifest — I cannot verify that from the given data.
Proposal: REVIEW — confirm whether these live in a separate org/system manifest; if yes, annotate each reference with its owning manifest; if no, strip or replace the references (highest priority: bonusly-brand and prospect-research-multithreading, which are hard dependencies in the drafting workflow's Step 0).
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 5 — Version conflict: analysis-validator v3.6 vs v3.2 (internal)
Severity: WARNING · Action: UPDATE_BODY
Evidence:
- Header: "Version: 3.6"; footer: "analysis-validator v3.6 · May 9, 2026"; changelog top entry: 3.6
- BUT §7 Validation Trail template hardcodes: "Validator: analysis-validator v3.2"
- Downstream: pipeline-intelligence-report footer cites "Analysis Validator v3.6"
Survivor: v3.6 — it is the latest changelog entry (May 9, 2026), matches the header/footer, and matches the downstream citation. v3.2 is a stale artifact of the trail template.
Minor companion defect: changelog rows are out of order (3.6, 3.5, 3.4 ... all dated May 9, 2026), which makes "latest" ambiguous to a careless reader.
Proposal: UPDATE_BODY — change the §7 trail template to v3.6 (better: a {validator_version} placeholder resolved from the header) and re-sort the changelog descending.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 6 — Cross-skill schema conflict: GONG_TRANSCRIPTS_AGG.SNIPPET (bonus finding surfaced during reconciliation)
Severity: CRITICAL · Action: UPDATE_BODY
Evidence:
- closed-lost-analysis Source 3 SQL: `SELECT ... t.SNIPPET AS transcript_content FROM ... GONG_TRANSCRIPTS_AGG t`
- stale-pipeline-report Phase 3: "GONG_TRANSCRIPTS_AGG has exactly two columns: CONVERSATION_KEY and TRANSCRIPT. There is no CALL_SPOTLIGHT_BRIEF, no SNIPPET, no summary field — they do not exist and will error."
- analysis-validator G1-D/§13.7 corroborates: only approved transcript source is GONG_TRANSCRIPTS_AGG.TRANSCRIPT
Survivor: the two-column schema claim (2 skills vs 1). The closed-lost-analysis query as written will fail at runtime on every blank-AI-field deep dive.
Proposal: UPDATE_BODY on closed-lost-analysis — replace `t.SNIPPET` with `t.TRANSCRIPT` in the Source 3 query (and note the JSON speaker-turn parsing requirement, as stale-pipeline-report does).
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 7 — Manifest descriptions exceeding 1,024 characters
Severity: INFO · Action: none required
Arithmetic: the manifest's description_chars column, maximum values —
pipeline-intelligence-report = 1,006; signalforge-claim-compressor = 1,006; partner-digest = 1,004.
1,006 < 1,024 → count exceeding the cap = 0 of 14.
Caveat: this uses the manifest's declared char counts as given; I did not independently recount the description text, and the three skills above sit within 20 chars of the cap — any description edit (e.g., Findings 1–2) should re-check the count.
Proposal: none now; treat 1,006 as the effective headroom when executing Finding 2's TRIM_DESC.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 8 — Hardcoded page IDs, dates, and person names in skill bodies
Severity: WARNING · Action: UPDATE_BODY
Instances by skill (bodies only, not changelogs):
- weekly-pipeline-report (worst offender): person "Ben Lavin" in the title and "Ben" throughout; Google Sheet IDs 1CLZeOsElVDF_LF0ZG_t2nfwvhnZ6bpwqM_nX3WEYzcw and 1ENuaEcCuLjdKhMvp8FK3Ys1ek5Aw9ZuOZhsHJJFoB_k; quarter window "April 1 – June 30, 2026"; STATIC Q1 2026 figures ($365,152 vs $475,000; $2,490,532 vs $3,288,000) — directly contradicting its own "Always read live — do not hard-code values" rule
- analysis-validator: full GTM roster §12.3 with ~19 person names + HubSpot owner IDs ("Updated May 4, 2026" — will drift); population anchors ~452,000 / ~110,097; Finance escalation names "Manish or Amani"; dates April 26 / May 4 / May 9, 2026 and "stale as of March 28, 2023"
- pipeline-intelligence-report: 5 AE names + owner IDs "(verified May 2026)"; HubSpot org ID 1973303; stage IDs; contradicts its own "No hardcoded ... ever" non-negotiable (roster) and stale-pipeline-report's "Never hardcode rep names or owner IDs" design rule
- partner-digest: Confluence cloud ID 73fe98de-a4a3-4869-9f8a-bb1eeed4cf7f, space 1958248479, folder 2286616609, page IDs 2286321666 / 2265382925 / 2236940297 / 2237825028 / 2239365136 / 2238283777; Slack user ID U03QLMBL7AR; person names Amani, Kelli, Jen Lee, Hani, Bryce, Sara; example dates May 19 / June 2, 2026
- signalforge-feedback: page ID 2295136266, parent 2234417154, Build Log 2247295002, space 2232811524; example names "Gavin Porter", "Lowe's"
- sales-forecast: space 2232811524, parent page 2232582148, cloud ID; person "Alaina"; example date July 9, 2026
- deal-strategy-coach: Confluence page 2257879045 ("April 2026" playbook); persons "Farid", "Perseus"; pricing table labeled "2026"
- stale-pipeline-report: Slack channel #revops-team ID C0561C1JCPJ; owner ID 55483190 (Bonusly Support); org ID 1973303
- next-to-close: org ID 1973303; stage IDs (arguably legitimate constants — it labels them "System Constants")
- closed-lost-analysis: named customer examples (Estee Lauder, Softheon, MinIO, Ozinga, GCash, Nestlé, LIFTOFF, Aurora Innovation, Ethos Cannabis, StickerYou) and dated event "rep vacation May 4–12", "May 2026 sample"
- model-selection: registry last_checked 2026-05-19 — acceptable by design (has a 14-day self-update rule); INFO only
Proposal: UPDATE_BODY — one sweep: (a) move all Confluence/Slack/Sheet/portal IDs into a single shared reference file the skills import; (b) replace the AE rosters in analysis-validator and pipeline-intelligence-report with the dynamic owner-resolution pattern stale-pipeline-report already implements (Phase 2); (c) de-personalize weekly-pipeline-report (role-based "Demand Gen lead") and delete its static Q1 figures; (d) mark customer-name examples in closed-lost-analysis explicitly as illustrative history.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FINDING 9 — Manifest drift (both directions)
Severity: INFO · Action: none required
Arithmetic: manifest rows = 14. Provided .SKILL.md files = 14. Set comparison:
- Files with no manifest row: 0 (every file's frontmatter name matches a declared_name exactly)
- Manifest rows with no file: 0 (every declared_name has a corresponding file)
14 − 14 = 0 drift in either direction.
Proposal: none now — but note that executing Finding 1 (MERGE of email-drafter into comms-drafter) will create drift (13 files, 14 rows) unless the manifest row is deleted in the same change; sequence them together.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SUMMARY
CRITICAL: 3 (F1 trigger dup comms/email, F2 trigger dup pipeline reports, F6 SNIPPET schema conflict)
WARNING: 4 (F3 circular delegation, F4 dangling targets, F5 version conflict, F8 hardcodes)
INFO: 2 (F7 zero descriptions >1,024 chars, F9 zero manifest drift)
Suggested execution order: F6 (runtime-breaking query) → F1+F9 together (merge + manifest row) → F2 (trim) → F3 (break cycle, easier post-merge) → F5 → F8 → F4 (needs external verification).
RUNBOOK — Reward Queue Backlog (derived from #incident-2026-08-29-reward-queue) Step 0 — Detect and take incident command (state change: none) - Action: PagerDuty alert fired for reward-worker queue depth > 10k; acknowledge and take IC. - Who: Bryce Harmon [M01] - Success verification: Not stated in thread. - Rollback: N/A (no state change). Step 1 — Measure queue depth (state change: none) - Command: `bundle exec rake sidekiq:queue_depth` - Who: Farid Osman [M02] - Result observed: 48,213 pending jobs (normal is under 500) [M02]. - Rollback: N/A (read-only). Step 2 — Inspect dead set (state change: none) - Action: Check dead set contents. - Who: Farid Osman [M03] - Result observed: 112 jobs, all Redis::TimeoutError from around 13:58 [M03]. Exact command not stated in thread. - Rollback: N/A (read-only). Step 3 — Pause enqueue (STATE CHANGE) - Command: `bin/rails runner 'FeatureFlag.disable(:auto_recognition_enqueue)'` - Who: Farid Osman [M04] - Success verification: Not explicitly stated at the time; implied by queue depth falling to 9,400 and dropping ~1,200/min [M07]. Mark as needing confirmation — thread does not record a direct verification of the flag flip. - Rollback: `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` [M04] Step 4 — Clear dead set (STATE CHANGE) - Action: "Cleared out the dead set" from a console session. - Who: Elena Sinclair [M05] - Exact command: NOT STATED in thread. NEEDS CONFIRMATION — the thread does not record what was run, whether jobs were retried or deleted, or how success was verified. - Success verification: Not stated. NEEDS CONFIRMATION. - Rollback: Not stated. NEEDS CONFIRMATION — if jobs were deleted rather than retried, recovery may not be possible; thread is silent. Step 5 — Scale workers up (STATE CHANGE) - Command: `kubectl scale deployment/reward-worker --replicas=6` (was 3) - Who: Bryce Harmon [M06] - Success verification: Queue depth down to 9,400 and falling ~1,200/min [M07], then 0 [M08]. - Rollback: `kubectl scale deployment/reward-worker --replicas=3` [M06] Step 6 — Verify drain complete (state change: none) - Command: `bundle exec rake sidekiq:queue_depth` — returns 0; Datadog error rate back to baseline. - Who: Cole Ingram [M08] - Rollback: N/A (read-only). Step 7 — Re-enable enqueue (STATE CHANGE — reverses Step 3) - Command: `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` - Who: Bryce Harmon [M09] - Success verification: 40 new jobs processed cleanly in the next 3 minutes [M09]. - Rollback: Not stated in [M09]; the inverse (disable, per [M04]) is the implied reversal but the thread does not record it as this step's rollback. Mark as needing confirmation. Step 8 — Scale workers back down (STATE CHANGE — reverses Step 5) - Command: `kubectl scale deployment/reward-worker --replicas=3` - Who: Bryce Harmon [M10] - Success verification: Queue stable at 0; incident declared resolved [M10]. - Rollback: Not stated in [M10]; scaling back to 6 (per [M06]) is the implied reversal but the thread does not record it. Mark as needing confirmation. Gaps requiring confirmation: 1. Step 4: exact command, retry-vs-delete semantics, verification, and rollback for the dead-set clear [M05]. 2. Step 3: whether the flag disable was directly verified at the time. 3. Steps 7–8: explicit rollback commands were not stated in-thread (only implied inverses from earlier messages). 4. Root cause of the Redis::TimeoutError burst around 13:58 [M03] is not addressed anywhere in the thread.
FAILURE SEQUENCE 1. First error 2026-09-03T14:01:12Z — reward-service — ERROR — Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s. All log lines before this are INFO (health checks, cache hits, job enqueued). No earlier ERROR or WARN exists in the slice. 2. Cascade in order (all 2026-09-03) - 14:01:12Z reward-service: initial Redis timeout to redis-primary:6379 - 14:01:20Z / 14:01:30Z / 14:01:40Z reward-service: "retry exhausted for RewardGiveJob" (3x) - 14:01:40Z sidekiq: RewardGiveJob failed: Redis::TimeoutError; retrying in 60s (first sidekiq failure log; sidekiq_jobs.csv shows the earliest individual job failure at 14:01:46Z, J-00005) - 14:02:28Z sidekiq: RewardGiveJob failed; retrying - 14:02:30Z sidekiq: WARN "Queue reward depth above 10,000" — queue backlog - 14:02:36Z–14:05:50Z (sidekiq_jobs.csv): RecognitionDigestJob also failing with Redis::TimeoutError (J-00013 through J-00016) - 14:03:05Z api-gateway: 502 upstream timeout calling reward-service /gives — cascade reaches the edge - 14:03:30Z web-app: Give form submission failed: upstream 502 from api-gateway — user-facing impact - 14:03:31Z–14:06:52Z: repeating loop of sidekiq job failures, api-gateway 502s, and web-app submission failures - 14:22:10Z reward-service: "Redis connection restored; resuming job processing" — recovery - 14:24:45Z sidekiq: "Queue reward depth below 500" — backlog drained 3. Service and job involved - Root-failure service: reward-service (Redis client timing out against redis-primary:6379) - Job: RewardGiveJob (primary, enqueued by reward-service and web-app at 13:58:49Z/13:59:30Z, failed by sidekiq). Secondary: RecognitionDigestJob, also failing with the same Redis::TimeoutError in sidekiq_jobs.csv. - Downstream services affected: sidekiq, api-gateway (502 on /gives), web-app (Give form failures). Postgres logs are INFO checkpoints only — unrelated. 4. Datadog query to confirm the first error ``` service:reward-service level:error @timestamp:[2026-09-03T13:00:00Z TO 2026-09-03T15:00:00Z] ``` sorted by timestamp ascending — the first hit should be the 14:01:12Z Redis::TimeoutError. Narrower variant: ``` service:reward-service level:error message:"Redis::TimeoutError" @timestamp:[2026-09-03T13:55:00Z TO 2026-09-03T14:30:00Z] ``` WHAT THE LOGS DO NOT SHOW - Why Redis timed out: no redis-primary logs/metrics, no CPU/memory/network data — root cause of the timeout itself is not in this slice. - Whether it was a Redis outage, network partition, failover, or overload. No deploy/config-change events are logged. - The gap 14:06:52Z–14:22:10Z: errors stop but recovery is only logged at 14:22:10Z; nothing explains what happened in between. - Whether the retried RewardGiveJob / RecognitionDigestJob entries eventually succeeded after 14:22:10Z (no success logs per job ID). - Any linkage between Datadog log lines and sidekiq_jobs.csv job IDs — no trace/request IDs. - Business impact counts: how many "gives" or users actually failed vs. were retried successfully. - Anything before 13:55:13Z or after 14:24:45Z.
FLAG SUMMARY — 9 flags in export (counts as given in flags_export.csv) 1. recognition_streaks_v2 — ON - Controls (per app/models/recognition.rb): when enabled for a company, StreakTracker.record(give) runs on each recognition give. - Targeting: segment:beta_companies — 42 companies. 2. points_budget_guardrails — ON - Controls (per app/services/budget_service.rb): BudgetService.new(company).enforce!(giver, points) — enforces budget guardrails on point gives. - Targeting: all_companies — 220 companies. 3. slack_dm_nudges — ON - Controls (per app/jobs/nudge_job.rb): gate on the nudge job; if not enabled the job returns early, otherwise SlackDm.send_nudge(user) fires. - Targeting: segment:region_na — 87 companies. 4. redeem_flow_redesign — OFF - Controls (per app/controllers/redeem_controller.rb): renders RedeemV2Component when enabled, RedeemV1Component when not. Flag is off, so the export implies V1 behavior for all companies (the export lists no per-company overrides). - Targeting: targeted_list — 12 companies. 5. analytics_dashboard_v3 — ON - Controls (per app/controllers/analytics_controller.rb): sets @dashboard = AnalyticsV3.new(company). The excerpt shows no else branch; behavior when disabled is not shown in the code provided. - Targeting: segment:tier_three — 65 companies. 6. ms_teams_app_v2 — OFF - Controls (per app/services/teams_installer.rb): TeamsAppV2.install(company) when enabled. Flag is off. - Targeting: targeted_list — 9 companies. 7. legacy_give_modal — OFF - Controls: NO CODE REFERENCE in flag_code.md. What it controls cannot be determined from the provided data. - Targeting: segment:legacy_plan — 14 companies. 8. survey_boosters_q3 — ON - Controls: NO CODE REFERENCE in flag_code.md. What it controls cannot be determined from the provided data. - Targeting: segment:legacy_plan — 7 companies. 9. paused_offboard_cleanup — OFF - Controls: NO CODE REFERENCE in flag_code.md. - Targeting: NO TARGETING RULES (blank) and 0 companies — no targets at all. NOTABLE CASES - Flags with no code reference: legacy_give_modal, survey_boosters_q3, paused_offboard_cleanup. - Flag with no targets: paused_offboard_cleanup (empty targeting_rules, company_count 0). - Note: both legacy_give_modal (14) and survey_boosters_q3 (7) target segment:legacy_plan; the export does not say whether these company sets overlap, so no cross-flag totals are asserted. No individual company names appear anywhere in the provided data, so none are cited.
NDA-1 ([PARTY A]) — GREEN
Reasoning: Standard mutual NDA — 2-year term with 3-year survival (5 years total exposure), all five standard carve-outs present ("publicly available… previously known… third party… independently developed… by law or court order"), Delaware law, and an express "No license, no obligation to proceed, no exclusivity" clause. Nothing to flag.
NDA-2 ([PARTY B]) — YELLOW
Reasoning: Confidentiality terms are standard (3-year term, full carve-out set, Delaware), but it embeds a non-solicitation clause: "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." — a hiring restriction beyond NDA scope; total exposure = 3 years + 18 months = 4.5 years. Mutual and contact-limited, so counsel review, not full legal.
NDA-3 ([PARTY C]) — RED
Reasoning: Three compounding problems — (1) a broad non-compete: "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." (3 years, indirect scope, no geographic limit stated); (2) unusual governing law and forum: "the laws of the Republic of Ireland… exclusive jurisdiction of its courts" (only non-US/non-Delaware NDA of the three); (3) it is one-way in favor of [PARTY C] and, per the document, "No confidentiality carve-outs are stated in this Agreement" — meaning even publicly available or independently developed info would be covered. Full legal review.
Data note: the source file contains no party names (all redacted), no Effective Dates, and no signature/execution details, so term start dates and actual counterparty identities cannot be assessed.