Mean 0.906 · 27/40 perfect tests · $0.08 total · each card: the question → the correct answer (gold) → this model's actual answer
Here are the audit results: === DEFINITIONS === **Why-buys substantive**: value is not blank and not a placeholder (tbd, n/a, see notes, pending, unknown); LONG(n) counts as substantive; minimum length 15 characters of actual text. **Regressed**: any pair of stage-entry timestamps where an earlier-stage date is chronologically after a later-stage date (e.g. t_ds2 > t_ds1). **t_ds1 required**: every open deal must have a DS1 entry timestamp. === RESULTS === Stage distribution (156 total): DS1=32, DS2=39, DS3=61, DS4=14, DS5=10. DS2+ deals: 124 (all except the 32 DS1 deals). -- WHY-BUYS COMPLIANCE (DS2+) -- Compliant: 23 / 124 = 18.5% Non-compliant: 101 / 124 = 81.5% By owner: Bryce Harmon: 3/18 compliant (16.7%) | 15/18 non-compliant Dana Mercer: 4/22 compliant (18.2%) | 18/22 non-compliant Alex Franklin:13/61 compliant (21.3%)| 48/61 non-compliant Cole Ingram: 3/22 compliant (13.6%) | 19/22 non-compliant Farid Osman: 0/1 compliant (0.0%) | 1/1 non-compliant Every non-compliant deal had a blank why_buys field -- none contained placeholders, truncated LONG() entries, or short text. -- MISSING t_ds1 TIMESTAMP -- Deals with no t_ds1: 0 / 156 (0%). Every deal has a DS1 entry timestamp. -- REGRESSION DETECTION -- Regressed deals: 0 / 156 (0%). No deal had an earlier-stage timestamp later than a later-stage timestamp. === THREE PROCESS FIXES === 1. **Gate stage advancement behind why_buys entry.** Make the why_buys field mandatory (15+ chars, rejecting blanks/placeholders/TBD/N/A) at the moment a rep tries to move a deal out of DS1. This is where the failure is concentrated: 81.5% of DS2+ deals have no why-buys recorded, meaning reps advance deals through the pipeline without documenting rationale. 2. **Add a weekly pipeline quality report run against this exact logic.** A scheduled script that flags DS2+ deals missing substantive why_buys, assigns the owner and their manager, and creates remediation tasks. Without automated enforcement, manual cleanup is the only recourse -- which is what we're doing now, reactively. 3. **Make t_ds1 auto-populate from create_date on new deal creation.** While currently all 156 deals have t_ds1, the fact that the field exists separately from create_date creates a gap where it can be overlooked. Defaulting t_ds1 = create_date eliminates the risk going forward and frees reps from redundant admin work.
Here are the results: --- **Deals resolved: 156 out of 156** All 6 unique owner IDs in the deals file have a matching entry in the owners table. Zero unmatched IDs. --- **Unmatched owner IDs: None** No deal row references an owner ID that is missing from the owners table. --- **Archived/deactivated owners with deals: None** Two owners in the owners table are archived (Gavin Porter, 1520255671; Hugo Lindqvist, 77260721), but neither has any open deals. Every owner ID on every deal row maps to an active owner. --- **Total pipeline per resolved owner:** | Owner ID | Name | # Deals | Total Pipeline | |---|---|---|---| | 119337721 | Bryce Harmon | 35 | $1,054,144.00 | | 84342457 | Alex Franklin | 67 | $624,310.00 | | 83155923 | Dana Mercer | 24 | $341,195.00 | | 83155924 | Cole Ingram | 22 | $288,161.43 | | 716654662 | Farid Osman | 7 | $4,134.00 | | 701163055 | Elena Sinclair | 1 | $2,100.00 | | | **TOTAL** | **156** | **$2,313,944.43** | Note: Cole Ingram's total includes several fractional-dollar amounts (e.g., $7225.40, $7781.20, $6947.50, $2480.40, $4779.88, $3334.80, $58529.25) sourced from organic/other-campaigns deals.
Here are the three findings: --- **(a) Orphan count — gong rows with no matching open deal** 30 of 67 gong rows (44.8%) reference a HubSpot deal_id that is **not in deals_open**. These represent closed/won, closed/lost, or otherwise exited opportunities that still have call history but no active pipeline presence. Together they account for **304 calls** in the last 90 days. Sample orphan aliases (sorted by calls desc): - Deal-8FA85D (46 calls) — Diversified Financial Services - Deal-8FC3F9 (24 calls) — Consumer Durables & Apparel - Deal-3B7945 (21 calls) — Pharmaceuticals, Biotechnology & Life Sciences - Deal-42B265 (21 calls) — Software & Services - Deal-9CCC42 (17 calls) — Food, Beverage & Tobacco - Deal-36EA09 (17 calls) — Software & Services - Deal-9A43B4 (14 calls) — Software & Services - Deal-605F3C (12 calls) — Software & Services - Deal-76821A (11 calls) — Software & Services - Deal-D84A2D (9 calls) — Software & Services Full list: Deal-8FA85D, Deal-8FC3F9, Deal-3B7945, Deal-42B265, Deal-9CCC42, Deal-36EA09, Deal-9A43B4, Deal-605F3C, Deal-E2D34B, Deal-76821A, Deal-D84A2D, Deal-1A0416, Deal-228783, Deal-3F86A0, Deal-9897FA, Deal-422BA6, Deal-344163, Deal-B038F0, Deal-5CA5AF, Deal-D3BD1C, Deal-5592CC, Deal-1E8CFB, Deal-AC944F, Deal-DECCF3, Deal-51EA1A, Deal-38CA53, Deal-32088A, Deal-7C4130, Deal-C00480, Deal-3B6668. --- **(b) Duplicate conversation keys — calls_90d > distinct_conversation_keys** **None.** Zero rows have `calls_90d` exceeding `distinct_conversation_keys`. In every row the two values are equal — meaning each call maps to one unique conversation key, and there's no evidence of duplicated or collapsed conversation keys. Note this also means there's no case where multiple calls share the same conversation ID; the data is internally consistent on this dimension. --- **(c) Share of DS3+ open deals with at least one logged call** Out of **85 open deals** at stage DS3 or later (DS3, DS4, or DS5), **25 have >= 1 call** in the Gong log and **60 have zero calls**. Share with at least one call: **25/85 = 29.4%** (roughly 3 in 10). Sample DS3+ deals with NO logged calls: - Deal-9AAE5F (DS4, $11,250) - Deal-403845 (DS5, $9,000) - Deal-6787C2 (DS4, $7,000) - Deal-2465CE (DS5, $5,400) - Deal-62D607 (DS4, $4,800) - Deal-7B3B0F (DS4, $2,760) - Deal-F9A08A (DS4, $2,484) - Deal-0660B4 (DS4, $1,920) - Deal-1FC049 (DS4, $1,920) - Deal-FD9F4E (DS5, $1,330)
```sql
/*
* Per-company first-calendar-month metrics:
* unique_givers -> PLG.COMPANY_COHORT_SUMMARY.M1_UNIQUE_GIVERS (only source listing
* distinct giver counts; REDEMPTION_RECORDS_V2 lacks giver identity).
* recognition_count -> PLG.COMPANY_COHORT_SUMMARY.M1_GIVES (gives in M1).
* successful_redemption-> REDEMPTION_RECORDS_V2 WHERE STATE = 'succeeded' COUNTED back to M1
* via ACTIVATED_DATE truncation (the catalog's documented redemption
* source despite DEPRECATED schema name — confirmed by catalog note).
*/
SELECT
ccs.ALIAS AS company_alias,
TO_CHAR(DATE_TRUNC('MONTH', ccs.ACTIVATED_DATE), 'YYYY-MM') AS first_calendar_month,
ccs.M1_UNIQUE_GIVERS AS unique_givers,
COALESCE(rc.redemption_count, 0) AS recognition_count,
ccs.M1_REDEMPTIONS AS successful_redemption_count
FROM PRODUCTION.PLG.COMPANY_COHORT_SUMMARY AS ccs
LEFT JOIN (
/*
* REDEMPTION_RECORDS_V2 – only 'succeeded' rows count per business rules.
* Grouped to ACTIVATED_DATE-equivalent month of the company (ACTIVATED_DATE from
* COMPANY_COHORT_SUMMARY is joined above); here we pre-aggregate redemptions per
* approximate activation month for the LEFT JOIN.
*/
SELECT
DATE_TRUNC('MONTH', CREATED_AT)::DATE AS act_month,
COUNT(*) AS redemption_count
FROM PRODUCTION.DEPRECATED_RECOGNITION.REDEMPTION_RECORDS_V2
WHERE STATE = 'succeeded' /* only succeeded redemptions */
GROUP BY DATE_TRUNC('MONTH', CREATED_AT)
) AS rc
ON DATE_TRUNC('MONTH', ccs.ACTIVATED_DATE) = rc.act_month
ORDER BY company_alias, first_calendar_month;
```
Audit script ran clean. Here are the key findings from the actual data:
---
COMPLETENESS SUMMARY
COMPANIES (34 rows):
- domain: 34/34 (100%) -- perfect
- industry: 34/34 (100%) -- but 9 non-canonical value variants
- employee_count: 25/34 (73.5%) -- 9 blank: C-EC3025, C-96039F, C-44EA29, C-D04904, C-B23205, C-60C75F, C-7BBDFA, C-50D386, C-93C8BF
- hq_country: 28/34 (82.4%) -- 6 blank: C-2D1F1B, C-D73B89, C-44EA29, C-D04904, C-2C60E5, C-EE9FFB
CONTACTS (52 rows):
- email: 52/52 (100%) -- but 4 are malformed/incomplete (see below)
- title: 40/52 (76.9%) -- 12 blank
- persona: 37/52 (71.2%) -- 15 blank, plus 1 data-entry corruption
DUPLICATE COMPANY CLUSTERS (exact domain match):
Cluster 1: acme-corp.com (2 rows)
C-0A092931: Technology / 500 / US
C-0A092932: tech / 510 / USA
SURVIVOR: C-0A092931 (all 3 fields populated; older/better-formed)
Action: merge C-0A092932 into C-0A092931, normalize country to "US", industry to "Technology", employee_count to max(500,510)=510 if enrichment confirms.
Cluster 2: globex.io (2 rows)
C-0A092933: SaaS / 200 / US
C-0A092934: Technology / 200 / US
SURVIVOR: C-0A092933 (first-seen, industry="SaaS" may be too narrow vs "Technology")
Action: merge C-0A092934 into C-0A092933; prefer CRM's broader category for segment reporting.
INVALID EMAILS (4 of 52 contacts):
CT-0010 (C-66D1FC): "user0@" -- no domain after @
CT-0080 (C-92D97D): "user0@" -- no domain after @
CT-0081 (C-92D97D): "user1@" -- no domain after @
CT-0192 (C-425E2A): "user2@" -- no domain after @
All follow pattern: first name + @ with no domain appended. Fix: append company domain (@92d97d.com etc.).
DOMAIN MISMATCHES:
CT-0011 (C-66D1FC): email=CT-0011@other-domain.com but contact.domain=66d1fc.com
This sends outreach to the wrong corporate inbox entirely. Must correct to CT-0011@66d1fc.com.
ENRICHMENT FILLS (8 fields fillable):
8 company rows have blank employee_count; ZoomInfo has value=400 for all of them.
Fills: C-EC3025, C-96039F, C-44EA29, C-D04904, C-B23205, C-60C75F, C-7BBDFA, C-50D386
CRM vs ENRICHMENT DISAGREEMENTS (21 across 16 companies):
- Industry: CRM says "Technology"/"Tech"/"tech" while enrichment says "Computer Software" for 10 companies. These map to the same concept. Normalize to "Technology". Trust CRM's broader label for segment aggregation.
- HQ Country: CRM uses "US"/"USA"/"United States" interchangeably (20 conflicts). All three mean the same place. Normalize to ISO code "US". Trust enrichment as vendor-sourced truth for country.
- Employee Count (REAL conflict): C-B25F40 has CRM=50, enrichment=120. TRUST ZOOMINFO (external headcount data). Update CRM to 120.
DATA ENTRY CORRUPTION FOUND:
CT-0080 (C-92D97D): persona field contains "92d97d.com" (a domain string, not a persona). Should be one of: economic buyer / champion / HR admin / IT security / finance. Needs manual lookup or inference from title ("HR admin" at CT-0080 suggests persona="HR admin").
CROSS-REFERENCE INTEGRITY:
100% of contacts link to valid company aliases.
14 of 34 companies (41.2%) have zero contacts assigned.
NO DEALS FILE PROVIDED. All pipeline $ amounts remain UNKNOWN.
TOP 10 FIXES BY RECORD IMPACT (pipeline $ unquantifiable without deal data):
1. [CRITICAL] Supply deals extract -- blocks ALL pipeline valuation
2. [HIGH] Merge duplicate clusters (acme-corp x2, globex.io x2) -- 2 redundant rows cause double-counting
3. [HIGH] Fix 4 invalid emails -- sequences will bounce, outreach blocked
4. [MEDIUM] Standardize industry labels -- 11 records with non-canonical variants corrupt segmentation
5. [MEDIUM] Standardize country values -- 3 representations (US/USA/United States) break territory routing
6. [MEDIUM] Fill 8 missing employee counts from ZoomInfo -- ABM targeting unusable
7. [MEDIUM] Resolve 21 CRM vs enrichment disagreements -- inconsistent categorization corrupts reporting
8. [MEDIUM] Fill 15 missing personas -- buying committee mapping incomplete
9. [LOW] Correct 1 email/domain mismatch -- sends to wrong inbox
10. [LOW] Fill 12 missing contact titles -- engagement scoring incomplete
Here is the full classification, side assignments, and summary — based strictly on the `closed_lost_tag` and `closed_lost_reason_text` fields in the CSV. No external assumptions.
---
## DEAL CLASSIFICATION
| # | Deal Alias | Amount | Close Date | Closed_Lost_Tag | Primary Category | Side | Notes / Disagreement? |
|---|------------|--------|------------|-----------------|-----------------|------|----------------------|
| 1 | Deal-DB0AAC | $5,115 | 2026-09-30 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 2 | Deal-F7F635 | $3,600 | 2026-09-03 | Competitor | Competitor | Unknown | Vague "another direction", no competitor named |
| 3 | Deal-AC944F | $3,400 | 2026-09-02 | MIA | Other | Buyer | N/A (MIA is its own bucket) |
| 4 | Deal-214060 | $2,880 | 2026-09-02 | MIA | Other | Buyer | N/A |
| 5 | Deal-91A056 | $2,975 | 2026-09-02 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 6 | Deal-29326C | $6,300 | 2026-09-02 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 7 | Deal-5DB9B0 | $10,800 | 2026-09-02 | Lost- Does not fit ICP | Other | Buyer | Spam — not a real GTM failure |
| 8 | Deal-831B7B | $7,200 | 2026-09-02 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 9 | Deal-F97C37 | $4,320 | 2026-09-01 | Competitor | Product Gap | Buyer | Tag says competitor; text says "more diversified offerings" — that's a feature gap, not an active competitor selection |
| 10 | Deal-13E9CF | $33,750 | 2026-09-01 | Doing nothing/Cost/Budget | Timing | Buyer | Tag says cost/budget; text says "deprioritized by org" — budget exists but priority shifted; Timing is better fit |
| 11 | Deal-39E25C | $3,360 | 2026-09-01 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 12 | Deal-7ED004 | $60,000 | 2026-09-01 | Lost- Budget/Price | Pricing | Buyer | No |
| 13 | Deal-21B045 | $11,700 | 2026-08-31 | MIA | Other | Buyer | N/A |
| 14 | Deal-B3ABED | $40,001 | 2026-08-31 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 15 | Deal-422BA6 | $3,000 | 2026-08-28 | Competitor | Competitor | Buyer | Clear competitor win (ADP/Review) |
| 16 | Deal-ED9AE7 | $2,340 | 2026-08-28 | Lost DM | Timing | Buyer | Tag is non-standard; text confirms "Timing, budget, authority" — Timing first |
| 17 | Deal-988493 | $8,400 | 2026-08-28 | MIA | Other | Buyer | N/A |
| 18 | Deal-381C8C | $4,800 | 2026-08-27 | Competitor | Competitor | Unknown | Tag = Competitor; text = not moving forward w/ Bonusly but doesn't name a winner. Keep as Competitor loss per tag. |
| 19 | Deal-F308CA | $30,321 | 2026-08-27 | MIA | Other | Buyer | No |
| 20 | Deal-F1E8A6 | $3,150 | 2026-08-26 | Competitor | Competitor | Buyer | Generic "not moving forward" — tag carries |
| 21 | Deal-B6AC09 | $3,000 | 2026-08-25 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 22 | Deal-70F704 | $3,000 | 2026-08-25 | Lost DM | Product Gap | Buyer | Text says "only wanted anniversary awards" — product scope too broad, not a fit. Tag = Lost DM is weak. |
| 23 | Deal-E6E80A | $24,000 | 2026-08-21 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 24 | Deal-B038F0 | $2,340 | 2026-08-21 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 25 | Deal-4664E1 | $12,000 | 2026-08-20 | MIA | Other | Buyer | N/A |
| 26 | Deal-175756 | $2,880 | 2026-08-20 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 27 | Deal-E74A73 | $2,100 | 2026-08-20 | Doing nothing/Cost/Budget | Timing | Buyer | Tag = Cost; text = "test manually first, reconnect next year" — Timing is stronger signal |
| 28 | Deal-DDAB52 | $4,000 | 2026-08-20 | Competitor | Competitor | Buyer | Rippl named, same price, exchange-rate advantage — clear competitor loss |
| 29 | Deal-ACE061 | $3,600 | 2026-08-19 | Competitor | Competitor | Buyer | Likely went HeyTaco (rep suspects it) |
| 30 | Deal-BB78F3 | $6,600 | 2026-08-18 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 31 | Deal-D48E0B | $14,931 | 2026-08-18 | MIA | Other | Buyer | No |
| 32 | Deal-15DA99 | $19,600 | 2026-08-18 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 33 | Deal-F4AF5D | $5,760 | 2026-08-18 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 34 | Deal-79B7A1 | $25,000 | 2026-08-18 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 35 | Deal-583ADB | $3,600 | 2026-08-18 | MIA | Other | Buyer | N/A |
| 36 | Deal-8E27DA | $21,000 | 2026-08-18 | Feature Request | Other | Buyer | Moved forward with swag provider, dropped R&R interest. Neither product gap nor pure competitor. |
| 37 | Deal-2D2F8D | $4,800 | 2026-08-18 | Competitor | Competitor | Unknown | "Different direction" — tag carries, no specifics |
| 38 | Deal-E0441F | $2,405 | 2026-08-17 | MIA | Other | Buyer | Stale before handoff |
| 39 | Deal-7CB44D | $31,860 | 2026-08-17 | MIA | Other | Buyer | No |
| 40 | Deal-0F96AA | $76,800 | 2026-08-17 | Competitor | Competitor | Buyer | Full RFP, didn't make finalist demo — clear competitor win |
| 41 | Deal-1BCA50 | $15,000 | 2026-08-17 | Competitor | Competitor | Buyer | Other stakeholder already deep with different vendor |
| 42 | Deal-7CC678 | $11,116 | 2026-08-17 | Competitor | Competitor | Unknown | "Nothing specific provided" — tag carries |
| 43 | Deal-FAC17C | $2,100 | 2026-08-17 | Lost DM | Timing | Buyer | Contract out 2 months, no exec IT approval — stalled decision |
| 44 | Deal-242273 | $60,000 | 2026-08-14 | Competitor | Product Gap | Buyer | Tag = Competitor; text = "digitize internal points currency / onsite facilities spend" — that's a capability gap, not that they picked a rival |
| 45 | Deal-50E5D8 | $4,800 | 2026-08-14 | Doing nothing/Cost/Budget | Timing | Buyer | "Pause for now" — Timing, not cost |
| 46 | Deal-A2C349 | $21,600 | 2026-08-14 | Competitor | Competitor | Buyer | Stick with Awardco + add surveys |
| 47 | Deal-9F176A | $54,600 | 2026-08-13 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 48 | Deal-7B2236 | $72,000 | 2026-08-12 | Doing nothing/Cost/Budget | Pricing | Buyer | "preference simpler and cheaper" — Pricing |
| 49 | Deal-AFA56C | $3,000 | 2026-08-12 | MIA | Other | Buyer | No |
| 50 | Deal-C7156E | $13,818 | 2026-08-12 | Competitor | Competitor | Buyer | Selected another vendor |
| 51 | Deal-C33D91 | $7,200 | 2026-08-11 | Lost- Budget/Price | Pricing | Buyer | No |
| 52 | Deal-9048EB | $41,790 | 2026-08-10 | MIA | Product Gap | Buyer | Tag=MIA; text= "bad fit, multiple feature gaps" — Product Gap is correct. **DISAGREEMENT** |
| 53 | Deal-5E64CE | $33,600 | 2026-08-10 | Doing nothing/Cost/Budget | Timing | Buyer | In Nectar exit window until Oct 2027; timing play |
| 54 | Deal-8A0992 | $7,336.56 | 2026-08-10 | Competitor | Competitor | Buyer | Canadian provider — geographic alignment |
| 55 | Deal-D0C698 | $2,000 | 2026-08-10 | Competitor | Competitor | Unknown | Past Kudos user, going back to Kudos |
| 56 | Deal-69CF3D | $11,520 | 2026-08-07 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 57 | Deal-ECBF89 | $7,200 | 2026-08-07 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 58 | Deal-3618CC | $15,600 | 2026-08-07 | Lost DM | Product Gap | Buyer | "Wanted Surveys" — product scope mismatch |
| 59 | Deal-EECC02 | $66,690 | 2026-08-07 | Competitor | Competitor | Buyer | "Went another direction" — tag carries |
| 60 | Deal-5AD03E | $24,000 | 2026-08-07 | Competitor | Product Gap | Buyer | Tag=Competitor; text="wanted more defined budget access" — feature gap, not active competitor win. **DISAGREEMENT** |
| 61 | Deal-D1A623 | $25,200 | 2026-08-06 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 62 | Deal-413C56 | $2,760 | 2026-08-06 | Doing nothing/Cost/Budget | Timing | Buyer | "Back to school priority, CEO not ready" — Timing |
| 63 | Deal-47F1A1 | $10,004 | 2026-08-06 | Competitor | Competitor | Buyer | Staying with WorkTango 12 more months |
| 64 | Deal-BF2A98 | $8,400 | 2026-08-05 | Competitor | Competitor | Buyer | HiThrive recently deployed |
| 65 | Deal-2A292B | $6,000 | 2026-08-05 | Doing nothing/Cost/Budget | Other | Buyer | "Build internally" — neither competitor nor pricing driver stated |
| 66 | Deal-D1AABF | $23,400 | 2026-08-05 | MIA | Other | Buyer | No |
| 67 | Deal-FEDBCB | $2,000 | 2026-08-05 | Doing nothing/Cost/Budget | Timing | Buyer | "Reconnect closer to end of year" — Timing |
| 68 | Deal-1E7DA9 | $26,400 | 2026-08-04 | Competitor | Competitor | Buyer | Selected another platform |
| 69 | Deal-2BBA21 | $2,310 | 2026-08-04 | MIA | Other | Buyer | No |
| 70 | Deal-286F9C | $13,860 | 2026-08-04 | Competitor | Competitor | Buyer | "Not a good fit" — tag carries but ambiguous |
| 71 | Deal-7FBAC6 | $7,200 | 2026-08-04 | Doing nothing/Cost/Budget | Timing | Buyer | "Leadership paused (again)" — Timing |
| 72 | Deal-369281 | $2,400 | 2026-08-04 | Competitor | Competitor | Buyer | Went with Paylocity in-house solution |
| 73 | Deal-386F6E | $13,895 | 2026-08-04 | MIA | Other | Buyer | No |
| 74 | Deal-9FCD0D | $4,300 | 2026-08-04 | Competitor | Competitor | Buyer | Canadian company chosen |
| 75 | Deal-55867E | $7,200 | 2026-08-04 | Lost- Timing (1 year+) | Timing | Buyer | No |
| 76 | Deal-DAFB82 | $30,000 | 2026-08-03 | Lost- Budget/Price | Timing | Buyer | Tag=Price; text="priorities now, won't be budgeted until 2028" — Timing is stronger signal |
| 77 | Deal-2FEDDB | $2,200 | 2026-08-03 | Doing nothing/Cost/Budget | Timing | Buyer | "Unsure on timing" — Timing |
| 78 | Deal-64B19A | $3,240 | 2026-08-03 | Competitor | Competitor | Buyer | Likely Motivosity |
| 79 | Deal-3F86A0 | $3,840 | 2026-08-03 | MIA | Other | Buyer | No |
| 80 | Deal-096750 | $2,880 | 2026-07-31 | MIA | Other | Buyer | No |
| 81 | Deal-F325A5 | $14,400 | 2026-07-31 | Lost DM | Timing | Buyer | Layoffs + leadership change killed priority |
| 82 | Deal-ABD14C | $5,002 | 2026-07-31 | Doing nothing/Cost/Budget | Other | Buyer | "Not interested" — vague, no driver stated |
| 83 | Deal-79E61A | $7,020 | 2026-07-31 | MIA | Other | Buyer | No |
| 84 | Deal-8A119B | $3,250 | 2026-07-31 | Lost- Budget/Price | Pricing | Buyer | No |
| 85 | Deal-AE7C4E | $2,800 | 2026-07-31 | MIA | Other | Buyer | No |
| 86 | Deal-DAB4F1 | $3,450 | 2026-07-31 | MIA | Other | Buyer | No |
| 87 | Deal-B4B50F | $21,060 | 2026-07-31 | MIA | Other | Buyer | No |
| 88 | Deal-981AD4 | $36,855 | 2026-07-30 | Feature Request | Product Gap | Buyer | "Doesn't fit UI, not UK focused" — genuine product gap |
| 89 | Deal-DC77FE | $8,000 | 2026-08-06* | Competitor | Product Gap | Buyer | Tag=Competitor; text="competitive in price, found system with more customization" — that's a product gap. Price was NOT the factor. **DISAGREEMENT** |
| 90 | Deal-5885B9 | $7,200 | 2026-07-29 | MIA | Other | Buyer | N/A |
*\*Date appears after some Aug 07 deals but is within the 6-month window.*
---
## CATEGORY COUNTS
| Category | Count | % of Total |
|----------|-------|-----------|
| **Timing** | 33 | 37% |
| **Competitor** | 18 | 20% |
| **Other** | 18 | 20% |
| **Pricing** | 4 | 4% |
| **Product Gap** | 4 | 4% |
| **Champion Left** | 0 | 0% |
| **No Decision** | 0 | 0% |
| **MIA (counted as Other above)** | — | included in Other |
*(Note: MIA is treated as "Other" rather than its own top-level category. If MIA were separated: Timing=33, Competitor=18, MIA=20, Pricing=4, Product Gap=4, Other=10, No Decision/Champion Left=0.)*
---
## SIDE SPLIT
| Side | Count |
|------|-------|
| **Buyer** | 81 |
| **Unknown** | 7 |
| **Bonusly** | 0 |
*Unknown applies to deals where the buyer never made a clear decision but the rep also couldn't pinpoint a reason (e.g., generic "another direction" without naming a competitor).*
---
## TAG vs. REASON DISAGREEMENTS
The structured `closed_lost_tag` disagrees with what the free-text `closed_lost_reason_text` actually describes. These are cases where the tag led to a different category than the text supports:
1. **Deal-DC77FE** ($8,000): Tag = Competitor. Text = *"competitive in price so that wasn't a factor…found a system that offered more customization."* This is a **product gap** — price was ruled out, not a competitor win.
2. **Deal-242273** ($60,000): Tag = Competitor. Text = *"top two vendors helped digitize internal points currency / onsite spending."* This is a **product gap** — the capability to build a custom internal currency/onsite marketplace wasn't offered. They may not have selected anyone yet.
3. **Deal-5AD03E** ($24,000): Tag = Competitor. Text = *"Wanted more defined budget access."* This is a **product gap**, not an active competitor selection.
4. **Deal-9048EB** ($41,790): Tag = MIA. Text = *"bad fit based on desired setup and multiple feature gaps."* The rep independently determined this was a **product gap**. Tag missed the real reason.
5. **Deal-F97C37** ($4,320): Tag = Competitor. Text = *"other vendor had more diversified offerings."* This is a **product gap** — lack of breadth, not necessarily a rival they chose.
6. **Deal-13E9CF** ($33,750): Tag = Doing Nothing/Cost/Budget. Text = *"R&R deprioritized by org, reach out next year."* Better classified as **Timing** — priority shift, not active budget constraint.
7. **Deal-70F704** ($3,000): Tag = Lost DM. Text = *"only wanted anniversary awards."* Better as **Product Gap** — narrow use case outside Bonusly's value prop.
**Total disagreements: 7 out of ~90 deals (~8%).** The strongest disagreements are in high-value deals (#2 and #3 above = $84K combined).
---
## TWO PATTERNS MOST WORTH ACTING ON
### Pattern 1: "Competitor" tag used as a catch-all for product-gap losses — losing visibility on what we actually need to fix
~5 of the "Competitor" classified deals are actually product gaps (customization, breadth, currency model, UK focus/UI). When reps mark Competitor for anything that isn't a clean "we went with X vendor," we lose the ability to differentiate between competitive threats we can fight (price, integrations, partnerships) and genuine capability gaps we need to build.
**Action:** Add a required free-text field to any Competitor close — *"Which vendor did they choose?"* If they can't name one, the deal defaults to Product Gap. This alone would recover the 5 flagged deals above and prevent future miscategorization.
### Pattern 2: Timing kills disproportionately — 37% of losses are deferred, not rejected
33 deals (37%) are Timing. But many of these are **re-prioritization** losses, not just "budget cycle." The texts repeatedly say "deprioritized by org," "layoffs/leadership change," "back to school priority," "survey action items first." These are signals that Bonusly's sales cycle is longer than the time it takes for leadership attention shifts.
**Action:** Two-pronged:
- **Short-term:** Build a lightweight "priority trigger" score — if a prospect mentions layoffs, restructuring, new hire leader, or competing initiative, flag for a 30-day touch-point cadence rather than letting it sit.
- **Mid-term:** Develop a lighter-tier or modular entry point. Deals like Deal-70F704 ("only want anniversary"), Deal-E74A73 ("test manually first"), Deal-8E27DA ("just swag") suggest buyers who want fragments of R&R. A "starter" product could capture these instead of losing to timing or Build Internally (Deal-2A292B).
Here is the compact JSON scoring result:
```json
{
"tier_counts": {
"ACTION": 12,
"BUILD": 63,
"LOCK": 2,
"REVIVE": 2,
"RISKY": 4,
"WATCH": 73
},
"tier_examples": {
"ACTION": ["Deal-25F752", "Deal-5408B0", "Deal-944310"],
"BUILD": ["Deal-C6FE92", "Deal-D73B89", "Deal-40522D"],
"LOCK": ["Deal-D348E1", "Deal-C26D20"],
"REVIVE": ["Deal-9AAE5F", "Deal-F9A08A"],
"RISKY": ["Deal-547B2B", "Deal-A2B47C", "Deal-2465CE", "Deal-FD9F4E"],
"WATCH": ["Deal-E53952", "Deal-6787C2", "Deal-62D607"]
},
"risky_deals": [
"Deal-547B2B",
"Deal-A2B47C",
"Deal-2465CE",
"Deal-FD9F4E"
],
"lock_violations": 0,
"pipeline_shape": "This is a classic top-heavy funnel — 73 deals in WATCH and 63 in BUILD make up 85% of the pipeline, meaning most opportunities sit in early stages (DS1-DS2) with PIPELINE forecast categories and thin contact maps (mostly 2-3 n_contacts). Only 14 deals carry strong signals across stage, forecast, and recent engagement combined; 2 landed in LOCK, while 12 earned ACTION status. Four DEALS are flagged RISKY because their forecast label (COMMIT or BEST_CASE) contradicts stale engagement evidence — commitment claims not backed by recent meetings or calls. Two deals marked REVIVE had high historical engagement_90d (>20) but are now dormant >60 days. The weighted revenue concentrates in the large PIPELINE-stage deals ($240K Deal-2D1F1B, $99K Deal-66D1FC), so despite low near-term closure probability, upside depends on converting these early-funnel leads."
}
```
**Arithmetic verification:**
- Tier sum: 12 + 63 + 2 + 2 + 4 + 73 = **156** (matches deal row count)
- Lock violations: 0 (both LOCK deals — Deal-D348E1 and Deal-C26D20 — each have >= 1 meeting in 30d)
- Inbound_emails defect: acknowledged; meetings_30d used as primary inbound signal
Here is the extracted CRM write-back data per deal:
```json
{
"tx_001_deal_cfe7f4": {
"why_buys": [
"Automating anniversary and birthday awards",
"HR team of three cannot keep up manually",
"People slipping through cracks in spreadsheet tracking"
],
"pain_points": [
"Manual tracking via spreadsheet",
"Staffing gap (HR team of 3)",
"Items slipping through cracks"
],
"stakeholders_from_speaker_list": [
"Prospect (VP People)",
"Prospect (HR Admin)"
],
"budget_signal": "$40k earmarked for engagement tools this fiscal year",
"timeline_signal": "Ideally live before open enrollment in November",
"competitor_mentioned_by_prospect": "Achievers (looked at last year, deemed too heavy)",
"next_step_agreed": "Security review scheduled for September 12",
"objections": [
"Need SSO and audit logs for IT sign-off (security requirement from HR Admin)"
],
"confidence": "HIGH — stated budget ($40k), committed date (Sep 12), named competitor"
},
"tx_002_deal_70bb30": {
"why_buys": [
"Tie recognition to retention for hourly workforce",
"Regretted turnover over 30% among hourly staff"
],
"pain_points": [
"High regretted turnover (>30%) in hourly workforce"
],
"stakeholders_from_speaker_list": [
"Prospect (Head of Total Rewards)",
"Prospect (CFO)"
],
"budget_signal": "$25k pilot budget approved by Finance for this quarter",
"timeline_signal": "Decision by end of September",
"competitor_mentioned_by_prospect": null,
"next_step_agreed": "Pilot agreement will be sent; routed to legal this week",
"objections": [
"Integration with Workday must be rock solid — stated as CFO's one condition"
],
"confidence": "HIGH — budget approved, firm timeline, next step confirmed (pilot agreement + legal route)"
},
"tx_003_deal_530b50": {
"why_buys": [
"Make recognition visible across 12 retail locations",
"Store managers have zero budget autonomy for on-the-spot recognition today"
],
"pain_points": [
"Inconsistent visibility of recognition across multi-site locations",
"No decentralized spending authority for store managers"
],
"stakeholders_from_speaker_list": [
"Prospect (People Ops Manager)",
"Prospect (CEO) — referenced but not present on speaker list"
],
"budget_signal": null,
"timeline_signal": "No rush until Q1",
"competitor_mentioned_by_prospect": "Bucketlist (CEO used at last company, liked it)",
"next_step_agreed": "Schedule a call with the CEO — People Ops Manager will send two times",
"objections": [
"CEO must be sold first — she decides anything people-related (single point of approval)"
],
"confidence": "MEDIUM — no budget stated, soft timeline (Q1), gatekeeper is absent CEO"
},
"tx_004_deal_180d02": {
"why_buys": [
"Consolidate three separate recognition tools into one",
"Currently paying for three tools, none integrate with HRIS"
],
"pain_points": [
"Tool sprawl (three active tools)",
"Zero HRIS integration across current stack",
"Duplicate spend"
],
"stakeholders_from_speaker_list": [
"Prospect (VP People)",
"Prospect (IT Security Lead)"
],
"budget_signal": "Under $15k annually = VP People can approve without board involvement",
"timeline_signal": "Procurement cycle runs six to eight weeks minimum; security review took three months for last vendor",
"competitor_mentioned_by_prospect": null,
"next_step_agreed": null,
"objections": [
"Six-to-eight-week procurement cycle creates friction",
"Three-month security review history creates hesitation"
],
"confidence": "LOW — next step was tentative (\"no promises\") and not confirmed; long procurement/security process ahead"
},
"tx_005_deal_f8767a": {
"why_buys": [
"Automate service milestones",
"Provide analytics on recognition equity across departments"
],
"pain_points": [
"Night-shift teams feel invisible",
"Night-shift engagement scores run 20 points lower than other shifts",
"Service milestone processing is manual/admin-heavy"
],
"stakeholders_from_speaker_list": [
"Prospect (HR Director)",
"Prospect (People Ops Coordinator)"
],
"budget_signal": "$12k approved under engagement line",
"timeline_signal": "Need this running before January all-hands",
"competitor_mentioned_by_prospect": "Nectar (mid-pilot; must beat that experience)",
"next_step_agreed": "Present directly to exec team on October 2",
"objections": [
"Exec team skeptical after a failed rollout two years ago"
],
"confidence": "MEDIUM — budget approved, firm date set, but active competitor in pilot and exec skepticism add risk"
},
"tx_006_deal_ee195f": {
"why_buys": [
"Cut admin time on service awards"
],
"pain_points": [
"HR Manager spends 5 hours/month ordering and shipping plaques manually"
],
"stakeholders_from_speaker_list": [
"Prospect (HR Manager)"
],
"budget_signal": null,
"timeline_signal": "Fiscal year resets in February; Q1 start is realistic",
"competitor_mentioned_by_prospect": null,
"next_step_agreed": "Send one-page overview; HR Manager will forward to COO this week",
"objections": [
"COO usually prefers building things in-house (potential blocker)"
],
"confidence": "MEDIUM — clear pain, actionable next step, but single stakeholder and unknown COO stance"
}
}
```
Key methodology notes:
- **budget_signal**: Only populated when the prospect explicitly stated a dollar amount or budget source. Where the rep offered pricing (TX-003: \"$8/emp/mo\") or the prospect said \"budget isn't the issue\" (TX-006), the field is `null`.
- **next_step_agreed**: Only included when both parties confirmed a specific action. TX-004's \"I'll follow up\" was acknowledged but never confirmed by the prospect, so it is excluded.
- **next_step NOT agreed (TX-004)**: The prospect said \"Maybe — I need to check her calendar, no promises.\" This is a non-commitment; the next step was not closed.
- **competitor_mentioned_by_prospect**: Only competitors raised by the prospect count. Rep-suggested alternatives do not qualify.
**1. Deal-547B2B — $11,200** Alex confirms redlines came back clean, the signing page is deployed, and the client's VP People said they're signing tomorrow. Close date 2026-09-11, DS5/COMMIT. Left: nothing — signature day. **2. Deal-403845 — $9,000** Dana says the order form is with the client's finance team. Still DS5/COMMIT, close 2026-09-11. Slack status "moving fine" but no signature trigger yet. Left: finance approval cycle on the order form. **3. Deal-A2B47C — $6,360** Alex reports "normal legal-review pace," no blockers flagged. DS5/COMMIT, close 2026-09-11. Less certain than #1–#2 but confirmed warm with no known issues. Left: legal review still in flight. Note: **Deal-2465CE** ($5,400, committed in CRM) dropped out — Dana reports their champion left and procurement froze new vendors. She's pulling it out of commit; realistically a Q4 deal now. *Top-of-book sum (these 3): $26,560.*
Here is the analysis against your constraints. Dollar amounts are not present in the supplied data, so those fields read as such. --- ## Transcript-Gap Analysis ### Candidate 1 — TG-001 | Deal-EC3025 **Prospect quote:** *"We need SCIM user provisioning — our security team will not approve any tool that requires manual account management."* **Product-doc check:** Docs list SSO/SAML + audit logs under Enterprise only. The Supported Integrations section explicitly states: *"SCIM user provisioning … are NOT currently listed as supported capabilities."* **Classification: Real Gap.** SCIM provisioning does not exist in any tier — not a plan upgrade path, not an enablement miss. It is a hard capability absence that blocks IT-security approval. | Attribute | Value | |---|---| | Deal alias | Deal-EC3025 | | Dollar amount | Not present in supplied data | | Prospect persona | IT Security Lead | | Obstacle level | Security-block (compliance) | --- ### Candidate 2 — TG-002 | Deal-D0D6B5 **Prospect quote:** *"Our payroll runs on ADP Workforce Now and I don't see ADP anywhere in your integration list — that's a dealbreaker for us."* **Product-doc check:** HRIS integrations table lists Workday, BambooHR, Gusto, Rippling (Pro+). The same paragraph confirms: *"ADP Workforce Now integrations are NOT currently listed as supported capabilities."* **Classification: Real Gap.** ADP WFN is absent from every tier. No higher-plan row adds it. It is a hard capability gap. | Attribute | Value | |---|---| | Deal alias | Deal-D0D6B5 | | Dollar amount | Not present in supplied data | | Prospect persona | HRIS Manager | | Obstacle level | Operational-block (payroll dependency) | --- ### Candidates excluded from the final summary **TG-003 — Deal-CFE7F4** Prospect: *"I tried to build a custom report combining recognition frequency with turnover and couldn't — is that possible on our current plan?"* Rep: *"The custom report builder sits on our Enterprise tier — I can walk you through upgrade paths."* Docs: Custom report builder is listed under Enterprise. → **Plan Gate.** Feature exists, just above the prospect's current tier. Fix = upsell; not a product gap. **TG-004 — Deal-84DBA6** Prospect: *"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."* Docs: Slack integration is available on all plans; no mention of training modules. → **Rollout / Enablement Issue.** The product delivers the feature; the org lacks adoption processes (training/comms). Not a gap in the software itself. **TG-005 — Deal-36C33F** Rep: *"...we don't have a native mobile app for hourly workers yet, though it's on the roadmap."* Prospect: *"Good to know. The web version should be fine for our office staff for now."* Prospect did not voice this concern — the rep volunteered it. Rep language does not count per your rules. Moreover, the product docs make no mention of mobile apps, so we cannot independently classify it here. → **Excluded** (rep-only signal + no verification). --- ## Final Summary — True Product Gaps Only two candidates cleared the "real gap" bar: 1. **SCIM user provisioning** — absent from all tiers. Raised by an IT Security Lead at **Deal-EC3025** (amount: not in supplied data). Blocks compliance/security sign-off. 2. **ADP Workforce Now integration** — absent from all tiers. Raised by an HRIS Manager at **Deal-D0D6B5** (amount: not in supplied data). Described as a "dealbreaker." Both are confirmed by the product docs excerpt as unsupported capabilities. Neither can be resolved by moving the prospect to a higher plan. Remediation requires adding them to the product roadmap.
Here are the results using snapshot date **2026-09-05** and threshold **2026-08-29** (any deal whose most recent email/call/meeting predates Aug 29 is stale). Two deals had no engagement row at all -- marked "never". --- ## Summary by Owner | Owner | Stale Deals | Stale Amount | |---|---|---| | Bryce Harmon | 13 | $626,243.00 | | Cole Ingram | 18 | $252,905.03 | | Dana Mercer | 14 | $261,645.00 | | Alex Franklin | 19 | $109,536.00 | | Elena Sinclair | 1 | $2,100.00 | | **TOTAL** | **65** | **$1,252,429.03** | Farid Osman carries **zero** stale deals -- all 7 of his open deals had activity on or after Aug 29. --- ## Detail by Owner (amount descending within each group) === Bryce Harmon (13 stale deals, $626,243.00) === ``` Deal-2D1F1B | DS1 | $240,000.00 | 81 days since last contact (last: 2026-06-16) Deal-66D1FC | DS1 | $99,000.00 | 16 days since last contact (last: 2026-08-20) Deal-950043 | DS1 | $70,000.00 | 19 days since last contact (last: 2026-08-17) Deal-B23205 | DS1 | $45,000.00 | 16 days since last contact (last: 2026-08-20) Deal-7BBDFA | DS3 | $37,440.00 | 46 days since last contact (last: 2026-07-21) Deal-332637 | DS2 | $36,000.00 | 9 days since last contact (last: 2026-08-27) Deal-1BEEBF | DS1 | $31,500.00 | 19 days since last contact (last: 2026-08-17) Deal-C5658B | DS1 | $23,400.00 | 16 days since last contact (last: 2026-08-20) Deal-40522D | DS3 | $21,000.00 | 19 days since last contact (last: 2026-08-17) Deal-F0EBBB | DS3 | $11,400.00 | 24 days since last contact (last: 2026-08-12) Deal-E25A09 | DS1 | $6,000.00 | 9 days since last contact (last: 2026-08-27) Deal-C9C286 | DS2 | $5,502.00 | 9 days since last contact (last: 2026-08-27) Deal-012CB1 | DS1 | $1.00 | 23 days since last contact (last: 2026-08-13) ``` === Dana Mercer (14 stale deals, $261,645.00) === ``` Deal-44EA29 | DS2 | $60,000.00 | 10 days since last contact (last: 2026-08-26) Deal-E51FB7 | DS2 | $43,875.00 | 12 days since last contact (last: 2026-08-24) Deal-B42F46 | DS1 | $27,000.00 | 19 days since last contact (last: 2026-08-17) Deal-BA3DDC | DS3 | $23,400.00 | 15 days since last contact (last: 2026-08-21) Deal-9DDE86 | DS2 | $20,000.00 | 15 days since last contact (last: 2026-08-21) Deal-215CCA | DS3 | $18,900.00 | 17 days since last contact (last: 2026-08-19) Deal-5EED42 | DS3 | $16,250.00 | 11 days since last contact (last: 2026-08-25) Deal-57887A | DS2 | $15,000.00 | 8 days since last contact (last: 2026-08-28) Deal-B7EBD1 | DS5 | $9,000.00 | 16 days since last contact (last: 2026-08-20) Deal-3974EB | DS4 | $9,000.00 | 8 days since last contact (last: 2026-08-28) Deal-F40F04 | DS2 | $8,100.00 | 15 days since last contact (last: 2026-08-21) Deal-87DDD1 | DS1 | $5,000.00 | 19 days since last contact (last: 2026-08-17) Deal-F336B6 | DS3 | $4,200.00 | 15 days since last contact (last: 2026-08-21) Deal-0660B4 | DS4 | $1,920.00 | 16 days since last contact (last: 2026-08-20) ``` === Alex Franklin (19 stale deals, $109,536.00) === ``` Deal-CC08D1 | DS1 | $24,000.00 | 16 days since last contact (last: 2026-08-20) Deal-E73427 | DS3 | $18,000.00 | 10 days since last contact (last: 2026-08-26) Deal-885F45 | DS2 | $9,300.00 | 12 days since last contact (last: 2026-08-24) Deal-C2FF3C | DS1 | $8,316.00 | 10 days since last contact (last: 2026-08-26) Deal-3EED2C | DS2 | $7,200.00 | N/A last contact (no engagement row) Deal-0D2F7A | DS3 | $5,100.00 | 12 days since last contact (last: 2026-08-24) Deal-6C60D4 | DS3 | $4,800.00 | 12 days since last contact (last: 2026-08-24) Deal-13FEBD | DS2 | $4,680.00 | 12 days since last contact (last: 2026-08-24) Deal-9D0060 | DS3 | $3,840.00 | 12 days since last contact (last: 2026-08-24) Deal-690476 | DS2 | $3,600.00 | 18 days since last contact (last: 2026-08-18) Deal-C6D97A | DS4 | $3,240.00 | 8 days since last contact (last: 2026-08-28) Deal-EE195F | DS3 | $3,120.00 | 8 days since last contact (last: 2026-08-28) Deal-278DEC | DS3 | $2,700.00 | 8 days since last contact (last: 2026-08-28) Deal-635B8E | DS3 | $2,600.00 | 18 days since last contact (last: 2026-08-18) Deal-6883F3 | DS1 | $2,400.00 | 16 days since last contact (last: 2026-08-20) Deal-4A13AD | DS3 | $2,160.00 | 26 days since last contact (last: 2026-08-10) Deal-F67D31 | DS2 | $1,800.00 | 8 days since last contact (last: 2026-08-28) Deal-5FDCE4 | DS3 | $1,600.00 | 12 days since last contact (last: 2026-08-24) Deal-BA571A | DS4 | $1,080.00 | 18 days since last contact (last: 2026-08-18) ``` === Cole Ingram (18 stale deals, $252,905.03) === ``` Deal-D04904 | DS2 | $58,529.25 | 11 days since last contact (last: 2026-08-25) Deal-B25F40 | DS3 | $40,000.00 | 8 days since last contact (last: 2026-08-28) Deal-813836 | DS2 | $32,175.00 | 11 days since last contact (last: 2026-08-25) Deal-1BA595 | DS2 | $31,750.00 | 11 days since last contact (last: 2026-08-25) Deal-CFE1E8 | DS3 | $18,000.00 | 11 days since last contact (last: 2026-08-25) Deal-CD47A6 | DS2 | $12,168.00 | 11 days since last contact (last: 2026-08-25) Deal-627646 | DS3 | $11,193.00 | 11 days since last contact (last: 2026-08-25) Deal-FF809F | DS2 | $7,781.20 | 11 days since last contact (last: 2026-08-25) Deal-AF932D | DS2 | $7,225.40 | 11 days since last contact (last: 2026-08-25) Deal-A71728 | DS2 | $6,947.50 | 11 days since last contact (last: 2026-08-25) Deal-8BC9F5 | DS2 | $5,616.00 | 10 days since last contact (last: 2026-08-26) Deal-175395 | DS3 | $4,779.88 | 11 days since last contact (last: 2026-08-25) Deal-481E24 | DS3 | $4,140.00 | 10 days since last contact (last: 2026-08-26) Deal-C7F9BF | DS2 | $3,360.00 | 11 days since last contact (last: 2026-08-25) Deal-2F3A66 | DS3 | $3,334.80 | 11 days since last contact (last: 2026-08-25) Deal-342E96 | DS2 | $2,700.00 | 24 days since last contact (last: 2026-08-12) Deal-E568D5 | DS3 | $1,875.00 | 11 days since last contact (last: 2026-08-25) Deal-FD9F4E | DS5 | $1,330.00 | 10 days since last contact (last: 2026-08-26) ``` === Elena Sinclair (1 stale deal, $2,100.00) === ``` Deal-57FF13 | DS1 | $2,100.00 | N/A last contact (no engagement row) ``` --- ## Key observations - **Arithmetic**: All 65 stale deals sum to $1,252,429.03 across 5 of 8 active owners. Farid Osman (716654662) has zero stale deals -- every one of his 7 open deals had engagement activity on or after Aug 29. - **Oldest stale**: Bryce Harmon's Deal-2D1F1B ($240k) -- last contacted Jun 16, 81 days ago. - **No engagement row**: 2 deals (Deal-3EED2C / Alex and Deal-57FF13 / Elena) appear in the open deals CSV but have no row in the engagements file, meaning their last contact cannot be determined from available data. Both are classified stale for this reason. - **Concentration**: Bryce Harmon alone accounts for 50% of the stale pipeline value ($626k of $1.25M), driven by three big-ticket deals in DS1/PIPELINE not touched in over a month.
Here are the results. WINDOW: last 30 days from snapshot 2026-09-05 = 2026-08-06 through 2026-09-05. Only active owners included. Gavin Porter and Hugo Lindqvist excluded (archived). Elena Sinclair appears with zeros (her single deal, 64524667574, has no engagement rows). PER-REP ACTIVITY & DS2 SUMMARY ====================================== Rep Emails Calls Meet Total %Email %Call %Meet DS2 Act/DS2 -------------------------------------- Bryce Harmon 162 0 43 205 79.0 0.0 21.0 4 51.2 Elena Sinclair 0 0 0 0 -- -- -- 0 N/A Farid Osman 38 0 34 72 52.8 0.0 47.2 1 72.0 Dana Mercer 84 18 11 113 74.3 15.9 9.7 1 113.0 Cole Ingram 96 14 1 111 86.5 12.6 0.9 2 55.5 Alex Franklin 307 36 41 384 79.9 9.4 10.7 18 21.3 NOTE on percentages: share of that rep's total activities (emails + calls + meetings). DEALS ENTERING DS2 IN LAST 30 DAYS PER REP ====================================== | Deal alias | Owner | t_ds2 | |------------------|-------------------|----------| | Deal-25F752 | Bryce Harmon | 2026-08-10 | | Deal-D73B89 | Bryce Harmon | 2026-09-03 | | Deal-CA7DC0 | Bryce Harmon | 2026-08-12 | | Deal-1CCE5C | Bryce Harmon | 2026-08-06 | => Bryce Harmon: 4 deals entered DS2 | Deal-499BF6 | Farid Osman | 2026-08-26 | => Farid Osman: 1 deal entered DS2 | Deal-57887A | Dana Mercer | 2026-08-07 | => Dana Mercer: 1 deal entered DS2 | Deal-42326B | Cole Ingram| 2026-08-26 | | Deal-1BA595 | Cole Ingram| 2026-08-12 | => Cole Ingram: 2 deals entered DS2 | Deal-403845 | Alex Franklin | 2026-09-02 | | Deal-1FC049 | Alex Franklin | 2026-09-03 | | Deal-3EED2C | Alex Franklin | 2026-09-03 | | Deal-7FA0C3 | Alex Franklin | 2026-08-07 | | Deal-E531A6 | Alex Franklin | 2026-08-07 | | Deal-5296C9 | Alex Franklin | 2026-08-28 | | Deal-36C33F | Alex Franklin | 2026-08-11 | | Deal-EE195F | Alex Franklin | 2026-08-06 | | Deal-F436DA | Alex Franklin | 2026-08-19 | | Deal-317E6F | Alex Franklin | 2026-08-12 | | Deal-D1E6C2 | Alex Franklin | 2026-08-11 | | Deal-D9A72E | Alex Franklin | 2026-08-06 | | Deal-CA5E44 | Alex Franklin | 2026-08-24 | | Deal-4F775F | Alex Franklin | 2026-08-17 | | Deal-898FC5 | Alex Franklin | 2026-08-28 | | Deal-46988D | Alex Franklin | 2026-08-26 | | Deal-E73427 | Alex Franklin | 2026-08-28 | | Deal-92D97D | Alex Franklin | 2026-09-02 | => Alex Franklin: 18 deals entered DS2 TOTAL: 26 deals across 5 reps (Elena Sinclair: 0). EFFICIENCY RANKING (activities per DS2 entry, lowest = most efficient) ================================================================== Rank Rep Activities DS2 Act/DS2 ---------------------------------------------- 1 Alex Franklin 384 18 21.3 2 Bryce Harmon 205 4 51.2 3 Cole Ingram 111 2 55.5 4 Farid Osman 72 1 72.0 5 Dana Mercer 113 1 113.0 MOST EFFICIENT REP ====================================== Alex Franklin — 21.3 activities per DS2 entry (lowest ratio). Activity mix: email 79.9%, call 9.4%, meeting 10.7%. Total: 384 activities / 18 DS2 entries. HIGHEST-VOLUME REP ====================================== Alex Franklin — 384 total activities in the last 30 days. Activity mix: email 79.9%, call 9.4%, meeting 10.7%. DO THEY DIFFER? ====================================== NO. The most efficient rep and the highest-volume rep are the same person: Alex Franklin. He also leads on absolute output (18 DS2 entries), which explains both his top volume and top efficiency simultaneously.
```
================================================================================
ALEX FRANKLIN — Q3 2026 SCORECARD
As of 2026-09-05
================================================================================
--- BOOKINGS vs QUOTA ---
Q3 Closed-Won deals (close_date >= 2026-07-01 AND < 2026-10-01):
Deal Alias Amount Date Type
-------------- ------ ---------- -------
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
-------------- ------ ---------- -------
TOTAL WON $120,000
Quota (2026-Q3): $200,000
Attainment: $120,000 / $200,000 = 60.0%
New Pipeline: $77,500 (5 deals; 64.6% of booked)
Expansion: $42,500 (3 deals; 35.4% of booked)
Total Pipeline: $120,000
Note: 1 prior closed-won deal excluded — Deal-B3E6F1 ($24,000, close 2026-06-20)
falls outside Q3.
--- ACTIVE PIPELINE BY STAGE ---
Stage Count Total Amount Weighted @ Avg Win Rate*
DS1 11 $224,700 $22,470 (10%)
DS2 26 $334,158 $100,247 (30%)
DS3 20 $142,726 $71,363 (50%)
DS4 6 $40,824 $24,494 (60%)
DS5 4 $28,960 $17,376 (80%)
-------- ---- -----------
TOTAL 67 $771,368 $235,950
*Standard weightings applied to unweighted total.
--- ROLLING 90-DAY DS2-TO-WON RATE ---
Window: 90 days through 2026-09-05 (any deal that entered DS2
between ~2026-06-07 and 2026-09-05).
Deals counted as winners (close_date within window):
2026-09-02 Deal-E6F3A9 $6,500
2026-09-03 Deal-C5D9E2 $4,500
2026-08-21 Deal-D4B8C2 $11,000
2026-08-19 Deal-A8B4D6 $12,000
2026-08-12 Deal-C9E1A6 $21,000
2026-07-31 Deal-B7D2F4 $35,000
2026-07-24 Deal-F2C7D8 $20,000
2026-07-15 Deal-A1C3E5 $40,000
Total won: 8 deals = $150,500
Total lost: 0 deals = $0
Rate: 8 / (8 + 0) = 100%
Warning: small numerator — only 1 deal in the cohort actually reached DS2
and closed. Rate reflects a thin funnel, not proven conversion skill.
--- WIN / LOSS COUNTS & TOP LOSS REASONS ---
Wins: 8 deals | $150,500
Losses: 0 dealt within 90-day DS2 window.
Loss reasons from ALL closed-lost deals in dataset:
Loss Reason Count Total Lost
----------------------------------- ----- ----------
Competitor 7 $66,931
Lost-Timing (1 year or more) 11 $142,171
MIA 5 $41,481
Lost DM 2 $28,100
Feature Request 1 $21,000
Does not fit ICP 1 $10,800
Top 3 loss reasons by dollar impact:
1. Lost-Timing — $142,171 (61% of lost pipeline)
2. Competitor — $66,931 (29%)
3. MIA — $41,481 (18%)
--- ACTIVITY VOLUME — LAST 30 DAYS ---
Aggregated across all 67 open deals + 9 closed deals (data source: ae_engagements.csv,
column headers read "X_30d").
Activity Type Count
----------- ------
Emails 683
Calls 72
Meetings 48
Notes 49
----------- ------
TOTAL 852
--- THREE COACHING OBSERVATIONS ---
1. LATE-QUARTER COLLAPSE — No deals won after 2026-09-02. With 28 days
remaining in Q3 and $80,000 still needed to hit quota, Alex must
force-prioritize top-of-funnel deals (DS4+ = $69,784) for immediate
closing and block-stall broken deals across every stage. Without an
accelerator in the final month, 60% attainment will harden.
2. TIMING IS THE REAL COMPETITOR — 11 of 26 closed-lost deals ($142,171,
61% of total lost) were lost to "1 year or more" timing objections.
This is not a product problem; it is a qualifying-and-pacing problem.
Alex is spending disproportionate effort on buyers who have no
budget cycle alignment. Before next outreach round, every deal must
carry a documented budget-cycle date or be moved to a nurture track.
3. HIGH-VOLUME ACTIVITY DISPARITY — Won deals average 42 touches in 30 days
(emails + calls + meetings + notes); the open pipeline averages 11.3.
Volume drives conversion. If the same intensity seen in closers were
applied across the board, especially the top 20 weighted deals
($512,298 combined), we would expect materially more DS3→DS4 movement
and fewer stalled mid-pipeline loops. Focus highest-touch cadences on
the 10 largest opportunities first.
================================================================================
END OF SCORECARD
================================================================================
```
3 of the 14 deals are well-threaded and not flagged. Here is the complete analysis of the 11 flagged deals:
---
**WELL-THREADED (not flagged):**
- Deal-4B0BEB (C-1BDFE0) — 4 active contacts, 4 personas (champion, economic buyer, HR admin, finance)
- Deal-84DBA6 (C-BE9BE0) — 3 active contacts, 3 personas (champion, economic buyer, IT security)
- Deal-D348E1 (C-804F29) — 5 active contacts, all 5 personas present
---
**FLAGGED DEALS (11 total), sorted by amount:**
1. **Deal-EC3025** (C-FDD0C7) — $62,000 | DS2
- Active contacts: 1 | Issues: SINGLE-THREADED + ALL SAME PERSONA
- Personas present: champion | Missing: HR admin, IT security, economic buyer, finance
- Most valuable to add: economic buyer
- Unengaged on file: YES — CT-6827DB (economic buyer, Chief People Officer)
2. **Deal-92D97D** (C-E23238) — $60,000 | DS2
- Active contacts: 2 | Issue: UNDER-THREADED (<3)
- Personas present: HR admin, champion | Missing: IT security, economic buyer, finance
- Most valuable to add: economic buyer
- Unengaged on file: None on file
3. **Deal-50D386** (C-EB10E4) — $36,000 | DS2
- Active contacts: 2 | Issue: UNDER-THREADED (<3)
- Personas present: HR admin, champion | Missing: IT security, economic buyer, finance
- Most valuable to add: economic buyer
- Unengaged on file: YES — CT-A1C4B3 (economic buyer, Chief People Officer)
4. **Deal-D0D6B5** (C-32918E) — $23,800 | DS2
- Active contacts: 3 | Issue: ALL CONTACTS IN ONE PERSONA
- Personas present: champion | Missing: HR admin, IT security, economic buyer, finance
- Most valuable to add: economic buyer
- Unengaged on file: YES — CT-1FA4DB (economic buyer, Chief People Officer)
5. **Deal-5BFE3B** (C-535D36) — $18,000 | DS2
- Active contacts: 2 | Issues: UNDER-THREADED + ALL SAME PERSONA
- Personas present: champion | Missing: all 4 others
- Most valuable to add: economic buyer
- Unengaged on file: None on file
6. **Deal-36C33F** (C-077A0E) — $15,000 | DS2
- Active contacts: 1 | Issues: SINGLE-THREADED + ALL SAME PERSONA
- Personas present: IT security | Missing: all 4 others
- Most valuable to add: economic buyer
- Unengaged on file: YES — CT-1DB73E (economic buyer, Chief People Officer)
7. **Deal-5408B0** (C-2AE3AA) — $14,850 | DS4
- Active contacts: 2 | Issue: UNDER-THREADED (<3)
- Personas present: HR admin, champion | Missing: IT security, economic buyer, finance
- Most valuable to add: economic buyer (EB critical at DS4 final review)
- Unengaged on file: YES — CT-07FA76 (economic buyer, Chief People Officer)
8. **Deal-885F45** (C-5E8EFB) — $9,300 | DS2
- Active contacts: 2 | Issue: UNDER-THREADED (<3)
- Personas present: champion, economic buyer | Missing: HR admin, IT security, finance
- Most valuable to add: HR admin
- Unengaged on file: YES — CT-B3F25D (IT security, IT Security Lead)
9. **Deal-FCBE5B** (C-737030) — $7,500 | DS2
- Active contacts: 1 | Issues: SINGLE-THREADED + ALL SAME PERSONA
- Personas present: champion | Missing: all 4 others
- Most valuable to add: economic buyer
- Unengaged on file: None on file
10. **Deal-C6D97A** (C-5A8FC2) — $3,240 | DS4
- Active contacts: 3 | Issue: ALL CONTACTS IN ONE PERSONA
- Personas present: champion | Missing: all 4 others
- Most valuable to add: economic buyer (EB critical at DS4)
- Unengaged on file: None on file
11. **Deal-F9A08A** (C-0D15DF) — $2,484 | DS4
- Active contacts: 2 | Issue: UNDER-THREADED (<3)
- Personas present: champion, economic buyer | Missing: HR admin, IT security, finance
- Most valuable to add: finance (needed for terms/pricing at closing stage)
- Unengaged on file: None on file
---
**Summary arithmetic:**
- Total open deals with contacts: 14
- Well-threaded: 3 (21%)
- Flagged as single-threaded or under-threaded: 11 (79%)
- Combined deal value of flagged deals: $242,174
- 6 of 11 flagged deals have an unengaged contact on file matching a missing persona; 5 do not
## Alex Franklin — Last 10 Calls Analysis ### 1. What He Leads With (First 5 Minutes) Two distinct openings across 10 calls: | Opening | Calls Used | Deals | |---------|-----------|-------| | Case study: "400-person retailer cut regretted turnover 18%..." | 8 | TT-001, TT-002, TT-003, TT-005, TT-006, TT-007, TT-008, TT-010 | | "I put together a short agenda — security review first, then pricing." | 1 | TT-004 | | "You asked for straight pricing last time, so let's start there." | 1 | TT-009 | Quote (most frequent opener): *"Quick one to kick off: a 400-person retailer we work with cut regretted turnover 18% in two quarters after automating milestone awards, and I wanted to walk you through exactly how they did it."* ### 2. Three Most Common Objections & How He Handles Them **Objection 1 — Budget Locked** (4 calls: TT-001, TT-003, TT-006, TT-010) Prospect says: *"Honestly, budget is locked until next fiscal year — I can't add a new line item right now."* Alex responds: *"Totally fair. Most teams fund this out of turnover savings — that retailer saved about $210k in avoided backfills, which is how their finance team signed off."* Approach: Reframes from cost to funded savings. Uses social proof + specific dollar amount. **Objection 2 — Timing / Delay** (3 calls: TT-002, TT-005, TT-008) Prospect says: *"This is good, but can we revisit it next quarter? Open enrollment starts in October and we're underwater."* Alex responds: *"Makes sense. What if we scope a 90-day pilot with one department so you have internal data before next quarter's planning?"* Approach: Counter-offers a constrained pilot to preserve momentum. Does not accept "not now" without a bridge. **Objection 3 — Status Quo / No Urgency** (3 calls: TT-004, TT-007, TT-009) Prospect says: *"We already do recognition with a spreadsheet and quarterly gift cards — why would we change?"* Alex responds: *"Spreadsheets work until they scale — the difference is automation: milestones fire without HR lifting a finger, and you get analytics on who is being recognized."* Approach: Acknowledges current state, then contrasts automation and analytics. (Also observed: "Need committee/budget approval" in TT-004 and TT-010; no urgency in TT-007.) ### 3. Concrete Next-Step Agreement Rate | Call | Next Step Proposed | Agreed? | |------|-------------------|---------| | TT-001 | Working session Thursday 2pm | ✓ Yes | | TT-002 | Working session Thursday 2pm | ✓ Yes | | TT-003 | Working session Thursday 2pm | ✓ Yes | | TT-004 | "I'll leave it with you" | ✗ No | | TT-005 | Working session Thursday 2pm | ✓ Yes | | TT-006 | Working session Thursday 2pm | ✓ Yes | | TT-007 | "Fair enough" (no ask made) | ✗ No | | TT-008 | Working session Thursday 2pm | ✓ Yes | | TT-009 | Working session Thursday 2pm | ✓ Yes | | TT-010 | "Understood, thanks for the candor" (no ask) | ✗ No | **Rate: 7/10 = 70%.** Two calls where no ask was made (TT-007, TT-010), one where the ask landed flat (TT-004). ### 4. Competitors Raised by Prospects | Competitor | Calls Mentioned | Deal Aliases | Quote | |-----------|----------------|---------------|-------| | **Awardco** | 1 | TT-003 (Deal-547B2B) | "We're also in late talks with Awardco — their rewards catalog looks bigger than yours." | | **Kudos** | 1 | TT-007 (Deal-EDC141) | "How are you different from Kudos? Our CEO used them at her last company." | | **Workhuman** | 1 | TT-005 (Deal-C61CF7) | Used by Alex (not prospect): "And unlike Workhuman, our pricing includes the full rewards catalog with no extra margin." | **Total unique competitors raised by prospects: 2 (Awardco, Kudos).** Workhuman was referenced by Alex in his own pitch, not by a prospect. --- ### Coaching Notes 1. **Stop auto-piloting the case-study opener.** It appeared identically in 8 of 10 calls. The rep uses it even on return conversations (TT-009, where the prospect expected pricing straight away) — that's wasted air. Vary the opener based on context: return callers should skip to pricing/value; cold calls can lead with the case study. Prediction: prospects are starting to recognize the script, which erodes credibility. 2. **Two calls had zero close attempt (TT-007, TT-010).** In TT-007 the rep said "Fair enough" when the prospect admitted no urgency — the ball was left on the floor. In TT-010 the rep accepted "we'll have to wait for the committee" without proposing a next step or asking for permission to follow up at committee time. Every call that surfaces an objection should end with either a booked next step OR an explicit agreement on when to reconnect. Leaving no ask = leaving the deal in limbo.
## Q3 2026 Forecast (close dates 2026-07-01 to 2026-09-30) ### In-Q deals by category **COMMIT — 9 deals** | Alias | Amount | |---|---| | Deal-D348E1 | 13 770 | | Deal-547B2B | 11 200 | | Deal-B7EBD1 | 9 000 | | Deal-403845 | 9 000 | | Deal-A2B47C | 6 360 | | Deal-2465CE | 5 400 | | Deal-A5E80A | 2 520 | | Deal-499BF6 | 1 249 | | | **= 58 499** | COMMIT total = **$58 499** (weighted 100 %) **BEST_CASE — 20 deals** | Alias | Amount | |---|---| | Deal-2D7423 | 38 935 | | Deal-25F752 | 24 000 | | Deal-E53952 | 19 656 | | Deal-5EED42 | 16 250 | | Deal-FA32A0 | 11 116 | | Deal-FC22A3 | 10 800 | | Deal-944310 | 10 500 | | Deal-5195DB | 9 890 | | Deal-180D02 | 9 720 | | Deal-3974EB | 9 000 | | Deal-5D8CEE | 7 200 | | Deal-E531A6 | 5 400 | | Deal-48B656 | 5 160 | | Deal-9D0060 | 3 840 | | Deal-46988D | 3 780 | | Deal-357C30 | 3 600 | | Deal-C6D97A | 3 240 | | Deal-DAF1D9 | 3 150 | | Deal-EE195F | 3 120 | | Deal-55164C | 3 060 | | Deal-001FF4 | 2 916 | | Deal-F436DA | 2 760 | | Deal-F9A08A | 2 484 | | Deal-8952F0 | 2 100 | | Deal-1FC049 | 1 920 | | Deal-7FA0C3 | 1 400 | | Deal-87412C | 528 | | Deal-8AD4A5 | 1 800 | | Deal-C7F9BF | 3 360 | | Deal-6A544F | 3 240 | | Deal-5AD94B | 4 000 | | Deal-333EBB | 2 880 | | Deal-F5A622 | 1 080 | Best-case subtotal = **$139 024** Weighted BEST_CASE = 139 024 × 0.35 = **$48 658.40** **PIPELINE — 15 deals, counted at $0** Deal-EE9FFB · Deal-D56743 · Deal-CFE1E8 · Deal-4F775F · Deal-CD47A6 · Deal-F0EBBB · Deal-31AD2C · Deal-82627F · Deal-293AF3 · Deal-034D49 · Deal-8BC9F5 · Deal-C9C286 · Deal-DBF65A · Deal-600CD9 · Deal-55164C — none contribute. ### Forecast summary ``` Category Count Total Weight Weighted ───────── ───── ─────── ────── ──────── COMMIT 9 58 499 100 % 58 499.00 BEST_CASE 37 139 024 35 % 48 658.40 PIPELINE 15 0 0 % 0.00 ───────── ───── ─────── ────── ──────── TOTAL 61 197 523 ──── 107 157.40 ``` Weighted Q3 forecast = **$107 157.40** ### Excluded deals (close date after 2026-09-30) **Count: 19 deals** | Alias | Cat. | Amount | Close | |---|---|---|---| | Deal-E51FB7 | PIPELINE | 43 875 | 2026-10-01 | | Deal-B936FE | PIPELINE | 18 000 | 2026-10-09 | | Deal-D9A12F | PIPELINE | 17 000 | 2026-10-15 | | Deal-D348E1 | COMMIT | 13 770 | 2026-10-15 | | Deal-4062CF | PIPELINE | 10 800 | 2026-10-15 | | Deal-293AF3 | PIPELINE | 9 000 | 2026-10-09 | | Deal-034D49 | PIPELINE | 9 000 | 2026-10-15 | | Deal-E0ADD8 | PIPELINE | 7 920 | 2026-10-15 | | Deal-9F2E43 | PIPELINE | 7 690 | 2026-10-08 | | Deal-FCBE5B | PIPELINE | 7 500 | 2026-10-07 | | Deal-712010 | PIPELINE | 7 200 | 2026-10-15 | | Deal-C61CF7 | BEST_CASE | 5 400 | 2026-10-09 | | Deal-600CD9 | PIPELINE | 5 400 | 2026-10-02 | | Deal-A92065 | PIPELINE | 5 400 | 2026-10-15 | | Deal-1D532E | PIPELINE | 5 400 | 2026-10-15 | | Deal-48B656 | BEST_CASE | 5 160 | 2026-10-15 | | Deal-E531A6 | PIPELINE | 4 800 | 2026-10-15 | | Deal-D1E6C2 | PIPELINE | 4 400 | 2026-10-09 | | Deal-5AD94B | PIPELINE | 4 000 | 2026-10-15 | Excluded total = **$159 415** ### Top 5 BEST_CASE deals in Q3 (by amount) 1. Deal-2D7423 — $38 935 — DS3 2. Deal-25F752 — $24 000 — DS4 3. Deal-E53952 — $19 656 — DS4 4. Deal-5EED42 — $16 250 — DS3 5. Deal-FA32A0 — $11 116 — DS3 ## Data quality Nine of twenty-six COMMIT-classified deals are in early discovery stages (DS1–DS2), with one sitting at DS1 and two at DS2; committing a deal that has not progressed beyond initial qualification strongly biases the forecast upward. Eighteen out of eighty rows have an empty `owner` field, making attribution and rep-level follow-up impossible. The `why_buys_chars` column contains meaningful text on only eight of eighty rows (10 %), so the rationale behind wins cannot be analysed or trended. Finally, fourteen deals carry close dates strictly after Q3 but appear in this "default sales pipeline" extract without clear reason, suggesting the boundary filter was not applied consistently at query time.
Here is the full 2x2 analysis based on the 220-company extract.
=== 2X2 COHORT ANALYSIS ===
Criterion for "givers": m1_users >= 5
Criterion for "redemption": m1_redemptions >= 1
Retained at 24mo = current_status == 'active'
| Retained | Total | 24mo Retention Rate
---------------|----------|-------|--------------------
Both signals | 31 | 47 | 66.0%
Givers only | 23 | 49 | 46.9%
Redemption only| 9 | 29 | 31.0%
Neither | 38 | 95 | 40.0%
Total companies included: 220
Companies excluded from denominator: 0 (all 220 classified cleanly)
=== LIFT CALCULATION (vs "neither" baseline of 40.0%) ===
Givers-only vs neither: +6.9 percentage points (46.9 - 40.0)
Redemption-only vs neither: -9.0 percentage points (31.0 - 40.0)
Both signals vs neither: +26.0 percentage points (66.0 - 40.0)
Single signal with the largest retention lift: **Givers (m1_users >= 5)** -- its presence alone lifts retention by +6.9pp over the neither baseline.
The combination of both signals lifts retention by +26.0pp, far exceeding either signal alone.
=== WHAT THIS PROVES ===
1. Association confirmed: In this cohort, companies exhibiting both strong breadth-of-adoption (5+ unique users in month 1) AND behavioral proof-of-value (1+ redemptions in month 1) are substantially more likely to still be active at 24 months (66% vs 40% baseline).
2. Redemption-only is a negative signal: Companies with redemptions but fewer than 5 users in month 1 underperform even the "neither" baseline (31% vs 40%), suggesting limited-scale activation with no subsequent spread may indicate a stalled pilot rather than healthy early product use.
=== WHAT THIS DOES NOT PROVE ===
1. Causation: These are correlational, not causal. Companies that get both signals may have been going to succeed anyway (strong internal champion, larger org, better implementation).
2. Selection bias: We do not control for company size, industry, country, HRIS integration status, or whether the company received any implementation support. Any of these confounders could drive both the signals and the outcome.
3. Reverse causality: Better companies may be more likely to exhibit both signals AND renew. We cannot disentangle whether the signals predicted survival or simply co-occurred with other success factors.
4. Threshold sensitivity: The thresholds (5 users, 1 redemption) are arbitrary cutoffs here. We do not know if the true relationship is step-function or continuous, or whether different thresholds would produce different results.
5. Generalizability: All 220 companies are from a single year (2023 signup cohorts, Jan-Jun), predominantly US-based with sparse international representation. Results may not hold for newer cohorts, different markets, or post-2023 dynamics.
6. Active status is noisy: "Active" tells us the company renewed, not why. Were they retained due to product value, contract lock-in, sales effort, or competitive inertia? We cannot distinguish.
The script ran successfully but the "MATCHED TOTALS" line had a display bug. Here's the clean, corrected analysis: --- # ARR RECONCILIATION — 2026-09-05 ## Totals | Source | ARR | |---|---| | **Billing ARR** (MRR x 12, Chargebee) | **$617,897.76** | | **CRM ARR** (HubSpot company_arr.csv) | **$603,581.76** | | **Variance** (CRM − Billing) | **−$14,316.00** | Revenue is understated in CRM relative to billing by $14,316.00. --- ## Variance Decomposition (sums exactly to −$14,316.00) ### Bucket 1: Missing records (one-sided) → −$11,952.00 Two aliases appear in only one system: | Alias | Source | Amount | Issue | Suggested Owner | |---|---|---|---|---| | **C-0D5BBE3A** | CRM only | +$16,497.24 | No Chargebee subscription found — likely new deal, data gap, or renamed alias | RevOps / SDR Ops | | **C-21629AA4** | Billing only | −$28,449.24 | Chargebee active sub but no HubSpot record — contact may lack CRM entity or was purged | Sales Ops / AM | Net: +16,497.24 − 28,449.24 = **−$11,952.00** Arithmetic: These single-sided entries shift the CRM total down relative to billing by their net difference. ### Bucket 2: Other material variances (> $5, both sources exist) → −$2,364.00 Three matched accounts have deltas > $5: | Alias | Billing ARR | CRM ARR | Diff | Delta % | Suggested Owner | |---|---|---|---|---|---| | **C-0F7269D7** | $26,796.00 | $24,396.00 | **−$2,400.00** | −9.0% | AM / RevOps investigate | | **C-0D66DF9E** | $23,184.00 | $23,200.00 | +$16.00 | +0.1% | RevOps reconcile | | **C-14D70CE0** | $18,180.00 | $18,200.00 | +$20.00 | +0.1% | RevOps reconcile | Net: −2,400.00 + 16.00 + 20.00 = **−$2,364.00** Arithmetic: Sum of signed diffs = −2,400 + 16 + 20 = −2,364. Confirmed. ### Bucket 3: Status mismatch → $0.00 Two cancelled subscriptions exist (SUB-000E: C-0C8323BF, SUB-000F: C-0DC4FB8C). Both sources agree on their ARR ($4,905.24 and $8,253.24 respectively). No status mismatch variance between systems. However, $13,158.48 of cancelled-sub ARR is reflected in CRM — potential business-rule issue worth flagging. ### Bucket 4: Rounding (< $5) → $0.00 No residuals under $5 on either side. All other matched accounts are exact. ### Decomposition check | Bucket | Amount | |---|---| | Missing records | −$11,952.00 | | Material variances | −$2,364.00 | | Status mismatch | $0.00 | | Rounding | $0.00 | | **Sum** | **−$14,316.00** ✓ | Matches reported variance: **exact**. --- ## Term Violations Rule: Any subscription with term ≠ 12 months must have `cf_agreement_end_date` populated. **2 VIOLATIONS FOUND:** | Subscription | Alias | MRR | Term | cf_agreement_end_date | |---|---|---|---|---| | **SUB-0002** | C-1794A52C | $591.00 | 24mo | **(empty)** — VIOLATION | | **SUB-0019** | C-22170CA1 | $649.00 | 36mo | **(empty)** — VIOLATION | All non-12-month subs for reference: | Sub | Alias | Term | End date | Status | |---|---|---|---|---| | SUB-0002 | C-1794A52C | 24mo | (none) | **VIOLATION** | | SUB-000C | C-0DB48281 | 24mo | 2027-11-30 | OK | | SUB-0019 | C-22170CA1 | 36mo | (none) | **VIOLATION** | | SUB-001A | C-0FC4DBB8 | 36mo | 2027-11-30 | OK | --- ## Summary of Actions Required 1. **Investigate C-0F7269D7** ($2,400 gap, −9%) — highest-priority reconciliation item; possible CRM undercount or billing overcount. 2. **Resolve C-0D5BBE3A** — $16,497 ARR in CRM with no billing record; verify if real customer, pipeline deal, or alias rename. 3. **Resolve C-21629AA4** — $28,449 ARR in billing with no CRM record; create HubSpot contact/account or link to existing entity. 4. **Fix term violations** — populate `cf_agreement_end_date` on SUB-0002 and SUB-0019, or change their terms. 5. **Review cancelled ARR** — C-0C8323BF ($4,905) and C-0DC4FB8C ($8,253) remain in CRM at $13,158.48 total post-cancellation.
Pulse engagement collapsed -15.3% overall, driving the largest relative move across all four KVMs. The drop is concentrated in enterprise (-50.1%), while smb (-0.2%) and mid_market (+0.2%) were essentially flat. Giving rate, redemptions/user, and 1:1 engagement each moved <0.1%. Giving Rate: 60.3% (Jul 60.2%, +0.04 pts, +0.1%, up) Redemptions/User: 1.73 (Jul 1.73, +0.0002, ~flat, up) 1:1 Engagement: 44.7% (Jul 44.7%, +0.03 pts, +0.1%, up) Pulse Engagement: 50.9% (Jul 60.1%, -9.2 pts, -15.3%, down) Largest relative move: Pulse Engagement (-15.3%). Segment driving it: enterprise (-50.1%); smb and mid_market show no meaningful shift. | KVM | Aug 2026 | Jul 2026 | Abs Change | Rel Change | Direction | |---|---|---|---|---|---| | Giving Rate | 60.3% | 60.2% | +0.04 pts | +0.1% | Up | | Redemptions/User | 1.73 | 1.73 | +0.0002 | +0.0% | Up | | 1:1 Engagement | 44.7% | 44.7% | +0.03 pts | +0.1% | Up | | Pulse Engagement | 50.9% | 60.1% | -9.2 pts | -15.3% | Down |
Here are the August 2026 redemption results: LAST COMPLETED MONTH: 2026-08 (August 2026) REDEMPTION COUNT: 48 redemptions TOTAL SPEND: $3,536.00 UNIQUE REDEEMERS: 46 users REDEMPTIONS PER REDEEMER: 1.04 (48 / 46), range 1-2 per user PROVIDER MIX (% of spend): Tremendous: $1,145.00 (32.4%) -- 22 redemptions custom: $1,057.00 (29.9%) -- 4 redemptions Snappy: $834.00 (23.6%) -- 11 redemptions TangoCard: $500.00 (14.1%) -- 11 redemptions TOTAL: $3,536.00 (100.0%) TOP 5 COUNTRIES BY REDEMPTIONS: 1. US: 31 2. CA: 7 3. GB: 2 4. SG: 2 5. AU: 2 Note: US dominates with 31/48 redemptions (64.6%). Two users (U-13BD80 and U-F64070) each redeemed twice; all others redeemed once. Custom rewards have the highest average ticket ($264.25/redemption) despite being only 4 redemptions.
Let me compute this directly against the data. **R3 date calculation:** snapshot 2026-09-05 + 120 days = 2027-01-03. Any renewal <= 2027-01-03 qualifies. --- ## QUALIFYING ACCOUNTS (all 3 rules met) | Account | Health | $ Eligible | Renewal | Usage Trend | Seats / Used | Util % | Signal | Play | |---------|--------|-----------|---------|-------------|-------------|--------|--------|------| | C-0F6C0F34 | 51 | 49,707 | 2026-10-03 | growing | 395/308 | 78% | Growing usage but poor health (51); champion inactive — disconnect between adoption and satisfaction | Exec Touch | | C-0B827671 | 56 | 25,365 | 2026-11-14 | declining | 202/113 | 56% | Declining usage AND low util (56%) with active champion — champion can drive activation | Usage Revival | | C-0B360C78 | 57 | 35,748 | 2026-10-28 | growing | 327/246 | 75% | Healthy adoption but health score dragged by satisfaction/nPS; renewal <90 days out | Exec Touch | | C-0E9C27D1 | 39 | 41,235 | 2026-09-24 | flat | 157/134 | 85% | **Worst health (39)**, flat usage (not dropping), imminent renewal (now), good utilization — pure sentiment/satisfaction problem | Commercial Concession | | C-0D3278C7 | 54 | 17,602 | 2026-11-12 | declining | 380/126 | 33% | **Critical: massive underutilization** (33%) paired with declining trend — product not fitting use case | Usage Revival | | C-0BA71F12 | 52 | 6,824 | 2027-04-11 | declining | 98/23 | 23% | Severe underutilization (23%), declining usage, longest renewal window — needs commercial reset | Commercial Concession | **Total $ at stake: $176,481** ### Play summary with cited signal **Usage Revival (2 accounts):** - C-0B827671 — declining trend + only 56% seat utilization; champion is active and can steer adoption - C-0D3278C7 — declining trend + only 33% utilization (largest gap of any qualifying account); seats_used barely one-third of purchased **Executive Touch (2 accounts):** - C-0F6C0F34 — growing usage (product working) but health score 51 with inactive champion; needs exec-level relationship rebuild - C-0B360C78 — growing usage, renewal in <90 days, health 57; exec sponsor needed to lock commitment early **Commercial Concession (2 accounts):** - C-0E9C27D1 — health score 39 (lowest of all accounts), flat (not getting worse but not improving), best utilization at 85%; usage is fine so price/value misalignment is the lever - C-0BA71F12 — health 52 with only 23% utilization and long renewal window; seat discount or tier down likely needed to justify expansion --- ## AT-RISK BUT DO NOT QUALIFY An account "looks at risk" if it triggers R1 (health < 60) but fails R2 or R3. | Account | Health | $ Eligible | Renewal | Why excluded | |---------|--------|-----------|---------|--------------| | C-0B0F1BAB | 38 | 5,494 | 2026-09-23 | **Does qualify** — was overlooked above | Wait, let me re-check C-0B0F1BAB: health=38 (<60 ✓), eligible=$5,494 (>0 ✓), renewal=2026-09-23 (<=2027-01-03 ✓). This qualifies too. Adding it: - C-0B0F1BAB — health 38, $5,494 at stake, flat trend, 363/238 seats (66% util), champion inactive | Usage Revival (flat + moderate underutilization) **Revised total: $181,975** ### Genuine non-qualifiers (trigger R1 but fail R2 or R3): | Account | Health | $ Eligible | Renewal | Rule Failed | Why | |---------|--------|-----------|---------|-------------|-----| | C-0CA21961 | 58 | 16,829 | 2026-12-28 | R3 | Renewal 2026-12-28 is >120 days from snapshot (175 days away); no immediate churn risk | | C-0CEF69FD | 53 | 32,621 | 2026-11-21 | R3? No — 78 days. **Does qualify!** | health 53<60 ✓, amount>0 ✓, renewal 2026-11-21 is 78 days from 2026-09-05 ≤ 120 ✓ | Re-checking C-0CEF69FD: yes, this also qualifies. Adding: - C-0CEF69FD — health 53, $32,621, growing trend, 136/97 seats (71% util), inactive champion | Usage Revival (growing but underutilized; champion not driving full adoption) **Revised total: $214,596** ### Now listing genuine non-qualifiers: | Account | Health | $ Eligible | Renewal | Rule Failed | Why | |---------|--------|-----------|---------|-------------|-----| | C-0BC71BDD | 55 | 0 | 2026-10-27 | R2 | $0 eligible — already saved or contract term prevents churn offer; no leverage | | C-0F6694C3 | 43 | 0 | 2027-03-21 | R2 + R3 | $0 eligible AND renewal 197 days out — double disqualification | | C-0BE96399 | 54 | 0 | 2026-10-29 | R2 | $0 eligible despite declining usage (28%) and low health — no financial lever available | | C-0F876796 | 47 | 19,958 | 2027-02-06 | R3 | Renewal ~154 days out (just past 120-day window); churn not yet actionable | | C-0FCCD2DF | 43 | 0 | 2027-04-23 | R2 + R3 | $0 eligible AND renewal 230 days out | | C-10A56B0F | 54 | 0 | 2026-12-12 | R2 | $0 eligible despite declining usage and mid-60s health | All remaining accounts (C-8C2E8F00 through C-0AAA9434) have health >= 60, so they are not at-risk under the rules. --- ## FINAL ANSWER **Qualifying accounts: 7** (was 6, added C-0B0F1BAB and C-0CEF69FD on re-check) | Account | $ At Stake | Play | Justifying Signal | |---------|-----------|------|-------------------| | C-0F6C0F34 | $49,707 | Executive Touch | Growing usage but health 51 + inactive champion = satisfaction disconnect | | C-0B360C78 | $35,748 | Executive Touch | Growing usage, health 57, renewal <90 days | | C-0E9C27D1 | $41,235 | Commercial Concession | Worst health (39), flat usage, 85% util — price/value issue | | C-0CAF69FD | $32,621 | Usage Revival | Growing but only 71% util, inactive champion | | C-0B827671 | $25,365 | Usage Revival | Declining + 56% util, active champion to steer | | C-0D3278C7 | $17,602 | Usage Revival | Declining + critical 33% utilization gap | | C-0B0F1BAB | $5,494 | Usage Revival | Flat + 66% util, inactive champion | **Total pipeline at stake: $214,596** **Non-qualifying at-risk (7 accounts):** - C-0CA21961 — renewal 175 days out (fails R3) - C-0F876796 — renewal 154 days out (fails R3) - C-0BC71BDD — $0 eligible (fails R2) - C-0BE96399 — $0 eligible (fails R2) - C-10A56B0F — $0 eligible (fails R2) - C-0F6694C3 — $0 eligible + renewal 197 days (fails R2+R3) - C-0FCCD2DF — $0 eligible + renewal 230 days (fails R2+R3)
Here's the expansion kit, built from the provided data. --- ## Expansion Kit — C-0DDFC9A7 ### 1. Seat Coverage Licensed: 150 / Headcount: 400 = **37.5% coverage.** Two-thirds of their workforce has no Bonusly seat. ### 2. Usage Health - Active users grew 43 over 6 months (88 → 126), a ~49% climb. Growth is steady, not spiking — it reflects sustained adoption. - **126 of 150 licensed seats are active** as of August — 84% seat utilization. They're consuming most of their allocated pool with room to burn. ### 3. Headroom (seats + ARR) - Current per-seat price: $9,000 ARR ÷ 150 seats = **$60/seat/month**. - Seats remaining in license: 150 − 126 = **24 seats**. - Seats available vs. headcount: 400 − 150 = **250 uncovered employees**. - If they expanded to full headcount at $60/seat/mo: 400 × $60 = $28,800/mo or **$345,600/yr ARR** vs. current $9,000/mo ($108,000/yr). - Near-term realistic upsell: buying the remaining 24 seats = **+ $1,440/mo (+$17,280/yr)**. ### 4. Who Replied & Can They Buy? Maria S., People Operations Coordinator, replied 2026-09-02. She confirmed product love but explicitly said she has **no authority** on budget or seat expansion. She offered to introduce Dana R. ### 5. Right Buyer **Dana R., VP People** (last engaged 2026-05-18). Her title (VP-level) matches the budget/seats conversation. Last touch was ~4 months ago — low enough warmth that Maria's intro will be critical. ### 6. Reply Email (< 150 words) ``` Hi Maria, Thanks so much — that's great to hear, and really appreciate you making the introduction. I'll send Dana a brief note referencing your conversation so she has context. If you're open to it, CC'ing her on my intro would help hit the ground running. For background: your team went from 88 to 126 active users in the last six months, which is exactly the kind of organic growth we like to see ahead of capacity conversations. When the time is right, I'd love to help you make sure everyone who wants Bonusly has a seat. Appreciate the bridge — thank you. Best, Cole ``` That's 110 words. Cites one real usage fact (88→126 active users over six months), acknowledges Maria's contribution, and moves to Dana without pressure.
Here is the full CSM prep brief for company **C-0D284E42**, based on signup **2026-08-11** (today: 2026-09-06, day 27). --- ## WHAT IS COMPLETE (backed by data) 1. **Slack integration** — connected 2026-08-12 (day 1 post-signup). Fastest milestone hit. 2. **Allowance set** — done 2026-08-13 (day 2). Core config completed early. 3. **Admins added** — 2 admin accounts created. No specific creation date in the data; count confirmed as 2. 4. **First recognition given** — 2026-08-15 14:22 (day 4). The first recognition event fired successfully. ## WHAT IS NOT COMPLETE (backed by data) 1. **HRIS integration** — no value recorded. Not started or not yet reported. This is needed for automated headcount-based allowance calculations and employee import. 2. **First redemption** — no value recorded. Zero redemptions despite a recognition being given 21 days ago (on 2026-08-15). This is the critical blockage point. ## EARLY ENGAGEMENT SIGNALS | Signal | Value | Interpretation | |--------|-------|---------------| | Active givers: week 1 avg | 4.3/day | Quiet start, expected for day 1–7 | | Active givers: last 7d avg | 13.0/day | 3× the week-1 pace | | Growth trajectory | 3 → 15 givers (+400%) | Strong upward curve | | Trend direction (last 3d vs prior 4d) | UP (14.3 vs 12.0) | Still accelerating | | Peak active givers | 15 on Sep 3 | New high within the dataset | | Days with ≥9 givers | 14 of 25 (56%) | Majority of days show solid participation | | Calendar span | 25 consecutive days of activity | Never flatlined or went zero | **Bottom line on engagement:** Adoption velocity is excellent — 15 active givers now vs 3 at launch, with no drop-offs to zero and an accelerating trend. Users are participating actively. **The contradiction:** Recognition has happened (21 days ago), but nobody has redeemed anything. Engagement numbers keep climbing, which means people know about the program and are giving — they just aren't using the reward side. ## THREE THINGS TO COVER ON THE CALL ### 1. Unblock redemptions (highest priority) - Acknowledge the recognition was sent on Aug 15 and ask: did the recipient get the notification? Did they try to redeem and hit a wall? - Check whether allowances are visible/claimable to employees in the app — e.g., is there a UI friction point, or are rewards not populated in the catalog? - Verify that whatever was granted in the recognition actually landed in the employee's balance. - Goal: get the first redemption done *today* or schedule it in front of them before leaving the call. ### 2. HRIS integration — understand the blocker - Slack was integrated on day 1, HRIS still empty after 27 days. Ask what's stalled: IT security approval, vendor coordination, technical issue? - Explain why HRIS matters: automated headcount syncing, accurate allowance pools, reduced manual maintenance. - Offer to walk through requirements or connect them to any implementation resources. ### 3. Scale the momentum (momentum conversation) - With 15 active givers and growth still climbing, position this as "the program is working" and reinforce that behavior. - Suggest a concrete next step to sustain: a monthly recognition theme, manager-led spotlight, or linking recognition to existing team rituals. - Use their own data in the call: "You've gone from 3 givers on day one to 15 today — that's strong peer adoption."
--- **90-DAY RENEWAL RISK BRIEF** Window: 2026-09-06 through 2026-12-05 | 20 accounts --- **DATE SOURCING RULE:** Multi-year contracts have CZ dates known to be wrong. All others trust CZ operational date. Trust decision explained per account below. --- ### ALL RENEWALS (ordered by renewal date) | Account | CSM | ARR | Renewal Date | Source | Seats Used/Total | Util % | Jun-Aug Trend | Risk | Flagged? | |---------|-----|------|-------------|--------|------------------|--------|---------------|------|----------| | C-0B7D2C30 | Dana Mercer | $65,901 | 2026-09-15 | **CB** (5-day gap from CZ) | 274/476 | 57.6% | 97->94->84 (-13.4%) | HIGH | YES | | C-0BCDB8C2 | Cole S. | $54,427 | 2026-09-18 | **CB** (365-day gap from CZ!) | 232/424 | 54.7% | 127->118->110 (-13.2%) | HIGH | YES | | C-0D2AB865 | Elena W. | $38,022 | 2026-09-22 | **CB** (12-day gap from CZ) | 250/407 | 61.4% | 125->117->109 (-12.8%) | HIGH | YES | | C-0BBE3E60 | Dana Mercer | $30,993 | 2026-09-26 | **CB** (365-day gap from CZ) | 74/114 | 64.9% | 39->35->33 (-15.4%) | HIGH | YES | | C-0F5D2323 | Cole S. | $90,647 | 2026-09-29 | **CB** (19-day gap from CZ) | 111/390 | 28.5% | 20->21->18 (-10.0%) | HIGH | YES | | C-0EC6999D | Elena W. | $79,419 | 2026-10-03 | CZ | 31/112 | 27.7% | 17->16->15 (-11.8%) | HIGH | | | C-0B20DB64 | Dana Mercer | $21,770 | 2026-10-07 | CZ | 214/378 | 56.6% | 294->298->294 (+0.0%) | HIGH | | | C-0BBC4E7A | Cole S. | $56,374 | 2026-10-10 | CZ | 228/337 | 67.7% | 142->141->139 (-2.1%) | MODERATE | | | C-0FD551AB | Elena W. | $48,815 | 2026-10-14 | CZ | 210/376 | 55.9% | 123->122->126 (+2.4%) | HIGH | | | C-0F9F8F13 | Dana Mercer | $46,230 | 2026-10-18 | CZ | 199/352 | 56.5% | 185->185->182 (-1.6%) | HIGH | | | C-0BC34584 | Cole S. | $16,740 | 2026-10-22 | CZ | 327/494 | 66.2% | 104->104->106 (+1.9%) | MODERATE | | | C-0B7A7546 | Elena W. | $35,062 | 2026-10-25 | CZ | 182/205 | 88.8% | 64->65->63 (-1.6%) | LOW | | | C-0B369871 | Dana Mercer | $85,128 | 2026-10-29 | CZ | 317/422 | 75.1% | 326->330->333 (+2.1%) | LOW | | | C-0B144C78 | Cole S. | $30,899 | 2026-11-02 | CZ | 169/224 | 75.4% | 101->101->106 (+4.9%) | LOW | | | C-0FC4DBB8 | Elena W. | $94,732 | 2026-11-05 | CZ | 356/464 | 76.7% | 189->191->193 (+2.1%) | LOW | | | C-0D5BBE3A | Dana Mercer | $39,740 | 2026-11-09 | CZ | 85/102 | 83.3% | 88->90->91 (+3.4%) | LOW | | | C-0FB9D5AF | Cole S. | $63,158 | 2026-11-13 | CZ | 144/199 | 72.4% | 173->173->176 (+1.7%) | MODERATE | | | C-0B344485 | Elena W. | $64,384 | 2026-11-16 | CZ | 224/287 | 78.0% | 238->240->244 (+2.5%) | LOW | | | C-0CB2C1B4 | Dana Mercer | $40,628 | 2026-11-20 | CZ | 386/473 | 81.6% | 47->48->49 (+4.3%) | LOW | | | C-22170CA1 | Cole S. | $45,646 | 2026-11-24 | CZ | 251/294 | 85.4% | 143->148->146 (+2.1%) | LOW | | --- ### SYSTEM DISAGREEMENTS (5 flagged above) All 5 are multi-year contracts where CZ is unreliable per known issue. CB trusted in each case. 1. **C-0B7D2C30**: CZ=2026-09-10 vs CB=2026-09-15 -- **5 days**. Using CB (multi-year, 36mo). 2. **C-0BCDB8C2**: CZ=2027-09-18 vs CB=2026-09-18 -- **365 days**. CZ is exactly 1 year late. Using CB (multi-year, 36mo). Highest-severity discrepancy. 3. **C-0D2AB865**: CZ=2026-09-10 vs CB=2026-09-22 -- **12 days**. Using CB (multi-year, 24mo). 4. **C-0BBE3E60**: CZ=2027-09-26 vs CB=2026-09-26 -- **365 days**. Same 1-year-off pattern as C-0BCDB8C2. Using CB (multi-year, 24mo). 5. **C-0F5D2323**: CZ=2026-09-10 vs CB=2026-09-29 -- **19 days**. Using CB (multi-year, 24mo). Note: The two CZ-over-by-exactly-one-year cases (C-0BCDB8C2, C-0BBE3E60) confirm a systematic date-offset bug in ChurnZero for multi-year terms. Single-year CZ-CB deltas on non-flagged accounts are all zero or 1 day (within tolerance). --- ### ONE-SENTENCE EVIDENCE PER ACCOUNT (RISKS) **HIGH RISK (9 accounts):** - C-0B7D2C30: 57.6% seat utilization with 13.4% active-user decline (Jun->Aug) on a 36-month contract -- heavy headroom and fading adoption. - C-0BCDB8C2: Only 54.7% seats utilized with 13.2% active-user erosion over 12 months; largest multi-year risk at $54k. - C-0D2AB865: Declining usage (-12.8%) combined with only 61.4% seat utilization on a 24-month term -- engagement slipping. - C-0BBE3E60: Seat util at 64.9% with 15.4% active-user decline; smallest base (74 seats used) signals weak product attachment. - C-0F5D2323: Catastrophic seat utilization at just 28.5% (111/390) despite highest ARR among multi-years at $90,647. - C-0EC6999D: 27.7% seat utilization (31/112) with declining activity and a single-year contract up for immediate renewal. - C-0B20DB64: Only 56.6% seats utilized (214/378) despite stable volume -- chronic over-provisioning flags expansion risk at $21,770. - C-0FD551AB: 55.9% seat utilization (210/376) -- nearly half the purchased seats unused, single-year exposure. - C-0F9F8F13: 56.5% seat utilization (199/352) with flat-to-slight-declining usage -- purchasing far more seats than needed. **MODERATE RISK (3 accounts):** - C-0BBC4E7A: 67.7% utilization with mild decline (-2.1%) sits below the 75% healthy threshold. - C-0BC34584: 66.2% seat utilization (327/494) indicates significant unused capacity. - C-0FB9D5AF: 72.4% utilization, while near-threshold, still leaves 55 seats unrealized with growth stalling. **LOW RISK (8 accounts):** - C-0B7A7546: 88.8% utilization, strong adopter -- secure. - C-0B369871: 75.1% utilization + growing usage -- strongest large account ($85k). - C-0B144C78: 75.4% utilization + 4.9% growth trend -- solid. - C-0FC4DBB8: 76.7% utilization + growth on largest portfolio at $94,732 -- safe anchor. - C-0D5BBE3A: 83.3% utilization + 3.4% growth -- healthy. - C-0B344485: 78.0% utilization + 2.5% growth -- strong. - C-0CB2C1B4: 81.6% utilization + 4.3% growth -- engaged. - C-22170CA1: 85.4% utilization + steady growth -- secure. --- ### SUMMARY TOTALS ``` Total ARR renewing in window: $1,048,715 ARR at risk (HIGH+MODERATE): $ 612,496 (58.4%) Safe ARR (LOW): $ 436,219 (41.6%) ``` **Per-CSM breakdown:** | CSM | Accounts | Total ARR | At Risk | % at Risk | |-----|----------|-----------|---------|-----------| | Dana Mercer | 7 | $330,390 | $164,894 | 49.9% | | Cole Ingram | 7 | $357,891 | $281,346 | 78.6% | | Elena Sinclair | 6 | $360,434 | $166,256 | 46.1% | Cole Ingram carries the highest concentration of at-risk ARR ($281k, 78.6%). C-0F5D2323 alone at $90,647 with 28.5% utilization is the single largest spot risk.
Here is the synthesized analysis. Two tickets (IC-460063, IC-460057) had empty body_text but identical tags and belong to C-0B2213A9, which already has 8 HRIS tickets — assigned to Theme 4 by tag/context. All 79 tickets classified.
TOTALS: 79 tickets · 24 distinct accounts · date range 2026-06-01 to 2026-08-29
Theme 1 — HRIS Provisioning Failures
-----------------------------------
Count: 12 (15.2%)
Distinct accounts: 3 (C-0F6C0F34, C-0DDFC9A7, C-0B2213A9)
ARR affected: $114,000.00 (30,000 + 48,000 + 36,000)
Sample IDs: IC-460053, IC-460054
Body text variants read:
"HRIS provisioning is not creating accounts for new hires this month."
"New employees are not being provisioned from our HRIS sync."
"HRIS sync skipped 12 new hires; provisioning log shows no errors."
Tags seen: bug, urgent, question, feedback, how-to, billing
Pattern type: Broad — 3 distinct accounts, largest ARR exposure of any theme.
Recommendation: Audit the provisioning webhook/delta-sync pipeline. Logs showing no errors despite skipped hires indicates a silent drop between API call and account creation. Add a reconciliation job comparing HRIS source-of-truth against provisioned accounts daily.
Theme 2 — Recognition Points Not Posting
----------------------------------------
Count: 20 (25.3%)
Distinct accounts: 9 (C-0D3278C7, C-0DD0626C, C-21FEBCBB, C-0D0B047C, C-0B2895EF, C-0BF20542, C-0D6CC8E3, C-0BE96399, C-0D284E42)
ARR affected: $23,700.00 (3,500 + 2,500 + 2,900 + 4,500 + 2,900 + 4,500 + 4,200 + 2,700 + 3,400)
Sample IDs: IC-460001, IC-460002
Body text variants read:
"Two recognitions I sent show as delivered but the points never arrived."
"Points from last week's recognition are still not posting to my balance."
"Missing points - my balance has not updated since Tuesday."
"Points not posting for our whole team after the weekend."
Tags seen: bug, urgent, question, feedback, how-to, billing
Pattern type: Broad — 9 distinct accounts, highest ticket count. Affects mid-to-small accounts uniformly.
Recommendation: The recognition engine delivers acknowledgments but fails to debit sender / credit recipient atomically. Add idempotent point-posting with explicit balance-update confirmations. The "after the weekend" variant suggests a batch-process scheduling gap worth isolating.
Theme 3 — Redemption & Gift Card Failures
-----------------------------------------
Count: 18 (22.8%)
Distinct accounts: 7 (C-0FCCD2DF, C-0F876796, C-0B0F1BAB, C-0B827671, C-0D9CA315, C-14264ABD, C-0CEF69FD)
ARR affected: $59,200.00 (9,600 + 8,700 + 10,300 + 10,700 + 9,600 + 11,000 + 8,900)
Sample IDs: IC-460021, IC-460022
Body text variants read:
"Redemption failed twice today; gift card email never showed up."
"Redemption failed at checkout and the gift card code never arrived."
"Gift card order errored out but the points were still deducted."
"Checkout spins forever and then the redemption fails."
Tags seen: bug, urgent, question, feedback, how-to, billing
Pattern type: Broad — 7 distinct accounts across 4 related sub-failure modes within the same checkout → fulfillment path.
Recommendation: The checkout funnel has at least 4 failure vectors (timeout hang, code generation, email delivery, refund reversal). Add end-to-end transaction tracing and implement automatic point rollback on any checkout-abort or vendor-error event. Contact the gift card vendor API for error-rate diagnostics.
Theme 4 — Billing & Invoice Discrepancies
------------------------------------------
Count: 15 (19.0%)
Distinct accounts: 1 (C-0E9C27D1)
ARR affected: $52,000.00 (single account only)
Sample IDs: IC-460065, IC-460067
Body text variants read:
"Billing charged the annual renewal at the wrong tier price."
"Third invoice in a row with the same seat-count error."
"Invoice discrepancy - charged for 200 seats but we license 150."
"Our invoice shows a seat count we never approved."
Tags seen: bug, urgent, question, feedback, how-to, billing
Pattern type: Single-account concentration. All 15 tickets from C-0E9C27D1 over June-August. Seat-count and tier-price bugs are clearly the same underlying reconciliation defect repeating.
Recommendation: Fix the seat-count reconciliation logic once and immediately credit C-0E9C27D1 for the past 3 incorrect invoices. This is a fix-and-correct scenario, not a product-wide pattern — but the account's churn risk is elevated given repeated billing failures.
Theme 5 — Slack Integration Broken
------------------------------------
Count: 14 (17.7%)
Distinct accounts: 4 (C-10A56B0F, C-0BA71F12, C-8C2E8F00, C-0B843542)
ARR affected: $18,900.00 (5,400 + 3,900 + 5,200 + 4,400)
Sample IDs: IC-460039, IC-460040
Body text variants read:
"Slack slash command returns an error for everyone on our team."
"Recognitions no longer post to Slack; the sync toggle resets itself."
"The Slack app disconnected and re-auth does not stick."
"Slack integration stopped syncing recognitions to our channel this week."
Tags seen: bug, urgent, question, feedback, how-to, billing
Pattern type: Broad — 4 distinct accounts, 4 different Slack failure modes (slash commands, webhook posting, OAuth token refresh, manual disconnect). Suggests infrastructure-level degradation in the Slack app layer.
Recommendation: Review the Slack app's OAuth token lifecycle and bot-message publishing endpoints. The "re-auth does not stick" and "sync toggle resets" variants indicate the stored connection state is being invalidated server-side, not just client-side.
Summary: Rankings by ARR Exposure
===================================
Rank Theme Count Share Accts ARR Affected
---- ----------------------- ------ ------- ------ ------------
1 HRIS Provisioning 12 15.2% 3 $114,000
2 Redemption Failures 18 22.8% 7 $59,200
3 Billing Discrepancies 15 19.0% 1 $52,000
4 Points Posting 20 25.3% 9 $23,700
5 Slack Integration 14 17.7% 4 $18,900
-----------
$267,800 total ARR exposed
Notes:
- Highest volume (Theme 4, 25%) does not equal highest risk (Theme 1 has 4.8x the ARR exposure).
- Theme 4 (billing) is concentrated in one enterprise account ($52K ARR); treat as churn emergency rather than system-wide bug.
- The 2 tickets with empty body_text (IC-460063, IC-460057) were assigned to HRIS Provisioning via tag match and account context (C-0B2213A9 held 8 other HRIS tickets at time of filing).
Based on direct comparison of all 10 customers with `has_case_study=true` against the prospect (Technology / Mid-Market / employee_recognition / NA-West), here is the ranked shortlist: **1. C-A13C193D — Technology, Mid-Market, retention, NA-West** ✓ 3/4 fields match - `industry`: Technology ✓ | `size_band`: Mid-Market ✓ | `region`: NA-West ✓ - Divergence: use case = retention (not employee_recognition) **2. C-CD4829A7 — Technology, Mid-Market, retention, NA-East** ✓ 3/4 fields match - `industry`: Technology ✓ | `size_band`: Mid-Market ✓ | `region`: NA-East (same continent) - Divergence: use case = retention; region sub-region only (East vs West) **3. C-64171065 — Technology, Mid-Market, employee_recognition, NA-East** ✓ 3/4 fields match - `industry`: Technology ✓ | `size_band`: Mid-Market ✓ | `use_case`: employee_recognition ✓ - Divergence: region sub-region only (East vs West) **Why not C-9D69D147 or C-11C31562?** Each matches only 2 fields (e.g., C-9D69D147 shares Mid-Market + NA-West but is Financial Services + retention; C-11C31562 shares Mid-Market + NA-West but is Manufacturing + employee_recognition). All remaining case-study customers matched ≤ 1 field.
```
CHANNEL PERFORMANCE REPORT — TRAILING 6 MONTHS (MAR–AUG 2026)
================================================================================
=== PAID CHANNELS ===
Channel Spend SQMs SQOs $/SQM $/SQO SQM→SQO% Pipeline $/to Pip
linkedin_ads $24,000 25 8 $960 $3,000 32.0% $96,000 $4
paid_search $36,000 40 18 $900 $2,000 45.0% $720,000 $20
webinars $9,000 12 5 $750 $1,800 41.7% $60,000 $7
TOTAL $69,000 77 31
Arithmetic:
linkedin_ads: 8/25 = 32.0% | cost/SQO = $24,000 / 8 = $3,000 | pip/$ = $96,000/$24,000 = $4
paid_search: 18/40 = 45.0% | cost/SQO = $36,000 / 18 = $2,000 | pip/$ = $720,000/$36,000 = $20
webinars: 5/12 = 41.7% | cost/SQO = $9,000 / 5 = $1,800 | pip/$ = $60,000/$9,000 = $7
=== ORGANIC CHANNELS ===
Channel Volume SQOs SQO Rate Pipeline
organic_search 30 10 33.3% $90,000
referral 15 6 40.0% $48,000
COMBINED 45 16 35.6% $138,000
Organic avg SQO rate = 16/45 x 100 = 35.6%
=== FLAGGED: SQO DATE PRECEDES SQM DATE ===
CT-000044 (linkedin_ads): SQM=2026-07-23 → SQO=2026-07-18 pipeline=$12,000
CT-000041 (linkedin_ads): SQM=2026-06-14 → SQO=2026-06-09 pipeline=$12,000
Both in linkedin_ads. Likely first-touch misattribution (person converted via another
channel but was tagged with the earlier ad touch). These $24K of pipeline may be
double-counted or wrongly attributed.
=== DATA GAPS ===
- paid_social: $18,000 spent (6 months x $3,000), ZERO contact records.
SQMs, SQOs, conversion rates = UNDEFINED (not zero; there is no sample at all).
The $18k spend appears on channel_spend.csv but nobody from paid_social ever
entered contacts_first_touch.csv. Either tracking is broken, or those impressions
never drove form fills. Cost per SQM and cost per SQO cannot be computed.
- organic_search, referral: valid volume but $0 spend tracked. No paid denominator
means pipeline-per-dollar is undefined for these channels.
=== REALLOCATION RECOMMENDATION ===
Paid channels ranked by pipeline-per-dollar:
paid_search $20/pip/$ ████████████████
webinars $7/pip/$ █
linkedin_ads $4/pip/$ ██
Action 1 — Shift budget from linkedin_ads to paid_search:
Every $1,000 moved generates ~$76K incremental pipeline.
Example: move $4,000/month from linkedin_ads to paid_search:
linkedin would produce: $4k x $4/$ = $16K pipeline
paid_search would produce: $4k x $20/$ = $80K pipeline
Net gain: ~$64K/month pipeline per $4k shift
Action 2 — Fix or suspend paid_social tracking immediately:
$18,000 across 6 months ($3,000/month) is invisible in the CRM. Without attribution,
you cannot evaluate it. Pause until UTM/contact-source tracking is fixed, then
reallocate to paid_search where marginal ROI is proven.
Action 3 — Maintain webinar spend:
At $7/pip/$ and 41.7% conv rate, webinars outperform linkedin_ads. Sample is small
(n=5 SQOs) but directionally sound.
=== CONFIDENCE ASSESSMENT ===
paid_search : HIGH (n=18 SQOs) — robust sample
organic_search : MEDIUM (n=10 SQOs)
linkedin_ads : MEDIUM (n=8 SQOs)
referral : MEDIUM (n=6 SQOs)
webinars : MEDIUM (n=5 SQOs)
paid_social : UNDEFINED (zero SQOs, zero data)
The linkedin_ads recommendations carry moderate confidence — two reversed-date rows
inflate the SQM count without adding SQOs, suggesting first-touch noise. paid_search
results are highly reliable given 18 conversions. Paid social results are truly
undefined, not just low-confidence, because there is literally no contact-level data.
Updated battlecard written to: `/Users/amaniphipps/Rivally_battlecard_updated.md` **Summary of what changed from the old card:** | Old Claim | Verdict | New | |---|---|---| | "Rivally lacks a Slack integration." | **False.** S04 confirms Slack integration worked out of the box (2026-02-02). | Removed. | | "Rivally was acquired by WorkHuman in 2025." | **Unverified.** No source supports this. S01 says Series C, not acquisition. | Removed. | | "Pricing starts at $5/user/month" | **Outdated.** Price raised to $7 on 2026-08-12 [S17]. | Updated to $7, with version conflict documented ($5 vs $7 both pricing_page; newer wins). | | No recent changes section | N/A | Added — 8 changes tracked chronologically through Sep 2026. | **Win rate:** 12 wins / 8 losses = 60% across 20 deals over the past 12 months. April and May were rough months (0% win rate); June through August recovered to 100%. **Excluded rep opinions:** Bryce Harmon's UI comment [S09] and Elena Sinclair's discounting claim [S21] — flagged as rep opinion per your rule.
Here is the analysis from the provided data. **Key finding: audiences.csv has only 40 unique rows (a sample), with zero multi-sequence contacts. However, the sequences show hundreds to thousands of sends, confirming the real contact lists are larger than this file represents — actual overlap cannot be verified from this data.** --- ### 1. New Logo Nurture - Sent: 1,386 | Open: 35.4% | Reply: 6.5% | Meet: 1.9% - Step rates: S1=8.4% reply / S2=6.6% / S3=4.2%. Steep decay at each step. - Weakest step: **Step 3** (4.2% reply, 1.4% meet). Drop-off accelerates — sent falls 72 from S1 to S3 (500→428) while reply rate halves. - Failure mode is engagement fatigue, not cold outreach rejection. ### 2. Expansion Nurture - Totals look okay: 64.6% open, 6.7% reply. But **tracking error: Step 2 shows 340 opened vs 300 sent** (113.3%). Impossible. Either the send count or open count for S2 is wrong. Fix before drawing conclusions. - Excluding the error, weak signal: **meetings fall** from S1(1.7%) to S2(1.3%) to S3(1.1%). Existing customers aren't requesting meetings despite opening emails. ### 3. Cold Outbound - HR Leaders - Sent: 1,785 | Open: 30.5% | Reply: **0.4%** | Meet: 0% - All three steps under 1% reply. **Failure mode confirmed: message-market misfit.** Zero meetings across 1,785 sends. Opening rates decay (40% → 29% → 22%) showing diminishing subject-line effectiveness. This audience is either wrong, or the value prop doesn't land. - Change: **rethink targeting or complete creative overhaul.** This is the priority fix. ### 4. Cold Outbound - People Ops - Sent: 1,163 | Open: 29.2% | Reply: 2.5% | Meet: 0.5% - Steps: S1=3.5% reply, S2=2.3%, S3=1.6%. Under 2% threshold at Step 3. Same fatigue pattern as New Logo but colder. - Weakness: declining momentum across steps. Not enough early-stage proof/credibility to carry replies. --- ### Priorities 1. **Fix Expansion Nurture S2 tracking first** (340 opens / 300 sent). Until fixed, no valid decisions on this sequence. 2. **Cold Outbound - HR Leaders is the critical failure:** 0.4% reply, 0 meetings across 1,785 sends. Stop scaling. Audit list quality and message fit immediately.
Here's the Q3-2026 marketing weekly update (66 days elapsed of 92 — 71.7% through quarter): **Weekly Marketing Update — Q3-2026 (Day 66/92)** | Metric | Actual | Target | Pace Required (×66/92) | Status | |--------|--------|--------|-----------------------|--------| | SQMs | 230 | 300 | 215 | **AHEAD** — on track to hit 321 if pace holds | | SQOs | 84 | 120 | 86 | **BEHIND** — will only hit ~118 at current pace | | DS2s | 40 | 75 | 54 | **BEHIND** — will only hit ~56 at current pace | | CL MIA rate | 20.0% | ≤10.0% | — | **BEHIND** — 5 of 25 closed-losers were MIA, double target | | Same-qtr closes | 10 | 20 | 14 | **BEHIND** — will only hit ~14 at pace | | Active pipeline | $3.0M | $4.0M | $2.87M | **AHEAD** — above minimum but still short of full target (75%) | Key conversion funnel: SQM→SQO = 36.5% (84/230), SQO→DS2 = 47.6% (40/84). **What moved this week:** Cannot be assessed. Prior-week actuals are not in the provided data — only QTD totals exist. A W/W delta narrative requires separate weekly snapshots. Written to `/Users/amaniphipps/marketing_weekly_update.txt` with full arithmetic shown above. If you can supply prior-week numbers or a weekly snapshot file, I'll add W/W deltas and the movement paragraph.
Forecast is $116K ($44,729 COMMIT + 35% of $203,565 BEST_CASE), though $13,770 in committed value closes post-quarter. Owner is blank on 85/86 deals and why-buys is missing on 71/86 (including all 7 COMMsits); 32 post-quarter close dates suggests date pushing not re-qualification. Rebuild with validated commitment evidence before sharing externally.
Subject: Following up on the 150-seat pricing Hi [Name], I'm circling back on the email I sent on August 5 with the pricing recap from our July 28 demo — wanted to make sure it didn't get buried. You mentioned at the time that recognition budget sits with you, and the team was particularly interested in automated milestone awards and the points catalog. Any movement on your end? Happy to hop on a quick 15-minute call this week if that's easier. Otherwise, happy to send over any additional info you or the HR team need. Thanks, Alex
Marketing delivered 46 SQMs against a target of 52 — falling short by 6 units. Webinar drove 18 of those, making up nearly 40% of the total. Cost per SQM on paid search held steady at $150. Target miss: 11.5%. Sales converted 14 SQOs into 9 DS2 meetings, generating $310,000 in new pipeline. Same-quarter close count landed at 3. Conversion ratio on SQO-to-DS2 sits at 64% (9 out of 14). Pipeline throughput is tracking but meeting conversion from SQO remains an area to tighten. CS renewed 2 accounts this week and Team NPS rose to 61. Three red-flag accounts are on deck heading into next week — watch list active. Renewal velocity and sentiment both moving in the right direction. PLG recorded 412 new signups with activation at 31%. That means roughly 286 signups did not activate within the window. Thirty-eight companies hit the Aha moment of 10 recognition gives — representing about 9% of all signups. Activation-to-Aha efficiency needs sharpening; the majority of inbound traffic is landing but not reaching critical engagement thresholds.
# Partner Digest — 2026-08-24 to 2026-09-04 ## Active Partners **Apex Rewards Co** Co-webinar locked for 09-15. Two sourced opps this period (both DS1), logged with UTM Source = Partner. Pipeline: 2 deals · $275,000 (Deal-DDAAF2: $180,000; Deal-2CF33E: $95,000) **HRCloud Partners** Integration referral passed security review; opp moved to DS2. One sourced opp this period. Pipeline: 1 deal · $140,000 (Deal-F1CDA5) **CultureBridge** Lunch-and-learn produced two sourced opps, both early stage. Pipeline: 2 deals · $135,000 (Deal-096E1D: $60,000; Deal-067213: $75,000) **WorkWell Group** No sourced deals this period. Planning call booked for 09-09 to restart joint playbook in Q4. Pipeline: 0 deals · $0 ## Quiet Partners Recogniq — no activity reported. KudosWave — no activity reported. PeopleFirst Advisors — no activity reported. TotalPerk — no activity reported.
**Vendor Response — Security Questionnaire** | Item | Answer | Excerpt | |------|--------|---------| | **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** | Bonusly maintains a SOC 2 Type II report, renewed annually. A copy is available to prospects under NDA. | [P2] | | **Q4** | Customer data is retained for the duration of the contract plus 90 days, after which it is deleted from production systems. | [P3] | | **Q5** | 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 available on the Enterprise plan (along with SCIM user provisioning). | [P5] | | **Q7** | Production databases are backed up daily. Backups are encrypted and retained for 35 days. | [P6] | | **Q8** | Not addressed in the provided excerpts. This would require an ISO 27001 certification statement or audit report. | — | | **Q9** | Not addressed in the provided excerpts. This would require a contractual SLA document. | — | | **Q10** | Not addressed in the provided excerpts. This would require a HIPAA / BAA policy statement or DPA. | — |
FINDING 1: Overlapping ALWAYS-trigger phrases Severity: WARNING Action: REVIEW Finding: `weekly-pipeline-report` and `pipeline-intelligence-report` share three identical trigger phrases: "pipeline update", "pipeline report", and "what's the pipeline look like". Additionally, `comms-drafter` and `email-drafter` share "help me reply", "draft a follow-up", "bump email", "contract nudge", and "what should I say". Identical triggers force the router to guess intent, causing misrouted analytical vs. drafting tasks. Proposal: REVIEW — Rewire triggers to be mutually exclusive. Reserve "pipeline update", "pipeline report", and "pipeline look like" strictly for `weekly-pipeline-report`; assign `pipeline-intelligence-report` exclusively to "score", "tier", and "full pipeline". Narrow `email-drafter` to outbound/follow-up/prospecting emails; move `comms-drafter` entirely to support tickets, partner outreach, Intercom replies, and non-email formats. Drop all overlapping phrases from `comms-drafter`. FINDING 2: Circular delegation chain Severity: INFO Action: REVIEW Finding: `email-drafter` and `deal-strategy-coach` contain reciprocal handoff instructions without execution precedence. `email-drafter` says "point them to deal-strategy-coach"; `deal-strategy-coach` says "use the email-drafter skill" for manager email drafts. In a multi-agent loop this creates a routing ping-pong where neither agent commits to its primary domain before passing the buck. Proposal: REVIEW — Establish hard precedence: `email-drafter` always produces the draft first, then calls `deal-strategy-coach` only if strategic framing or objection handling is requested. `deal-strategy-coach` forwards pure email generation to `email-drafter` only when explicitly toggled; otherwise it retains coaching scope. FINDING 3: Dangling delegation targets Severity: CRITICAL Action: UPDATE_BODY Finding: `analysis-validator` (§12.4) and multiple drafting skills reference 9 peer-skill delegation targets that do not exist in the provided manifest: `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`, and `prospect-research-multithreading`. Runtime `delegate_task` calls to these names will fail silently or throw unresolved-target errors. Proposal: UPDATE_BODY — Immediately purge or replace all `delegate_task` references to these 9 skills in `analysis-validator`, `comms-drafter`, `deal-strategy-coach`, and `email-drafter` with `[LIVE QUERY]` tags or inline connector fallbacks. If the skills are still in development, add them to the manifest NOW rather than leaving broken delegation hooks in production bodies. FINDING 4: Version conflict Severity: WARNING Action: UPDATE_BODY Finding: `analysis-validator` changelog lists two distinct patches, v3.5 and v3.6, both dated May 9, 2026. The duplicate timestamp collides with the v3.6 master stamp used in validation trails, making it ambiguous which gate logic is authoritative if a rollback occurs. Proposal: UPDATE_BODY — Merge the v3.5 (Engagement Coverage Check) and v3.6 (ID Resolution) changelog entries into a single line dated May 9, 2026. Mark v3.6 as the surviving version and retain all gated features from both increments under that unified entry. FINDING 5: Descriptions exceeding 1,024 characters Severity: INFO Action: None Finding: Zero (0) manifest descriptions exceed the 1,024-character threshold. The maximum observed length is 1,006 characters, shared by `pipeline-intelligence-report` and `signalforge-claim-compressor`. All other entries range from 656 to 996 characters. Proposal: INFO — No trimming required. Current descriptors sit safely within the 1,024 char limit. FINDING 6: Hardcoded page IDs, dates, and person names Severity: WARNING Action: UPDATE_BODY Finding: Extensive static values baked into skill bodies across `analysis-validator`, `partner-digest`, `deal-strategy-coach`, `pipeline-intelligence-report`, `sales-forecast`, `weekly-pipeline-report`, and `signalforge-feedback`. Includes 20+ Confluence/Page IDs, 2 Google Sheet IDs, 1 Slack Channel ID, full AE/CSM rosters with HubSpot Owner IDs, historical 2026 pricing tables, and specific case-study company names. These values will rot as reps change, sheets are recreated, or Confluence spaces are migrated, causing silent data mismatches. Proposal: UPDATE_BODY — Replace all static identifiers (Confluence IDs, Sheet IDs, Slack channel IDs, Owner IDs) with live connector calls or `[LIVE QUERY]` placeholders. Move historical pricing, past-period benchmarks, and archival case studies into dated reference blocks tagged `[ARCHIVED — DO NOT USE FOR LIVE FORECASTING]` and enforce `[LIVE QUERY]` replacement on any PR that modifies these sections. FINDING 7: Manifest drift (both directions) Severity: INFO Action: None Finding: Perfect alignment. The manifest declares 14 files; exactly 14 corresponding `.SKILL.md` files were provided. Every manifest row maps to a physical file, and every provided file has a manifest row. No orphaned rows or untracked files detected. Proposal: INFO — No drift remediation needed. The manifest and filesystem are fully reconciled.
# Runbook: Reward-Queue Backlog — 2026-08-29 ## Pre-runbook 1. **Acknowledge PagerDuty alert** — *Command/Action:* Acknowledge PD alert for reward-worker queue depth > 10k. - *Who:* Bryce Harmon [M01] - *Verification:* Alert acknowledged manually. - *Rollback:* N/A (ack is not a state change). --- ## Step 1: Diagnose queue depth - *Command:* `bundle exec rake sidekiq:queue_depth` - *Who:* Farid Osman [M02] - *Result:* reward queue at 48,213 pending jobs (normal < 500). - *Verification:* Rake output confirmed depth. - *Rollback:* N/A (read-only diagnostic). ## Step 2: Inspect dead set - *Command:* Checked Sidekiq dead set (exact CLI command not stated in thread). - *Who:* Farid Osman [M03] - *Result:* Dead set has 112 jobs, all Redis::TimeoutError originating around 13:58. - *Verification:* Dead set inspection output. - *Rollback:* N/A (read-only diagnostic). - *⚠ NEEDS CONFIRMATION:* Exact Sidekiq CLI used to inspect the dead set is not recorded in the thread. ## Step 3: Stop new jobs from queuing - *Command:* `bin/rails runner 'FeatureFlag.disable(:auto_recognition_enqueue)'` - *Who:* Farid Osman [M04] - *Purpose:* Pause enqueue to stop the bleed. - *Verification:* Not explicitly verified in the thread after running; assumed successful by default flag-toggle semantics. - *Rollback:* `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` [M04] - *⚠ NEEDS CONFIRMATION:* No post-disable verification was recorded at 14:08. The next mention of the flag status appears at M09 when it was re-enabled. Confirm whether the team expected immediate cessation of new enqueues or if there was a propagation delay. ## Step 4: Clear the dead set - *Command:* Cleared the dead set via Rails console (exact method/command not stated). - *Who:* Elena Sinclair [M05] - *Verification:* Elena reported clearing the dead set; no follow-up check recorded. - *Rollback:* Not applicable (dead set items are discarded once cleared). - *⚠ NEEDS CONFIRMATION:* Specific console command/method used is not provided. Also: confirm that clearing the dead set was intentional for all 112 jobs and that none needed to be replayed. ## Step 5: Scale up workers - *Command:* `kubectl scale deployment/reward-worker --replicas=6` - *Who:* Bryce Harmon [M06] - *Previous state:* 3 replicas. - *Verification:* Not verified immediately; next visibility point is M07 at 14:33 (~11 min later). - *Rollback:* `kubectl scale deployment/reward-worker --replicas=3` [M06] ## Step 6: Monitor queue drain rate - *Command:* Implicit monitoring of `sidekiq:queue_depth` / Datadog (exact query not stated). - *Who:* Farid Osman [M07] - *Result:* Queue depth down to 9,400, falling ~1,200/min. - *Verification:* Depth measurement at 14:33 confirmed declining trend. - *Rollback:* N/A (monitoring only). - *⚠ NEEDS CONFIRMATION:* Exact monitoring tool or command used to produce the "~1,200/min" rate figure is not recorded. ## Step 7: Verify full clearance - *Command:* `bundle exec rake sidekiq:queue_depth` - *Who:* Cole Ingram [M08] - *Result:* Queue depth returned to 0. Error rate in Datadog back to baseline. - *Verification:* Two signals: (a) rake output = 0, (b) Datadog error rate at baseline. - *Rollback:* N/A (no state change). ## Step 8: Re-enable enqueue - *Command:* `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` - *Who:* Bryce Harmon [M09] - *Verification:* Confirmed 40 new jobs processed cleanly over the next 3 minutes [M09]. - *Rollback:* (See Step 3 rollback.) Could disable again if new jobs start failing. ## Step 9: Scale workers back to nominal - *Command:* `kubectl scale deployment/reward-worker --replicas=3` - *Who:* Bryce Harmon [M10] - *Previous state:* 6 replicas. - *Verification:* Queue stable at 0 [M10]. - *Rollback:* If queue starts building again at normal traffic, scale back up to 6 while investigating root cause. --- ## Summary Table | # | Action | Who | Verified By | Rollback | |---|--------|-----|-------------|----------| | 1 | Ack PD alert | Bryce Harmon | Self [M01] | N/A | | 2 | Check queue depth | Farid Osman | Rake output [M02] | N/A | | 3 | Inspect dead set | Farid Osman | Dead set output [M03] | N/A | | 4 | Disable enqueue FF | Farid Osman | Not explicitly verified [M04] | `FeatureFlag.enable(...)` [M04] | | 5 | Clear dead set | Elena Sinclair | Elena's own report [M05] | N/A | | 6 | Scale workers → 6 | Bryce Harmon | Drain rate at 9,400 [M07] | Scale → 3 [M06] | | 7 | Monitor drain | Farid Osman | Depth = 9,400 @ ~1,200/min [M07] | N/A | | 8 | Verify queue = 0 | Cole Ingram | Rake output + Datadog [M08] | N/A | | 9 | Re-enable enqueue FF | Bryce Harmon | 40 jobs processed cleanly [M09] | Disable [see step 4] | | 10 | Scale workers → 3 | Bryce Harmon | Queue stable at 0 [M10] | Scale → 6 if needed | --- ## Root Cause (from thread data) At approximately 13:58 on 2026-08-29, Redis began timing out, causing 112 Sidekiq jobs to fail with `Redis::TimeoutError` and land in the dead set. New jobs continued enqueuing normally, resulting in a queue depth of 48,213 by 14:04. The timeouts themselves are not investigated further in this thread. ## Unresolved / Items for Follow-Up - **⚠ Why did Redis timeout?** The root trigger for `Redis::TimeoutError` at 13:58 is not addressed in the thread. - **⚠ Was any dead-set job replayable?** All 112 were discarded during Step 4 with no record of retry analysis. - **⚠ Dead-set inspection command** is not specified — may hinder repeatability of Step 2. - **⚠ Monitoring command** for the drain-rate figure (~1,200/min) is not specified — may hinder repeatability of Step 6.
Here is the sequenced failure cascade, built strictly from the two provided files. ## Timeline (chronological order) **Phase 1 — Root cause (Redis goes down)** | Timestamp | Service | Message | Meaning | |---|---|---|---| | 14:01:12Z | reward-service | `Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s` | **First error.** reward-service could not reach Redis. | | 14:01:46Z – 14:01:57Z | (none logged, inferred from jobs table) | six RewardGiveJob failures (J-00001 through J-00006) between 14:01:46 and 14:01:57 | These six jobs attempted to execute immediately after the initial timeout and each hit Redis::TimeoutError. They confirm that reward work was actively flowing when the outage started. | **Phase 2 — reward-service can no longer enqueue or run jobs** | Timestamp | Service | Message | |---|---|---| | 14:01:20Z – 14:01:40Z | reward-service | `Redis::TimeoutError: retry exhausted for RewardGiveJob` (3 messages at 14:01:20, 14:01:30, 14:01:40) | | 14:01:40Z | sidekiq | `RewardGiveJob failed: Redis::TimeoutError; retrying in 60s` | | 14:02:28Z | sidekiq | `RewardGiveJob failed: Redis::TimeoutError; retrying` | reward-service is trying and failing to write to Redis. Sidekiq then picks up queued jobs and fails against the same unreachable Redis. The 5-second client timeout plus retry exhaustion means these jobs cannot be processed at all. **Phase 3 — Queue backs up** | Timestamp | Service | Message | |---|---|---| | 14:02:30Z | sidekiq | `Queue reward depth above 10,000` | Jobs are accumulating because they cannot be dequeued and executed. | **Phase 4 — Downstream: 502 cascade (api-gateway → web-app)** | Timestamp | Service | Message | |---|---|---| | 14:03:05Z | api-gateway | `502 upstream timeout calling reward-service /gives` | | 14:03:30Z | web-app | `Give form submission failed: upstream 502 from api-gateway` | | 14:03:48Z | api-gateway | `502 upstream timeout calling reward-service` | | 14:04:13Z | api-gateway | `502 upstream timeout calling reward-service` | | 14:04:45Z | web-app | `Give form submission failed: upstream 502` | | 14:05:16Z | api-gateway | `502 upstream timeout calling reward-service` | | 14:05:26Z | sidekiq | `RewardGiveJob failed: Redis::TimeoutError; retrying` | | 14:05:42Z | web-app | `Give form submission failed: upstream 502` | | 14:06:47Z | sidekiq | `RewardGiveJob failed: Redis::TimeoutError; retrying` | | 14:06:49Z | web-app | `Give form submission failed: upstream 502` | | 14:06:52Z | api-gateway | `502 upstream timeout calling reward-service` | Because reward-service cannot talk to Redis, it is either crashing its worker threads or refusing new HTTP requests. api-gateway sees unresponsive backends and returns 502s. web-app users see "Give form submission failed." RecognitionDigestJob also begins failing (J-00013–J-00016 at 14:02:36 through 14:05:50), showing Redis downtime affects all background workers, not just reward service. **Phase 5 — Recovery** | Timestamp | Service | Message | |---|---|---| | 14:22:10Z | reward-service | `Redis connection restored; resuming job processing` | | 14:24:45Z | sidekiq | `Queue reward depth below 500` | Queue draining after ~20 min of catch-up processing. Note there is **no explicit restart message from reward-service** between the failure peak at 14:06 and recovery at 14:22 — the service may have been restarted off-screen, or simply reconnected to Redis without needing a full redeploy. ## Service + Job involved - **Service:** `reward-service` (primary) communicating with `redis-primary:6379`. Secondary impact on `sidekiq`, `api-gateway`, `web-app`, and `postgres` (unchanged). - **Job class:** `RewardGiveJob` (failed J-00001–J-00012 = 12 failures logged in sidekiq_jobs.csv; plus `RecognitionDigestJob` J-00013–J-00016 = 4 failures). All errors are identical: `Redis::TimeoutError`. ## Datadog query to confirm the first error To confirm that the very first event at 14:01:12Z was truly a Redis connectivity failure on `redis-primary:6379`: ``` @service:reward-service Redis::TimeoutError OR (redis.command:(connect|ping)) AND host:redis-primary .by(source) .time_range(1693744872000000..1693747200000000) // 14:00 – 14:30 UTC, Sep 3 ``` Translated: look in reward-service tags for `Redis::TimeoutError` traces, cross-referenced with Redis APM for `connect`/`ping` calls on host `redis-primary` in the same window. If you see `DEADLINE_EXCEEDED` or a spike in Redis latency/packet loss alongside zero successful connections starting at ~14:01, the root cause is confirmed as Redis being unreachable. Alternatively, if querying directly in the Redis monitor namespace: ``` redis.command:(connect OR ping) AND @hostname:"redis-primary" AND (@latency_ms > 5000 OR status:fail) .time_range(1693744872000000..1693747200000000) ``` This isolates Redis-side evidence of the outage window regardless of what the clients reported. ## What the logs do NOT show 1. **Why Redis went down.** No OOM killer event, no disk-full, no network partition, no replica-failover log, no config change. The only datum is "connection to redis-primary:6379 timed out." It could be Redis down, a networking glitch, a firewall rule, DNS resolution failure, or resource exhaustion. Unknown. 2. **Whether any other services besides reward-service and sidekiq were affected.** Only five services appear in datadog_logs.csv. There is no data about nginx, payment-service, notification-service, auth-service, etc. 3. **How long the outage really lasted before 14:01:12Z.** The first logged line is a health check OK at 14:01:12. Something could have gone wrong earlier and simply wasn't captured in this log slice. 4. **Impact on end-users beyond "form submission failed."** No error-rate dashboards, no HTTP 5xx count over time, no customer-impacted session counts, no SLO breach calculations. 5. **Whether data was lost.** Did any reward transactions silently drop, partially complete, or get retried idempotently? There is no transaction-log or audit trail to answer that. 6. **Who restarted or recovered the service.** The 14:22:10Z "resuming job processing" message does not state whether someone manually restarted reward-service, whether it self-healed after Redis came back up, or whether Kubernetes rolled the pod. No change-management ticket or deployment record is present. 7. **Root cause of the RecognitionDigestJob failures** — while logically linked to the same Redis outage, datadog_logs.csv contains no RecognitionDigestJob lines; that information comes only from sidekiq_jobs.csv. 8. **postgres behavior beyond checkpoint messages.** Three postgres entries (14:10–14:18) are normal checkpoints with no errors, confirming postgres was not involved. But we have no CPU/memory/wait-event data from postgres that might help rule out shared-kernel issues (e.g., if Redis and postgres ran on the same host).
Here is the feature-flag summary based strictly on the two provided files. --- ## Feature Flag State Summary ### 1. recognition_streaks_v2 - **Code:** `app/models/recognition.rb` — gates `StreakTracker.record(give)` - **State:** on - **Targeting:** segment:beta_companies - **Company count:** 42 ### 2. points_budget_guardrails - **Code:** `app/services/budget_service.rb` — gates `BudgetService.new(company).enforce!(giver, points)` - **State:** on - **Targeting:** all_companies - **Company count:** 220 ### 3. slack_dm_nudges - **Code:** `app/jobs/nudge_job.rb` — gates `SlackDm.send_nudge(user)` via early return - **State:** on - **Targeting:** segment:region_na - **Company count:** 87 ### 4. redeem_flow_redesign - **Code:** `app/controllers/redeem_controller.rb` — toggles between `RedeemV2Component` and `RedeemV1Component` - **State:** off - **Targeting:** targeted_list - **Company count:** 12 ### 5. analytics_dashboard_v3 - **Code:** `app/controllers/analytics_controller.rb` — instantiates `AnalyticsV3.new(company)` - **State:** on - **Targeting:** segment:tier_three - **Company count:** 65 ### 6. ms_teams_app_v2 - **Code:** `app/services/teams_installer.rb` — calls `TeamsAppV2.install(company)` - **State:** off - **Targeting:** targeted_list - **Company count:** 9 ### 7. legacy_give_modal - **Code:** *no code reference found* - **State:** off - **Targeting:** segment:legacy_plan - **Company count:** 14 ### 8. survey_boosters_q3 - **Code:** *no code reference found* - **State:** on - **Targeting:** segment:legacy_plan - **Company count:** 7 ### 9. paused_offboard_cleanup - **Code:** *no code reference found* - **State:** off - **Targeting:** *none specified* (empty string in export) - **Company count:** 0 --- ## Flags with gaps (no code reference) | flag_key | state | targeting_rules | company_count | |---|---|---|---| | legacy_give_modal | off | segment:legacy_plan | 14 | | survey_boosters_q3 | on | segment:legacy_plan | 7 | | paused_offboard_cleanup | off | *(empty)* | 0 | Three of the nine flags have no corresponding code usage in the provided excerpt (`flag_code.md`). This means they may be dead/config-only flags, still being wired up, or their implementation lives outside `app/` and `lib/`. ## Quick-state tally | State | Count | Flags | |---|---|---| | on | 5 | recognition_streaks_v2, points_budget_guardrails, slack_dm_nudges, analytics_dashboard_v3, survey_boosters_q3 | | off | 4 | redeem_flow_redesign, ms_teams_app_v2, legacy_give_modal, paused_offboard_cleanup |
---
**NDA-1 — GREEN** — Standard mutual NDA with Delaware law, reasonable 2-year term, standard carve-outs, no restrictive covenants. Clause driving classification: *"No license, no obligation to proceed, no exclusivity."* The 3-year survival period is slightly above the 1–2 year norm but not actionable.
**NDA-2 — YELLOW** — Counsel review required for the non-solicit. 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."* The contact-nexus limitation ("with whom it came into contact") narrows it appropriately, but 18 months post-term is worth counsel confirming this won't restrict hiring from a prospect/partner relationship where Bonusly people may have met the counterparty's team. Nothing else objectionable.
**NDA-3 — RED** — Full legal review required. Three independent dealbreakers:
1. **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.'"* One-way, indirect prohibition on providing services to competitors is dangerously broad — it could block Bonusly from advising clients in the same space as Party C.
2. **Zero carve-outs** — *"No confidentiality carve-outs are stated in this Agreement."* Without the standard public/already-known/independent-development carve-outs, any idea you independently develop or already knew is technically trapped as their confidential information forever (5-year term × potentially extended interpretation).
3. **Irish governing law** — *"'This Agreement shall be governed by and construed in accordance with the laws of the Republic of Ireland, and the parties submit to the exclusive jurisdiction of its courts.'"* Foreign jurisdiction for a U.S. company introduces unquantified litigation cost and unfamiliar IP/confidentiality doctrine.