Mean 0.973 · 36/40 perfect tests · $9.11 total · modalities in: text, image · out: text · each card: the prompt → the correct answer (gold) → this model's actual answer
Modalities in means what you can send this model: text, images, files, video, or audio. Modalities out means what it can send back. Bench tasks feed text extracts, so modalities do not change the score. They are here so you know what this model can handle in real work.
Definitions - Why-buys non-compliant (DS2+): why_buys missing/blank or under 15 chars or a placeholder (tbd, n/a, see notes). LONG(n) counts as present and substantive. - No DS1 timestamp: t_ds1 empty (checked all 156 open deals, DS1–DS5). - Regressed: among a deal's recorded stage-entry timestamps (t_ds1…t_dsN, N = current stage), any adjacent pair where an earlier stage's entry date is later than a later stage's entry date. Deal must be in the given stage with its history intact. Results (snapshot: data runs through 2026-09-04; 156 open deals, 124 at DS2+) Why-buys non-compliance, DS2+ deals: 101 of 124 = 81.5% (100 × 101/124) By owner (n DS2+ = non-compliant, pct): - Alex Franklin: 61 → 48, 78.7% - Bryce Harmon: 18 → 15, 83.3% - Cole Ingram: 22 → 19, 86.4% - Dana Mercer: 22 → 18, 81.8% - Farid Osman: 1 → 1, 100.0% - (DS1-only owners with no DS2+ deals — Elena Sinclair, and the two archived owners — excluded.) Deals with no DS1 timestamp: 0 of 156. Every deal carries a t_ds1 entry date. Regressed deals: 0 of 156. Every adjacent stage-entry pair among recorded timestamps is chronologically ordered, including the deals pulled back to earlier stages (Deal-0D0211, Deal-BE3D9D, Deal-7E2131, Deal-C7F9BF). Three process fixes 1. Gate why-buys at the DS2 promotion: make a 15+ character, non-placeholder why-buys a hard requirement for the DS1→DS2 stage change. 81.5% of DS2+ deals failing it, at near-identical rates for every owner (78.7–100%), says this is a process gap, not an individual habit — the highest-value fix. 2. Backfill at next pipeline review, not never: the 11 DS5 deals (all COMMIT/BEST_CASE past close dates in several cases) have no t_ds5 stamp and most have no why-buys; export a weekly exception list of DS2+ deals lacking why-buys and current-stage timestamps and require remediation before forecast submission. 3. Enforce a validation rule on close dates: 2 open deals (Deal-333EBB, Deal-57FF13) have close dates already past the 2026-09-04 snapshot with no push logged, and 8 open deals carry $1 placeholder amounts — flag past-due open deals and sub-$100 amounts in the same weekly exception report so stages, dates, and values stay auditable together.
Owner resolution complete. All 156 open deals were matched to a name in owners.csv. DEALS RESOLVED: 156 of 156 (6 distinct owner ids, all found in the owners table) UNMATCHED OWNER IDS: none — every deal owner_id (119337721, 83155923, 84342457, 83155924, 716654662, 701163055) has a row in owners.csv. ARCHIVED/DEACTIVATED OWNERS ON OPEN DEALS: none — the two archived owners (Gavin Porter, id 1520255671; Hugo Lindqvist, id 77260721) have no open deals assigned to them. PIPELINE TOTAL PER OWNER (amount summed per deal, arithmetic shown): Bryce Harmon (119337721) — 35 deals, $1,054,144 24000+19656+13500+7000+2520+240000+99000+72000+70000+63600+45000+1+21000+23400+13680+5502+8160+1+11400+1+36000+31500+6000+10800+30275+17400+12600+18000+37440+18828+2880+36000+20880+10920+25200 Alex Franklin (84342457) — 67 deals, $624,310 14850+13770+11200+9000+6360+5400+3240+2484+1920+1080+7200+19000+2880+1400+4800+1632+10000+9300+2700+2160+1800+3600+3840+15000+1968+4000+3600+4800+3120+2520+9000+2400+62000+5400+5100+16700+4400+1620+2600+7200+18000+17000+8316+8100+18000+12600+24000+15000+9000+7200+3780+16200+7200+4680+1800+18000+2730+2400+3060+18000+12000+1800+4400+31200+7200+1600+60000 Dana Mercer (83155923) — 24 deals, $341,195 11250+10500+9000+9000+5400+4800+4600+1920+15000+4200+18900+27000+43875+20000+60000+8100+16250+3150+5000+2100+23400+5400+7350+25000 Cole Ingram (83155924) — 22 deals, $288,161.43 2760+1330+7225.40+3360+5616+2700+7781.20+6947.50+40000+12168+2480.40+11116+11193+1875+31750+32175+4779.88+3334.80+58529.25+4140+18000+18900 Farid Osman (716654662) — 7 deals, $4,134 1249+1+1+1+2880+1+1 Elena Sinclair (701163055) — 1 deal, $2,100 2100 GRAND TOTAL: $2,314,044.43 across 156 deals (1,054,144 + 624,310 + 341,195 + 288,161.43 + 4,134 + 2,100) Note: amount is taken as given (raw amount field, no forecast-category weighting); the $1-amount placeholder deals are included as-is per the data.
Integrity check complete. Analysis run programmatically over both CSVs: 67 gong rows (67 unique hs_deal_id), 156 deals_open rows (156 unique deal_id). Join key used: gong.hs_deal_id → deals_open.deal_id. Per the integrity skill's rule, gong_owner_id was never joined against HubSpot owner_id (it is a Gong user id, as noted), and DS3+ coverage uses the current stage field, not stage timestamps. (a) Orphaned gong rows — deal id has NO match in deals_open 30 of 67 gong rows = 30/67 = 44.8%. Arithmetic: 67 gong rows − 37 whose hs_deal_id matches a deals_open.deal_id = 30 orphans; 30/67 = 0.4478 → 44.8%. Sample orphan aliases (taken directly from the data): - 60251290957 / Deal-8FA85D (46 calls, last_call 2026-11-05) - 60251649055 / Deal-8FC3F9 (24 calls, last_call 2026-10-19) - 61227242540 / Deal-42B265 (21 calls, last_call 2026-11-25) - 62333117085 / Deal-1A0416 (8 calls, last_call 2026-11-05) - 62455767176 / Deal-422BA6 (6 calls, last_call 2026-08-20) - 54322940958 / Deal-B038F0 (5 calls, last_call 2026-07-07) Integrity note from the data itself: 16 of the 30 orphans are sequential-numbered ids (60250446726…60251733611), and many orphans carry last_call dates in Oct–Nov 2026 (e.g., 2026-11-27) — outside a 90-day window ending in September, consistent with these being rows mapped to deals no longer open (closed/migrated/unmapped). That is an observation, not a cause — the data provided does not say why they are unmatched. (b) Duplicate conversation keys (calls_90d > distinct_conversation_keys) 0 rows. In all 67 gong rows, calls_90d equals distinct_conversation_keys exactly, so no call row double-counts a conversation key. (c) DS3+ open-deal call coverage - Open deals at DS3 or later: 85 (61 DS3 + 14 DS4 + 10 DS5 = 85). - Of these, 25 have at least one logged call in the gong table (calls_90d ≥ 1 on a matched deal id). - Share with at least one logged call: 25/85 = 0.2941 → 29.4%. Arithmetic: 85 DS3+ deals − 60 with no gong match = 25 matched; 25/85 = 29.4%. The 25 covered DS3+ deals: Deal-1E2498, Deal-215CCA, Deal-25F752, Deal-333EBB, Deal-3974EB, Deal-40522D, Deal-5408B0, Deal-547B2B, Deal-584EE5, Deal-5EED42, Deal-60C2C2, Deal-8952F0, Deal-944310, Deal-A2B47C, Deal-B7EBD1, Deal-BA3DDC, Deal-C26D20, Deal-C61CF7, Deal-C6D97A, Deal-C6FE92, Deal-D348E1, Deal-D9A12F, Deal-DAF1D9, Deal-E53952, Deal-F9A3C1. Caveat: every one of the 25 covered DS3+ deals comes from the 37 gong rows with recent (Sep 2026) activity; the 30 orphaned rows (44.8%) contribute zero coverage, so the DS3+ coverage figure is depressed by whatever population those orphans represent (closed or unmapped deals — not determinable from the data provided).
```sql
-- ============================================================================
-- Per customer company — first calendar month as a customer:
-- unique givers, recognition count, successful redemption count.
-- ============================================================================
-- WHY THIS SOURCE (catalog constraints):
-- No raw recognition/giving event table exists in the catalog, so unique
-- givers and recognition count are only available as the pre-aggregated
-- cohort metrics in PRODUCTION.PLG.COMPANY_COHORT_SUMMARY. Redemptions use
-- the same table's M1_REDEMPTIONS: the raw
-- PRODUCTION.DEPRECATED_RECOGNITION.REDEMPTION_RECORDS_V2 is the documented
-- redemption source, but the catalog documents no date/company columns for
-- it, so joining it would require inventing schema. Tables deliberately NOT
-- referenced: HUBSPOT_HUB_1973303.V2_LIVE.OBJECTS_DEALS (unpopulated),
-- PRODUCTION.HUBSPOT.DEALS (stale, last sync 2023-03),
-- PRODUCTION.HUBSPOT.GONG_HUBSPOT_MAP_FAST (retired pattern).
-- RULES HONORED:
-- * The "exclude deleted givers" filter is NOT applied anywhere — it is
-- forbidden on historical giving counts (it understates history).
-- * Redemptions counted as STATE = 'succeeded' only; that convention is
-- assumed baked into the M1_REDEMPTIONS aggregate (the catalog does not
-- restate the M1_* definitions).
-- DOCUMENTED GAPS (stated explicitly, per instruction):
-- * The catalog does not name COMPANY_COHORT_SUMMARY's company identifier
-- column. COMPANY_ID below is a placeholder — substitute the real key.
-- * The catalog does not define M1 (calendar month of SIGNUP_DATE vs a
-- 30-day window); M1_* are returned as the catalog's documented
-- first-month metrics.
-- * M1_USERS is documented as users, not explicitly "unique givers"; it is
-- the only per-company first-month person count in the catalog.
-- * Coverage is self-serve companies only (table grain); no giving source
-- for other segments exists in this catalog.
-- ============================================================================
SELECT
c.COMPANY_ID -- PLACEHOLDER: identifier column not named in catalog
AS company_id,
DATE_TRUNC('month', c.FIRST_SUB_PAYMENT_DATE)
AS first_calendar_month_as_customer, -- "customer" = first subscription payment; swap to SIGNUP_DATE if that is the business definition
c.M1_USERS
AS unique_givers, -- deleted-giver exclusion NOT applied (not baked into the aggregate either)
c.M1_GIVES
AS recognition_count,
c.M1_REDEMPTIONS
AS successful_redemptions
-- PRODUCTION.PLG.COMPANY_COHORT_SUMMARY: the only catalog table carrying
-- per-company first-month giving/redemption figures; single-FROM query,
-- no joins required.
FROM PRODUCTION.PLG.COMPANY_COHORT_SUMMARY AS c
-- Restrict to companies that actually became paying customers
-- (FIRST_SUB_PAYMENT_DATE present); non-payers have no "first month as a customer".
WHERE c.FIRST_SUB_PAYMENT_DATE IS NOT NULL;
```
# CRM Extract Audit
**Scope blocker first: no deals file was provided.** The extract contains only companies.csv, contacts.csv, and zoominfo_enrichment.csv. The prompt asks me to audit deals for owner, stage, amount, close date, and why-buys — those fields cannot be measured (0 rows provided, not 0% complete: there is no file to measure). Consequence: **pipeline dollar amounts do not exist in the data**, so the final "top 10 fixes by pipeline at stake" is ranked by affected-record count as a proxy. Supply deals.csv with amounts and I will re-rank by dollars. All findings below use only the three provided files.
## 1. Completeness per field (34 companies, 52 contacts, 25 enrichment rows)
**companies.csv**
- company_alias: 34/34 = 100%
- domain: 34/34 = 100%
- industry: 34/34 = 100% populated — but only 23/34 = 67.6% use a canonical spelling (Manufacturing, Retail, Technology, Finance, Healthcare). Non-canonical: "tech" ×4, "Tech " ×4 (incl. trailing space), "health care" ×2, "SaaS" ×1.
- 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-2C60E5, C-EE9FFB, C-44EA29, C-D04904). Also 3 spellings in use: US ×9, USA ×6, United States ×2, UK ×3, Canada ×8.
**contacts.csv**
- contact_key / company_alias / domain: 52/52 = 100%
- email: 52/52 = 100% populated, but only 48/52 = 92.3% are well-formed (4 truncated)
- title: 39/52 = 75.0% (13 blank)
- persona: 37/52 = 71.2% (15 blank); 6 contacts blank on both title and persona: CT-0000, CT-0022, CT-0081, CT-0092, CT-0132, CT-0162
**deals.csv — NOT PROVIDED:** owner, stage, amount, close date, why-buys all unmeasurable. No why-buy data exists anywhere in the extract.
## 2. Duplicate company clusters (2 clusters, 4 rows → 2)
- **acme-corp.com** — C-0A092931 (Technology, 500, US) vs C-0A092932 (tech, 510, USA). Survivor: **C-0A092931** (canonical spellings). Note the unresolved factual conflict 500 vs 510 employees; no enrichment row exists to arbitrate — needs human verification, do not silently keep either as truth.
- **globex.io** — C-0A092933 (SaaS, 200, US) vs C-0A092934 (Technology, 200, US). Survivor: **C-0A092934** (on-taxonomy industry; employee count and country agree across both).
## 3. Invalid emails and domain mismatches
Invalid (truncated, no domain): CT-0010 (C-66D1FC, "user0@"), CT-0080 and CT-0081 (C-92D97D, "user0@" / "user1@"), CT-0192 (C-425E2A, "user2@").
Domain mismatch: CT-0011 (C-66D1FC) — user1@other-domain.com vs contact/company domain 66d1fc.com. Recommend verify with the contact or null the email; do not substitute a guessed 66d1fc.com address.
(No other email-vs-domain mismatches; no duplicate email addresses; all 52 contact.domain values match their company's domain.)
## 4. Enrichment fills (blank CRM field + matching zoominfo_enrichment row only)
employee_count, 8 fillable: C-EC3025→400, C-96039F→400, C-44EA29→400, C-D04904→400, C-B23205→400, C-60C75F→400, C-7BBDFA→400, C-50D386→400. Post-fill: 33/34 = 97.1%. Residual blank: C-93C8BF (no enrichment row).
hq_country, 0 fillable: all 6 blanks have either a blank enrichment country (C-2D1F1B, C-D73B89, C-44EA29, C-D04904, C-2C60E5) or no enrichment row (C-EE9FFB). Stays 82.4%.
No enrichment rows exist at all for 7 CRM domains: 332637.com, 93c8bf.com, acme-corp.com, ba969b.com, c9bb20.com, ee9ffb.com, globex.io.
## 5. CRM vs enrichment disagreements (both populated)
- **Countries (10 rows):** US/USA (CRM) vs United States (ZI) on C-66D1FC, C-950043, C-EC3025, C-96039F, C-77A95A, C-B23205, C-E51FB7, C-D0662E, C-425E2A, C-2D7423. Not a factual conflict — same country, different spelling. Recommend: adopt enrichment's "United States" and normalize all CRM values to it.
- **Industries (10 rows):** tech/Technology/Tech (CRM) vs Computer Software (ZI) on C-66D1FC, C-EC3025, C-44EA29, C-92D97D, C-D04904, C-77A95A, C-AA8DDA, C-B25F40, C-60C75F, C-425E2A. Semantically consistent, but vocabularies differ. Recommend: enrichment as source (ZoomInfo-standard taxonomy, machine-readable); strip trailing spaces from "Tech " (C-425E2A, C-BA969B, C-93C8BF, C-C9BB20).
- **Genuine factual conflict:** employee count on the acme-corp.com cluster (500 vs 510) — enrichment absent, cannot arbitrate. Leave flagged for verification.
## 6. Top 10 fixes (ranked by affected records — dollar ranking impossible without deals.csv)
1. **Provide deals.csv.** Every requested deal field (owner, stage, amount, close date, why-buys) is unverifiable; all pipeline-at-stake math is blocked.
2. **Contacts missing persona** — 15 rows (28.8%): CT-0000, CT-0022, CT-0041, CT-0060, CT-0070, CT-0081, CT-0082, CT-0092, CT-0110, CT-0132, CT-0162, CT-0171, CT-0172, CT-0180, CT-0181.
3. **Contacts missing title** — 13 rows (25%): CT-0000, CT-0022, CT-0072, CT-0080, CT-0081, CT-0092, CT-0120, CT-0121, CT-0122, CT-0132, CT-0141, CT-0162, CT-0170.
4. **Companies missing hq_country** — 6 rows (17.6%): C-2D1F1B, C-D73B89, C-2C60E5, C-EE9FFB, C-44EA29, C-D04904. Enrichment cannot fill any of them; re-pull enrichment with country populated.
5. **Companies missing employee_count** — 9 rows; apply the 8 enrichment fills, chase enrichment for C-93C8BF.
6. **Invalid emails** — 4 rows: CT-0010, CT-0080, CT-0081, CT-0192. CT-0081 is blank on title and persona too; C-92D97D's contact coverage is effectively 1 usable contact.
7. **Merge duplicate clusters** — acme-corp.com → C-0A092931, globex.io → C-0A092934; verify acme headcount 500 vs 510 before merge; no contacts or enrichment attached to either cluster.
8. **Email-domain mismatch CT-0011** (user1@other-domain.com) — verify or null.
9. **Normalize industry and country vocabularies** — 16 companies affected by CRM/ZI label conflicts plus 4 trailing-space "Tech " values; standardize to enrichment taxonomy ("Computer Software", "United States").
10. **14 companies have zero contacts** (coverage gap, including all of Retail/manufacturing cohorts and both survivor clusters): C-2C60E5, C-B97B4E, C-2D7423, C-7BBDFA, C-50D386, C-BA969B, C-332637, C-93C8BF, C-EE9FFB, C-C9BB20, C-0A092931, C-0A092932, C-0A092933, C-0A092934.
Nothing in this audit was filled or inferred beyond enrichment-row matches on blank fields; all residual blanks are listed as requiring a source rather than a guessed value.
CLOSED-LOST CLASSIFICATION — 90 deals, close dates 2026-07-29 → 2026-09-30 (per file)
Method: primary category assigned from the free-text reason first, tag used as corroboration; "MIA/unresponsive" treated as an outcome (no decision was ever made), not a reason. Side: Bonusly = loss attributable to Bonusly's product/execution per the text; buyer = buyer's own context/decision; unknown = no cause given.
CLASSIFICATION (every deal, grouped by category)
TIMING — 19
- Deal-DB0AAC $5,115 buyer — pause; reconnect
- Deal-91A056 $2,975 buyer — reconnect early 2027
- Deal-29326C $6,300 buyer — "Timing"
- Deal-831B7B $7,200 buyer — revisit new year
- Deal-39E25C $3,360 buyer — reconnect next year
- Deal-B3ABED $40,001 buyer — revisit Q2 next yr for 2028 budget
- Deal-B6AC09 $3,000 buyer — revisit 2027
- Deal-E6E80A $24,000 buyer — pushed to early 2027
- Deal-B038F0 $2,340 buyer — pushed to early 2027
- Deal-175756 $2,880 buyer — hold until 2027
- Deal-BB78F3 $6,600 buyer — plant-survey actions first; Bonusly still end goal
- Deal-15DA99 $19,600 buyer — back up early 2027
- Deal-F4AF5D $5,760 buyer — early next year
- Deal-79B7A1 $25,000 buyer — "Timing"
- Deal-9F176A $54,600 buyer — pause until ~year-end
- Deal-69CF3D $11,520 buyer — on hold
- Deal-ECBF89 $7,200 buyer — on hold
- Deal-D1A623 $25,200 buyer — "timing"
- Deal-55867E $7,200 buyer — tag says timing; text says not moving forward (see disagreements)
NO DECISION — 32
- MIA-tagged (21): Deal-AC944F $3,400 · Deal-214060 $2,880 · Deal-21B045 $11,700 · Deal-988493 $8,400 · Deal-F308CA $30,321 · Deal-4664E1 $12,000 · Deal-D48E0B $14,931 · Deal-583ADB $3,600 · Deal-E0441F $2,405 · Deal-7CB44D $31,860 · Deal-AFA56C $3,000 · Deal-2BBA21 $2,310 · Deal-386F6E $13,895 · Deal-D1AABF $23,400 · Deal-3F86A0 $3,840 · Deal-096750 $2,880 · Deal-79E61A $7,020 · Deal-AE7C4E $2,800 · Deal-DAB4F1 $3,450 · Deal-B4B50F $21,060 · Deal-5885B9 $7,200 — all buyer (silence; no decision reached)
- Non-MIA (11): Deal-13E9CF $33,750 buyer — org deprioritized R&R (explicitly not budget) · Deal-70F704 $3,000 buyer — anniversary awards only, then MIA · Deal-E74A73 $2,100 buyer — testing points calc manually first · Deal-50E5D8 $4,800 buyer — leadership pause · Deal-7B2236 → see pricing · Deal-413C56 $2,760 buyer — CEO not ready · Deal-2A292B $6,000 buyer — building internally · Deal-FEDBCB $2,000 buyer — not engaged, reconnect EOY · Deal-7FBAC6 $7,200 buyer — leadership paused "again" · Deal-2FEDDB $2,200 buyer — unsure on timing · Deal-FAC17C $2,100 buyer — no final approval from Exec IT Director · Deal-ABD14C $5,002.20 buyer — not interested
COMPETITOR — 26
- Named (11): Deal-F97C37 $4,320 Bonusly — rival "more diversified offerings" · Deal-422BA6 $3,000 Bonusly — rival is preferred ADP TotalSource partner (integrations) · Deal-DDAB52 $4,000 Bonusly — Rippl: more for same cost, no FX friction · Deal-ACE061 $3,600 unknown — rep believes HeyTaco, unconfirmed · Deal-242273 $60,000 Bonusly — finalists could digitize internal points currency/spend onsite · Deal-A2C349 $21,600 buyer — staying with Awardco (+surveying add-on) · Deal-C7156E $13,818 unknown — "selected another vendor" · Deal-8A0992 $7,336.56 buyer — Canadian provider · Deal-D0C698 $2,000 buyer — returning to past platform Kudos · Deal-47F1A1 $10,004.40 buyer — renewing WorkTango 12 mo · Deal-BF2A98 $8,400 buyer — HiThrive deployed · Deal-369281 $2,400 buyer — using Paylocity native · Deal-9FCD0D $4,300 buyer — Canadian company per CEO · Deal-64B19A $3,240 buyer — likely stayed with Motivosity · Deal-DC77FE $8,000 Bonusly — more customization (label points as dollars); price was competitive · Deal-1BCA50 $15,000 buyer — stakeholder already far down path with another vendor (that's 16 named/identified, incl. 5 unconfirmed or HRIS-native)
- Unnamed (10): Deal-F7F635 $3,600 · Deal-381C8C $4,800 · Deal-F1E8A6 $3,150 · Deal-2D2F8D $4,800 · Deal-0F96AA $76,800 · Deal-7CC678 $11,116 · Deal-EECC02 $66,690 · Deal-1E7DA9 $26,400 · Deal-286F9C $13,860 · Deal-5AD03E → see product gap — all "another direction/vendor," side unknown except where noted (0F96AA/EECC02/1E7DA9/286F9C unknown)
CORRECTION — competitor roster as actually classified (26): F97C37, 422BA6, DDAB52, ACE061, 242273, A2C349, C7156E, 8A0992, D0C698, 47F1A1, BF2A98, 369281, 9FCD0D, 64B19A, DC77FE, 1BCA50 (16 with a named/identified vendor) + F7F635, 381C8C, F1E8A6, 2D2F8D, 0F96AA, 7CC678, EECC02, 1E7DA9, 286F9C (9 unnamed) + 5E64CE $3,360 buyer — locked into Nectar contract through Oct 2027 (incumbent retention, tagged "Doing nothing/Not a priority/Cost")
PRICING — 5
- Deal-7ED004 $60,000 buyer — no budget approval
- Deal-C33D91 $7,200 buyer — budget cuts
- Deal-7B2236 $72,000 buyer — budget + wants simpler/cheaper
- Deal-8A119B $3,250 buyer — no approval
- Deal-DAFB82 $30,000 buyer — budget committed elsewhere until 2028 ("loves Bonusly," will loop back)
PRODUCT GAP — 4
- Deal-9048EB $41,790 Bonusly — tagged MIA, but text: "bad fit... multiple feature gaps"
- Deal-3618CC $15,600 Bonusly — wanted surveys
- Deal-5AD03E $24,000 Bonusly — wanted more defined budget access
- Deal-981AD4 $36,855 Bonusly — UI fit + not UK-focused
CHAMPION LEFT — 2
- Deal-F325A5 $14,400 buyer — layoffs + change in leadership
- Deal-ED9AE7 $2,340 buyer — "timing, budget, authority" (no decision-maker secured); closest fit given tag "Lost DM"
OTHER — 2
- Deal-8E27DA $21,000 buyer — bought swag provider only, no R&R need (tagged "Feature Request")
- Deal-5DB9B0 $10,800 unknown — "Spam." (tagged not-ICP)
COUNT CHECK: 19 + 32 + 26 + 5 + 4 + 2 + 2 = 90 ✓
SUMMARY
1) Category counts (count, % of 90, value)
- No decision: 32 (35.6%) — $283,264.20
- Competitor: 26 (28.9%) — $385,594.96
- Timing: 19 (21.1%) — $259,851.00
- Pricing: 5 (5.6%) — $172,450.00
- Product gap: 4 (4.4%) — $118,245.00
- Champion left: 2 (2.2%) — $16,740.00
- Other: 2 (2.2%) — $31,800.00
Total value: $1,267,945.16
2) Side split
- Buyer: 69 (76.7%) — $830,946.16 (65.5% of value)
- Unknown: 12 (13.3%) — $239,434.00 (18.9%)
- Bonusly: 9 (10.0%) — $197,565.00 (15.6%)
Check: 69 + 12 + 9 = 90 ✓; 830,946.16 + 239,434.00 + 197,565.00 = 1,267,945.16 ✓
3) Tag vs free-text disagreements: 9 deals
Clear (5): Deal-9048EB (MIA → feature gaps), Deal-5AD03E (Competitor → budget-access product gap), Deal-3618CC (Lost DM → surveys product gap), Deal-8E27DA (Feature Request → no R&R need at all), Deal-70F704 (Lost DM → narrow use case + MIA, not a DM loss)
Soft (4): Deal-381C8C, Deal-F1E8A6, Deal-7CC678 (tagged Competitor, text names no vendor), Deal-55867E (tagged Timing, text is a flat "not moving forward")
Also note: Deal-13E9CF's tag bundles "Cost" but the text explicitly says "Not a budget issue" — partially self-contradicting tag, not counted as a disagreement since "not a priority" is in the tag.
4) Two patterns most worth acting on
Pattern 1 — The engagement black hole (24% of all losses). 22 of 90 deals (24.4%, $254,142 = 20.1% of value) carry a bare "MIA" tag with no substantive reason; 21 of those went to "no decision." Critically, 5 of the 22 had 5+ logged contacts (Deal-4664E1: 7, Deal-7CB44D: 6, Deal-D1AABF/3F86A0/B4B50F: 5 each) — these aren't cold leads that vanished, they're engaged evaluations where contact collapsed late. Owner 119337721 accounts for 7 of the 22, and Deal-E0441F's text admits it was inherited stale from a departed rep with no contact from either side. Arithmetic: 22/90 = 24.4%; $254,142 / $1,267,945.16 = 20.05%.
Action: enforce a commit-or-disqualify rule — any deal with two consecutive ignored outreach cycles gets a hard break-up/disqualification decision, and "MIA" stops being an acceptable loss-reason value (it's an outcome, not a cause). The 5-contacts-then-silence subset is a coaching issue, not a lead-quality issue.
Pattern 2 — Future-dated losses booked as closed-lost (23% of value). 21 deals (23.3%, $293,211 = 23.1% of value) carry explicit re-engagement language: 7 timing deals name a specific future year (six say 2027, Deal-B3ABED says 2028), plus Deal-DAFB82 ($30,000, "not budgeted until 2028") and Deal-5E64CE (Nectar contract runs to Oct 2027, explicitly plans to move to Bonusly then). These are recoverable pipeline recorded as dead losses with no structured re-entry date. Arithmetic: 19 + 2 = 21; 21/90 = 23.3%; $293,211 / $1,267,945.16 = 23.1%.
Action: convert every "circle back next year" into a dated nurture task at close time, and track this cohort as a re-open pipeline segment — 9 of them name a year, so their re-entry windows are predictable and currently being left to rep memory.
DATA GAPS (explicit): no competitor name is given for 9 of 26 competitive losses ($229,591 combined) — the unnamed set includes the two largest competitive losses (Deal-0F96AA $76,800, Deal-EECC02 $66,690), so the competitive threat picture is materially incomplete; no stage-at-loss, industry, or sales-cycle data was provided; "n_contacts" is interpreted as engagement count on the deal; the file spans ~2 months of close dates, which I take as the requested "last 6 months" extract as provided.
```json
{
"tier_counts": {"LOCK": 2, "ACTION": 37, "BUILD": 32, "REVIVE": 44, "WATCH": 23, "RISKY": 18},
"tier_examples": {
"LOCK": ["Deal-D348E1", "Deal-C26D20"],
"ACTION": ["Deal-25F752", "Deal-944310", "Deal-403845"],
"BUILD": ["Deal-C6FE92", "Deal-D73B89", "Deal-93C8BF"],
"REVIVE": ["Deal-2D1F1B", "Deal-950043", "Deal-B23205"],
"WATCH": ["Deal-EC3025", "Deal-92D97D", "Deal-332637"],
"RISKY": ["Deal-547B2B", "Deal-B7EBD1", "Deal-E53952"]
},
"risky_deals": [
"Deal-E53952", "Deal-547B2B", "Deal-B7EBD1", "Deal-A2B47C", "Deal-2465CE", "Deal-C61CF7",
"Deal-C6D97A", "Deal-7B3B0F", "Deal-F9A08A", "Deal-FC22A3", "Deal-8AD4A5", "Deal-15D24F",
"Deal-9D0060", "Deal-ED725A", "Deal-55164C", "Deal-5FDCE4", "Deal-5EED42", "Deal-FA32A0"
],
"lock_violations": 0,
"pipeline_shape": "Of 156 open deals (tier counts sum 2+37+32+44+23+18 = 156), only 2 earn LOCK (both COMMIT/DS5 with meetings_30d >= 1 and contact within ~3 weeks), so the book is bottom-light. The healthy core is 32 BUILD deals (DS2-DS3 with 1+ meetings_30d and contact within 30d), while 67 deals (~43%) are quiet or unworked: 44 REVIVE (>30d since last contact with zero meetings_30d) and 23 WATCH (early DS1/DS2 PIPELINE with no inbound), including the largest deal Deal-2D1F1B ($240k DS1, ~101 days silent). 18 RISKY deals - COMMIT or BEST_CASE at DS3-DS5 with zero meetings_30d and a close date already passed or within ~2 weeks - mean the Sept-Oct committed/best-case forecast overstates what engagement supports (four are slipped COMMITs: Deal-547B2B, Deal-B7EBD1, Deal-A2B47C, Deal-2465CE). Data caveats: inbound_emails_30d is 0 on every row (defect, meetings_30d used as the inbound signal), Deal-3EED2C and Deal-57FF13 have no engagement rows (tiered WATCH on stage/dates alone), and several last_meeting timestamps are future-dated relative to last contact."
}
```
Conventions used: all fields are filled only from prospect statements (Alex Franklin's lines are never used as field content). Stakeholders = prospect-side speakers only; people referenced but not present (CEO, CFO, COO, IT lead, legal, exec team) appear in objection/next-step text, not the stakeholder list. Confidence = strength of explicit prospect-stated signals in the transcript (High/Medium/Low), not a win probability. No arithmetic was required — every number is quoted directly from a prospect line.
```json
[
{
"transcript_id": "TX-001",
"deal_alias": "Deal-CFE7F4",
"why_buys": [
"Automating anniversary and birthday awards would be the big win (Prospect (VP People))"
],
"pain_points": [
"HR team of three cannot keep up with anniversary/birthday awards manually (Prospect (VP People))",
"Everything is tracked in a spreadsheet and people slip through the cracks (Prospect (HR Admin))"
],
"stakeholders": ["Prospect (VP People)", "Prospect (HR Admin)"],
"budget_signal": "About $40k earmarked for engagement tools this fiscal year (Prospect (VP People))",
"timeline_signal": "Ideally live before open enrollment in November (Prospect (VP People))",
"competitor_mentioned": "Achievers — looked at last year, rejected as too heavy for a team their size (Prospect (VP People); not an active evaluation)",
"next_step": "Security review with their IT lead on September 12 (agreed by Prospect (VP People))",
"objections": [
"Needs SSO and audit logs for IT to sign off (Prospect (HR Admin))"
],
"confidence": "High — explicit budget, timeline, competitor history, stated requirement/objection, and a dated agreed next step"
},
{
"transcript_id": "TX-002",
"deal_alias": "Deal-70BB30",
"why_buys": [
"Tie recognition to retention for the hourly workforce (Prospect (Head of Total Rewards))"
],
"pain_points": [
"Regretted turnover in the hourly workforce is over 30% (Prospect (Head of Total Rewards))"
],
"stakeholders": ["Prospect (Head of Total Rewards)", "Prospect (CFO)"],
"budget_signal": "$25k pilot budget approved by finance for this quarter (Prospect (CFO))",
"timeline_signal": "Wants a decision by end of September (Prospect (CFO)); pilot budget scoped to this quarter",
"competitor_mentioned": null,
"next_step": "Rep sends the pilot agreement; CFO will route it to legal this week (agreed by Prospect (CFO))",
"objections": [
"Workday integration has to be rock solid — CFO's stated one condition"
],
"confidence": "High — approved budget, explicit decision deadline, agreed next step with routing commitment; prospect also stated no other vendor has done a real demo"
},
{
"transcript_id": "TX-003",
"deal_alias": "Deal-530B50",
"why_buys": [
"Make recognition visible across the 12 retail locations (Prospect (People Ops Manager))"
],
"pain_points": [
"Recognition is not visible across the 12 retail locations (Prospect (People Ops Manager))",
"Store managers have zero budget autonomy for on-the-spot recognition today (Prospect (People Ops Manager))"
],
"stakeholders": ["Prospect (People Ops Manager)"],
"budget_signal": null,
"timeline_signal": "No rush on the prospect side until Q1 (Prospect (People Ops Manager))",
"competitor_mentioned": "Bucketlist — CEO used it at her last company and liked it (Prospect (People Ops Manager); prior positive experience, not an active evaluation)",
"next_step": "Call with their CEO — prospect will send two time options (agreed by Prospect (People Ops Manager))",
"objections": [
"The CEO has to be sold first — she decides anything people-related (Prospect (People Ops Manager))"
],
"confidence": "Medium — no budget signal, soft timeline, next step agreed but unscheduled, and an unengaged CEO decision-maker gate"
},
{
"transcript_id": "TX-004",
"deal_alias": "Deal-180D02",
"why_buys": [
"Consolidate three separate recognition tools into one (Prospect (VP People))"
],
"pain_points": [
"Paying for three tools and none of them talk to the HRIS (Prospect (VP People))"
],
"stakeholders": ["Prospect (VP People)", "Prospect (IT Security Lead)"],
"budget_signal": "Prospect (VP People) can self-approve if under $15k annually without going to the board; no budget amount committed",
"timeline_signal": "Procurement cycle runs six to eight weeks minimum (Prospect (IT Security Lead))",
"competitor_mentioned": null,
"next_step": null,
"objections": [
"Security review for their last vendor took three months — that is the security lead's stated hesitation (Prospect (IT Security Lead))"
],
"confidence": "Medium — approval threshold stated but no committed budget; no agreed next step (CFO follow-up was only 'Maybe — I need to check her calendar, no promises'); security-review duration risk stated by prospect"
},
{
"transcript_id": "TX-005",
"deal_alias": "Deal-F8767A",
"why_buys": [
"Automate service milestones (Prospect (HR Director))",
"Analytics on recognition equity across departments (Prospect (HR Director))"
],
"pain_points": [
"Night-shift teams feel invisible — their engagement scores run 20 points lower (Prospect (People Ops Coordinator))"
],
"stakeholders": ["Prospect (HR Director)", "Prospect (People Ops Coordinator)"],
"budget_signal": "$12k approved under the engagement line (Prospect (HR Director))",
"timeline_signal": "Needs it running before the January all-hands (Prospect (HR Director))",
"competitor_mentioned": "Nectar — mid-pilot right now; prospect said we would need to beat that experience (Prospect (HR Director); active incumbent pilot)",
"next_step": "Rep presents to their exec team on October 2 (agreed by Prospect (HR Director))",
"objections": [
"Exec team is skeptical after a failed rollout two years ago (Prospect (HR Director))"
],
"confidence": "High — approved budget, dated timeline, active competitor status, stated objection, and a dated agreed next step"
},
{
"transcript_id": "TX-006",
"deal_alias": "Deal-EE195F",
"why_buys": [
"Cut the admin time spent on service awards (Prospect (HR Manager))"
],
"pain_points": [
"HR Manager personally spends five hours a month ordering and shipping plaques (Prospect (HR Manager))"
],
"stakeholders": ["Prospect (HR Manager)"],
"budget_signal": "Prospect stated budget is not the issue — time is; no dollar amount given (Prospect (HR Manager))",
"timeline_signal": "Fiscal year resets in February, so a Q1 start is realistic (Prospect (HR Manager))",
"competitor_mentioned": null,
"next_step": "Rep sends the one-page overview; HR Manager will forward it to the COO this week (agreed by Prospect (HR Manager))",
"objections": [
"COO usually prefers building things in-house (Prospect (HR Manager))",
"Comparison is against doing it internally, not other vendors — 'Nobody else' (Prospect (HR Manager))"
],
"confidence": "Medium — clear pain and agreed next step, but no budget amount, a soft ('realistic') timeline, and an in-house-build preference at the COO"
}
]
```
Explicit gaps in the provided data: no budget was stated in TX-003; no next step was agreed in TX-004; no competitor vendor was named in TX-002, TX-004, or TX-006; no company names appear anywhere in the data — only deal aliases as given above.
1) Deal-547B2B · Alex Franklin · $11,200 · DS5/COMMIT · close 2026-09-11 Close: Slack 09:12. Redlines came back clean, signing page is out, their VP People said they are signing tomorrow. Signature-imminent. Left: counter-signature only. 2) Deal-403845 · Alex Franklin · $9,000 · DS5/COMMIT · close 2026-09-11 Close: Slack 10:02. Order form is with their finance team, moving fine, no blocker named. Left: finance sign-off, then countersign. 3) Deal-B7EBD1 · Dana Mercer · $9,000 · DS5/COMMIT · close 2026-09-10 Close: earliest close date on the board at top stage/forecast, no Slack blocker. No Slack mention either way, so this is CRM-only. Left: unknown from the data provided. Needs a direct status check. Dropped despite DS5/COMMIT: Deal-2465CE ($5,400). Slack: champion left, procurement froze new vendors, Dana pulled it from commit, realistically Q4. CRM lags Slack here. Ranking arithmetic: DS5/COMMIT outranks DS4/BEST_CASE. Among DS5/COMMIT deals, Slack forward-motion beats silence, and late close dates (D348E1 2026-10-15, FD9F4E 10-23, C26D20 11-27, 584EE5 11-30) lose on time. B7EBD1 over A2B47C ($6,360, close 09-11): B7EBD1 closes 1 day earlier and is $2,640 larger ($9,000 − $6,360). Just missed: Deal-A2B47C ($6,360, "still warm" but normal legal-review pace, not imminent), Deal-D348E1 ($13,770, 34 days further out), Deal-25F752 ($24,000, DS4/BEST_CASE, zero Slack signal). Next action: ask Dana Mercer today for Deal-B7EBD1 status. It closes 09-10 with no Slack trail; confirm it is not another Deal-2465CE.
REAL PRODUCT GAPS (prospect voice, active deals) — 2 of 5 candidates qualify
1) SCIM user provisioning — Deal-EC3025
Quote: "We need SCIM user provisioning — our security team will not approve any tool that requires manual account management." (Prospect, IT Security Lead, TG-001)
Classification: REAL GAP. Docs: "SCIM user provisioning ... NOT currently listed as supported capabilities." Not a plan gate — SCIM appears in no tier column (not even Enterprise), so no upgrade path resolves it.
Amount: not provided in source data.
2) ADP Workforce Now integration — Deal-D0D6B5
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." (Prospect, HRIS Manager, TG-002)
Classification: REAL GAP. Docs: HRIS integrations limited to "Workday, BambooHR, Gusto, Rippling (Pro and above)"; "ADP Workforce Now integrations are NOT currently listed as supported capabilities." Not a plan gate — ADP exists on no tier.
Amount: not provided in source data.
OTHER CANDIDATES REVIEWED — excluded from summary
- Deal-CFE7F4 (TG-003, VP People): "I tried to build a custom report combining recognition frequency with turnover and couldn't — is that possible on our current plan?" → PLAN GATE, not a gap. Docs: "Custom report builder — Enterprise only." Capability exists; blocked by tier, resolvable by upgrade.
- Deal-84DBA6 (TG-004, People Ops Manager): "We turned on the Slack integration in July, but half our managers still haven't given a single recognition — nobody ever trained them on it." → ROLLOUT/ENABLEMENT ISSUE, not a gap. Docs: Slack integration supported on all plans; product performed as designed, adoption failed on training.
- Deal-36C33F (TG-005, HR Manager): excluded — the mobile-app gap ("we don't have a native mobile app ... yet") is stated by the rep (Alex Franklin), and the prospect voices no gap ("The web version should be fine for our office staff for now"). Rep language does not count as prospect voice.
MISSING DATA
- Deal amounts: transcripts_gaps.csv contains no amount column and product_docs.md contains none; amounts cannot be named for any candidate.
ARITHMETIC
- Candidates raised in prospect voice: 5 prospect lines (TG-001 through TG-004 prospect lines + TG-005 prospect line; TG-005's gap statement is rep voice and excluded) = 5 reviewed.
- Classification: real gaps 2 (TG-001, TG-002) + plan gate 1 (TG-003) + rollout/enablement 1 (TG-004) + rep-voice exclusion 1 (TG-005) = 5. ✓
- Real-gap rate: 2 / 5 = 40%.
STALE-DEAL AUDIT — snapshot 2026-09-05 METHOD - Window "last 7 days" = 2026-08-29 through 2026-09-05. A deal is stale when none of last_email / last_call / last_meeting (engagements_by_deal_90d.csv) falls in that window. Days since last contact = 2026-09-05 minus the most recent of those three dates that is on/before the snapshot (e.g. 2026-09-05 − 2026-08-20 = 16 days). The deal file's last_contacted_field was ignored per instruction. - No deal's latest touch falls exactly on 2026-08-29, so window-edge convention does not change any result. - † = deal's last_meeting is future-dated (booked meeting 2026-09-09 to 2026-10-02). A booked meeting is not logged activity in the window, so it does not reset recency; days are computed from the latest past-dated touch. - * = open deal has NO row at all in engagements_by_deal_90d.csv: no email/call/meeting logged in the 90-day table; days since last contact cannot be computed from engagement data. BRYCE HARMON Deal-2D1F1B DS1 $240,000 81d last: meeting 2026-06-16 (email 06-11) Deal-66D1FC DS1 $99,000 16d last: email 2026-08-20 Deal-950043 DS1 $70,000 19d last: email 2026-08-17 Deal-B23205 DS1 $45,000 16d last: email 2026-08-20 Deal-7BBDFA DS3 $37,440 46d last: email 2026-07-21 (meeting 06-18) Deal-332637 DS2 $36,000 9d last: email 2026-08-27 Deal-1BEEBF DS1 $31,500 19d last: email 2026-08-17 Deal-A414F6 DS1 $25,200 19d last: email 2026-08-17 †mtg booked 09-10 Deal-C5658B DS1 $23,400 16d last: email 2026-08-20 Deal-40522D DS3 $21,000 19d last: email 2026-08-17 Deal-C1FA6D DS1 $18,000 16d last: email 2026-08-20 †mtg booked 09-15 Deal-01E193 DS1 $12,600 8d last: email 2026-08-28 †mtg booked 09-09 Deal-F0EBBB DS3 $11,400 24d last: email 2026-08-12 Deal-927338 DS1 $10,920 18d last: email 2026-08-18 †mtg booked 09-17 Deal-E25A09 DS1 $6,000 9d last: email 2026-08-27 Deal-C9C286 DS2 $5,502 9d last: email 2026-08-27 Deal-3795AD DS2 $1 8d last: email 2026-08-28 †mtg booked 10-02 Deal-012CB1 DS1 $1 23d last: email 2026-08-13 DANA MERCER Deal-44EA29 DS2 $60,000 10d last: email 2026-08-26 Deal-E51FB7 DS2 $43,875 12d last: call 2026-08-24 (email 08-18) Deal-B42F46 DS1 $27,000 19d last: email 2026-08-17 Deal-BA3DDC DS3 $23,400 15d last: call 2026-08-21 (email 08-20) Deal-9DDE86 DS2 $20,000 15d last: email 2026-08-21 Deal-215CCA DS3 $18,900 17d last: meeting 2026-08-19 (email 07-02) Deal-5EED42 DS3 $16,250 11d last: email + call 2026-08-25 Deal-57887A DS2 $15,000 8d last: email 2026-08-28 Deal-944310 DS4 $10,500 33d last: email 2026-08-03 †mtg booked 09-15 Deal-B7EBD1 DS5 $9,000 16d last: email 2026-08-20 Deal-3974EB DS4 $9,000 8d last: email 2026-08-28 Deal-F40F04 DS2 $8,100 15d last: email 2026-08-21 Deal-7599B8 DS3 $7,350 18d last: email 2026-08-18 †mtg booked 09-10 Deal-87DDD1 DS1 $5,000 19d last: email 2026-08-17 Deal-F336B6 DS3 $4,200 15d last: email 2026-08-21 Deal-0660B4 DS4 $1,920 16d last: meeting 2026-08-20 (email 08-10) COLE INGRAM Deal-D04904 DS2 $58,529.25 11d last: email 2026-08-25 Deal-B25F40 DS3 $40,000 8d last: email 2026-08-28 Deal-813836 DS2 $32,175 11d last: email 2026-08-25 Deal-1BA595 DS2 $31,750 11d last: email 2026-08-25 Deal-CFE1E8 DS3 $18,000 11d last: email 2026-08-25 Deal-CD47A6 DS2 $12,168 11d last: email 2026-08-25 (call 08-24) Deal-627646 DS3 $11,193 11d last: email 2026-08-25 Deal-FF809F DS2 $7,781.20 11d last: email 2026-08-25 Deal-AF932D DS2 $7,225.40 11d last: email 2026-08-25 Deal-A71728 DS2 $6,947.50 11d last: email 2026-08-25 Deal-8BC9F5 DS2 $5,616 10d last: email 2026-08-26 Deal-175395 DS3 $4,779.88 11d last: email 2026-08-25 Deal-481E24 DS3 $4,140 10d last: call 2026-08-26 (email 08-25) Deal-C7F9BF DS2 $3,360 11d last: email 2026-08-25 (call 08-24) Deal-2F3A66 DS3 $3,334.80 11d last: email 2026-08-25 Deal-342E96 DS2 $2,700 24d last: email 2026-08-12 Deal-E568D5 DS3 $1,875 11d last: email 2026-08-25 Deal-FD9F4E DS5 $1,330 10d last: email 2026-08-26 ALEX FRANKLIN Deal-CC08D1 DS1 $24,000 16d last: email 2026-08-20 (meeting 08-19) Deal-E73427 DS3 $18,000 10d last: email + meeting 2026-08-26 Deal-885F45 DS2 $9,300 12d last: email 2026-08-24 Deal-C2FF3C DS1 $8,316 10d last: email 2026-08-26 Deal-3EED2C DS2 $7,200 n/a* no engagement rows in 90d table Deal-0D2F7A DS3 $5,100 12d last: call 2026-08-24 (email 08-05) Deal-6C60D4 DS3 $4,800 12d last: call 2026-08-24 (email 07-31) Deal-13FEBD DS2 $4,680 12d last: call 2026-08-24 (email 08-04) Deal-819506 DS1 $4,400 8d last: email 2026-08-28 †mtg booked 09-09 Deal-9D0060 DS3 $3,840 12d last: email 2026-08-24 Deal-690476 DS2 $3,600 18d last: call 2026-08-18 (email 08-03) Deal-C6D97A DS4 $3,240 8d last: email 2026-08-28 Deal-EE195F DS3 $3,120 8d last: email 2026-08-28 Deal-278DEC DS3 $2,700 8d last: email 2026-08-28 Deal-635B8E DS3 $2,600 18d last: email 2026-08-18 Deal-6883F3 DS1 $2,400 16d last: email 2026-08-20 Deal-4A13AD DS3 $2,160 26d last: email 2026-08-10 Deal-F67D31 DS2 $1,800 8d last: email 2026-08-28 Deal-5FDCE4 DS3 $1,600 12d last: email 2026-08-24 Deal-BA571A DS4 $1,080 18d last: email 2026-08-18 FARID OSMAN Deal-8BA24E DS1 $2,880 8d last: email 2026-08-28 †mtg booked 09-15 Deal-8FDCD2 DS1 $1 15d last: email 2026-08-21 †mtg booked 09-15 ELENA SINCLAIR Deal-57FF13 DS1 $2,100 n/a* no engagement rows in 90d table STALE DEALS AND AMOUNT BY OWNER Bryce Harmon 18 deals $692,964.00 Dana Mercer 16 deals $279,495.00 Cole Ingram 18 deals $252,905.03 Alex Franklin 20 deals $113,936.00 Farid Osman 2 deals $2,881.00 Elena Sinclair 1 deal $2,100.00 TOTAL 75 deals $1,344,281.03 (692,964 + 279,495 + 252,905.03 + 113,936 + 2,881 + 2,100 = 1,344,281.03) Caveat on the judgment call: if you instead treat the future-dated booked meetings as "activity," strike the 10 † rows — the stale list becomes 65 deals / $1,252,429.03 (Bryce 13/$626,243; Dana 14/$261,645; Cole 18/$252,905.03; Alex 19/$109,536; Farid 0; Elena 1/$2,100). The two * deals (Deal-3EED2C, Deal-57FF13) are stale under either reading — they simply have no logged email, call, or meeting anywhere in the 90-day engagement table.
WINDOW AND METHOD - Snapshot 2026-09-05; last-30-day window = 2026-08-06 through 2026-09-05 inclusive. - Activity totals = sums of the engagements file's own emails_30d / calls_30d / meetings_30d columns, joined to owners via deals_open.csv. Notes excluded (notes_90d is a 90-day metric). inbound_emails_30d excluded as a breakout (all zeros, no impact). - "Entered DS2" = t_ds2 falls in the window, regardless of the deal's current stage. Boundary cases: t_ds2 = 2026-08-06 counted (Deal-1CCE5C, Deal-EE195F, Deal-D9A72E); t_ds2 = 2026-08-03/04/05 excluded (Deal-D9A12F, Deal-13FEBD, Deal-55164C). - Archived owners Gavin Porter and Hugo Lindqvist have no deals in the file — excluded. PER-REP RESULTS ``` Rep Emails Calls Meetings Total Mix (E/C/M) DS2 entries Activities per DS2 entry Bryce Harmon 162 0 42 204 79.4 / 0.0 / 20.6 % 4 51.0 Alex Franklin 307 36 41 384 79.9 / 9.4 / 10.7 % 18 21.3 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 Farid Osman 38 0 34 72 52.8 / 0.0 / 47.2 % 1 72.0 Elena Sinclair 0 0 0 0 n/a (no data) 0 n/a ``` ARITHMETIC Bryce Harmon (35 deals, all with engagement rows): - Emails: 8+5+4+2+8+0+3+10+2+14+1+3+2+2+3+7+5+1+1+6+2+1+2+2+8+7+4+7+0+4+4+8+13+8+5 = 162 - Calls: 0 (all 35 deals are 0) - Meetings (nonzero deals in file order): 3+4+2+3+2+1+5+2+1+2+3+3+3+3+3+2 = 42 - Total = 162+0+42 = 204; mix = 162/204 = 79.4%, 0/204 = 0.0%, 42/204 = 20.6% - DS2 entries (4): Deal-25F752 (08-10), Deal-CA7DC0 (08-12), Deal-D73B89 (09-03), Deal-1CCE5C (08-06) - 204 / 4 = 51.0 Alex Franklin (66 deals; engagement rows for 65; Deal-3EED2C has no row): - Emails = 307 = 78+36+40+30+52+44+27 (seven running subtotals over the 65 deals in file order) - Calls = 36 = 17+2+2+5+5+4+1 (same subtotal groups) - Meetings = 41 = 6+7+1+8+13+2+4 (same subtotal groups) - Total = 307+36+41 = 384; mix = 307/384 = 79.9%, 36/384 = 9.4%, 41/384 = 10.7% - DS2 entries (18): Deal-403845 (09-02), Deal-1FC049 (09-03), Deal-3EED2C (09-03), Deal-7FA0C3 (08-07), Deal-E531A6 (08-07), Deal-5296C9 (08-28), Deal-36C33F (08-11), Deal-EE195F (08-06), Deal-F436DA (08-19), Deal-317E6F (08-12), Deal-D1E6C2 (08-11), Deal-D9A72E (08-06), Deal-CA5E44 (08-24), Deal-4F775F (08-17), Deal-898FC5 (08-28), Deal-46988D (08-26), Deal-E73427 (08-28), Deal-92D97D (09-02) - 384 / 18 = 21.3 Dana Mercer (24 deals): - Emails: 5+0+10+7+6+4+2+3+3+3+0+2+2+2+4+6+3+9+2+1+1+5+2+2 = 84 - Calls: 0+0+1+0+0+0+4+0+0+0+0+0+2+0+0+0+2+0+0+1+1+0+0+7 = 18 - Meetings: 0+2+0+1+0+0+0+0+2+0+1+0+0+0+0+1+0+1+0+1+0+2+0+0 = 11 - Total = 84+18+11 = 113; mix = 84/113 = 74.3%, 18/113 = 15.9%, 11/113 = 9.7% (rounds to 99.9) - DS2 entries (1): Deal-57887A (08-07) - 113 / 1 = 113.0 Cole Ingram (22 deals): - Emails: 7+10+2+5+5+2+4+3+6+3+4+5+4+2+10+3+2+2+6+2+7+2 = 96 - Calls: 1+0+0+2+0+0+0+0+0+2+0+2+0+0+0+0+0+0+0+7+0+0 = 14 - Meetings: 1 (Deal-42326B; all other deals 0) - Total = 96+14+1 = 111; mix = 96/111 = 86.5%, 14/111 = 12.6%, 1/111 = 0.9% - DS2 entries (2): Deal-42326B (08-26), Deal-1BA595 (08-12) - 111 / 2 = 55.5 Farid Osman (7 deals): - Emails: 17+3+6+3+1+3+5 = 38 - Calls: 0 (all 7 deals are 0) - Meetings: 4+8+6+4+3+4+5 = 34 - Total = 38+0+34 = 72; mix = 38/72 = 52.8%, 0.0%, 34/72 = 47.2% - DS2 entries (1): Deal-499BF6 (08-26) - 72 / 1 = 72.0 Elena Sinclair (1 deal, Deal-57FF13): no row in engagements_by_deal_90d.csv → 0 emails/calls/meetings; t_ds2 empty → 0 DS2 entries; ratio undefined (0/0). EFFICIENCY RANKING (lowest activities per DS2 entry first) 1. Alex Franklin — 21.3 (384/18) 2. Bryce Harmon — 51.0 (204/4) 3. Cole Ingram — 55.5 (111/2) 4. Farid Osman — 72.0 (72/1) 5. Dana Mercer — 113.0 (113/1) Not rankable: Elena Sinclair (0 activities, 0 DS2 entries). MOST EFFICIENT: Alex Franklin (21.3 activities per DS2 entry). HIGHEST VOLUME: Alex Franklin (384 total activities). They do not differ — Alex Franklin holds both positions. DATA GAPS AND CAVEATS (no cause attribution) - Deal-3EED2C (owner Alex Franklin, entered DS2 2026-09-03) has no row in engagements_by_deal_90d.csv. It is counted as a DS2 entry with zero activity. Even if it carried the largest activity load seen on any single deal in this file (17), Alex's ratio would be (384+17)/18 = 22.3, still well below the #2 rep's 51.0 — the #1 rank is robust to this gap, but Alex's totals may be understated. - Deal-57FF13 (owner Elena Sinclair) also has no engagement row; her zero totals are a data gap, not an observed zero-activity period. - The 30-day activity columns are used exactly as provided and cannot be re-derived from raw activity logs (none supplied); note several last_* timestamps in the engagements file postdate the snapshot (e.g., Deal-93C8BF last_meeting 2026-09-14). - The ratio is sensitive to DS2-entry counts: reps with few entries in the window (Dana 1, Farid 1) show high ratios on small denominators.
# QTD Scorecard — Alex Franklin (as of 2026-09-05, 2026-Q3) Quota: $200,000 (quota.csv, snapshot 2026-09-05). Quarter span: 2026-07-01 → 2026-09-30 (92 days; 67 elapsed = 72.8%). All figures from ae_deals.csv / ae_engagements.csv / quota.csv only. ## 1. Bookings vs Quota (QTD, close_date 2026-07-01 → 2026-09-05) - Closed-won in window: 8 deals, $150,000 - 40,000 + 20,000 + 35,000 + 21,000 + 12,000 + 11,000 + 6,500 + 4,500 = 150,000 - Excluded per rule: Deal-B3E6F1 ($24,000, closed 2026-06-20 — before quarter start) - Attainment: 150,000 / 200,000 = **75.0%**; gap to quota $50,000 - Pace check: 72.8% of quarter elapsed vs 75.0% booked — roughly on pace, but only $109,363 of open pipeline is dated to close by 9/30 (see §3) ## 2. New vs Expansion (QTD bookings) - New: 5 deals, $113,500 (75.7%) — 40,000 + 35,000 + 21,000 + 11,000 + 6,500 - Expansion: 3 deals, $36,500 (24.3%) — 20,000 + 12,000 + 4,500 ## 3. Active Pipeline (open deals, snapshot) 125 deals, $1,260,390 total: | Stage | Deals | Amount | % of $ | |---|---|---|---| | DS1 | 20 | $284,621 | 22.6% | | DS2 | 28 | $353,760 | 28.1% | | DS3 | 67 | $552,705 | 43.9% | | DS4 | 5 | $23,574 | 1.9% | | DS5 | 5 | $45,730 | 3.6% | - Weighted toward later-stage DS3 ($552,705 across 67 deals), but dated to close by 9/30: only 22 deals / $109,363 (largest $18,000, Deal-CFE7F4). The $50k quota gap is not covered by September-dated pipeline. ## 4. Rolling 90-Day DS2-to-Won Rate Cohort = all deals with entered_ds2 in 2026-06-07 → 2026-09-05 (rolling 90 days ending at snapshot), won ÷ total cohort (open deals count against the rate): - Cohort: 111 deals (8 won, 27 lost, 76 still open) - Rate: 8 / 111 = **7.2%** - Closed-only view: 8 / (8 + 27) = 22.9% ## 5. Wins / Losses (QTD) and Top Loss Reason - Wins: 8 deals, $150,000. Losses: 27 deals, $329,272 — all 27 loss dates fall inside the quarter, so none excluded. - Win rate by count: 8 / 35 closed = 22.9% - Top loss reason: **"Lost- Timing (1 year or more)"** — 13 of 27 losses (48.1%), $184,681 (56.1% of lost $). Full breakdown: Timing 13/$184,681; MIA 5/$45,831; Competitor 5/$49,020; Lost DM 2/$17,940; Feature Request 1/$21,000 (Deal-8E27DA); Does not fit ICP 1/$10,800 (Deal-5DB9B0). AI-synthesized loss reasons and named-competitor detail are not available in the provided data (single reason string per deal only). ## 6. Activity Volume, Last 30 Days (per-deal *_30d columns, summed over all 161 deals) - Emails: 807 | Calls: 112 | Meetings: 128 | Notes: 50 - On open deals only: 599 emails, 54 calls, 90 meetings, 1 note (the remainder sits on closed deals). Calls and meetings are concentrated on deals already won — the open book is running email-heavy. ## Coaching Observations 1. **Qualify timeline at DS2 entry.** 13 of 27 losses are "Lost- Timing (1 year or more)" ($184,681 — 56% of lost value), and those deals averaged ~35 days between entering DS2 and dying. Another 5 went MIA (45,831). Deals are being advanced to DS2 without a validated near-term close window, then burning a month before a predictable loss. 2. **The coverage math for the quota gap doesn't exist yet.** $50,000 is needed by 9/30, but only $109,363 of open pipeline is September-dated across 22 deals, and the DS3 mass ($552,705, 67 deals) mostly carries Q4+ close dates — including aged deals like Deal-901332 (entered DS3 2026-01-28) and Deal-F9A08A (DS4 since 2025-11-24). September needs a deliberate push on the 22 dated deals plus hygiene pass on stale DS3/DS4 records. 3. **Rebalance outreach from email to live touches on the big open deals.** 807 emails vs 112 calls / 128 meetings in 30 days, and the largest open opportunities are nearly inert by live channels: Deal-92D97D ($60,000, DS2): 3 emails, 0 calls, 0 meetings; Deal-50D386 ($36,000, DS2): 4 emails, 0 calls, 0 meetings; Deal-3EED2C ($7,200, DS2): zero activity of any type. The pattern that produced the biggest wins was multi-channel — Deal-A1C3E5 ($40,000 won) carried 12 emails, 5 calls, and 4 meetings in its final 30 days.
Coverage note first: **amount and stage are not present in either file** (deal_contacts.csv has no amount or stage columns; no separate deals file was provided), so those two fields are reported as missing for every deal, and stage-based prioritization is not possible. In its place I used a fixed persona priority ladder, stated below.
Method (shown once, applies to all):
- Reference date = max engagement in data = 2026-09-03. Active = not former AND engaged within last 60 days → cutoff = 2026-09-03 − 60 days = **2026-07-05**. Sanity check: using 2026-09-25 − 60d = 2026-07-27 instead changes nothing — the same 11 of 14 deals flag either way.
- Example stale arithmetic: CT-A902AE (2026-06-01) is 94 days before 2026-09-03 → inactive. CT-913581 (2026-06-20) is 75 days → inactive.
- Single-threaded = <2 active. Under-threaded = <3 active OR all active in one persona. Former contacts excluded regardless of recency.
- Priority ladder used for "most valuable persona to add" (stage unavailable): economic buyer → champion → IT security → finance → HR admin. First missing persona in that order is recommended.
FLAGGED DEALS (11 of 14; ordered by deal_id)
1. Deal-F9A08A (49757401138, C-0D15DF) — single-threaded + under-threaded
Amount: not in data | Stage: not in data
Active: 1 (CT-931B10, champion, eng 2026-09-03). Personas present: champion. Missing: economic buyer, IT security, finance, HR admin.
Most valuable to add: economic buyer. On-file fit: CT-697541 (Chief People Officer, unengaged). Note: deal's own economic buyer CT-913581 is not former but stale (2026-06-20).
2. Deal-5BFE3B (51674270311, C-535D36) — under-threaded (2 active, all champion)
Amount: not in data | Stage: not in data
Active: 2 (CT-57123B champion 2026-08-31; CT-5CE757 champion 2026-08-12). Personas present: champion. Missing: economic buyer, IT security, finance, HR admin.
Most valuable to add: economic buyer. On-file fit: none on file (no unengaged_contacts row for C-535D36).
3. Deal-92D97D (59728118877, C-E23238) — single-threaded + under-threaded
Amount: not in data | Stage: not in data
Active: 1 (CT-01F5B4, HR admin, eng 2026-08-28). Personas present: HR admin. Missing: economic buyer, champion, IT security, finance.
Most valuable to add: economic buyer. On-file fit: none on file (no row for C-E23238). Note: champion CT-A902AE stale (94 days).
4. Deal-D0D6B5 (60081655042, C-32918E) — under-threaded (3 active, all champion)
Amount: not in data | Stage: not in data
Active: 3 (CT-87CED4 2026-09-02; CT-DE6D7C 2026-08-19; CT-FD70B2 2026-08-07 — all champion). Personas present: champion. Missing: economic buyer, IT security, finance, HR admin.
Most valuable to add: economic buyer. On-file fit: CT-1FA4DB (Chief People Officer, unengaged).
5. Deal-5408B0 (60182332309, C-2AE3AA) — under-threaded (2 active)
Amount: not in data | Stage: not in data
Active: 2 (CT-D33AE4 champion 2026-09-01; CT-8742FD HR admin 2026-08-18). Personas present: champion, HR admin. Missing: economic buyer, IT security, finance.
Most valuable to add: economic buyer. On-file fit: CT-07FA76 (Chief People Officer, unengaged).
6. Deal-885F45 (60686135564, C-5E8EFB) — under-threaded (2 active)
Amount: not in data | Stage: not in data
Active: 2 (CT-51C81E economic buyer 2026-08-26; CT-D9A0E8 champion 2026-08-11). Personas present: economic buyer, champion. Missing: IT security, finance, HR admin.
Most valuable to add: IT security. On-file fit: CT-B3F25D (IT Security Lead, unengaged).
7. Deal-EC3025 (61032318100, C-FDD0C7) — single-threaded + under-threaded
Amount: not in data | Stage: not in data
Active: 1 (CT-047C54, champion, eng 2026-09-02). Personas present: champion. Missing: economic buyer, IT security, finance, HR admin.
Most valuable to add: economic buyer. On-file fit: CT-6827DB (Chief People Officer, unengaged). Note: the deal's attached economic buyer CT-F2C1AE is marked former (eng 2026-08-15), hence excluded.
8. Deal-50D386 (61055128146, C-EB10E4) — under-threaded (2 active)
Amount: not in data | Stage: not in data
Active: 2 (CT-AA41B2 champion 2026-09-01; CT-B9C35B HR admin 2026-08-25). Personas present: champion, HR admin. Missing: economic buyer, IT security, finance.
Most valuable to add: economic buyer. On-file fit: CT-A1C4B3 (Chief People Officer, unengaged).
9. Deal-C6D97A (62121783047, C-5A8FC2) — under-threaded (3 active, all champion)
Amount: not in data | Stage: not in data
Active: 3 (CT-223DDC 2026-08-31; CT-B03555 2026-08-20; CT-4E8A2B 2026-08-05 — all champion). Personas present: champion. Missing: economic buyer, IT security, finance, HR admin.
Most valuable to add: economic buyer. On-file fit: none on file (no row for C-5A8FC2).
10. Deal-FCBE5B (62639586615, C-737030) — single-threaded + under-threaded
Amount: not in data | Stage: not in data
Active: 1 (CT-4A5317, champion, eng 2026-08-29). Personas present: champion. Missing: economic buyer, IT security, finance, HR admin.
Most valuable to add: economic buyer. On-file fit: none on file (no row for C-737030).
11. Deal-36C33F (63739413805, C-077A0E) — single-threaded + under-threaded
Amount: not in data | Stage: not in data
Active: 1 (CT-4FE556, IT security, eng 2026-08-15). Personas present: IT security. Missing: economic buyer, champion, finance, HR admin.
Most valuable to add: economic buyer. On-file fit: CT-1DB73E (Chief People Officer, unengaged). Note: champion CT-405B45 and economic buyer CT-86B22F are both marked former, hence excluded.
PASSING (3, not flagged): Deal-4B0BEB (61038797752) — 4 active, personas {economic buyer, champion, HR admin, finance}; Deal-D348E1 (61750885954) — 5 active, all 5 personas; Deal-84DBA6 (63929535929) — 3 active, personas {economic buyer, champion, IT security}.
Data-missing summary: amount and stage missing for all 14 deals (no source file provides them). Unengaged coverage exists for 7 of the 11 flagged companies; C-E23238, C-535D36, C-5A8FC2, and C-737030 have no unengaged contacts on file.
CALL-LEAD ANALYSIS — ALEX FRANKLIN, 10 CALLS (TT-001–TT-010, 2026-07-28 to 2026-09-03) 1) WHAT HE LEADS WITH (FIRST 5 MINUTES) - 8/10 calls open with the same customer story, verbatim: "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." (TT-001 m0; identical in TT-002, -003, -005, -006, -007, -008, -010) - TT-004 opens agenda-first: "I put together a short agenda — security review first, then pricing." (m0) - TT-009 opens pricing-first: "You asked for straight pricing last time, so let's start there." (m0) - One rep-led competitor contrast inside 5 minutes (TT-005 m2, Workhuman) — noted here but excluded from the competitor list below since a prospect did not raise it. 2) TOP 3 OBJECTIONS AND HANDLING Tally: budget-locked 4 (TT-001, -003, -006, -010) + next-quarter timing 3 (TT-002, -005, -008) + spreadsheet status quo 3 (TT-004, -007, -009) = 10 objection instances across the top 3. (Below cutoff: committee waits 2 — TT-004/-010 m11; "think about it" 1 — TT-007 m14.) a. Budget locked (4/10) - "Honestly, budget is locked until next fiscal year — I can't add a new line item right now." (TT-001 m6) - Handling, identical all 4 times: "Totally fair. Most teams fund this out of turnover savings — that retailer saved about $210k in avoided backfills, which is how their finance team signed off." (TT-001 m8) b. Timing / revisit next quarter (3/10) - "This is good, but can we revisit it next quarter? Open enrollment starts in October and we're underwater." (TT-002 m6) - Handling, identical all 3 times: "Makes sense. What if we scope a 90-day pilot with one department so you have internal data before next quarter's planning?" (TT-002 m8) c. Spreadsheet status quo (3/10) - "We already do recognition with a spreadsheet and quarterly gift cards — why would we change?" (TT-004 m6) - Handling, identical all 3 times: "Spreadsheets work until they scale — the difference is automation: milestones fire without HR lifting a finger, and you get analytics on who is being recognized." (TT-004 m8) 3) NEXT-STEP RATE - Asked in 7/10: "Should we lock the next step — a working session with your team this week?" (TT-001 m14; same line in TT-002, -003, -005, -006, -008, -009) - Agreed in 7/10 → 7 ÷ 10 = 70% of all calls; 7 ÷ 7 = 100% conversion when asked. Identical acceptance each time: "Yes, Thursday at 2pm works — send the invite and I'll bring our HRIS manager." (TT-001 m15) - No next step in the other 3 calls (TT-004, -007, -010 → 0/3); on the cleanest stall he simply accepted it: "Fair enough." (TT-007 m15) 4) COMPETITORS RAISED BY PROSPECTS (complete list) - Awardco — "We're also in late talks with Awardco — their rewards catalog looks bigger than yours." (TT-003, Deal-547B2B, m4) - Kudos — "How are you different from Kudos? Our CEO used them at her last company." (TT-007, Deal-EDC141, m4) - That is all: no other prospect line names a competitor. Workhuman (TT-005 m2) was rep-raised, not prospect-raised. COACHING NOTES 1. The script wins until it runs out. Every next-step conversion (7/7) followed the rehearsed ask, but on the 3 calls where the prospect went off-script (committee, no urgency) the rep conceded with no next step at all (0/3 — TT-004, -007, -010). Coach him to attach a calendar-tied next step even to a "no" — e.g., a check-in pegged to the committee's decision date — since his ask-to-commit conversion is currently 100%. 2. Same story, same replies, zero adaptation. The 8/10 identical opener and verbatim-identical objection responses mean the talk track is doing the work; TT-003 shows the cost — the prospect raised Awardco at m4 and the rep still ran the same generic story rather than building the call around the competitive question. Vary the proof point by account, and when a competitor surfaces, anchor the whole call there instead of burying it in one line.
# Q3 2026 Forecast (quarter = 2026-07-01 → 2026-09-30; rule: 100% COMMIT + 35% BEST_CASE; PIPELINE = 0; close date must fall in-quarter) ## Counts inside the quarter (54 of 86 deals) - COMMIT: 7 deals - BEST_CASE: 24 deals - PIPELINE: 23 deals (count toward pipeline only, $0 in forecast) ## COMMIT total (in-quarter) = $44,729 11,200 (Deal-547B2B) + 9,000 (Deal-B7EBD1) + 9,000 (Deal-403845) + 6,360 (Deal-A2B47C) + 5,400 (Deal-2465CE) + 2,520 (Deal-A5E80A) + 1,249 (Deal-499BF6) = 44,729 ## BEST_CASE total (in-quarter) = $203,565 Sum of all 24 in-quarter BEST_CASE deals = 203,565 (largest: 38,935 Deal-2D7423; smallest: 528 Deal-87412C) ## Weighted forecast 44,729 × 100% = 44,729.00 203,565 × 35% = 71,247.75 Weighted forecast = 44,729.00 + 71,247.75 = **$115,976.75** ## Excluded — close date outside the quarter (32 deals, $227,575.00) - COMMIT: 1 deal, $13,770.00 (Deal-D348E1, 2026-10-15) - BEST_CASE: 9 deals, $28,240.00 (largest: Deal-C61CF7 5,400) - PIPELINE: 22 deals, $185,565.00 (largest: Deal-E51FB7 43,875) 13,770 + 28,240 + 185,565 = 227,575. All excluded deals close 2026-10-01 or later. ## Top 5 BEST_CASE deals inside the quarter 1. Deal-2D7423 — $38,935 — DS3 — 2026-09-30 2. Deal-25F752 — $24,000 — DS4 — 2026-09-25 3. Deal-E53952 — $19,656 — DS4 — 2026-09-30 4. Deal-5EED42 — $16,250 — DS3 — 2026-09-30 5. Deal-FA32A0 — $11,116 — DS3 — 2026-09-25 ## Data quality Owner is blank on 85 of 86 rows (only Deal-C9C286 has an owner), so an unattended run cannot validate commit judgments with reps or produce an owner rollup. Forecast category contradicts stage in several rows — Deal-A5E80A (DS1) and Deal-499BF6 (DS2) sit in COMMIT, Deal-6787C2 (DS4) sits in PIPELINE, and Deal-C61CF7 (DS5) sits in BEST_CASE — so the category labels driving the weighting are demonstrably unreliable. 29 of the 31 in-quarter COMMIT/BEST_CASE deals carry no buyer rationale (why_buys_chars = 0), and four in-quarter deals were already past due at the 2026-09-05 pull (Deal-31AD2C, Deal-333EBB, Deal-57FF13, Deal-7A2454), indicating stale close dates. Finally, the extract extends to 2026-10-15 (Q4), so any date-boundary error in an unattended run silently mixes next-quarter deals into the Q3 totals.
## Activation hypothesis test — plg_company_cohort_2023.csv (220 companies) **Setup.** Signals measured in first calendar month: G = m1_users >= 5 (givers), R = m1_redemptions >= 1 (redemptions). Retained at 24 months = current_status = 'active'. All 220 rows are signup 2023-01 through 2023-07, hence 25+ months old — the prompt's premise holds for every row. No duplicate company_keys; no missing or non-numeric values in m1_users or m1_redemptions. **The 2x2 (actually 2x2x2 collapsed to four cells):** | Cell | Definition | n | Retained (active) | Retention | |---|---|---|---|---| | Both signals | G and R | 47 | 31 | 31/47 = 66.0% | | Givers-only | G, not R | 49 | 23 | 23/49 = 46.9% | | Redemption-only | R, not G | 29 | 9 | 9/29 = 31.0% | | Neither | not G, not R | 95 | 38 | 38/95 = 40.0% | Cross-check: 47+49+29+95 = 220 rows; 31+23+9+38 = 101 active, matching the file's 101 active / 116 cancelled / 3 non_renewing. **Exclusions from the denominator: zero.** All 220 companies are classified; the segmentation fields are populated on every row. (Statuses 'cancelled' and 'non_renewing' are both counted as not retained; with 25+ month tenure, only 'active' means survived past 24 months.) **Largest single-signal lift: givers (m1_users >= 5).** - vs. neither baseline (40.0%): givers-only +6.9pp (46.9 − 40.0); redemption-only −9.0pp (31.0 − 40.0). - Head-to-head between the two single signals: 46.9% vs 31.0% (+15.9pp favoring givers). - Both-signals vs all companies with one-or-zero signals pooled: 66.0% vs (23+9+38)/(49+29+95) = 70/173 = 40.5%. **What this supports:** In this cohort, the combination — 5+ givers AND a successful first-month redemption — is associated with materially higher 24-month retention (66% vs ~40%), and breadth of participation (givers) is the stronger single signal; redemption volume without broad participation is not. **What this does NOT prove:** - **No causation.** These are first-month behaviors, not an intervention. Companies prone to retain may simply be the ones whose teams adopt the product early; forcing givers or redemptions would not necessarily change outcomes. - **Confounding not controlled.** Company size, plan/tier, industry, and country are unadjusted — the file's tier field is nearly collinear with status (97/100 tier_two companies are cancelled; tier_three/alpha are 101/120 active), so some of the "lift" may be segment mix, not activation. - **Selection bias in the extract.** This is one cohort (2023 signups, 220 rows); no evidence it generalizes to other vintages. - **Small cells.** n=29 (redemption-only) and n=47 (both) give wide uncertainty; a ~10pp difference is within plausible sampling noise. - **Binary outcome only.** 'active' says nothing about revenue expansion, tier movement, or health beyond survival, and current_arr_usd is current, not 24-month-ago state.
All figures computed from the two provided files only. No owner fields exist in either file — suggested owners below are functional assignments (RevOps/CS/Billing Ops), not named individuals, since no person data was provided. ## Totals (as of 2026-09-05) Rows: 39 subscriptions, 39 CRM company records. 38 aliases match; 2 cancelled subscriptions (SUB-000E, SUB-000F). - Active MRR = 51,491.48 − (408.77 + 687.77) = 51,491.48 − 1,096.54 = 50,394.94 - **Billing ARR (active subs × 12) = 50,394.94 × 12 = $604,739.28** - **CRM ARR (sum of hubspot_arr, 39 records) = $603,581.76** - **Variance (CRM − Billing) = 603,581.76 − 604,739.28 = −$1,157.52** (CRM understates billing) Definition note: cancelled subscriptions are excluded from Billing ARR; their CRM residue is captured in the status-mismatch bucket. (Including them would give 617,897.76, but then the reconciliation cannot decompose.) ## Variance decomposition (sums exactly to −1,157.52) | Bucket | Arithmetic | Amount | |---|---|---| | Status mismatch (cancelled in billing, CRM ARR still carried) | (408.77 + 687.77) × 12 = 1,096.54 × 12 | +13,158.48 | | Missing records (net) | CRM-only C-0D5BBE3A: +16,497.24; billing-only C-21629AA4: −(2,370.77 × 12) = −28,449.24 → 16,497.24 − 28,449.24 | −11,952.00 | | Rounding (CRM rounded to nearest 100) | C-0D66DF9E: 23,184.00 → 23,200.00 = +16.00; C-14D70CE0: 18,180.00 → 18,200.00 = +20.00 | +36.00 | | Other (unexplained) | C-0F7269D7: CRM 24,396.00 vs billing 2,233.00 × 12 = 26,796.00 | −2,400.00 | | **Total** | 13,158.48 − 11,952.00 + 36.00 − 2,400.00 | **−1,157.52** ✓ | The remaining 35 matched accounts reconcile exactly (MRR × 12 = hubspot_arr to the cent). ## Mismatched accounts (all 7) | Alias | Issue | Detail | Suggested owner | |---|---|---|---| | C-0C8323BF | Status mismatch | SUB-000E cancelled; CRM still carries 4,905.24 | Billing Ops — zero out CRM ARR post-cancellation | | C-0DC4FB8C | Status mismatch | SUB-000F cancelled; CRM still carries 8,253.24 | Billing Ops — zero out CRM ARR post-cancellation | | C-21629AA4 | Missing CRM record | SUB-0004 active, 2,370.77 × 12 = 28,449.24; no CRM company record | Sales Ops / CRM data steward — create and link CRM record | | C-0D5BBE3A | Missing billing record | CRM ARR 16,497.24; no subscription row | RevOps — confirm whether a subscription exists; else clear stale CRM ARR | | C-0F7269D7 | Other | CRM 24,396.00 vs billing 26,796.00; understated by exactly 2,400.00 (= 200 × 12) | Account owner + RevOps — investigate stale/incorrect CRM value | | C-0D66DF9E | Rounding | CRM 23,200.00 vs 23,184.00 (+16.00) | RevOps / CRM data steward | | C-14D70CE0 | Rounding | CRM 18,200.00 vs 18,180.00 (+20.00) | RevOps / CRM data steward | ## Term-rule violations (term ≠ 12 months must have cf_agreement_end_date) Violations (blank end date): - SUB-0002 — C-1794A52C — 24-month term — end date blank - SUB-0019 — C-22170CA1 — 36-month term — end date blank Compliant (for reference): SUB-000C (C-0DB48281, 24 mo, 2027-11-30) and SUB-001A (C-0FC4DBB8, 36 mo, 2027-11-30). All 12-month terms are out of scope of the rule.
KVMs, 2026-08 vs 2026-07 (company-level means, n=30; arithmetic: abs = Aug−Jul, rel = abs/Jul): | KVM | Aug | Jul | Abs Δ | Rel Δ | Direction | |---|---|---|---|---|---| | Giving rate | 0.6027 | 0.6023 | +0.0004 | +0.07% | ▲ (flat) | | Redemptions/user | 1.7302 | 1.7300 | +0.0002 | +0.01% | ▲ (flat) | | 1:1 engagement | 0.4472 | 0.4469 | +0.0003 | +0.06% | ▲ (flat) | | Pulse engagement | 0.5086 | 0.6006 | −0.0920 | −15.31% | ▼ | Largest relative move: pulse engagement, −15.31%. The data supports a driver: the enterprise size_band, where pulse fell 0.5500 → 0.2743 (−50.13%); every enterprise account dropped ~49–51% (e.g., C-0D0B047C 0.5398→0.2619, C-0BA71F12 0.5588→0.2723). SMB (−0.22%) and mid-market (+0.21%) were stable, so the enterprise decline fully accounts for the overall move. Plan_tier cannot differentiate — all rows are tier_three. Caveat: the enterprise drop (~0.55→~0.28 across all 10) is uniform enough to suggest a measurement or data-collection change rather than organic decline; the file provides no way to verify.
Redemption section — YTD through the last completed month **Last completed month: 2026-08 (August 2026).** Data window: 2026-01-01 through 2026-08-31. All 378 rows in redemptions_ytd.csv fall inside this window (no September records present), so the file is used in full. **Headline metrics** - Redemption count: 378 - Spend: $27,846.00 (sum of amount_usd over all 378 rows) - Unique redeemers: 235 (distinct user_key, deduplicated YTD — not the sum of monthly counts) - Redemptions per redeemer: 378 ÷ 235 = 1.61 **Provider mix — % of spend** (roster discovered from the data; no Other bucket) | Provider | Spend | Redemptions | Share of spend | |---|---|---|---| | custom | $10,873.00 | 37 | 39.05% | | Tremendous | $8,505.00 | 192 | 30.54% | | Snappy | $5,238.00 | 59 | 18.81% | | TangoCard | $3,230.00 | 90 | 11.60% | | **Total** | **$27,846.00** | **378** | **100.00%** | Shares: each provider's spend ÷ $27,846.00; they sum to exactly 100.00%. custom is only 9.8% of redemptions (37/378) but 39.1% of spend — avg $293.87/redemption vs $25 or less across the three card providers. **Top 5 countries by redemptions** | Rank | Country | Redemptions | |---|---|---| | 1 | US | 244 | | 2 | CA | 24 | | 3 | AU | 21 | | 4 (tie) | GB | 17 | | 4 (tie) | NL | 17 | GB and NL tie at 17; next country is SG at 12, so the 5th slot is shared. Data notes: amount_usd used as-is (already USD); no duplicate redemption_ids; no missing values in any column used.
R3 window: snapshot 2026-09-05 + 120 days = 2027-01-03. An account qualifies only if ALL three rules pass: R1 (health < 60), R2 (eligible amount > 0), R3 (renewal within 120 days). QUALIFYING ACCOUNTS — 8 accounts, $224,601 at stake (churn_save_eligible_amount sums, shown in renewal-date order): 1. C-0B0F1BAB — $5,494.00. HS 38, renews 2026-09-23 (18d). Usage flat, utilization 238/363 = 65.6%, no champion. 2. C-0E9C27D1 — $41,235.00. HS 39, renews 2026-09-24 (19d). Usage flat, utilization 134/157 = 85.4%, champion active. 3. C-0F6C0F34 — $49,707.00. HS 51, renews 2026-10-03 (28d). Usage growing, utilization 308/395 = 78.0%, no champion. 4. C-0B360C78 — $35,748.00. HS 57, renews 2026-10-28 (53d). Usage growing, utilization 246/327 = 75.2%, champion active. 5. C-0D3278C7 — $17,602.00. HS 54, renews 2026-11-12 (68d). Usage declining, utilization 126/380 = 33.2%, champion active. 6. C-0B827671 — $25,365.00. HS 56, renews 2026-11-14 (70d). Usage declining, utilization 113/202 = 55.9%, champion active. 7. C-0CEF69FD — $32,621.00. HS 53, renews 2026-11-21 (77d). Usage growing, utilization 97/136 = 71.3%, no champion. 8. C-0CA21961 — $16,829.00. HS 58, renews 2026-12-28 (114d). Usage flat, utilization 84/325 = 25.8%, champion active. Total arithmetic: 5,494 + 41,235 + 49,707 + 35,748 + 17,602 + 25,365 + 32,621 + 16,829 = $224,601.00. Total ARR of these 8: 15,391 + 75,093 + 86,741 + 60,427 + 33,815 + 72,088 + 79,324 + 31,501 = $454,380.00. Eligible amount is 49.4% of that ARR (224,601 / 454,380). PLAY ASSIGNMENT — the rules file covers eligibility only; the play mapping below is my explicit logic from the provided signals (usage_trend_3m, seat utilization, champion_active, renewal timing): USAGE REVIVAL — signal: declining usage or severely low seat utilization; adoption problem to fix before money is discussed. - C-0D3278C7 ($17,602): declining trend + only 33.2% of seats used (126/380). Widest adoption gap in the cohort. - C-0B827671 ($25,365): declining trend + 55.9% utilization (113/202). - C-0CA21961 ($16,829): flat usage but 25.8% utilization (84/325) — 241 paid seats idle. Renewal is 114d out, so there is runway for an adoption play to move the health score before the renewal. EXECUTIVE TOUCH — signal: usage is healthy (growing) and utilization is fine, but champion_active = false; relationship/coverage gap, not a product gap. - C-0F6C0F34 ($49,707): growing usage, 78.0% utilization, but no active champion. Largest single exposure in the cohort. - C-0CEF69FD ($32,621): growing usage, 71.3% utilization, no active champion. COMMERCIAL CONCESSION — signal: usage stable/growing with solid utilization and champion in place (no product or coverage problem), health score low + near-term renewal; win on price/terms. - C-0E9C27D1 ($41,235): flat usage, 85.4% utilization, champion active, renewal in 19 days — too late to run an adoption program; competitive-renewal save. - C-0B0F1BAB ($5,494): flat usage, 65.6% utilization, renewal in 18 days. Caveat: no active champion, so the commercial play should be paired with an executive touch — there is no relationship thread on record. - C-0B360C78 ($35,748): growing usage, 75.2% utilization, champion active; 53 days to renewal — commercial package. Play subtotals: revival 17,602 + 25,365 + 16,829 = $59,796 (3 accounts); exec touch 49,707 + 32,621 = $82,328 (2); commercial 41,235 + 5,494 + 35,748 = $82,477 (3). Check: 59,796 + 82,328 + 82,477 = 224,601. AT-RISK BUT NOT QUALIFYING — 7 accounts fail at least one rule: - C-0BC71BDD (HS 55, renews 2026-10-27, 52d): eligible amount $0.00 — fails R2. Heavy risk signal though: 29.9% utilization (59/197), no champion. - C-0BE96399 (HS 54, renews 2026-10-29, 54d): fails R2 ($0.00). Declining usage, 27.9% utilization. - C-10A56B0F (HS 54, renews 2026-12-12, 98d): fails R2 ($0.00). Declining usage, 48.3% utilization. - C-0F6694C3 (HS 43, renews 2027-03-21): fails R2 ($0.00) and R3 (197d out). - C-0FCCD2DF (HS 43, renews 2027-04-23): fails R2 ($0.00) and R3 (230d out). - C-0BA71F12 (HS 52): fails R3 only — eligible amount is $6,824.00 but renewal is 218d out (2027-04-11), beyond the 2027-01-03 cutoff. Note the waste signal: 23/98 seats used (23.5%) with declining usage. - C-0F876796 (HS 47): fails R3 only — $19,958.00 eligible but renewal is 154d out (2027-02-06). Utilization 22/95 = 23.2%, declining, no champion; revisit once inside the window. The remaining 15 accounts have health scores 62–88 and are not at risk under R1.
EXPANSION KIT — C-0DDFC9A7 1) SEAT COVERAGE 150 licensed / 400 headcount = 37.5% coverage (150 ÷ 400). 2) USAGE HEALTH (two lines) - Growth: monthly active users 88 (Mar 2026) → 126 (Aug 2026). +38 over 5 months = +43.2%; steady +7–8 net new actives/month (deltas: 7, 7, 8, 8, 8). No dips. - Utilization: 126 actives against 150 licensed seats = 84% utilization; 24 licensed seats currently unused (150 − 126). 3) HEADROOM - Seats: 400 − 150 = 250 unlicensed employees. - Rate: $9,000 ARR ÷ 150 seats = $60/seat/year ($5/seat/month). - ARR headroom at current rate: 250 × $60 = $15,000 incremental → full-coverage ARR $24,000 = 2.67× today's ARR. - Caveat: at current growth (+7–8/month), the 24 unused seats buy ~3 months before actives hit the 150 cap. 4) WHO REPLIED — CAN THEY BUY? Maria S., People Operations Coordinator (contact record last-engaged 2026-09-02 matches the reply date). She cannot buy: reply states explicitly, "I'm not the right person for purchasing decisions here." She is a strong champion — offers to introduce the buyer and notes "she's been asking about our usage numbers lately." 5) RIGHT BUYER Dana R., VP People — named in the reply as owner of "budget and seat expansion," and already in our contacts (last engaged 2026-05-18, ~3.5 months stale; worth re-warming via Maria's intro rather than cold). Sam K., Office Manager (last engaged 2025-11-03) is not relevant to this motion. 6) REPLY EMAIL (93 words) Subject: RE: Growing your team's recognition program Hi Maria, Great to hear the team loves Bonusly — and thanks for flagging the right path. One number for the intro: your monthly active users have climbed from 88 in March to 126 in August, about 43% growth, still rising every month. Since budget and seat expansion sit with Dana, yes — an introduction would be great. Happy to send a short note she can forward, or jump on a quick call whenever suits her. Your call on format. Thanks for being such a strong internal advocate. Best, Cole Ingram Note: per-seat rate is derived from ARR ÷ seats; if Bonusly prices this account on a different tier schedule, the $60/seat headroom math would change. No other data gaps.
Prep for mid-onboarding call — ACCOUNT C-0D284E42 (signup 2026-08-11; latest usage data 2026-09-04, i.e. day 24). ONBOARDING CHECKLIST — COMPLETE (field shows it) - Slack integration: connected 2026-08-12 (integration_slack). Signup +1 day. - Allowance set: 2026-08-13 (allowance_set). Signup +2 days. - Admins added: 2 (admins_added = 2). Note: the field shows a count of 2, but no field shows the intended total, so I cannot confirm "all admins added" — only "2 added." - First recognition given: 2026-08-15 14:22 (first_recognition_at). Signup +4 days. ONBOARDING CHECKLIST — NOT COMPLETE (field is empty) - HRIS integration: integration_hris is blank. No connection recorded. - First redemption: first_redemption_at is blank. Zero redemptions recorded as of 2026-09-04 — 24 days post-signup (2026-09-04 minus 2026-08-11 = 24 days). EARLY ENGAGEMENT SIGNALS (onboarding_usage.csv, active_givers) - No zero-activity days: all 25 days (08-11 to 09-04) have 3 or more active givers. Min 3 (08-11), max 15 (09-03 and 09-04). - Weekly averages (sum / days): W1 08-11..08-17: 3+3+4+4+5+4+7 = 30 -> 30/7 = 4.3/day W2 08-18..08-24: 5+7+6+9+8+9+9 = 53 -> 53/7 = 7.6/day W3 08-25..08-31: 9+11+10+10+11+13+11 = 75 -> 75/7 = 10.7/day W4 09-01..09-04: 13+13+15+15 = 56 -> 56/4 = 14.0/day (partial week, 4 days only — don't compare totals) - Growth: last day vs first day = 15/3 = 5.0x. Full week W3 vs W1 = 75/30 = 2.5x. - Stability: 6 down-days out of 23 day-over-day transitions; largest drop is -2 givers (08-18: 7->5 and 08-31: 13->11). Momentum is positive at call time — the two highest days are the last two. - Data oddity, flagged not explained: usage shows 3 active givers on signup day 08-11, one day before Slack connected (08-12) and two days before allowance set (08-13). The files don't say why. - Missing data — cannot compute: total seats/employee count (so % of org giving is unknown), recognition volume (only giver counts, not number of recognitions), any redemption/spend activity beyond the timestamp field, and the target number of admins. THREE THINGS TO COVER ON THE CALL 1. HRIS integration — still unconnected 24 days in (field blank). Ask what is blocking, agree a connect date. 2. First redemption — zero recorded in 24 days. Walk through the rewards catalog and redemption flow live on the call; set a target date for the first redemption. 3. Admin coverage — data shows 2 admins added, but nothing shows whether that is the full intended roster. Confirm whether more admins are needed. One reinforcement point: giving breadth is scaling well (4.3 -> 14.0 avg daily givers, 5x first-to-last day) — worth naming as a win while working the two gaps above.
# 90-DAY RENEWAL RISK BRIEF — as of 2026-08-31 Basis: latest usage month is 2026-08, so the report date is 2026-08-31 and the 90-day window is 2026-09-01 through 2026-11-29. All 20 renewals fall inside the window under the dates used below. ## Date trust rule (applied to every account) Where Chargebee flags is_multi_year=true, ChurnZero renewal dates are known-unreliable, so Chargebee is used. For the 15 accounts with no multi-year flag, ChurnZero and Chargebee dates are identical, so the date is used from either source. No account required a judgment call beyond this rule. ## Renewal table (sorted by date used; util = seats_used/seats; 3-mo trend = 2026-06 to 2026-08 active users) ``` Account CSM ARR($) Date used Src Util 3-mo usage Risk C-0B7D2C30 Dana Mercer 65,901 2026-09-15 CB≠CZ 57.6% (274/476) 97->84 -13.4% HIGH C-0BCDB8C2 Cole Ingram 54,427 2026-09-18 CB≠CZ 54.7% (232/424) 127->110 -13.4% HIGH C-0D2AB865 Elena Sinclair 38,022 2026-09-22 CB≠CZ 61.4% (250/407) 125->109 -12.8% HIGH C-0BBE3E60 Dana Mercer 30,993 2026-09-26 CB≠CZ 64.9% (74/114) 39->33 -15.4% HIGH C-0F5D2323 Cole Ingram 90,647 2026-09-29 CB≠CZ 28.5% (111/390) 20->18 -10.0% HIGH C-0EC6999D Elena Sinclair 79,419 2026-10-03 match 27.7% (31/112) 17->15 -11.8% HIGH C-0B20DB64 Dana Mercer 21,770 2026-10-07 match 56.6% (214/378) 294->294 0.0% MEDIUM C-0BBC4E7A Cole Ingram 56,374 2026-10-10 match 67.7% (228/337) 142->139 -2.1% MEDIUM C-0FD551AB Elena Sinclair 48,815 2026-10-14 match 55.9% (210/376) 123->126 +2.4% MEDIUM C-0F9F8F13 Dana Mercer 46,230 2026-10-18 match 56.5% (199/352) 185->182 -1.6% MEDIUM C-0BC34584 Cole Ingram 16,740 2026-10-22 match 66.2% (327/494) 104->106 +1.9% LOW C-0B7A7546 Elena Sinclair 35,062 2026-10-25 match 88.8% (182/205) 64->63 -1.6% LOW C-0B369871 Dana Mercer 85,128 2026-10-29 match 75.1% (317/422) 326->333 +2.1% LOW C-0B144C78 Cole Ingram 30,899 2026-11-02 match 75.4% (169/224) 101->106 +5.0% LOW C-0FC4DBB8 Elena Sinclair 94,732 2026-11-05 match 76.7% (356/464) 189->193 +2.1% LOW C-0D5BBE3A Dana Mercer 39,740 2026-11-09 match 83.3% (85/102) 88->91 +3.4% LOW C-0FB9D5AF Cole Ingram 63,158 2026-11-13 match 72.4% (144/199) 173->176 +1.7% LOW C-0B344485 Elena Sinclair 64,384 2026-11-16 match 78.0% (224/287) 238->244 +2.5% LOW C-0CB2C1B4 Dana Mercer 40,628 2026-11-20 match 81.6% (386/473) 47->49 +4.3% LOW C-22170CA1 Cole Ingram 45,646 2026-11-24 match 85.4% (251/294) 143->146 +2.1% LOW ``` ## Risk rubric (defined for this brief; applied mechanically) - HIGH: seat utilization <50%, or 3-month usage decline ≥10%. - MEDIUM: not HIGH, and (utilization 50–60%, or 3-month usage declining while 12-month usage is flat or down). - LOW: utilization ≥60% and usage flat or growing (3-mo and 12-mo), aside from trivial ≤2% wiggles against a positive 12-month trend. ## Evidence (one sentence per account) - C-0B7D2C30: Usage fell 13.4% in 3 months (97→84) and 45.8% over 12 months (155→84) on 57.6% seat utilization — steep and sustained. - C-0BCDB8C2: Usage down 13.4% in 3 months (127→110) and 45.0% over 12 (200→110) with only 54.7% of seats used. - C-0D2AB865: Usage down 12.8% in 3 months (125→109) and 45.2% over 12 (199→109); at 61.4% utilization the decline alone drives the rating. - C-0BBE3E60: Usage down 15.4% in 3 months (39→33) and 47.6% over 12 (63→33) — the worst 12-month decline in the cohort. - C-0F5D2323: Only 111 of 390 seats in use (28.5%) — deep shelfware — with usage also down 10.0% over 3 months (20→18). - C-0EC6999D: Only 31 of 112 seats in use (27.7%) and usage down 11.8% over 3 months (17→15), despite flat 12-month usage (15→15). - C-0B20DB64: Utilization is 56.6% (214/378) with usage flat (294→294, 0.0% over 3 months and 293→294 over 12). - C-0BBC4E7A: Usage has drifted down 2.1% over both 3 months (142→139) and 12 months (142→139) at 67.7% utilization. - C-0FD551AB: Utilization is only 55.9% (210/376) despite modest usage growth (+2.4%, 123→126). - C-0F9F8F13: Utilization is only 56.5% (199/352) with essentially flat usage (185→182 over 3 months; 182→182 over 12). - C-0BC34584: Utilization 66.2% with usage up 1.9% over 3 months (104→106) and 2.9% over 12 (103→106). - C-0B7A7546: Utilization 88.8% and usage up 8.6% over 12 months (58→63); the 1-seat 3-month dip (64→63, −1.6%) is trivial against that growth. - C-0B369871: Utilization 75.1% with usage up 2.1% over 3 months (326→333) and 15.2% over 12 (289→333). - C-0B144C78: Utilization 75.4% with usage up 5.0% over 3 months (101→106) and 17.8% over 12 (90→106). - C-0FC4DBB8: Utilization 76.7% with usage up 2.1% over 3 months (189→193) and 14.9% over 12 (168→193). - C-0D5BBE3A: Utilization 83.3% with usage up 3.4% over 3 months (88→91) and 19.7% over 12 (76→91). - C-0FB9D5AF: Utilization 72.4% with usage up 1.7% over 3 months (173→176) and 14.3% over 12 (154→176). - C-0B344485: Utilization 78.0% with usage up 2.5% over 3 months (238→244) and 15.6% over 12 (211→244). - C-0CB2C1B4: Utilization 81.6% with usage up 4.3% over 3 months (47→49) and 14.0% over 12 (43→49). - C-22170CA1: Utilization 85.4% with usage up 2.1% over 3 months (143→146) and 12.3% over 12 (130→146). ## Date disagreements (5 of 20 — all multi-year per Chargebee; ChurnZero treated as wrong per known issue) - C-0B7D2C30: CZ 2026-09-10 vs CB 2026-09-15 (Δ5 days; 36-mo term) → used CB 2026-09-15. - C-0BCDB8C2: CZ 2027-09-18 vs CB 2026-09-18 (CZ a full year late; 36-mo term) → used CB 2026-09-18. - C-0D2AB865: CZ 2026-09-10 vs CB 2026-09-22 (Δ12 days; 24-mo term) → used CB 2026-09-22. - C-0BBE3E60: CZ 2027-09-26 vs CB 2026-09-26 (CZ a full year late; 24-mo term) → used CB 2026-09-26. - C-0F5D2323: CZ 2026-09-10 vs CB 2026-09-29 (Δ19 days; 24-mo term) → used CB 2026-09-29. Materiality: trusting CZ for C-0BCDB8C2 and C-0BBE3E60 would push $85,420 of renewals out of this 90-day window entirely (into 2027), and the other three would be misdated 5–19 days early. All 15 non-multi-year accounts agree exactly between systems — no flags. ## Totals (arithmetic) - Total ARR renewing in window: 65,901+54,427+38,022+30,993+90,647+79,419+21,770+56,374+48,815+46,230+16,740+35,062+85,128+30,899+94,732+39,740+63,158+64,384+40,628+45,646 = $1,048,715 across 20 accounts. - ARR at risk (High + Medium): 65,901+54,427+38,022+30,993+90,647+79,419 (High = $359,409) + 21,770+56,374+48,815+46,230 (Medium = $173,189) = $532,598, i.e. 532,598/1,048,715 = 50.8% of renewing ARR (High alone = 34.3%). - Low-risk remainder: $516,117 (49.2%). ## Data gaps - No as-of date is provided for the seats/seats_used snapshot in ChurnZero; utilization is treated as current. - No renewal outcomes, health scores, support, or sponsorship data was provided — ratings rest solely on utilization, usage trend, and the date-discrepancy rule.
Read all 80 ticket bodies and clustered by text; the existing tags are unreliable (only 3 of the 16 invoice tickets are tagged "billing"; an HRIS ticket is tagged "how-to", a missing-points ticket "feedback"). 6 themes emerge, covering all 80 tickets. Total book: 24 distinct accounts, $284,800 ARR. Ranked by ARR exposure (share of book = theme ARR / 284,800): 1. HRIS provisioning failures — BROAD 12 tickets, 15.0% (12/80) | 3 accounts | $114,000 ARR, 40.0% of book (48,000+36,000+30,000) Accounts: C-0DDFC9A7 ($48,000, 3 tkts), C-0B2213A9 ($36,000, 7 tkts — unresolved since Jun 16), C-0F6C0F34 ($30,000, 2 tkts) Tickets: IC-460060, IC-460062 Rec: Escalate as a product incident with named owner this week; two of the three accounts are your largest ARR in the file and C-0B2213A9 has filed 7 times without resolution. 2. Invoicing/seat-count disputes — SINGLE-ACCOUNT 16 tickets, 20.0% (16/80) | 1 account | $52,000 ARR, 18.3% of book Account: C-0E9C27D1 exclusively ($52,000), 16 tickets Jun 16–Aug 29: seat-count error (IC-460071), charged 200 vs 150 seats (IC-460069), unapproved seat count (IC-460070), wrong renewal tier (IC-460078) Rec: Not a broad pattern — this is one enterprise account with an unresolved billing dispute and likely overcharge; assign an executive sponsor and issue a corrected invoice / credit decision within days. 3. Redemption checkout failures — BROAD 13 tickets, 16.3% (13/80) | 5 accounts | $48,900 ARR, 17.2% of book (11,000+10,700+9,600+8,900+8,700) Accounts: C-14264ABD ($11,000, 3 tkts), C-0B827671 ($10,700, 4 tkts), C-0FCCD2DF ($9,600, 1), C-0CEF69FD ($8,900, 3), C-0F876796 ($8,700, 2) Tickets: IC-460025, IC-460038 Rec: Reproduce the checkout/gift-card-email failure path in staging; it spans 5 mid-size accounts and blocks the core reward moment. 4. Redemption charged but not delivered — BROAD, small-N 5 tickets, 6.3% (5/80) | 4 accounts | $38,200 ARR, 13.4% of book (10,300+9,600+9,600+8,700) Accounts: C-0B0F1BAB ($10,300, 1 tkt), C-0FCCD2DF ($9,600, 2), C-0D9CA315 ($9,600, 1), C-0F876796 ($8,700, 1) Tickets: IC-460024, IC-460037 Rec: Highest-severity per ticket — points deducted with no reward delivered is a refund/trust issue; audit the charge-then-fail order state and auto-credit affected balances. 5. Points not posting to balances — BROAD, low ARR 20 tickets, 25.0% (20/80) | 9 accounts | $31,100 ARR, 10.9% of book (4,500+4,500+4,200+3,500+3,400+2,900+2,900+2,700+2,500) Accounts: C-0BF20542, C-0D0B047C, C-0D6CC8E3, C-0D3278C7, C-0D284E42, C-21FEBCBB, C-0B2895EF, C-0BE96399, C-0DD0626C Tickets: IC-460004, IC-460001 Rec: Largest by volume but smallest accounts — run a balance-reconciliation batch job to find and fix stuck point postings, then monitor rather than escalate. 6. Slack integration breakage — BROAD 14 tickets, 17.5% (14/80) | 4 accounts | $18,900 ARR, 6.6% of book (5,400+5,200+4,400+3,900) Accounts: C-10A56B0F ($5,400, 4 tkts), C-8C2E8F00 ($5,200, 1), C-0B843542 ($4,400, 3), C-0BA71F12 ($3,900, 6 tkts) Tickets: IC-460047, IC-460046 Rec: Fix the OAuth token refresh (re-auth not sticking, sync toggle resetting) — persistent reconnection churn across 4 accounts signals a token-expiry bug, not user error. Notes: Theme ARR totals 106% of book because C-0FCCD2DF and C-0F876796 filed under both redemption themes (deduplicated within each theme). Tags ignored throughout per instruction; clusters are body-text exact. Themes 1–4 = 62.5% of ticket volume but 88.9% of theme ARR ($253,100 of $284,800) — prioritize by that order, not ticket count.
**Prospect C-82AF3719:** Technology, Mid-Market, employee_recognition, NA-West **Step 1 — Case-study filter.** 8 of 25 customers have has_case_study=true: C-FEFCC020, C-11209339, C-9D69D147, C-11C31562, C-CD4829A7, C-0CE315B2, C-64171065, C-A13C193D. All other customers excluded regardless of fit. **Step 2 — Similarity score.** 1 point per matching field (industry, size_band, use_case, region; max 4): | Alias | Industry | Size | Use case | Region | Score | |---|---|---|---|---|---| | C-FEFCC020 (Education/Enterprise/wellness/NA-East) | 0 | 0 | 0 | 0 | 0 | | C-11209339 (Manufacturing/SMB/peer_milestones/APAC) | 0 | 0 | 0 | 0 | 0 | | C-9D69D147 (FS/Mid-Market/retention/NA-West) | 0 | 1 | 0 | 1 | 2 | | C-11C31562 (Manufacturing/Mid-Market/employee_recognition/NA-West) | 0 | 1 | 1 | 1 | 3 | | C-CD4829A7 (Technology/Mid-Market/retention/NA-East) | 1 | 1 | 0 | 0 | 2 | | C-0CE315B2 (Education/SMB/wellness/EMEA) | 0 | 0 | 0 | 0 | 0 | | C-64171065 (Technology/Mid-Market/employee_recognition/NA-East) | 1 | 1 | 1 | 0 | 3 | | C-A13C193D (Technology/Mid-Market/retention/NA-West) | 1 | 1 | 0 | 1 | 3 | **Step 3 — Tie-break.** Three candidates tie at 3/4. Applying explicit weights — use_case 3, industry 2, size_band 2, region 1 (use case weighted highest because it is what the case study demonstrates): - C-64171065: recognition(3) + Technology(2) + Mid-Market(2) + region miss(0) = **7** - C-11C31562: recognition(3) + industry miss(0) + Mid-Market(2) + NA-West(1) = **6** - C-A13C193D: use-case miss(0) + Technology(2) + Mid-Market(2) + NA-West(1) = **5** **Ranked three (all has_case_study=true):** 1. **C-64171065** — matched on industry (Technology), size_band (Mid-Market), use_case (employee_recognition); differs on region (NA-East vs NA-West). Weighted 7. 2. **C-11C31562** — matched on use_case (employee_recognition), size_band (Mid-Market), region (NA-West); differs on industry (Manufacturing). Weighted 6. 3. **C-A13C193D** — matched on industry (Technology), size_band (Mid-Market), region (NA-West); differs on use_case (retention vs employee_recognition). Weighted 5. Note: no prospect industry sub-vertical, employee count, or geography detail beyond the four fields was provided, so scoring uses only those fields. No customer lacking a case study is named, and no billing or contact data appears in the source files.
# Channel Performance — Trailing 6 Months (2026-03 → 2026-08) Scope note: both files span exactly 2026-03→2026-08; all 122 contacts have SQM dates in-window (2026-03-01→2026-08-28), so no rows excluded. Paid channels = the 4 with spend rows. "Volume" for organic = first-touch SQM count from this file only (no site-traffic data provided). ## Paid channels ``` channel spend SQMs SQOs $/SQM $/SQO SQM→SQO pipeline pipeline/$ paid_search 36,000 40 18 900 2,000 45.0% 720,000 20.0 linkedin_ads 24,000 25 8 960 3,000 32.0% 96,000 4.0 paid_social 18,000 0 0 undef. undef. undef. 0 0.0 webinars 9,000 12 5 750 1,800 41.7% 60,000 6.7 ``` Arithmetic: - paid_search: spend 6,000×6=36,000; $/SQM 36,000/40=900; $/SQO 36,000/18=2,000; rate 18/40=45.0%; pipeline 18×40,000=720,000; pipeline/$ 720,000/36,000=20.0 - linkedin_ads: spend 4,000×6=24,000; $/SQM 24,000/25=960; $/SQO 24,000/8=3,000; rate 8/25=32.0%; pipeline 8×12,000=96,000; pipeline/$ 96,000/24,000=4.0 - paid_social: spend 3,000×6=18,000; zero SQMs in first-touch file → $/SQM, $/SQO, and rate are undefined per instruction. Pipeline is a true 0 (no contacts at all), so pipeline/$ = 0/18,000 = 0.0 - webinars: spend 1,500×6=9,000; $/SQM 9,000/12=750; $/SQO 9,000/5=1,800; rate 5/12=41.7%; pipeline 5×12,000=60,000; pipeline/$ 60,000/9,000=6.7 ## Organic channels ``` channel volume SQOs SQO rate pipeline organic_search 30 10 33.3% 90,000 referral 15 6 40.0% 48,000 ``` Arithmetic: organic_search 10/30=33.3%, 10×9,000=90,000; referral 6/15=40.0%, 6×8,000=48,000. Totals check: 40+25+0+12+30+15 = 122 contacts; 18+8+0+5+10+6 = 47 SQOs; pipeline 720,000+96,000+60,000+90,000+48,000 = 1,014,000; paid spend 36,000+24,000+18,000+9,000 = 87,000. ## Data flags (SQO date precedes SQM date) ``` contact channel SQM date SQO date delta pipeline CT-000041 linkedin_ads 2026-06-14 2026-06-09 −5 days 12,000 CT-000044 linkedin_ads 2026-07-23 2026-07-18 −5 days 12,000 ``` Both are linkedin_ads: 2 of its 8 SQOs (25%) and 24,000 of its 96,000 pipeline. Treating them as attribution defects, linkedin's clean view is 6 SQOs, $/SQO 24,000/6=4,000, rate 6/25=24.0%, pipeline 72,000, pipeline/$ 3.0. (CT-000007 has SQO=SQM same day — not flagged.) ## Reallocation recommendation 1. Pause paid_social ($3,000/mo, $18,000 to date). It produced zero first-touch SQMs — not zero conversions, zero contacts — so it's either broken tracking or dead targeting. This is the only unambiguous call; audit before any further spend. 2. Redeploy the ~$3,000/mo: ~$2,000 to paid_search (proven at scale: 45% SQM→SQO, $2,000/SQO, $20 pipeline/$) and ~$1,000 to webinars as a scale test (best unit economics after paid_search at $1,800/SQO and $6.7 pipeline/$, but only n=12). 3. Hold linkedin_ads flat until the date-integrity defect is fixed; on clean numbers it is the weakest funded channel ($4,000/SQO, 24%). 4. No spend lever exists on organic/referral, but referral converts at 40% — the cheapest incremental pipeline is referral-program ops, not paid media. ## Confidence - paid_social = zero: high confidence in the finding as given (n=0 against $18,000 spent); the gap is real in this data whether it's tracking failure or performance failure — either way there is no evidence of return. - paid_search leadership: moderate-high (n=40 SQMs / 18 SQOs; 95% CI on 45% ≈ 31–60% — best-attested channel but not statistically separated from webinars/referral point estimates). - webinars > linkedin: low-moderate. Webinars 5/12 has a 95% CI of roughly 19–68%, which overlaps linkedin's 17–52% — treat that ranking as directional, not proven. - linkedin's weakness: moderate, further weakened because cleaning the 2 flagged rows cuts its SQO sample from 8 to 6. - Right-censoring: 19 of 122 SQMs have August SQM dates and have had <1 month to convert; all channels' conversion rates are slightly understated for late cohorts. Net: confident enough to kill paid_social and shift its budget toward paid_search; not confident enough to rank webinars vs linkedin on 5–8 SQO samples — hence the split test rather than a wholesale move.
BATTLECARD: RIVALLY (updated 2026-09-25, from provided files only) ONE-LINE POSITIONING Points-based recognition platform (S02) strong with EU/distributed teams (S12, S15) that wins on engagement feed and support (S02, S16, S22) but trails on analytics depth and admin/IT tooling (S02, S07, S10, S16, S20, S24); list price now $7/user/mo (S17). PRICING (newest source wins) - Current list: $7 per user/month, Recognition Starter, annual billing required — pricing page 2026-08-12 (S17). Corroborated by prospect-reported quote: "$7/user/mo list" 2026-08-14 (S18). - Conflict with old card: old card said $5/user/mo annual "as of 2026-01" (re-sourced: S03 2026-01-20; still $5 on 2026-04-01, S08). S17 (2026-08-12) is newer and wins: price increased $5 → $7 between 2026-04-01 and 2026-08-12. - Discount data (prospect-reported, not rep opinion): 15% off for 3-year term (S18). Arithmetic: $7 × 0.85 = $5.95/user/mo effective on a 3-year term. - Unresolved deal quote: $6.50/user/mo to a 500-seat prospect, annual term, 2026-06-02 (S13). This sits between S08 ($5 list) and S17 ($7 list); whether it reflects a different tier, region, or negotiated discount cannot be determined from the data. Superseded by S17 for list pricing regardless. WHERE THEY WIN - EU enterprise / distributed teams: multi-language support praised by EU enterprise reviewer (S12); EU data residency pitched in a live deal (S05) and generally available since 2026-07-01 alongside a Dublin office (S15); dedicated EMEA expansion hire, ex-Workday VP EMEA (S11). - Fast setup and Slack: setup under a week, Slack integration "worked out of the box" per mid-market reviewer (S04). (This directly contradicts the old card's Slack claim — see verification section.) - Engaging recognition feed (S02, S16). - Support responsiveness: response time under 4 hours (S22). WHERE WE WIN - Analytics depth — the only deal-level win reason in the data: an 800-seat prospect picked Bonusly over Rivally citing analytics depth, 2026-09-03 (S25). Consistent with their product gaps: "limited analytics" (S02), "reporting dashboards are basic compared to enterprise tools" (S07), CSV-only analytics exports making exit painful (S20). - Exploitable gaps (their weaknesses; note: no provided snippet shows Bonusly winning a deal on these specifically — treat as discovery angles, not proven win reasons): no SCIM provisioning (S10), no bulk recognition editing (S24), admin tooling "lags peers" (S16), EMEA rewards catalog thinner than US catalog (S14). OBJECTIONS AND RESPONSES 1. "Rivally is cheaper." Response: their list rose to $7/user/mo annual in Aug 2026 (S17); discounts exist but are term-locked — 15% off requires 3-year commitment, effective $5.95/user/mo (S18, arithmetic above); a June 500-seat quote was $6.50 (S13). Gap: no Bonusly pricing is present in the provided data — do not make a price comparison without sourcing it internally. 2. "Rivally has EU data residency and is better for EU teams." (S05, S12, S15) Response: no Bonusly EU data residency or EU infrastructure claim exists in the provided data — cannot source a rebuttal; escalate to product/legal before competing on this point. 3. "Rivally is fast to set up and Slack just works." (S04) Response: no Bonusly setup-time data provided — do not counter with unverified claims. 4. "Rivally support answers in under 4 hours." (S22) Response: no Bonusly support SLA data provided. 5. When Rivally is in the deal (our counter-play, sourced): lead with analytics depth (S25 win evidence; their gaps S02, S07, S20); probe IT/admin requirements to surface SCIM and bulk-edit gaps (S10, S24, S16); in EMEA, probe rewards catalog breadth (S14); note their CSV-only exports raise switching costs (S20) — position this as future flexibility, with sourcing. RECENT CHANGES (newest first) - 2026-09-01: Rivally Pulse add-on exits beta; sold as a paid add-on, not bundled (S23; first launched 2026-03-05, S06). - 2026-08-20: Microsoft Teams app v2 enters public preview (S19) — preview status, not proven adoption. - 2026-08-12: Recognition Starter price $5 → $7/user/mo, annual billing required (S17; prior list $5 at S03, S08). - 2026-08-14: prospect-reported 15% discount for 3-year term (S18). - 2026-07-01: Dublin office opened; EU data residency generally available (S15). - 2026-05-09: ex-Workday VP EMEA hired to lead European expansion (S11). - Excluded from this card: S09 (AE opinion on UI, self-flagged unverified) and S21 (AE opinion on discounting, self-flagged unconfirmed) — rep opinions are not competitor facts per card rules. OUR 12-MONTH WIN/LOSS RECORD VS RIVALLY (window: deal months 2025-09 through 2026-08, from deals_with_competitor.csv) - Total: 20 deals with Rivally — 13 wins, 7 losses. Win rate: 13/20 = 65%. - Monthly tally (W-L): - 2025-09: 1-1 (W: Deal-072E31; L: Deal-7767F5) - 2025-10: 2-0 (W: Deal-A9FD43, Deal-F65C8F) - 2025-11: 1-1 (W: Deal-7AA785; L: Deal-D263E0) - 2025-12: 1-1 (W: Deal-44C524; L: Deal-935746) - 2026-01: 2-0 (W: Deal-0D0CD6, Deal-E46EAB) - 2026-02: 2-0 (W: Deal-D5B790, Deal-1D2392) - 2026-03: 1-1 (W: Deal-5C636E; L: Deal-9066A6) - 2026-04: 0-2 (L: Deal-5645A5, Deal-72A02F) - 2026-05: 0-1 (L: Deal-C6FFAA) - 2026-06: 1-0 (W: Deal-67BE14) - 2026-07: 1-0 (W: Deal-1B6969) - 2026-08: 1-0 (W: Deal-F03E7B) - Trend, arithmetic only (no causal claim): 2025-09 → 2026-02: 9 wins/12 deals = 75%; 2026-03 → 2026-08: 4 wins/8 deals = 50%. Monthly volume is 1-2 deals, so halves rest on small samples. - Note: the S25 competitive win (2026-09-03, 800 seats) is outside the 12-month deal window and not present in the deals file, so it is not counted above. OLD CARD ITEMS — VERIFICATION STATUS - "Rivally lacks a Slack integration" — UNVERIFIED and contradicted: S04 (2026-02-02) reports Slack integration worked out of the box. Removed. - "Rivally was acquired by WorkHuman in 2025" — UNVERIFIED: no provided snippet mentions WorkHuman or any acquisition (S11 is an ex-Workday hire, not an acquisition). Removed. - "Positioning: points-based recognition for mid-market" — re-sourced in revised form: points-based feed (S02), mid-market reviewer (S04), with an added EU enterprise dimension (S10, S12). - "Pricing $5/user/mo annual (as of 2026-01)" — re-sourced as historical (S03, S08) but superseded by S17. MISSING DATA (explicit) - No Bonusly pricing, EU data residency status, setup time, support SLA, or win/loss reasons for the 20 tracked deals are present in the provided files; the only sourced win reason is analytics depth via S25. - Deal sizes, ACV, and segment are absent from deals_with_competitor.csv, so no size-segment win rate can be computed.
**Per sequence (totals across steps; arithmetic: replies/sent, etc.)** | Sequence | Sent | Open | Reply | Meeting | Weakest step | |---|---|---|---|---|---| | New Logo Nurture | 1,386 | 490 = 35.4% | 90 = 6.49% | 27 = 1.95% | Step 3: 18/428 = 4.21% reply | | Expansion Nurture | 875 | 565 = 64.6% | 59 = 6.74% | 12 = 1.37% | Step 3: 12/275 = 4.36% reply | | Cold Outbound - HR Leaders | 1,785 | 545 = 30.5% | 8 = 0.45% | 0 = 0.00% | Step 3: 1/590 = 0.17% reply | | Cold Outbound - People Ops | 1,163 | 340 = 29.2% | 29 = 2.49% | 6 = 0.52% | Step 3: 6/377 = 1.59% reply | All four sequences decay monotonically to step 3. **Tracking error.** Expansion Nurture step 2 reports opened 340 > sent 300 (113.3%). Impossible; the 565 total open count is inflated, so its true open rate is lower than 64.6%. **Audience overlap (audiences.csv).** 23 contacts appear in 2 sequences: - 21 contacts sit in both Cold Outbound - HR Leaders and Cold Outbound - People Ops (CT-000849, CT-000884, CT-000890, CT-000908, CT-001033, CT-001097, CT-001101, CT-001103, CT-001105, CT-001130, CT-001153, CT-001159, CT-001217, CT-001227, CT-001236, CT-001255, CT-001258, CT-001277, CT-001285, CT-001311, CT-001345) — double-tapped on the same cold motion. - 2 contacts in both Expansion Nurture and New Logo Nurture (CT-000301, CT-000624). Note CT-000301 is listed under both, and CT-000301 also appears twice within New Logo Nurture's own list. **Failure mode, under 2% reply (Cold Outbound - HR Leaders, 0.45%).** Step 1 opens are fine (240/600 = 40.0%) but replies collapse (5, then 2, then 1; 0 meetings). This is a reply-gap, not a deliverability problem: targets open the message and the content/CTA fails to earn a response. The 21-contact overlap with People Ops compounds it (repeat exposure, same non-converting motion). **One change per sequence:** New Logo — refresh the step 3 follow-up angle; Expansion — fix the step 2 open-tracking error before trusting any opens; People Ops — cut the 21 overlapped contacts; HR Leaders — rewrite the step 1 offer/CTA. **Fix first: Cold Outbound - HR Leaders** — largest volume (1,785 sent), zero meetings.
Weekly Marketing Goals Update — Q3-2026 (66 of 92 days elapsed; pace = 66/92 = 71.7%) SQMs - QTD actual: 230 | Target: 300 | Attainment: 230/300 = 76.7% | Delta: −70 - Pace-expected: 300 × 0.717 = 215.2 | vs pace: 230 − 215.2 = +14.8 → AHEAD SQOs - QTD actual: 84 | Target: 120 | Attainment: 84/120 = 70.0% | Delta: −36 - Pace-expected: 120 × 0.717 = 86.1 | vs pace: 84 − 86.1 = −2.1 → ON PACE (marginally behind, −2.4%) DS2s - QTD actual: 40 | Target: 75 | Attainment: 40/75 = 53.3% | Delta: −35 - Pace-expected: 75 × 0.717 = 53.8 | vs pace: 40 − 53.8 = −13.8 → BEHIND Closed-lost MIA rate (lower is better) - QTD actual: 5/25 = 20% | Target: 10% | Delta: +10 pts (double the ceiling) → BEHIND Same-quarter closes - QTD actual: 10 | Target: 20 | Attainment: 10/20 = 50.0% | Delta: −10 - Pace-expected: 20 × 0.717 = 14.3 | vs pace: 10 − 14.3 = −4.3 → BEHIND Active pipeline coverage vs target - QTD actual: $3,000,000 | Target: $4,000,000 | Attainment: 3.0M/4.0M = 75.0% | Delta: −$1,000,000 - Pace-expected: $4,000,000 × 0.717 = $2,869,565 | vs pace: +$130,435 → ON PACE (slightly ahead) What moved this week The data provided contains no prior-week snapshot, so week-over-week movement cannot be computed — the paragraph below describes the QTD shape, not measured weekly change. The pattern: top-of-funnel and pipeline metrics are running at or ahead of linear pace (SQMs +14.8 units ahead, active pipeline +$130k ahead), while downstream progression is trailing (DS2s −13.8 units, same-quarter closes −4.3 units, SQOs essentially flat) and the closed-lost MIA rate is running at 2× its 10% ceiling. Read together: volume is arriving on schedule, but stage progression, close timing, and loss-reason quality are the lagging side of the funnel. Data notes: no weekly time series, no deal/company aliases, and no forecast values were provided — those items are stated as unavailable rather than estimated. All figures above come solely from marketing_qtd.csv, targets.csv, and quarter_meta.csv.
Q3 forecast is 115,976.75 (44,729 COMMIT + 0.35 x 203,565 BEST_CASE) on 54 of 86 deals, but it looks precise and is not. 71 of 86 why-buys empty, including all 7 in-quarter COMMIT deals; owners blank on 85 of 86; and 32 deals worth 227,575 dated October, several DS2/DS3 within four weeks of quarter end, among them COMMIT Deal-D348E1 (13,770). Re-qualify the October dates and backfill why-buys before trusting this number. (3 sentences, 72 words. Cut for space: the 9 excluded BEST_CASE deals / 28,240, the 23 weighted-at-zero PIPELINE deals, and the top-5 BEST_CASE detail list. All forecast arithmetic verified: 0.35 x 203,565 = 71,247.75; 44,729 + 71,247.75 = 115,976.75.)
Subject: Following up — pricing for 150 seats Hello, Wanted to circle back on the pricing I emailed August 5 for 150 seats, after the July 28 demo with your People team — there was a strong reaction to the automated milestone awards and the points catalog, and I'd hate for questions on the numbers to stall things. Do you have time for a short call in the next week or two to talk through the pricing? Happy to work around your schedule. Best, Alex Franklin (71 words. Referenced touch: ENG-00001, the 2026-08-05 email with the demo recap and 150-seat pricing — the most recent touch, with no reply. Ask: a short call to walk through the pricing. No company or contact names were provided, so none are used.)
Marketing: We brought in 46 SQMs against a weekly target of 52, leaving a gap of 6 (52 − 46). The webinar channel contributed 18 SQMs, or 39.1% of the total (18 ÷ 46 × 100). Paid search cost per SQM held at $150. A clear contribution from webinars, with room to close the target gap. (week_extracts.md, Marketing) Sales: We created $310,000 in new pipeline, converted 14 SQOs, and set 9 DS2 meetings. The week’s same-quarter close count was 3. These are distinct measures, not a single conversion funnel; targets and comparable prior-week results weren’t provided. (week_extracts.md, Sales) CS: We saved 2 renewals this week, wins worth recognizing. Team NPS moved to 61, though the previous score wasn’t provided, so the direction and size of that change are unknown. Heading into next week, 3 red-flag accounts remain open. (week_extracts.md, CS) PLG: We welcomed 412 new signups, with activation reported at 31%. Recognition also reached a milestone: 38 companies hit the aha moment of 10 recognition gives. The extract doesn’t specify the activation cohort or connect those companies to this week’s signups, so we can’t calculate an exact activated-signup count or company conversion rate. (week_extracts.md, PLG)
Partner Digest — 2026-08-24 to 2026-09-04 ACTIVE PARTNERS Apex Rewards Co — 2 partner-sourced deals, $275,000 ($180,000 + $95,000). Slack 08-25: co-webinar locked for 09-15; both opps reported in DS1 and logged with UTM Source = Partner (deal file confirms utm_source=Partner on both rows). HRCloud Partners — 1 partner-sourced deal, $140,000. Slack 08-27: integration referral cleared security review and moved to DS2. CultureBridge — 2 partner-sourced deals, $135,000 ($60,000 + $75,000). Slack 08-29: lunch-and-learn sourced both; described as early stage (Slack only — the deal file carries no stage column). WorkWell Group — 0 sourced deals this period. Slack 09-02: restarting the joint playbook in Q4; planning call booked for 09-09. PARTNER-SOURCED PIPELINE (all utm_source=Partner) Count: 5 deals Amount: $180,000 + $95,000 + $140,000 + $60,000 + $75,000 = $550,000 By partner: Apex $275,000 (2) + HRCloud $140,000 (1) + CultureBridge $135,000 (2) + WorkWell $0 (0) = $550,000 (5) Reconciliation: Slack-reported sourced opps (Apex 2, HRCloud 1, CultureBridge 2) match the 5 deal rows exactly; no deals exist without a Slack mention and no mentions lack a deal row. QUIET PARTNERS (no sourced deals, no channel activity in the provided data) - Recogniq — no activity this period. - KudosWave — no activity this period. - PeopleFirst Advisors — no activity this period. - TotalPerk — no activity this period. Notes: The deal file has no stage field, so all stage references (DS1, DS2, early stage) come from Slack only. Amounts are pipeline, not closed revenue — no win/loss data was provided.
Q1 — Yes. All customer data is encrypted at rest using AES-256. [P1] Q2 — Yes. Data in transit is encrypted with TLS 1.2 or higher. [P1] Q3 — Yes. Bonusly maintains a SOC 2 Type II report, renewed annually. A copy is available to prospects under NDA. [P2] Q4 — Data is retained for the duration of the contract plus 90 days (retention after termination = 90 days), after which it is deleted from production systems. [P3] Q5 — The 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 (SCIM provisioning is also on Enterprise). [P5] Q7 — Production databases are backed up daily; backups are encrypted and retained for 35 days. [P6] Q8 — Unanswerable from the provided excerpts. No excerpt addresses ISO 27001. The ISO 27001 certificate or the certifications page on the trust portal would answer this. [no excerpt] Q9 — Unanswerable from the provided excerpts. No excerpt states a contractual uptime SLA. The Master Services Agreement / SLA exhibit would answer this. [no excerpt] Q10 — Unanswerable from the provided excerpts. No excerpt addresses HIPAA or Business Associate Agreements. The security addendum / data processing agreement or a HIPAA page on the trust portal would answer this. [no excerpt]
SIGNALFORGE SKILL-SET RECONCILIATION — 14 provided files vs 14-row manifest
Tally: 14 findings — 4 CRITICAL, 7 WARNING, 3 INFO. One proposal per finding; nothing rewritten.
--------------------------------------------------
1) DUPLICATE ALWAYS-TRIGGER PHRASES
Finding 1.1 — comms-drafter vs email-drafter
Severity: CRITICAL | Action: MERGE
Evidence: both descriptions claim the same trigger phrases verbatim: "write me an email," "draft a follow-up," "help me reply (to this)," "what should I say," "bump email," "contract nudge." Both claim the same lifecycle list (outbound prospecting, follow-ups, post-demo recaps, pricing/contract follow-up, end-of-quarter pushes, renewal/expansion, QBR follow-ups, onboarding check-ins). Both are unconditionally scoped ("whenever ANYONE ... needs external copy" / "whenever anyone asks you to ... any kind"). Each skill's only disambiguation points at deal-strategy-coach; neither excludes the other.
Proposal: merge email-drafter into comms-drafter as the single external-comms skill (mechanics under Finding 4.1 — same pair, version angle).
Finding 1.2 — pipeline-intelligence-report vs weekly-pipeline-report
Severity: WARNING | Action: REVIEW
Evidence: PIR: "ALWAYS trigger for: 'run the pipeline report' ... 'pipeline update' ... 'what's the pipeline look like' ... never answer pipeline questions inline." Weekly: "ALWAYS trigger when the user says 'run the pipeline update,' ... 'generate the pipeline report,' ... 'what does pipeline look like.'" Shared generic phrases, both with "or any variation," and no mutual disambiguation (next-to-close disambiguates against pipeline-intelligence-report; these two never mention each other).
Proposal: add one routing line to each description (weekly = MTD demand-gen metrics vs target; pipeline-intelligence-report = full scored/tiered 10-tab report), mirroring the next-to-close pattern.
--------------------------------------------------
2) CIRCULAR DELEGATION
Finding 2.1 — deal-strategy-coach <-> email-drafter
Severity: WARNING | Action: UPDATE_BODY
Chain: deal-strategy-coach -> email-drafter ("When drafting manager-to-prospect emails, use the email-drafter skill") and email-drafter -> deal-strategy-coach ("For deal strategy, diagnosis, or coaching (not email drafting), use deal-strategy-coach instead"). comms-drafter -> deal-strategy-coach ("For deep deal strategy, use deal-strategy-coach") feeds the same cycle. Both edges are lane-conditioned, so the loop usually terminates, but a blended ask ("draft the manager email for this stalled-deal strategy") satisfies both triggers and can ping-pong.
Not circular, for contrast: pipeline-intelligence-report -> closed-lost-analysis (Phase 2b "Delegate entirely ... Mode 4") is one-way; closed-lost-analysis Mode 4 only records its caller; next-to-close -> pipeline-intelligence-report is one-way.
Proposal: make one direction terminal — deal-strategy-coach either drafts manager emails itself or declares email-drafter output end-of-chain; email-drafter's strategy pointer fires only on user-initiated strategy asks, never on a deal-strategy-coach handoff.
--------------------------------------------------
3) DANGLING DELEGATION TARGETS (no file, no manifest row)
Finding 3.1 — prospect-research-multithreading
Severity: CRITICAL | Action: UPDATE_BODY
Evidence: invoked as mandatory by deal-strategy-coach ("Invoke prospect-research-multithreading whenever [5 conditions] ... Do not close a coaching session with a multithread gap unaddressed"), comms-drafter (2 places: partner comms, unknown-recipient rule), email-drafter (2 places: unknown recipient, multithread CC). No manifest row, no file.
Proposal: soften every invocation to "if the skill is available" until it is added — or add it and give it a manifest row.
Finding 3.2 — bonusly-brand
Severity: WARNING | Action: UPDATE_BODY
Evidence: mandatory pre-step in comms-drafter (Step 0), email-drafter ("must ... apply the bonusly-brand org skill"), sales-forecast ("Always reference bonusly-brand skill"), and signalforge-claim-compressor's exclusion routing ("use bonusly-brand for those"). No manifest row, no file.
Proposal: inline the minimal brand rules each caller needs, or add the skill; keep the "must" only after one of the two.
Finding 3.3 — analysis-validator specialist panel + skill-orchestrator
Severity: WARNING | Action: REVIEW
Evidence: analysis-validator §12.4 delegates to 8 named skills, none in the 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 — several marked "always delegate." skill-orchestrator is referenced in analysis-validator §11 (Three-Way Sync cascade) and signalforge-feedback's activation checklist ("Skill registered in skill-orchestrator").
Proposal: confirm whether these live in a shared pack outside this manifest; if yes, the manifest under-reports (add rows); if no, replace the delegation instructions with inline rules.
Finding 3.4 — signalforge-reports (referenced by path)
Severity: INFO | Action: REVIEW
Evidence: pipeline-intelligence-report Phase 5 "MANDATORY PRE-BUILD STEPS: Read /mnt/skills/organization/signalforge-reports/SKILL.md ..." and weekly-pipeline-report Step 4 read the same paths; no manifest row for signalforge-reports.
Proposal: same treatment as 3.3 — manifest it or inline the required design tokens.
--------------------------------------------------
4) VERSION CONFLICTS
Finding 4.1 — comms-drafter vs email-drafter (divergent copies, neither versioned)
Severity: CRITICAL | Action: MERGE
Evidence: same pair as 1.1 from the version angle. Shared near-verbatim blocks: the contract-follow-up benchmark email (identical except dash punctuation), the Recommended / Softer / Firmer output format, the 1-10 review flow, and the positioning-themes list (word-identical: "recognition that drives participation, manager visibility and effectiveness, culture and engagement, retention and connection, easy rollout and adoption, actionable insights for HR and leaders, simple experience for admins and employees"). The copies have already diverged: only email-drafter has Gmail-signature retrieval and the no-markdown email-body rules; only comms-drafter has the brand Step 0, tone-anchor table, and support/partner/Intercom coverage. Neither file carries a version field.
Survivor: comms-drafter — its description claims the full external-comms lane, of which email is a strict subset.
Proposal: one merge — absorb email-drafter's unique blocks (Gmail signature retrieval, no-markdown email rules) into comms-drafter, delete email-drafter, and re-point deal-strategy-coach's manager-email instruction (comms-drafter is referenced by no other skill, so that is the only re-point).
Finding 4.2 — analysis-validator v3.6 vs v3.2 (self-conflict)
Severity: WARNING | Action: UPDATE_BODY
Evidence: header "Version: 3.6," changelog top entry "3.6 | May 9, 2026," and pipeline-intelligence-report's footer stamp "Analysis Validator v3.6" — but §7's trail template hardcodes "Validator: analysis-validator v3.2." Same file still carries v3.0-era gate ranges: §1 Full Mode "G1-A through G1-H" / "G2-A through G2-E" and §6 tree "G2-A through G2-E," while the body defines G1-A through G1-L (G1-I–L added v3.1–v3.5) and G2-A through G2-F (G2-F added v3.6).
Survivor: v3.6 (three independent v3.6 attestations vs one stale string).
Proposal: sweep analysis-validator for pre-3.6 strings (the v3.2 template line and both gate-range lists) and align to v3.6.
--------------------------------------------------
5) DESCRIPTIONS EXCEEDING 1,024 CHARACTERS
Answer: 0 of 14. Severity: INFO | no action.
Arithmetic (manifest description_chars, sorted): 656, 656, 676, 708, 762, 792, 897, 945, 962, 965, 996, 1004, 1006, 1006.
Max = 1,006 (pipeline-intelligence-report and signalforge-claim-compressor, tied). 1,006 - 1,024 = -18, below threshold.
Note: the two leaders have only 18 characters of headroom if descriptions grow.
--------------------------------------------------
6) HARDCODED PAGE IDs, DATES, PERSON NAMES
Finding 6.1 — page/record/channel IDs
Severity: WARNING | Action: UPDATE_BODY
Evidence:
- Confluence: deal-strategy-coach (playbook page 2257879045); partner-digest (folder 2286616609; canonical pages 2265382925, 2236940297, 2237825028, 2239365136, 2238283777; first-issue page 2286321666; spaceId 1958248479); sales-forecast (spaceId 2232811524; parent 2232582148); signalforge-feedback (pages 2295136266, 2234417154, 2247295002). cloudId 73fe98de-a4a3-4869-9f8a-bb1eeed4cf7f hardcoded in three skills.
- Google Sheets: weekly-pipeline-report (1CLZeOsElVDF_LF0ZG_t2nfwvhnZ6bpwqM_nX3WEYzcw; 1ENuaEcCuLjdKhMvp8FK3Ys1ek5Aw9ZuOZhsHJJFoB_k).
- Slack: stale-pipeline-report (channel C0561C1JCPJ); partner-digest (user U03QLMBL7AR).
- HubSpot portal 1973303 in deal-link patterns: next-to-close, pipeline-intelligence-report, stale-pipeline-report.
Proposal: move IDs to per-skill references/config resolved at runtime (title-search fallback), one canonical source.
Finding 6.2 — person names
Severity: WARNING | Action: UPDATE_BODY
Evidence:
- weekly-pipeline-report: "Ben Lavin" in the H1 and throughout ("Ben's review," "deliver the HTML file to Ben") — a one-person persona.
- analysis-validator §12.3: 19 named people with HubSpot owner IDs (roster dated "Updated May 4, 2026"), plus "Escalate to Finance (Manish or Amani)" in G1-K and §10.
- pipeline-intelligence-report: 5 hardcoded AE names + IDs ("verified May 2026") — omits Hugo Lindqvist (77260721), whom analysis-validator's "Core 6" includes; the two rosters disagree.
- deal-strategy-coach ICP: "routed to Perseus," "routed to Farid."
- partner-digest: "Amani Phipps" owner line; Gmail contacts "Kelli, Jen Lee, Hani, Bryce, Sara."
- stale-pipeline-report description: "any AE or Alaina"; sales-forecast: "Manager Forecast (Alaina / VP Sales view)."
Contradiction: stale-pipeline-report Phase 2 states the set's own doctrine — "Never hardcode rep names or owner IDs. The AE roster changes." — which the roster skills violate.
Proposal: resolve people via connector lookup at runtime against a single shared roster reference; reconcile the Core-6-vs-5 discrepancy first.
Finding 6.3 — dates
Severity: CRITICAL (first item) / WARNING (remainder) | Action: UPDATE_BODY
Evidence:
- CRITICAL: weekly-pipeline-report Step 0 hardcodes the quarter: "Business days complete in Q2 (April 1 – June 30, 2026; total ≈ 64–65)," close-date buckets "Q2 / Q3+ / Past," "Q2 QTD vs Q1 full quarter," plus static Q1 2026 figures. Any run outside Q2 computes pace against the wrong window. sales-forecast v1.1 (April 27, 2026) already went quarter-agnostic in the same suite; weekly-pipeline-report did not.
- WARNING: sales-forecast tab 6 is named "Q2 Narrative" inside a quarter-agnostic skill; closed-lost-analysis presents a dated sample as current fact ("In the 30-deal AI-field sample from May 2026: 10 of 10 deals ..."); pipeline-intelligence-report stamps its AE roster "verified May 2026."
Proposal: derive the current quarter at runtime in weekly-pipeline-report (mirroring sales-forecast); rename the sales-forecast tab quarter-neutrally; re-date or live-query the closed-lost sample stat.
--------------------------------------------------
7) MANIFEST DRIFT
Finding 7.1 — none in either direction
Severity: INFO | no action
Evidence: files with no manifest row: none — all 14 filenames appear as rows, and declared_name equals filename in all 14. Manifest rows with no file: none — all 14 rows resolve to a provided file. Arithmetic: |files| = 14 = |rows|; name sets identical.
Boundary note: 12 skill names referenced inside bodies have no manifest rows (the 8 bonusly-* specialists from Finding 3.3, prospect-research-multithreading, bonusly-brand, skill-orchestrator, signalforge-reports). They are not provided as files, so they are dangling references (Finding 3), not file/row drift — but if the manifest is meant to cover everything the agents can invoke, it is under-counting by those 12.
RUNBOOK — Reward-worker queue backlog (incident #incident-2026-08-29-reward-queue, resolved 2026-08-29) Scope: every statement below traces to a cited message in the supplied thread. Items the thread does not establish are marked "needs confirmation." No steps, commands, actors, or numbers have been added beyond the thread. --- PRECONDITION / DETECTION - PagerDuty alert: reward-worker queue depth > 10k. Acknowledged by Bryce Harmon, taking IC. [M01] - No independent verification of the alert is documented beyond the acknowledgment — needs confirmation if this runbook is used for on-call training. --- STEP 1 — Confirm queue depth (read-only) - Command: `bundle exec rake sidekiq:queue_depth` - Who: Farid Osman - Result: reward queue at 48,213 pending jobs; normal stated as under 500. [M02] - Arithmetic: none required — 48,213 and the "<500 normal" figures are reported values, not derived. - State changed: none. Rollback: N/A (read-only). STEP 2 — Inspect the dead set (read-only) - Action: checked dead set contents. - Who: Farid Osman - Result: 112 jobs, all Redis::TimeoutError from around 13:58. [M03] - Exact inspection command: not in thread — needs confirmation. - State changed: none. Rollback: N/A (read-only). STEP 3 — Stop the bleed: disable auto-enqueue (state change) - Command: `bin/rails runner 'FeatureFlag.disable(:auto_recognition_enqueue)'` - Who: Farid Osman - Verification of the flag change itself: not recorded — needs confirmation. (Later queue decline [M07][M08] shows overall recovery, not isolated proof the flag took effect.) - Rollback (documented in-thread): `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` [M04] STEP 4 — Clear the dead set (destructive state change) - Action: cleared out the dead set, done from the console. - Who: Elena Sinclair - Exact command: not in thread — needs confirmation. - Verification: not recorded — needs confirmation. - Rollback: Not documented — needs confirmation. Do not treat this clearing as an approved repeatable remediation; the thread does not establish that the 112 Redis::TimeoutError jobs were retried, discarded, or otherwise accounted for. [M05] STEP 5 — Scale workers up (state change) - Command: `kubectl scale deployment/reward-worker --replicas=6` - Who: Bryce Harmon - Prior state: 3 replicas. - Verification of replica count itself: not recorded — needs confirmation. (M07's drain rate and M08's zero depth are later queue observations, not isolated proof of this action's effect.) - Rollback (documented in-thread): `kubectl scale deployment/reward-worker --replicas=3` [M06] STEP 6 — Monitor drain (read-only) - Action: observed queue depth. - Who: Farid Osman - Result: queue down to 9,400 and falling ~1,200/min. [M07] - Exact measurement command: not in thread — needs confirmation. - Arithmetic: none applied — 9,400 and ~1,200/min are reported as stated (M07 gives no interval, so no derived drain time is computed here). STEP 7 — Verify recovery (read-only) - Commands/actions: - `bundle exec rake sidekiq:queue_depth` → returned 0. - Checked Datadog error rate — reported back to baseline. - Who: Cole Ingram - Status: this is the thread's independent verification step for overall recovery. [M08] - State changed: none. Rollback: N/A. STEP 8 — Re-enable enqueue (state change) - Command: `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` - Who: Bryce Harmon - Verification: 40 new jobs processed cleanly in the next 3 minutes. [M09] - Rollback: Not documented — needs confirmation. (The thread documents disable [M04] as the rollback for disabling, not for this re-enable step; do not infer it as approved rollback here.) STEP 9 — Scale workers back down (state change) - Command: `kubectl scale deployment/reward-worker --replicas=3` - Who: Bryce Harmon - Verification: queue stable at 0; incident declared resolved. [M10] - Rollback: Not documented — needs confirmation. (Scale-to-6 is documented only as the forward action in M06, not as rollback for this step.) --- TIMELINE TRACE (all times as given in-thread) - 14:02:10Z alert acked, IC taken [M01] - 14:04:33Z queue depth 48,213 [M02] - 14:06:02Z dead set 112 / Redis::TimeoutError [M03] - 14:08:45Z enqueue disabled [M04] - 14:15:20Z dead set cleared [M05] - 14:21:07Z scaled to 6 [M06] - 14:33:41Z 9,400 pending, ~1,200/min down [M07] - 14:47:55Z verified 0 + Datadog baseline [M08] - 14:49:10Z enqueue re-enabled, 40 jobs clean in 3 min [M09] - 14:55:00Z scaled to 3, stable at 0, resolved [M10] GAPS REQUIRING CONFIRMATION BEFORE REUSE 1. M03: dead-set inspection command. 2. M04: direct verification the feature flag actually disabled. 3. M05: exact dead-set-clearing command, its verification, and any rollback (destructive step). 4. M06: direct verification of replica count (e.g., kubectl get output absent). 5. M07: measurement command for the 9,400 / ~1,200/min figures. 6. M08: the exact Datadog check used for "error rate back to baseline" (dashboard/query not named). 7. M09 and M10: no rollback documented for either step.
FAILURE SEQUENCE — 2026-09-03 Redis outage (all times UTC, from datadog_logs.csv + sidekiq_jobs.csv) 1. FIRST ERROR — 2026-09-03T14:01:12Z, service: reward-service, ERROR: "Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s". Last normal log before it: 13:59:30Z reward-service "job enqueued" — 102s of unlogged time precedes the first error. 2. CASCADE, IN ORDER: - 14:01:20Z / 14:01:30Z / 14:01:40Z — reward-service ERROR ×3: "Redis::TimeoutError: retry exhausted for RewardGiveJob" - 14:01:40Z — sidekiq ERROR: "RewardGiveJob failed: Redis::TimeoutError; retrying in 60s" (first sidekiq failure log). sidekiq_jobs.csv shows the first batch of RewardGiveJob failures J-00005…J-00001/J-00003 at failed_at 14:01:46–14:01:57 (6 jobs) - 14:02:28Z — sidekiq ERROR: RewardGiveJob failed; retrying. Second batch J-00007…J-00012 at 14:02:51–14:02:58 (6 jobs). RewardGiveJob total: 12 failed - 14:02:30Z — sidekiq WARN: "Queue reward depth above 10,000" (asserted by log line; the slice enumerates only 16 jobs) - 14:02:36Z — collateral begins: RecognitionDigestJob J-00013 failed (Redis::TimeoutError); J-00014/J-00015/J-00016 follow at 14:03:15 / 14:04:55 / 14:05:50. Collateral total: 4. Grand total failed jobs: 12 + 4 = 16 - 14:03:05Z — first downstream error: api-gateway ERROR "502 upstream timeout calling reward-service /gives". First error → first user-facing 502: 14:01:12→14:03:05 = 113s (1m53s) - 14:03:30Z — first user-facing failure: web-app ERROR "Give form submission failed: upstream 502 from api-gateway" (delta 138s / 2m18s) - 14:03:31–14:06:52Z — repeating failure loop: sidekiq RewardGiveJob retries (14:03:31, 14:04:22, 14:05:26, 14:06:47), api-gateway 502s (14:03:48, 14:04:13, 14:05:16, 14:06:52), web-app form failures (14:04:45, 14:05:42, 14:06:49). Last error in slice: 14:06:52Z. Error window: 14:01:12→14:06:52 = 5m40s - Recovery: 14:22:10Z reward-service INFO "Redis connection restored; resuming job processing" — first error → Redis restored = 20m58s. 14:24:45Z sidekiq INFO "Queue reward depth below 500" — queue drain from >10,000 (14:02:30) to <500 = 22m15s 3. SERVICE AND JOB: RewardGiveJob (Sidekiq, executed by the sidekiq service), failing because reward-service could not reach redis-primary:6379. Collateral job: RecognitionDigestJob. Downstream blast radius: api-gateway (502s calling reward-service /gives) and web-app (give form submissions). postgres is present but shows only routine INFO checkpoints — not involved. 4. DATADOG QUERY TO CONFIRM THE FIRST ERROR: service:reward-service status:error "Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s" from:2026-09-03T13:55:00Z to:2026-09-03T14:02:00Z Broadened fallback if zero hits: service:reward-service status:error "Redis::TimeoutError" (same window). Note: if your Datadog service tags differ from the names in this CSV (e.g. services nested under a parent app tag), substitute the real tag — the CSV is the only source provided for service names. 5. WHAT THE LOGS DO NOT SHOW: - Root cause of the Redis timeout. No redis-primary logs, no Redis metrics (CPU, memory, maxclients, network). The slice shows the symptom, not the cause. - What restored Redis at 14:22:10 — no restart, failover, deploy, or on-call action is logged. - Any correlation/request/job-payload identifiers tying failures to customers or companies — sidekiq_jobs.csv has job_ids and timestamps only, so affected-customer impact cannot be quantified. - Enqueue timestamps for the 16 jobs — only failed_at — so queue wait time and the 10,000-depth backlog cannot be reconciled or verified from data. - Outcomes of the 12 retried RewardGiveJobs after 14:22:10 — no post-recovery job successes are recorded; the slice cannot confirm whether retried jobs eventually succeeded. - The 14:06:52→14:10:56 gap (last error to next log line) — whether errors stopped or logging paused is not determinable. - That 14:01:12Z is the true first error anywhere — it is only the first error within this provided slice of services and time window.
FLAG STATE SUMMARY (9 flags in export; counts exactly as given) 1. recognition_streaks_v2 — ON, segment:beta_companies, 42 companies Code: app/models/recognition.rb — when enabled, StreakTracker.record(give) runs, so recognitions count toward streak tracking. 2. points_budget_guardrails — ON, all_companies, 220 companies Code: app/services/budget_service.rb — when enabled, BudgetService.enforce!(giver, points) runs (enforces points budget limits). Only flag on all_companies. 3. slack_dm_nudges — ON, segment:region_na, 87 companies Code: app/jobs/nudge_job.rb — when enabled, SlackDm.send_nudge(user) runs; otherwise the job returns early. 4. redeem_flow_redesign — OFF, targeted_list, 12 companies Code: app/controllers/redeem_controller.rb — enabled renders RedeemV2Component; disabled renders RedeemV1Component. With state OFF, all 12 listed companies currently get the V1 flow. 5. analytics_dashboard_v3 — ON, segment:tier_three, 65 companies Code: app/controllers/analytics_controller.rb — enabled sets @dashboard = AnalyticsV3.new(company). The excerpt shows no else branch, so disabled behavior is not shown in the provided code. 6. ms_teams_app_v2 — OFF, targeted_list, 9 companies Code: app/services/teams_installer.rb — enabled runs TeamsAppV2.install(company); with state OFF, install is skipped for everyone, including the 9 companies on the targeted list. 7. legacy_give_modal — OFF, segment:legacy_plan, 14 companies No code reference in the provided excerpt — what it controls is not shown. 8. survey_boosters_q3 — ON, segment:legacy_plan, 7 companies No code reference in the provided excerpt — what it controls is not shown. 9. paused_offboard_cleanup — OFF, no targeting rules (blank), 0 companies No code reference in the provided excerpt. The only flag with zero targets. NOTES AND CHECKS - No code reference: legacy_give_modal, survey_boosters_q3, paused_offboard_cleanup (3 of 9). They appear only in the export; the excerpt (app/ and lib/) doesn't show their usage. Absence here is not proof of absence in the full codebase, only in what was provided. - No targets: paused_offboard_cleanup (0 companies, blank rules) — consistent with a paused/retired flag. - Reverse check: all 6 flags referenced in the code excerpt appear in the export; no orphan code flag. - Off-with-targets: redeem_flow_redesign (12) and ms_teams_app_v2 (9) have targeting defined but state OFF — targeted companies exist yet receive default behavior. - Segment overlap: legacy_plan appears on two flags (legacy_give_modal: 14; survey_boosters_q3: 7). The export gives per-flag counts only, so whether any company is on both cannot be determined from the data provided. - Sanity check vs all_companies: every segment/targeted count (42, 87, 65, 14, 7, 12, 9) is ≤ 220, consistent with points_budget_guardrails' all_companies = 220. Unique company total is not derivable — segments may overlap. - Total flag-company assignments: 42+220+87+12+65+9+14+7+0 = 456 (not unique companies). - No company names/aliases appear in either file — only segments and targeted_list; per-company attribution is not available in the data provided.
NDA-1 — [PARTY A]: **GREEN** (standard approval)
Driver clause: "information that (a) is or becomes publicly available through no breach, (b) was known prior to disclosure, (c) is received from a third party without duty of confidence, (d) is independently developed, or (e) must be disclosed by law or court order."
Reasoning: mutual, 2-yr term + 3-yr post-termination survival (2 + 3 = 5-yr total obligation tail — standard), all five standard carve-outs present, Delaware governing law, and expressly "No license, no obligation to proceed, no exclusivity" — no restrictive covenants, nothing non-standard.
NDA-2 — [PARTY B]: **YELLOW** (counsel review)
Driver 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."
Reasoning: an embedded employment non-solicit is a restrictive covenant not found in a standard NDA, and the "or hire" prong reads as barring even hiring (not just poaching) with no general-posting carve-out; it binds Bonusly mutually for 3 yrs + 18 mo = 4.5 yrs total restriction window, so counsel should narrow before signature.
NDA-3 — [PARTY C]: **RED** (full legal review)
Driver clause: "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."
Reasoning: since confidentiality runs one-way to [PARTY C], Bonusly is the Recipient and this unbounded 3-yr non-compete ("directly or indirectly... any business that competes" — no scope, geography, or materiality limits) would restrain Bonusly's own operations; compounded by "No confidentiality carve-outs are stated in this Agreement" (no public-domain / prior-knowledge / independent-development exceptions) and "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 law plus exclusive foreign jurisdiction on top of a non-compete and missing carve-outs makes this full-legal-review territory.