Mean 0.954 · 33/40 perfect tests · $10.70 total · each card: the question → the correct answer (gold) → this model's actual answer
Definitions:
- DS2+ deal: stage in {DS2, DS3, DS4, DS5}.
- why-buys compliant: field length ≥ 15 chars, not in {tbd, n/a, see notes, none, ""} (case-insensitive). LONG(n) counts as present/substantive.
- why-buys non-compliant: empty/missing, or <15 chars, or placeholder.
- Missing DS1: t_ds1 is blank.
- Regressed: for any deal, the sequence of populated t_ds1..t_ds5 timestamps is not monotonically non-decreasing (a later stage's timestamp is earlier than an earlier stage's).
Arithmetic (I classified every row; LONG(n) = compliant, everything else in why_buys column for DS2+ deals was blank → non-compliant):
DS2+ deals total = 141 (all rows except the 24 at DS1).
Compliant why-buys at DS2+ = deals with LONG(n) in why_buys AND stage ≥ DS2.
Counting LONG(n) rows at DS2+: Deal-9AAE5F(DS4), Deal-6787C2(DS4), Deal-584EE5(DS5), Deal-FC22A3(DS3), Deal-93C8BF(DS2), Deal-D0BC96(DS3), Deal-885F45(DS2), Deal-8AD4A5(DS3), Deal-15D24F(DS3), Deal-1E2498(DS3), Deal-BE3D9D(DS3), Deal-ED725A(DS3), Deal-F67D31(DS2), Deal-D7E999(DS2), Deal-530B50(DS3), Deal-92D97D(DS2), Deal-44EA29(DS2), Deal-7599B8(DS3), Deal-C7F9BF(DS2), Deal-342E96(DS2), Deal-627646(DS3), Deal-E0B692(DS3), Deal-792D44(DS3) = 23.
Non-compliant DS2+ = 141 − 23 = 118.
Overall DS2+ non-compliance = 118/141 = 83.7%.
By owner (DS2+ only, non-compliant/DS2+ total):
- Bryce Harmon (119337721): 15/16 = 93.8% (only Deal-6787C2 compliant; Deal-9AAE5F is DS4 but owned by Dana — recount below)
Rechecking owner assignments carefully by owner_id:
119337721 Bryce Harmon — DS2+ deals: Deal-25F752, E53952, C26D20, 6787C2✓, A5E80A(DS1 skip), 2D1F1B(DS1 skip), 66D1FC(DS1 skip), C6FE92, 950043(DS1 skip), D73B89, B23205(DS1 skip), 012CB1(DS1 skip), 40522D, C5658B(DS1 skip), 523604(DS1 skip), C9C286, CA7DC0, 483B2D(DS1 skip), F0EBBB, 3795AD, 332637, 1BEEBF(DS1 skip), E25A09(DS1 skip), FC22A3✓, 036E80(DS1 skip), BB8880(DS1 skip), 01E193(DS1 skip), C1FA6D(DS1 skip), 7BBDFA, A62B1D, 333EBB, 93C8BF✓, 1CCE5C, 927338(DS1 skip), A414F6(DS1 skip). DS2+ count = 15. Compliant = 3 (6787C2, FC22A3, 93C8BF). Non-compliant = 12/15 = 80.0%.
84342457 Alex Franklin — DS2+ deals (excluding DS1 rows 6883F3, DCA846, C2FF3C, CC08D1, D8ABF7, 819506): counting all his rows: total rows for Alex = 54; DS1 rows = 6. DS2+ = 48. Compliant (LONG): D0BC96, 885F45, 8AD4A5, 15D24F, 1E2498, BE3D9D, ED725A, F67D31, D7E999, 530B50, 92D97D, 792D44 = 12. Non-compliant = 36/48 = 75.0%.
83155923 Dana Mercer — rows: 9AAE5F✓, 547B2B, 944310, B7EBD1, 3974EB, 2465CE, 62D607, 584EE5✓, 0660B4, 57887A, F336B6, 215CCA, B42F46(DS1 skip), E51FB7, 9DDE86, 44EA29✓, F40F04, 5EED42, DAF1D9, 87DDD1(DS1 skip), 8952F0, BA3DDC, 7E2131, 7599B8✓, F9A3C1. DS2+ = 23. Compliant = 4. Non-compliant = 19/23 = 82.6%.
83155924 Cole Ingram — rows: 7B3B0F, FD9F4E, AF932D, C7F9BF✓, 8BC9F5, 342E96✓, FF809F, A71728, B25F40, CD47A6, 42326B, FA32A0, 627646✓, E568D5, 1BA595, 813836, 175395, 2F3A66, D04904, 481E24, CFE1E8, 99A240. DS2+ = 22. Compliant = 3. Non-compliant = 19/22 = 86.4%.
716654662 Farid Osman — DS2+ deals: Deal-499BF6 (DS2) only (other 6 are DS1). Compliant = 0. Non-compliant = 1/1 = 100.0%.
701163055 Elena Sinclair — DS2+ deals: 0 (her only deal is DS1). N/A.
Total DS2+ = 15+48+23+22+1 = 109. ← Recount mismatch with my earlier 141; the earlier figure was wrong. Non-compliant total = 12+36+19+19+1 = 87. Overall = 87/109 = 79.8%.
DS1 timestamp missing:
- Deal-57FF13 (Elena Sinclair, 701163055): t_ds1 blank. Count = 1.
Regressions (t_ds1..t_ds5 not monotonically non-decreasing across populated cells):
- Deal-403845: t_ds1=2026-08-31, t_ds2=2026-09-02 → but entered_current_stage=2026-09-02 and create_date=2026-09-01, t_ds1 (2026-08-31) < create_date. Sequence 08-31→09-02 is fine. Not a regression on the ordered stage stamps.
- Deal-927338: t_ds1=2026-09-01, create=2026-09-02. Only DS1 populated. No stage sequence to check.
- Deal-DCA846: t_ds1=2026-08-27, create=2026-08-28. Only DS1. Fine.
- Deal-D8ABF7: t_ds1=2026-08-25, create=2026-08-26. Only DS1. Fine.
- Deal-819506: t_ds1=2026-08-27, create=2026-08-28. Only DS1. Fine.
- Deal-4F775F: t_ds1=2026-08-06, t_ds2=2026-08-17, t_ds3=2026-08-17. Monotonic. Fine.
- Deal-898FC5: t_ds1=2026-08-25, t_ds2=2026-08-28, t_ds3=2026-08-28. Monotonic.
- Checking all rows with populated t_ds2..t_ds5 against t_ds1: no row shows a later stage timestamp earlier than an earlier stage timestamp.
Regressed count = 0.
Report:
- DS2+ why-buys non-compliance overall: 87/109 = 79.8%
- By owner (non-compliant / DS2+ count = %):
- Bryce Harmon: 12/15 = 80.0%
- Alex Franklin: 36/48 = 75.0%
- Dana Mercer: 19/23 = 82.6%
- Cole Ingram: 19/22 = 86.4%
- Farid Osman: 1/1 = 100.0%
- Elena Sinclair: 0 DS2+ deals (N/A)
- Deals missing DS1 timestamp: 1 (Deal-57FF13, Elena Sinclair)
- Deals with regressed stage timestamps: 0
Three process fixes:
1. Make why_buys a required field on DS1→DS2 stage-change with a min-length validator (≥15 chars, blocklist tbd/n/a/see notes); pipeline gate at DS2 so 80% non-compliance can't recur.
2. Auto-stamp t_ds1 at deal create (system-generated, not rep-entered) — closes the Elena Sinclair case and prevents future gaps; add a nightly job that flags any deal where t_ds1 is null or later than create_date.
3. Weekly hygiene scorecard by owner surfaced in 1:1s: Cole (86%) and Dana (83%) get priority coaching; require backfill of the 23 LONG(n) deals' peers before month-end forecast lock.
Owner resolution — deals_open.csv against owners.csv Deals in file: 156 Deals resolved to an owner name: 156 Deals with owner_id not in owners table: 0 Owner_ids mapping to archived owners: 0 (Gavin Porter and Hugo Lindqvist are archived=true in the owners table but neither owner_id 1520255671 nor 77260721 appears on any open deal) Pipeline amount per resolved owner (sum of deals_open.amount): Bryce Harmon (119337721, active) — 35 deals — $1,054,144.00 Alex Franklin (84342457, active) — 67 deals — $624,310.00 Dana Mercer (83155923, active) — 24 deals — $341,195.00 Cole Ingram (83155924, active) — 22 deals — $288,161.43 Farid Osman (716654662, active) — 7 deals — $4,134.00 Elena Sinclair (701163055, active) — 1 deal — $2,100.00 Total resolved open pipeline: $2,314,044.43 across 156 deals. Check: 35 + 67 + 24 + 22 + 7 + 1 = 156 ✓ 1,054,144.00 + 624,310.00 + 341,195.00 + 288,161.43 + 4,134.00 + 2,100.00 = 2,314,044.43 ✓ Note on the raw data: 6 of Farid Osman's 7 deals carry amount=1 (likely placeholder/blank values in the source) — his $4,134 total is $2,880 + $1,249 + six $1 rows. Flagging because those may need re-entry rather than being counted as real pipeline, but I've summed them exactly as given.
(a) Orphans: 30 of 67 gong rows have an hs_deal_id with no match in deals_open. Sample aliases: Deal-8FA85D (60251290957, 46 calls), Deal-8FC3F9 (60251649055, 24), Deal-3B7945 (60251639682, 21), Deal-42B265 (61227242540, 21), Deal-9CCC42 (61430316324, 17), Deal-36EA09 (60251082126, 17), Deal-9A43B4 (60250446726, 14), Deal-605F3C (60251622924, 12). Notable pattern: many of the highest-volume gong rows (46, 24, 21, 21, 17 calls) are orphans and carry 0 in calls_with_ds2_date / calls_with_sqo_date — they look like closed/lost or non-default-pipeline deals still surfacing in gong. Deal-4B0BEB is present in both files, so id-level linkage works when the deal is open. (b) Duplicate conversation keys: 0 rows. Every gong row has calls_90d == distinct_conversation_keys. (c) DS3+ open deals with at least one logged call: 25 / 85 = 29.4%. So ~70.6% of DS3+ open deals show no gong activity in the last 90 days — worth flagging as either a Gong-recording gap or genuinely stalled deals.
```sql
-- Per-customer first-calendar-month recognition and redemption metrics
WITH customer_first_month AS (
-- COMPANY_COHORT_SUMMARY: canonical per-company source with FIRST_SUB_PAYMENT_DATE marking customer start
SELECT
COMPANY_ID,
DATE_TRUNC('MONTH', FIRST_SUB_PAYMENT_DATE) AS first_month_start,
DATEADD('MONTH', 1, DATE_TRUNC('MONTH', FIRST_SUB_PAYMENT_DATE)) AS first_month_end
FROM PRODUCTION.PLG.COMPANY_COHORT_SUMMARY
WHERE FIRST_SUB_PAYMENT_DATE IS NOT NULL
),
giving_stats AS (
-- Recognition events: catalog documents a "exclude deleted givers" filter that MUST NOT be applied
-- to historical giving counts per business rules. No such filter here.
-- NOTE: catalog does not expose a recognition/giving events table by name in this excerpt;
-- using M1_USERS and M1_GIVES from COMPANY_COHORT_SUMMARY which are the documented first-month rollups.
SELECT
COMPANY_ID,
M1_USERS AS unique_givers,
M1_GIVES AS recognition_count
FROM PRODUCTION.PLG.COMPANY_COHORT_SUMMARY
WHERE FIRST_SUB_PAYMENT_DATE IS NOT NULL
),
redemption_stats AS (
SELECT
r.COMPANY_ID,
COUNT(*) AS successful_redemption_count
-- REDEMPTION_RECORDS_V2: schema name says DEPRECATED but catalog documents this as the source for redemption counts
FROM PRODUCTION.DEPRECATED_RECOGNITION.REDEMPTION_RECORDS_V2 r
-- Join to first-month window per company
INNER JOIN customer_first_month cfm
ON r.COMPANY_ID = cfm.COMPANY_ID
AND r.CREATED_AT >= cfm.first_month_start
AND r.CREATED_AT < cfm.first_month_end
WHERE r.STATE = 'succeeded' -- documented rule: only 'succeeded' counts
GROUP BY r.COMPANY_ID
)
SELECT
cfm.COMPANY_ID,
cfm.first_month_start,
COALESCE(g.unique_givers, 0) AS unique_givers,
COALESCE(g.recognition_count, 0) AS recognition_count,
COALESCE(r.successful_redemption_count, 0) AS successful_redemption_count
-- Driver: customer first-month window derived from COMPANY_COHORT_SUMMARY
FROM customer_first_month cfm
-- Recognition/giving rollup from COMPANY_COHORT_SUMMARY M1_* columns (no deleted-giver filter applied)
LEFT JOIN giving_stats g
ON cfm.COMPANY_ID = g.COMPANY_ID
-- Redemption counts from documented REDEMPTION_RECORDS_V2 (STATE='succeeded' only)
LEFT JOIN redemption_stats r
ON cfm.COMPANY_ID = r.COMPANY_ID
ORDER BY cfm.COMPANY_ID;
```
Note on data gap: the catalog excerpt does not name a raw recognition/giving events table, so unique givers and recognition count come from `COMPANY_COHORT_SUMMARY.M1_USERS` / `M1_GIVES` (documented first-month rollups). The "do-not-apply deleted-giver filter" rule is honored by not adding such a filter; if a raw giving events table exists outside this excerpt, this query should be repointed there. Also, `COMPANY_COHORT_SUMMARY` is documented as self-serve companies only — sales-led customers may be excluded.
CRM AUDIT REPORT
================
DATA SCOPE NOTE — deals.csv was not provided in the extract. Owner, stage, amount, close date, and why-buys cannot be audited or ranked; the "top-10 fixes by pipeline amount at stake" cannot be produced as specified. Everything below covers companies (n=34) and contacts (n=52) only.
────────────────────────────────────────
1. COMPLETENESS % PER FIELD
────────────────────────────────────────
Companies (n=34)
industry 34/34 = 100.0% (but 10 rows use non-standard variants: "tech", "Tech ", "health care")
employee_count 25/34 = 73.5%
hq_country 28/34 = 82.4% (values inconsistent: US / USA / United States)
Contacts (n=52)
email (valid) 48/52 = 92.3%
title 39/52 = 75.0%
persona 37/52 = 71.2%
Deals — file not supplied. Owner / stage / amount / close_date / why_buys completeness = UNKNOWN.
────────────────────────────────────────
2. DUPLICATE COMPANY CLUSTERS
────────────────────────────────────────
Cluster A — domain acme-corp.com
C-0A092931 Technology / 500 / US ← SURVIVOR (canonical values)
C-0A092932 tech / 510 / USA (merge; employee_count 500 vs 510 disagreement → keep 500, ZI has no row to arbitrate)
Cluster B — domain globex.io
C-0A092933 SaaS / 200 / US ← SURVIVOR (earliest alias; identical emp/country)
C-0A092934 Technology / 200 / US (merge; industry disagreement SaaS vs Technology → no ZI row; recommend SaaS if product-fit filter, else Technology)
No near-duplicate name variants detected beyond shared-domain pairs (all other aliases have unique domains).
────────────────────────────────────────
3. INVALID EMAILS (4)
────────────────────────────────────────
CT-0010 C-66D1FC 'user0@' truncated local/host missing
CT-0080 C-92D97D 'user0@' truncated
CT-0081 C-92D97D 'user1@' truncated
CT-0192 C-425E2A 'user2@' truncated
────────────────────────────────────────
4. EMAIL DOMAIN MISMATCH (1)
────────────────────────────────────────
CT-0011 C-66D1FC email=user1@other-domain.com vs company domain=66d1fc.com
→ verify: personal address, wrong company link, or contact left the company
────────────────────────────────────────
5. ENRICHMENT FILL — CRM EMPTY, ZI HAS VALUE (8 fills, employee_count only)
────────────────────────────────────────
C-EC3025 · employee_count : (empty) → 400
C-96039F · employee_count : (empty) → 400
C-44EA29 · employee_count : (empty) → 400
C-D04904 · employee_count : (empty) → 400
C-B23205 · employee_count : (empty) → 400
C-60C75F · employee_count : (empty) → 400
C-7BBDFA · employee_count : (empty) → 400
C-50D386 · employee_count : (empty) → 400
hq_country fills: none available. Every CRM row missing hq_country also has an empty ZI hq_country (C-2D1F1B, C-D73B89, C-44EA29, C-D04904, C-2C60E5, C-EE9FFB) — cannot fill from this enrichment file.
────────────────────────────────────────
6. CRM ↔ ZI DISAGREEMENTS (industry, 10)
────────────────────────────────────────
All 10 are the CRM "Technology / tech / Tech " label vs ZI "Computer Software". Same underlying meaning, different taxonomy.
C-66D1FC, C-EC3025, C-44EA29, C-92D97D, C-D04904, C-77A95A, C-AA8DDA, C-B25F40, C-60C75F, C-425E2A
Recommend source: ZoomInfo ("Computer Software") — it is the more specific and internally consistent label. Also standardize CRM picklist to remove case/whitespace variants ("tech", "Tech ", "Technology" → one value).
Other standardization needed (no ZI conflict, but CRM values are inconsistent):
"health care" (C-7BBDFA, C-50D386) → "Healthcare"
"US" / "USA" / "United States" → one canonical value
────────────────────────────────────────
7. COMPANIES WITH NO ENRICHMENT MATCH (9)
────────────────────────────────────────
C-BA969B (ba969b.com), C-332637 (332637.com), C-93C8BF (93c8bf.com),
C-EE9FFB (ee9ffb.com), C-C9BB20 (c9bb20.com),
C-0A092931 / C-0A092932 (acme-corp.com), C-0A092933 / C-0A092934 (globex.io)
→ Re-enrich or manually source; do not invent values.
────────────────────────────────────────
8. TOP 10 FIXES BY PIPELINE AT STAKE
────────────────────────────────────────
CANNOT PRODUCE AS SPECIFIED — the extract has no deals file, so pipeline amount per company is unknown.
If the deals file is supplied, the ranking would join fixes to deal.amount by company_alias. Without it, here is a defensible substitute ranked by data-quality severity + downstream blast radius (contact-gap count + duplicate risk + enrichment gap). Flagging so you can re-rank when deals arrive:
1. Merge duplicate cluster acme-corp.com — keep C-0A092931, resolve 500 vs 510 headcount, retire C-0A092932. (Duplicate deal/contact risk.)
2. Merge duplicate cluster globex.io — keep C-0A092933, resolve SaaS vs Technology, retire C-0A092934.
3. C-92D97D — 2/3 contacts have truncated emails (CT-0080, CT-0081) AND 2/3 missing title AND 2/3 missing persona. Worst single-account contact quality.
4. C-66D1FC — CT-0010 email truncated + CT-0011 wrong-domain email; verify all three "VP People" duplicates are distinct people, not the same contact loaded 3x.
5. C-425E2A — CT-0192 email truncated; also standardize industry "Tech " → canonical value.
6. C-AA8DDA — 3/3 contacts missing title (persona set but no role verification).
7. Fill 8 employee_count blanks from ZI (C-EC3025, C-96039F, C-44EA29, C-D04904, C-B23205, C-60C75F, C-7BBDFA, C-50D386) — single batch update.
8. C-60C75F — 2/2 contacts missing persona (no threading possible for outreach).
9. Standardize industry picklist across 10 "tech / Technology / Tech " rows to ZI's "Computer Software" (or your canonical "Technology").
10. Re-enrich the 9 no-match companies (BA969B, 332637, 93C8BF, EE9FFB, C9BB20, acme-corp.com x2, globex.io x2) so future fills/audits can proceed.
Please share the deals CSV (deal_id, company_alias, owner, stage, amount, close_date, why_buy) and I will re-rank these fixes by actual pipeline $ at stake.
I'll classify each deal, then summarize. Let me work through this systematically. ## Classification table | deal_alias | tag | primary_category | side | |---|---|---|---| | Deal-DB0AAC | Timing 1yr+ | timing | buyer | | Deal-F7F635 | Competitor | competitor | buyer | | Deal-AC944F | MIA | no decision | buyer | | Deal-214060 | MIA | no decision | buyer | | Deal-91A056 | Timing 1yr+ | timing | buyer | | Deal-29326C | Timing 1yr+ | timing | buyer | | Deal-5DB9B0 | ICP (Spam) | other | unknown | | Deal-831B7B | Timing 1yr+ | timing | buyer | | Deal-F97C37 | Competitor | product gap | Bonusly | | Deal-13E9CF | Doing nothing/Cost | no decision | buyer | | Deal-39E25C | Timing 1yr+ | timing | buyer | | Deal-7ED004 | Budget/Price | pricing | buyer | | Deal-21B045 | MIA | no decision | buyer | | Deal-B3ABED | Timing 1yr+ | timing | buyer | | Deal-422BA6 | Competitor | competitor | buyer | | Deal-ED9AE7 | Lost DM | no decision | buyer | | Deal-988493 | MIA | no decision | buyer | | Deal-381C8C | Competitor | competitor | unknown | | Deal-F308CA | MIA | no decision | buyer | | Deal-F1E8A6 | Competitor | competitor | unknown | | Deal-B6AC09 | Timing 1yr+ | timing | buyer | | Deal-70F704 | Lost DM | product gap | buyer | | Deal-E6E80A | Timing 1yr+ | timing | buyer | | Deal-B038F0 | Timing 1yr+ | timing | buyer | | Deal-4664E1 | MIA | no decision | buyer | | Deal-175756 | Timing 1yr+ | timing | buyer | | Deal-E74A73 | Doing nothing/Cost | no decision | buyer | | Deal-DDAB52 | Competitor | competitor | buyer | | Deal-ACE061 | Competitor | competitor | buyer | | Deal-BB78F3 | Timing 1yr+ | timing | buyer | | Deal-D48E0B | MIA | no decision | buyer | | Deal-15DA99 | Timing 1yr+ | timing | buyer | | Deal-F4AF5D | Timing 1yr+ | timing | buyer | | Deal-79B7A1 | Timing 1yr+ | timing | buyer | | Deal-583ADB | MIA | no decision | buyer | | Deal-8E27DA | Feature Request | product gap | buyer | | Deal-2D2F8D | Competitor | competitor | buyer | | Deal-E0441F | MIA | no decision | buyer | | Deal-7CB44D | MIA | no decision | buyer | | Deal-0F96AA | Competitor | competitor | buyer | | Deal-1BCA50 | Competitor | competitor | buyer | | Deal-7CC678 | Competitor | competitor | buyer | | Deal-FAC17C | Lost DM | no decision | buyer | | Deal-242273 | Competitor | product gap | Bonusly | | Deal-50E5D8 | Doing nothing/Cost | no decision | buyer | | Deal-A2C349 | Competitor | competitor | buyer | | Deal-9F176A | Timing 1yr+ | timing | buyer | | Deal-7B2236 | Doing nothing/Cost | pricing | buyer | | Deal-AFA56C | MIA | no decision | buyer | | Deal-C7156E | Competitor | competitor | buyer | | Deal-C33D91 | Budget/Price | pricing | buyer | | Deal-9048EB | MIA | product gap | Bonusly | | Deal-5E64CE | Doing nothing/Cost | competitor | buyer | | Deal-8A0992 | Competitor | competitor | buyer | | Deal-D0C698 | Competitor | competitor | buyer | | Deal-69CF3D | Timing 1yr+ | timing | buyer | | Deal-ECBF89 | Timing 1yr+ | timing | buyer | | Deal-3618CC | Lost DM | product gap | Bonusly | | Deal-EECC02 | Competitor | competitor | buyer | | Deal-5AD03E | Competitor | pricing | buyer | | Deal-D1A623 | Timing 1yr+ | timing | buyer | | Deal-413C56 | Doing nothing/Cost | no decision | buyer | | Deal-47F1A1 | Competitor | competitor | buyer | | Deal-BF2A98 | Competitor | competitor | buyer | | Deal-2A292B | Doing nothing/Cost | competitor | buyer | | Deal-D1AABF | MIA | no decision | buyer | | Deal-FEDBCB | Doing nothing/Cost | no decision | buyer | | Deal-1E7DA9 | Competitor | competitor | buyer | | Deal-2BBA21 | MIA | no decision | buyer | | Deal-286F9C | Competitor | competitor | buyer | | Deal-7FBAC6 | Doing nothing/Cost | no decision | buyer | | Deal-369281 | Competitor | competitor | buyer | | Deal-386F6E | MIA | no decision | buyer | | Deal-9FCD0D | Competitor | competitor | buyer | | Deal-55867E | Timing 1yr+ | no decision | buyer | | Deal-DAFB82 | Budget/Price | pricing | buyer | | Deal-2FEDDB | Doing nothing/Cost | no decision | buyer | | Deal-64B19A | Competitor | competitor | buyer | | Deal-3F86A0 | MIA | no decision | buyer | | Deal-096750 | MIA | no decision | buyer | | Deal-F325A5 | Lost DM | no decision | buyer | | Deal-ABD14C | Doing nothing/Cost | no decision | buyer | | Deal-79E61A | MIA | no decision | buyer | | Deal-8A119B | Budget/Price | pricing | buyer | | Deal-AE7C4E | MIA | no decision | buyer | | Deal-DAB4F1 | MIA | no decision | buyer | | Deal-B4B50F | MIA | no decision | buyer | | Deal-981AD4 | Feature Request | product gap | Bonusly | | Deal-DC77FE | Competitor | product gap | Bonusly | | Deal-5885B9 | MIA | no decision | buyer | Total deals: 88 ## Category counts - no decision: 38 - competitor: 22 - timing: 16 - product gap: 7 - pricing: 6 - other: 1 - champion left: 0 Sum: 38+22+16+7+6+1 = 90 → recount Recount competitor: F7F635, 422BA6, 381C8C, F1E8A6, DDAB52, ACE061, 2D2F8D, 0F96AA, 1BCA50, 7CC678, A2C349, C7156E, 8A0992, D0C698, EECC02, 47F1A1, BF2A98, 1E7DA9, 286F9C, 369281, 9FCD0D, 64B19A = 22 ✓ Recount timing: DB0AAC, 91A056, 29326C, 831B7B, 39E25C, B3ABED, B6AC09, E6E80A, B038F0, 175756, BB78F3, 15DA99, F4AF5D, 79B7A1, 9F176A, 69CF3D, ECBF89, D1A623 = 18 Recount product gap: F97C37, 70F704, 8E27DA, 242273, 9048EB, 3618CC, 981AD4, DC77FE = 8 Recount pricing: 7ED004, C33D91, 7B2236, 5AD03E, DAFB82, 8A119B = 6 Recount no decision: AC944F, 214060, 13E9CF, 21B045, ED9AE7, 988493, F308CA, 4664E1, E74A73, D48E0B, 583ADB, E0441F, 7CB44D, FAC17C, 50E5D8, AFA56C, 413C56, D1AABF, FEDBCB, 2BBA21, 7FBAC6, 386F6E, 55867E, 2FEDDB, 3F86A0, 096750, F325A5, ABD14C, 79E61A, AE7C4E, DAB4F1, B4B50F, 5885B9 = 33 Adding a competitor entry I missed: 5E64CE (Nectar contract fee) → competitor; 2A292B (build internally) → this is "no decision" not competitor. Let me revise: Corrected: - **no decision: 34** (added 2A292B back) - **competitor: 23** (added 5E64CE) - **timing: 18** - **product gap: 8** - **pricing: 6** - **other: 1** (Deal-5DB9B0 spam) Total: 34+23+18+8+6+1 = 90. Off by 2 from 88. Let me strip: 55867E free-text says "won't be moving forward…at this time" — that's no decision, not timing (already counted as no decision ✓). And 5E64CE — I double-counted. Removing from competitor. Final counts (88 deals): - **no decision: 34** - **competitor: 22** - **timing: 18** - **product gap: 8** - **pricing: 6** - **other: 1** (spam/ICP) - **champion left: 0** Sum: 34+22+18+8+6+1 = 89. There is a ±1 counting drift I cannot fully reconcile without a script; treat these as ±1. The material shape is stable. ## Side split - **buyer: 82** - **Bonusly: 5** (F97C37 offering breadth gap; 242273 points-redemption gap; 9048EB feature gaps + bad fit; 3618CC wanted Surveys; 981AD4 UI/UK gap; DC77FE customization gap) → recount = 6 - **unknown: ~2** (381C8C, F1E8A6 — competitor named but no reason given; 5DB9B0 spam) Corrected side split: - **buyer: 79** - **Bonusly: 6** - **unknown: 3** ## Tag-vs-text disagreements (structured tag clearly contradicts free-text) Count: **9 deals** 1. Deal-F97C37 — tag "Competitor," text = product/offering gap (breadth) 2. Deal-ED9AE7 — tag "Lost DM," text = "Timing, budget, authority" (multi-factor, not just DM) 3. Deal-70F704 — tag "Lost DM," text = product scope mismatch (only wanted anniversary automation) 4. Deal-7B2236 — tag "Doing nothing/Cost," text says budget + wanted simpler/cheaper (pricing + product) 5. Deal-9048EB — tag "MIA," text = "bad fit…multiple feature gaps" (product gap, not MIA) 6. Deal-5E64CE — tag "Doing nothing/Cost," text = locked into Nectar contract (competitor incumbency) 7. Deal-3618CC — tag "Lost DM," text = "Wanted Surveys" (product gap) 8. Deal-5AD03E — tag "Competitor," text = "Wanted more defined budget access" (pricing/product, not vendor loss) 9. Deal-2A292B — tag "Doing nothing/Cost," text = "going to build something internally" (build-vs-buy, not deprioritization) 10. Deal-55867E — tag "Timing 1yr+," text = "don't think we'll be moving forward…at this time" (no decision, not timing) 11. Deal-DC77FE — tag "Competitor," text explicitly says "competitive in price…found a system that offered more customization" (product gap) 12. Deal-981AD4 — tag "Feature Request," text = "Doesn't fit UI and not UK focused" (product/geo gap — reasonable alignment but "Feature Request" understates) **Clear disagreements: ~9-12** depending on strictness. Firm count of unambiguous contradictions: **9**. ## Two patterns most worth acting on **1. "No decision" is the largest bucket (34/88 ≈ 39%) and MIA/ghosting dominates it (~22 of the 34).** These are deals where the buyer never gave a real reason — they went dark after intro or demo. Multiple owners have identical "unresponsive"/"MIA"/"no response" notes with 2-3 contacts on the deal. Action: qualification and multithreading discipline at intro — deals closing MIA with n_contacts ≤3 suggest single-threaded pursuits that die when the one contact disengages. Enforce a minimum contact threshold and a "reason required" gate before closed-lost. **2. Structured tags systematically understate product/competitive gaps.** At least 5 of the 9 clear disagreements re-classify tags like "Competitor," "Lost DM," "Doing nothing/Cost," or "Feature Request" into **product gap** (breadth of offering, customization, points redemption at internal facilities, surveys, UK/UI fit). Bonusly-side losses (6 deals, ~$188K ARR at face value: 4320+60000+21000+36855+8000+... ) are being hidden inside buyer-side tags. Action: add a "product gap — specify" required field, and route these losses to product monthly. The pattern (Awardco, Rippl, HeyTaco, WorkTango, Kudos, HiThrive, Motivosity, Nectar, ADP-preferred vendors) suggests competitors are winning on breadth/customization/integrations, not price.
```json
{
"tier_counts": {"LOCK": 7, "ACTION": 17, "BUILD": 31, "REVIVE": 3, "WATCH": 63, "RISKY": 35},
"tier_examples": {
"LOCK": ["Deal-25F752", "Deal-D348E1", "Deal-C26D20"],
"ACTION": ["Deal-C6FE92", "Deal-1CCE5C", "Deal-FA053A"],
"BUILD": ["Deal-A5E80A", "Deal-499BF6", "Deal-D73B89"],
"REVIVE": ["Deal-2D1F1B", "Deal-3EED2C", "Deal-57FF13"],
"WATCH": ["Deal-6787C2", "Deal-66D1FC", "Deal-950043"],
"RISKY": ["Deal-E53952", "Deal-5408B0", "Deal-9AAE5F"]
},
"risky_deals": ["Deal-E53952","Deal-5408B0","Deal-9AAE5F","Deal-547B2B","Deal-B7EBD1","Deal-A2B47C","Deal-2465CE","Deal-C61CF7","Deal-62D607","Deal-584EE5","Deal-C6D97A","Deal-7B3B0F","Deal-F9A08A","Deal-0660B4","Deal-FD9F4E","Deal-BA571A","Deal-FC22A3","Deal-7BBDFA","Deal-60C2C2","Deal-4A13AD","Deal-8AD4A5","Deal-15D24F","Deal-9D0060","Deal-690476","Deal-635B8E","Deal-ED725A","Deal-55164C","Deal-3BA5EA","Deal-5FDCE4","Deal-F336B6","Deal-5EED42","Deal-BA3DDC","Deal-7599B8","Deal-F9A3C1","Deal-FA32A0"],
"lock_violations": 0,
"pipeline_shape": "156 open deals, $2.31M total value, heavily front-loaded: 71 deals (46%) sit in DS1/DS2 and only 24 (15%) have reached DS4/DS5. Forecast is mostly PIPELINE (105) with 51 committed (COMMIT+BEST_CASE), yet 35 of those 51 committed deals have zero meetings_30d — a 69% commit-to-engagement disagreement rate that drives the large RISKY bucket ($292K exposed). Only 7 deals qualify as LOCK ($82K). The bulk of pipeline value ($1.17M) sits in WATCH — early-stage PIPELINE deals with light activity — meaning near-term commit quality is thin and forecast hygiene needs a scrub before it's trustworthy."
}
```
```json
[
{
"transcript_id": "TX-001",
"deal_alias": "Deal-CFE7F4",
"why_buys": [
"Automating anniversary and birthday awards — HR team of three cannot keep up manually",
"Currently tracking in a spreadsheet and people slip through the cracks"
],
"pain_points": [
"Manual anniversary/birthday award tracking overwhelming 3-person HR team",
"Spreadsheet-based tracking causing people to slip through the cracks"
],
"stakeholders": [
"VP People",
"HR Admin"
],
"budget_signal": "$40k earmarked for engagement tools this fiscal year",
"timeline_signal": "Live before open enrollment in November",
"competitor_mentioned": "Achievers (evaluated last year, deemed too heavy for team size)",
"next_step": "Security review on September 12",
"objections": [
"Need SSO and audit logs for IT sign-off"
],
"confidence": "HIGH"
},
{
"transcript_id": "TX-002",
"deal_alias": "Deal-70BB30",
"why_buys": [
"Tie recognition to retention for hourly workforce (regretted turnover over 30%)"
],
"pain_points": [
"Regretted turnover of hourly workforce exceeds 30%"
],
"stakeholders": [
"Head of Total Rewards",
"CFO"
],
"budget_signal": "$25k pilot budget approved by finance for this quarter",
"timeline_signal": "Decision by end of September",
"competitor_mentioned": null,
"next_step": "Send pilot agreement; prospect will route to legal this week",
"objections": [
"Workday integration must be rock solid (CFO condition)"
],
"confidence": "HIGH"
},
{
"transcript_id": "TX-003",
"deal_alias": "Deal-530B50",
"why_buys": [
"Make recognition visible across 12 retail locations",
"Store managers currently have zero budget autonomy for on-the-spot recognition"
],
"pain_points": [
"Recognition not visible across 12 retail locations",
"Store managers lack budget autonomy for on-the-spot recognition"
],
"stakeholders": [
"People Ops Manager",
"CEO (referenced, not present)"
],
"budget_signal": null,
"timeline_signal": "No rush until Q1",
"competitor_mentioned": "Bucketlist (CEO used at previous company and liked it)",
"next_step": "Schedule call with CEO; prospect will send two times",
"objections": [
"CEO must be sold first — she decides anything people-related"
],
"confidence": "HIGH"
},
{
"transcript_id": "TX-004",
"deal_alias": "Deal-180D02",
"why_buys": [
"Consolidate three separate recognition tools into one",
"Current three tools do not talk to the HRIS"
],
"pain_points": [
"Paying for three recognition tools",
"None of the three tools integrate with HRIS"
],
"stakeholders": [
"VP People",
"IT Security Lead"
],
"budget_signal": "Under $15k annually can be approved by VP People without board",
"timeline_signal": "Procurement cycle runs 6-8 weeks minimum",
"competitor_mentioned": null,
"next_step": null,
"objections": [
"Procurement cycle 6-8 weeks minimum",
"Prior vendor security review took 3 months"
],
"confidence": "MEDIUM"
},
{
"transcript_id": "TX-005",
"deal_alias": "Deal-F8767A",
"why_buys": [
"Automate service milestones",
"Analytics on recognition equity across departments",
"Night-shift teams feel invisible; engagement scores run 20 points lower"
],
"pain_points": [
"Night-shift teams feel invisible with engagement scores 20 points lower",
"Prior failed rollout two years ago left exec team skeptical"
],
"stakeholders": [
"HR Director",
"People Ops Coordinator",
"Exec team (referenced, not present)"
],
"budget_signal": "$12k approved under engagement line",
"timeline_signal": "Running before January all-hands",
"competitor_mentioned": "Nectar (mid-pilot currently)",
"next_step": "Present to exec team on October 2",
"objections": [
"Currently mid-pilot with Nectar — must beat that experience",
"Exec team skeptical after failed rollout two years ago"
],
"confidence": "HIGH"
},
{
"transcript_id": "TX-006",
"deal_alias": "Deal-EE195F",
"why_buys": [
"Cut admin time on service awards (HR Manager personally spends 5 hours/month ordering and shipping plaques)"
],
"pain_points": [
"HR Manager spends 5 hours/month manually ordering and shipping plaques"
],
"stakeholders": [
"HR Manager",
"COO (referenced, not present)"
],
"budget_signal": "Budget is not the issue — time is",
"timeline_signal": "Q1 start realistic (fiscal year resets in February)",
"competitor_mentioned": null,
"next_step": "Send one-page overview; HR Manager will forward to COO this week",
"objections": [
"COO usually prefers building things in-house",
"Alternative under consideration is doing it internally"
],
"confidence": "HIGH"
}
]
```
Note on competitor_mentioned for TX-003: Bucketlist was raised by the prospect (People Ops Manager) referencing her CEO's prior experience — included per the "prospect raised it" rule.
The 3 deals closest to signature: 1. **Deal-547B2B** — $11,200 (Alex Franklin, DS5/COMMIT, close 2026-09-11) Why close: Slack (2026-09-04) — redlines back clean, signing page out, VP People said signing next day (2026-09-05). Signature-imminent. Left: Countersignature / execution. 2. **Deal-403845** — $9,000 (Alex Franklin, DS5/COMMIT, close 2026-09-11) Wait — CRM lists Deal-403845 under Alex Franklin, but Slack has Dana Mercer saying "Deal-403845 is also moving fine on my side — the order form is with their finance team." Data conflict on owner between CRM and Slack; flagging explicitly. Regardless of owner attribution, the deal itself is DS5/COMMIT with the order form sitting with the customer's finance team. Left: Customer finance sign-off on order form, then signature. 3. **Deal-B7EBD1** — $9,000 (Dana Mercer, DS5/COMMIT, close 2026-09-10) Why close: Earliest close date in the file (2026-09-10), DS5/COMMIT. No Slack update contradicting or confirming status, so ranking on CRM signal alone. Left: Not stated in provided data. Note on exclusions: Deal-2465CE (Dana Mercer, $5,400, DS5/COMMIT, 2026-09-10) looks close by CRM but Slack confirms champion departed + procurement freeze — Dana is pulling from commit. Excluded. Deal-D348E1 and Deal-A2B47C are "warm, normal legal-review pace" per Alex — not signature-imminent. Word count: ~230.
### FILE: deals_context (not provided) I don't have deal amount data — the request asks for "the deal and amount" for each candidate, but no deals file was provided. I'll cite deal aliases exactly and mark amounts as NOT PROVIDED. --- ### Candidate analysis **TG-001 / Deal-EC3025 — SCIM provisioning** - Prospect (IT Security Lead): "We need SCIM user provisioning — our security team will not approve any tool that requires manual account management." - Product docs: "SCIM user provisioning ... NOT currently listed as supported capabilities." - Classification: **REAL GAP** (capability absent from all tiers) - Deal: Deal-EC3025, Amount: NOT PROVIDED **TG-002 / Deal-D0D6B5 — ADP Workforce Now integration** - Prospect (HRIS Manager): "Our payroll runs on ADP Workforce Now and I don't see ADP anywhere in your integration list — that's a dealbreaker for us." - Product docs: HRIS list is Workday, BambooHR, Gusto, Rippling. "ADP Workforce Now integrations are NOT currently listed as supported capabilities." - Classification: **REAL GAP** (integration absent from all tiers) - Deal: Deal-D0D6B5, Amount: NOT PROVIDED **TG-003 / Deal-CFE7F4 — Custom report builder** - Prospect (VP People): "I tried to build a custom report combining recognition frequency with turnover and couldn't — is that possible on our current plan?" - Product docs: Custom report builder = Enterprise tier only. - Classification: **PLAN GATE** (capability exists on Enterprise; prospect is not on that tier) - Deal: Deal-CFE7F4, Amount: NOT PROVIDED **TG-004 / Deal-84DBA6 — Manager adoption of Slack recognition** - Prospect (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." - Product docs: Slack integration supported on all plans; manager analytics/nudges on Pro+. - Classification: **ROLLOUT/ENABLEMENT ISSUE** (product works; training/adoption gap) - Deal: Deal-84DBA6, Amount: NOT PROVIDED **TG-005 / Deal-36C33F — Native mobile app for hourly workers** - Rep (Alex Franklin) raised the mobile-app limitation. Prospect (HR Manager) response: "Good to know. The web version should be fine for our office staff for now." - Per instructions, rep language does not count as prospect voice. Prospect explicitly did NOT raise this as a gap. - Classification: **EXCLUDED — not prospect-voiced** - Deal: Deal-36C33F, Amount: NOT PROVIDED --- ### Summary — real product gaps (prospect-voiced, active deals) 1. **SCIM user provisioning** — Deal-EC3025 (IT Security Lead, dealbreaker language: "will not approve"). Amount: NOT PROVIDED. 2. **ADP Workforce Now HRIS integration** — Deal-D0D6B5 (HRIS Manager, explicit "dealbreaker"). Amount: NOT PROVIDED. Both are capabilities absent from every tier in the product docs excerpt, not plan gates or enablement issues.
Snapshot: 2026-09-05. Stale = no email/call/meeting in the engagements table dated 2026-08-29 or later (i.e., days-since-last > 7). Recency = max(last_email, last_call, last_meeting). Total stale open deals: 65 === Bryce Harmon — 13 stale deals, total $626,243.00 === Deal-2D1F1B DS1 $240,000.00 81d (last 2026-06-16) Deal-66D1FC DS1 $ 99,000.00 16d (last 2026-08-20) Deal-950043 DS1 $ 70,000.00 19d (last 2026-08-17) Deal-B23205 DS1 $ 45,000.00 16d (last 2026-08-20) Deal-7BBDFA DS3 $ 37,440.00 46d (last 2026-07-21) Deal-332637 DS2 $ 36,000.00 9d (last 2026-08-27) Deal-1BEEBF DS1 $ 31,500.00 19d (last 2026-08-17) Deal-C5658B DS1 $ 23,400.00 16d (last 2026-08-20) Deal-40522D DS3 $ 21,000.00 19d (last 2026-08-17) Deal-F0EBBB DS3 $ 11,400.00 24d (last 2026-08-12) Deal-E25A09 DS1 $ 6,000.00 9d (last 2026-08-27) Deal-C9C286 DS2 $ 5,502.00 9d (last 2026-08-27) Deal-012CB1 DS1 $ 1.00 23d (last 2026-08-13) === Dana Mercer — 14 stale deals, total $261,645.00 === Deal-44EA29 DS2 $ 60,000.00 10d (last 2026-08-26) Deal-E51FB7 DS2 $ 43,875.00 12d (last 2026-08-24) Deal-B42F46 DS1 $ 27,000.00 19d (last 2026-08-17) Deal-BA3DDC DS3 $ 23,400.00 15d (last 2026-08-21) Deal-9DDE86 DS2 $ 20,000.00 15d (last 2026-08-21) Deal-215CCA DS3 $ 18,900.00 17d (last 2026-08-19) Deal-5EED42 DS3 $ 16,250.00 11d (last 2026-08-25) Deal-57887A DS2 $ 15,000.00 8d (last 2026-08-28) Deal-B7EBD1 DS5 $ 9,000.00 16d (last 2026-08-20) Deal-3974EB DS4 $ 9,000.00 8d (last 2026-08-28) Deal-F40F04 DS2 $ 8,100.00 15d (last 2026-08-21) Deal-87DDD1 DS1 $ 5,000.00 19d (last 2026-08-17) Deal-F336B6 DS3 $ 4,200.00 15d (last 2026-08-21) Deal-0660B4 DS4 $ 1,920.00 16d (last 2026-08-20) === Cole Ingram — 18 stale deals, total $252,905.03 === Deal-D04904 DS2 $ 58,529.25 11d (last 2026-08-25) Deal-B25F40 DS3 $ 40,000.00 8d (last 2026-08-28) Deal-813836 DS2 $ 32,175.00 11d (last 2026-08-25) Deal-1BA595 DS2 $ 31,750.00 11d (last 2026-08-25) Deal-CFE1E8 DS3 $ 18,000.00 11d (last 2026-08-25) Deal-CD47A6 DS2 $ 12,168.00 11d (last 2026-08-25) Deal-627646 DS3 $ 11,193.00 11d (last 2026-08-25) Deal-FF809F DS2 $ 7,781.20 11d (last 2026-08-25) Deal-AF932D DS2 $ 7,225.40 11d (last 2026-08-25) Deal-A71728 DS2 $ 6,947.50 11d (last 2026-08-25) Deal-8BC9F5 DS2 $ 5,616.00 10d (last 2026-08-26) Deal-175395 DS3 $ 4,779.88 11d (last 2026-08-25) Deal-481E24 DS3 $ 4,140.00 10d (last 2026-08-26) Deal-C7F9BF DS2 $ 3,360.00 11d (last 2026-08-25) Deal-2F3A66 DS3 $ 3,334.80 11d (last 2026-08-25) Deal-342E96 DS2 $ 2,700.00 24d (last 2026-08-12) Deal-E568D5 DS3 $ 1,875.00 11d (last 2026-08-25) Deal-FD9F4E DS5 $ 1,330.00 10d (last 2026-08-26) === Alex Franklin — 19 stale deals, total $109,536.00 === Deal-CC08D1 DS1 $ 24,000.00 16d (last 2026-08-20) Deal-E73427 DS3 $ 18,000.00 10d (last 2026-08-26) Deal-885F45 DS2 $ 9,300.00 12d (last 2026-08-24) Deal-C2FF3C DS1 $ 8,316.00 10d (last 2026-08-26) Deal-3EED2C DS2 $ 7,200.00 N/A (no engagements row — data missing) Deal-0D2F7A DS3 $ 5,100.00 12d (last 2026-08-24) Deal-6C60D4 DS3 $ 4,800.00 12d (last 2026-08-24) Deal-13FEBD DS2 $ 4,680.00 12d (last 2026-08-24) Deal-9D0060 DS3 $ 3,840.00 12d (last 2026-08-24) Deal-690476 DS2 $ 3,600.00 18d (last 2026-08-18) Deal-C6D97A DS4 $ 3,240.00 8d (last 2026-08-28) Deal-EE195F DS3 $ 3,120.00 8d (last 2026-08-28) Deal-278DEC DS3 $ 2,700.00 8d (last 2026-08-28) Deal-635B8E DS3 $ 2,600.00 18d (last 2026-08-18) Deal-6883F3 DS1 $ 2,400.00 16d (last 2026-08-20) Deal-4A13AD DS3 $ 2,160.00 26d (last 2026-08-10) Deal-F67D31 DS2 $ 1,800.00 8d (last 2026-08-28) Deal-5FDCE4 DS3 $ 1,600.00 12d (last 2026-08-24) Deal-BA571A DS4 $ 1,080.00 18d (last 2026-08-18) === Elena Sinclair — 1 stale deal, total $2,100.00 === Deal-57FF13 DS1 $ 2,100.00 N/A (no engagements row — data missing) Owner totals: - Bryce Harmon: 13 stale deals, $626,243.00 - Dana Mercer: 14 stale deals, $261,645.00 - Cole Ingram: 18 stale deals, $252,905.03 - Alex Franklin: 19 stale deals, $109,536.00 - Elena Sinclair: 1 stale deal, $2,100.00 Data notes: - Farid Osman's 6 open deals all have engagements activity within the last 7 days (none stale). - 2 stale deals have no row at all in engagements_by_deal_90d.csv (Deal-3EED2C, Deal-57FF13); flagged as stale by definition since no email/call/meeting was logged in the last 7 days per that table. - "Days since" uses the max of last_email/last_call/last_meeting from the engagements table only, per your instruction to ignore the deal's last_contacted_field.
Snapshot: 2026-09-05. Window: 2026-08-06 → 2026-09-05 (t_ds2 within 30 days of snapshot, inclusive). Method notes: - "Activities" = emails_30d + calls_30d + meetings_30d from engagements_by_deal_90d.csv, summed across all deals owned by the rep (open deals in deals_open.csv). - "DS2 entries last 30d" = count of deals whose t_ds2 falls in [2026-08-06, 2026-09-05]. - Activity data is at deal-grain, restricted to deals currently in deals_open.csv; engagements on closed/archived deals are not visible in this snapshot. Per-rep totals Owner Emails Calls Mtgs Total DS2/30d Act/DS2 Alex Franklin 307 36 41 384 18 21.33 Bryce Harmon 162 0 43 205 4 51.25 Dana Mercer 84 18 11 113 1 113.00 Cole Ingram 96 14 1 111 2 55.50 Farid Osman 38 0 34 72 1 72.00 Elena Sinclair 0 0 0 0 0 n/a Activity mix (share of that rep's total) - Alex Franklin: 79.9% email / 9.4% call / 10.7% mtg (307+36+41 = 384) - Bryce Harmon: 79.0% email / 0.0% call / 21.0% mtg (162+0+43 = 205) - Dana Mercer: 74.3% email / 15.9% call / 9.7% mtg (84+18+11 = 113) - Cole Ingram: 86.5% email / 12.6% call / 0.9% mtg (96+14+1 = 111) - Farid Osman: 52.8% email / 0.0% call / 47.2% mtg (38+0+34 = 72) - Elena Sinclair: no activities in window on open deals Efficiency ranking (activities per DS2 entry, lower = more efficient) 1. Alex Franklin 384 / 18 = 21.33 2. Bryce Harmon 205 / 4 = 51.25 3. Cole Ingram 111 / 2 = 55.50 4. Farid Osman 72 / 1 = 72.00 5. Dana Mercer 113 / 1 = 113.00 — Elena Sinclair: undefined (0 DS2 entries in window) Most efficient rep: Alex Franklin (21.33 activities per DS2 entry). Highest-volume rep: Alex Franklin (384 total activities). They do not differ — Alex Franklin is both the highest-volume and the most efficient rep in this window. Data gaps to flag: - inbound_emails_30d is 0 for every deal in the file; the emails counts are total emails and cannot be split into inbound/outbound. - Engagements from any won/lost/archived deals aren't in this snapshot; totals are open-pipeline-only. - Elena Sinclair owns one open deal (Deal-57FF13) with no row in engagements_by_deal_90d.csv, so her activity totals are absent, not confirmed zero.
All numbers computed from the data. Here is the scorecard.
═══════════════════════════════════════════════════════════
QTD SCORECARD — Alex Franklin — Q3 2026 as of 2026-09-05
═══════════════════════════════════════════════════════════
BOOKINGS vs QUOTA
Quota (2026-Q3): $200,000
Bookings QTD: $150,000
Attainment: 75.0% (150,000 / 200,000)
Gap to quota: $50,000
Excluded (pre-quarter): Deal-B3E6F1, closed 2026-06-20, $24,000
NEW vs EXPANSION (QTD wins, 8 deals)
New: $113,500 (5 deals) 75.7% of bookings
Expansion: $ 36,500 (3 deals) 24.3% of bookings
Wins list:
2026-07-15 Deal-A1C3E5 $40,000 new
2026-07-24 Deal-F2C7D8 $20,000 expansion
2026-07-31 Deal-B7D2F4 $35,000 new
2026-08-12 Deal-C9E1A6 $21,000 new
2026-08-19 Deal-A8B4D6 $12,000 expansion
2026-08-21 Deal-D4B8C2 $11,000 new
2026-09-02 Deal-E6F3A9 $ 6,500 new
2026-09-03 Deal-C5D9E2 $ 4,500 expansion
ACTIVE PIPELINE BY STAGE (all open deals, any close date)
DS1: 20 deals $ 284,621
DS2: 28 deals $ 353,760
DS3: 67 deals $ 552,705
DS4: 5 deals $ 23,574
DS5: 5 deals $ 45,730
─────────────────────────────
TOTAL: 125 deals $1,260,390
ROLLING 90-DAY DS2-TO-WON RATE (entered_ds2 between 2026-06-07 and 2026-09-05)
Cohort size: 111 deals
Won: 8
Lost: 27
Still open: 76
Won / cohort: 8 / 111 = 7.2%
Won / decided: 8 / 35 = 22.9% (excludes still-open)
WIN / LOSS COUNTS (all closes in file fall inside Q3)
Wins QTD: 8
Losses QTD: 27
Win rate (decided): 8 / 35 = 22.9%
Top loss reason: "Lost- Timing (1 year or more)" — 13 of 27 (48.1%)
Full breakdown:
13 Lost- Timing (1 year or more)
5 MIA
5 Competitor
2 Lost DM
1 Feature Request
1 Lost- Does not fit ICP
ACTIVITY VOLUME — LAST 30 DAYS (across all owned deals)
Emails: 807
Calls: 112
Meetings: 128
Notes: 50
Split across deal states (emails / calls / meetings / notes):
Won deals: 99 / 33 / 25 / 24
Lost deals: 109 / 25 / 13 / 25
Open deals: 599 / 54 / 90 / 1
═══════════════════════════════════════════════════════════
COACHING OBSERVATIONS
═══════════════════════════════════════════════════════════
1. Timing objections dominate losses (13/27 = 48%) and correlate with weak late-stage discovery. Every "Lost- Timing (1 year or more)" deal had a close_date pushed into Aug and an entered_ds2 date 3–5 weeks earlier — meaning budget/urgency was never validated at DS2. Recommendation: add a mandatory budget-and-trigger checkpoint before advancing DS2 → DS3.
2. Pipeline is bottom-heavy and stalling: 67 of 125 open deals (54%) sit in DS3, but only 10 sit in DS4+DS5 combined (8%). DS3 → DS4 conversion is the choke point, not top-of-funnel. Coupled with the 90-day DS2→Won rate of 7.2% cohort / 22.9% decided, the AE is opening enough deals but not driving them to commercial. Focus 1:1s on the 67 DS3 deals with a "next-step or disqualify" push.
3. Activity is disproportionately weighted to open-deal emails (599 of 807 emails, 74%) versus meetings on those same open deals (90, or 0.72 meetings/deal). Won deals show a very different pattern — meetings/deal on the 9 wins ≈ 2.8 vs. 0.72 on open. The AE is emailing pipeline instead of getting it in a room. Push for meeting-booked as the leading indicator, not touches.
Threading criteria applied: active = last_engaged_date ≥ 2026-07-05 (60 days before latest date in data, 2026-09-03) AND is_former=false. Flag = active count < 2, OR active count < 3, OR all active contacts share a single persona.
DATA GAP: The provided file has no deal `amount` or `stage` columns. I cannot report those fields — not on file. Persona-to-add recommendations below are based on threading gaps only, not stage (stage-aware prioritization is not possible with the data given).
Flagged deals (11 of 14):
1) Deal-EC3025 — C-FDD0C7
- amount: not on file | stage: not on file
- active contacts: 1 (CT-047C54)
- personas present: champion
- personas missing: economic buyer, HR admin, IT security, finance
- most valuable to add: economic buyer (single-threaded on a non-buyer; prior EB CT-F2C1AE is former)
- unengaged fit: CT-6827DB, Chief People Officer (economic buyer)
2) Deal-92D97D — C-E23238
- amount: not on file | stage: not on file
- active contacts: 1 (CT-01F5B4). Note: CT-A902AE champion last engaged 2026-06-01 → outside 60-day window, inactive.
- personas present: HR admin
- personas missing: economic buyer, champion, IT security, finance
- most valuable to add: champion (re-engage or replace the lapsed one; you cannot sell through an HRIS admin alone)
- unengaged fit: none on file
3) Deal-50D386 — C-EB10E4
- amount: not on file | stage: not on file
- active contacts: 2 (CT-AA41B2, CT-B9C35B)
- personas present: champion, HR admin
- personas missing: economic buyer, IT security, finance
- most valuable to add: economic buyer
- unengaged fit: CT-A1C4B3, Chief People Officer (economic buyer)
4) Deal-D0D6B5 — C-32918E
- amount: not on file | stage: not on file
- active contacts: 3 (CT-87CED4, CT-DE6D7C, CT-FD70B2) — all champion → under-threaded (single persona)
- personas present: champion
- personas missing: economic buyer, HR admin, IT security, finance
- most valuable to add: economic buyer
- unengaged fit: CT-1FA4DB, Chief People Officer (economic buyer)
5) Deal-5BFE3B — C-535D36
- amount: not on file | stage: not on file
- active contacts: 2 (CT-57123B, CT-5CE757) — both champion → single persona
- personas present: champion
- personas missing: economic buyer, HR admin, IT security, finance
- most valuable to add: economic buyer
- unengaged fit: none on file
6) Deal-36C33F — C-077A0E
- amount: not on file | stage: not on file
- active contacts: 1 (CT-4FE556). Champion CT-405B45 and EB CT-86B22F both marked former → deal is effectively orphaned on the buying side.
- personas present: IT security
- personas missing: economic buyer, champion, HR admin, finance
- most valuable to add: champion (no buyer or advocate is engaged; IT security alone will not carry this)
- unengaged fit: CT-1DB73E, Chief People Officer (economic buyer) — usable for EB re-entry, but a new champion is the higher priority
7) Deal-885F45 — C-5E8EFB
- amount: not on file | stage: not on file
- active contacts: 2 (CT-51C81E, CT-D9A0E8)
- personas present: champion, economic buyer
- personas missing: HR admin, IT security, finance
- most valuable to add: IT security (matches the on-file unengaged fit; HR admin/finance also missing but no on-file contact)
- unengaged fit: CT-B3F25D, IT Security Lead (IT security)
8) Deal-FCBE5B — C-737030
- amount: not on file | stage: not on file
- active contacts: 1 (CT-4A5317)
- personas present: champion
- personas missing: economic buyer, HR admin, IT security, finance
- most valuable to add: economic buyer
- unengaged fit: none on file
9) Deal-5408B0 — C-2AE3AA
- amount: not on file | stage: not on file
- active contacts: 2 (CT-D33AE4, CT-8742FD)
- personas present: champion, HR admin
- personas missing: economic buyer, IT security, finance
- most valuable to add: economic buyer
- unengaged fit: CT-07FA76, Chief People Officer (economic buyer)
10) Deal-C6D97A — C-5A8FC2
- amount: not on file | stage: not on file
- active contacts: 3 (CT-223DDC, CT-B03555, CT-4E8A2B) — all champion → single persona
- personas present: champion
- personas missing: economic buyer, HR admin, IT security, finance
- most valuable to add: economic buyer
- unengaged fit: none on file
11) Deal-F9A08A — C-0D15DF
- amount: not on file | stage: not on file
- active contacts: 1 (CT-931B10). EB CT-913581 last engaged 2026-06-20 → outside 60-day window.
- personas present: champion
- personas missing: economic buyer, HR admin, IT security, finance
- most valuable to add: economic buyer (was engaged 75 days ago; needs revival)
- unengaged fit: CT-697541, Chief People Officer (economic buyer)
Not flagged (pass threading test): Deal-84DBA6 (3 active, 3 personas), Deal-4B0BEB (4 active, 4 personas), Deal-D348E1 (5 active, 5 personas).
OPENING (first 5 minutes, minute ≤ 5)
- 8 of 10 calls open with the 400-person retailer / 18% turnover / milestone-automation story (TT-001, 002, 003, 005, 006, 007, 008, 010).
- 1 opens with a security-then-pricing agenda (TT-004); 1 opens with straight pricing per prospect request (TT-009).
- Quote: "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, min 0)
THREE MOST COMMON OBJECTIONS + HANDLING
1) "Budget locked until next fiscal year" — 3 occurrences (TT-001, 003, 006, 010 prospect line; note: 4 raises, not 3 — see below). Recount: TT-001 min 6, TT-003 min 6, TT-006 min 6, TT-010 min 6 = 4 occurrences.
Handle: pivots to turnover-savings ROI ($210k backfill avoidance) as finance justification.
Quote: "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, min 8)
2) "Revisit next quarter / open enrollment" — 3 occurrences (TT-002, 005, 008, all min 6).
Handle: offers a 90-day single-department pilot to generate internal data before replanning.
Quote: "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, min 8)
3) "We already do recognition with spreadsheet + gift cards" — 3 occurrences (TT-004, 007, 009, all min 6).
Handle: reframes on automation + analytics vs. manual scale ceiling.
Quote: "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, min 8)
(Correction: top 3 by frequency are budget-locked=4, revisit-next-quarter=3, spreadsheet-status-quo=3. Committee-approval also appears 2x on TT-004 min 11 and TT-010 min 11 but ranks 4th.)
CONCRETE NEXT STEP AGREED
- Explicit "yes, Thursday 2pm" agreement: TT-001, 002, 003, 005, 006, 008, 009 = 7 of 10 calls.
- No agreement: TT-004 (left with prospect), TT-007 ("no urgency"), TT-010 (committee wait).
- Rate: 7/10 = 70%.
Quote: "Yes, Thursday at 2pm works — send the invite and I'll bring our HRIS manager." (TT-001, min 15)
COMPETITORS RAISED BY PROSPECTS
- Awardco — TT-003, min 4 (prospect-raised: "in late talks with Awardco")
- Kudos — TT-007, min 4 (prospect-raised: "How are you different from Kudos?")
- Workhuman — TT-005, min 2 — NOT prospect-raised; Alex introduced it. Excluded from prospect-raised list.
Prospect-raised competitors: Awardco, Kudos (2 total).
DATA-MISSING NOTE
- The rep's rate here (7/10) contradicts the memory note "4/58 calls (7%)"; that prior figure is from a different dataset and does not apply to this 10-call sample.
COACHING NOTES
1) The retailer-turnover opener carries the whole first 5 minutes on 8/10 calls — it's earning next steps but not differentiating on the two competitive calls (TT-003 Awardco, TT-007 Kudos). Build a variant opener that leads with automation+analytics proof for prospects already evaluating a competitor, so the competitive frame is set before the case study lands.
2) When "budget locked" hits (4/10 calls), Alex closes with the $210k line and gets the meeting 3/4 times — but on TT-010 the same script fails against committee-gated buyers. Add a second move for committee objections specifically: propose a 30-min working session with the committee sponsor rather than a general next-step ask, which is the pattern that recovered TT-002/005/008 on the enrollment objection.
# Q3 2026 Forecast (close date 2026-07-01 through 2026-09-30)
## In-quarter category totals
| Category | Deals | Total amount |
|------------|-------|------------------|
| COMMIT | 7 | $44,729.00 |
| BEST_CASE | 24 | $203,565.00 |
| PIPELINE | 23 | $201,637.40 |
PIPELINE is listed for completeness only; it weights to zero per the rule.
## Weighted forecast
Rule: 1.00 × COMMIT + 0.35 × BEST_CASE
= 1.00 × 44,729.00 + 0.35 × 203,565.00
= 44,729.00 + 71,247.75
= $115,976.75
## Excluded (close_date after 2026-09-30)
32 deals, total $227,575.00. Breakdown:
- COMMIT: 1 deal, $13,770.00 (Deal-D348E1, close 2026-10-15)
- BEST_CASE: 9 deals, $28,240.00
- PIPELINE: 22 deals, $185,565.00
Note: no deals in the extract have a close_date before 2026-07-01, so nothing was excluded on the early side.
## Top 5 BEST_CASE deals in-quarter
| Rank | Deal alias | Stage | Amount | Close date |
|------|--------------|-------|------------|-------------|
| 1 | Deal-2D7423 | DS3 | $38,935.00 | 2026-09-30 |
| 2 | Deal-25F752 | DS4 | $24,000.00 | 2026-09-25 |
| 3 | Deal-E53952 | DS4 | $19,656.00 | 2026-09-30 |
| 4 | Deal-5EED42 | DS3 | $16,250.00 | 2026-09-30 |
| 5 | Deal-FA32A0 | DS3 | $11,116.00 | 2026-09-25 |
Those five alone are $109,957.00 of the $203,565.00 BEST_CASE pool (54%), so the weighted forecast is highly sensitive to whichever of them slip.
## Data quality
Ownership is effectively unassigned across the book — 85 of 86 deals have a blank `owner`, so the forecast cannot be rolled up by rep or held to anyone for commit accuracy. Category-stage integrity is weak: two COMMIT deals sit at DS1/DS2 (Deal-A5E80A DS1, Deal-499BF6 DS2) and one DS4 sits in PIPELINE (Deal-6787C2), which means the categories are being set by feel rather than by stage discipline. Close-date hygiene is stale: four deals (Deal-31AD2C, Deal-333EBB, Deal-57FF13, Deal-7A2454) still show open with close dates already in the past as of the 2026-09-05 extract, and 21 of 24 in-quarter BEST_CASE deals are stacked on the last week of the quarter (12 on 9-30 alone), which is the classic sandbagged-close-date pattern. Qualification depth is thin — 71 of 86 deals have `why_buys_chars = 0`, including 20 of 24 in-quarter BEST_CASE deals, so most of the $203K driving the weighted number has no documented buying reason in the CRM.
Activation hypothesis test — cohort n=220, all 25+ months old, retained = current_status == 'active'. 2x2 (m1_users >= 5 AND m1_redemptions >= 1): Both signals n=47 retained=31 66.0% Givers-only (5+ users, 0 redemptions) n=49 retained=23 46.9% Redemption-only (<5 users, 1+ redemption) n=29 retained=9 31.0% Neither n=95 retained=38 40.0% Total: 220 companies, 101 active = 45.9% overall retention. Excluded from denominator: 0. Every row has parseable m1_users and m1_redemptions, and every row has a current_status (101 active, 116 cancelled, 3 non_renewing). non_renewing is treated as not-retained per the definition (current_status = 'active' means retained). Arithmetic check: 47 + 49 + 29 + 95 = 220 ✓; 31 + 23 + 9 + 38 = 101 ✓. Single signal with the largest retention lift: **m1_users >= 5 (givers signal).** - Givers=yes (both + givers-only): (31+23)/(47+49) = 54/96 = 56.3% - Givers=no (redemption-only + neither): (9+38)/(29+95) = 47/124 = 37.9% - Lift: +18.4 percentage points. vs. m1_redemptions >= 1 alone: - Redemption=yes: (31+9)/(47+29) = 40/76 = 52.6% - Redemption=no: (23+38)/(49+95) = 61/144 = 42.4% - Lift: +10.2 percentage points. What this does show: - Companies hitting both activation signals retain at 66.0% vs. 40.0% neither — a +26.0 pp gap, ~1.65x the neither-bucket rate. - Reaching 5+ unique givers in month 1 is the stronger of the two single signals in this cohort (+18.4 pp vs. +10.2 pp). - "Redemption-only" (redemption without a giver base) is the WORST bucket at 31.0% — below "neither" (40.0%). A redemption without a giving habit around it is not a positive signal here. What this does NOT prove: - Causation. Companies with more engaged month-1 usage may differ on confounders (size, tier, champion strength, industry, HRIS integration) that independently drive retention. The 2x2 is associational. - Generalization beyond 2023-01 through 2023-07 signups. n=220 in one cohort window; no seasonal or vintage comparison. - That forcing a low-engagement account to hit 5 givers + 1 redemption would move its retention to 66%. Selection ≠ intervention. - Anything about the *magnitude* of activation past the thresholds (a company with 30 givers may behave differently from one with 5 — not tested). - Statistical significance. No CI or p-value computed; the redemption-only cell (n=29, 9 retained) is small and its rate is noisy. - Which signal is the leading indicator vs. a downstream reflection of an already-healthy deployment.
ARR RECONCILIATION — as of 2026-09-05
=====================================
TOTALS
------
HubSpot ARR (company_arr.csv, 39 companies): $603,581.76
Billing ARR — active subs only (36 of 38 subs): $604,739.28
Billing ARR — all subs incl. cancelled (38 subs): $617,897.76
Primary variance (HubSpot − Billing active): −$1,157.52
Arithmetic: 603,581.76 − 604,739.28 = −1,157.52
(Reporting against active-only billing is the meaningful frame; cancelled subs should not count as billed ARR. The two cancelled subs total $13,158.48 and are surfaced in bucket C below.)
VARIANCE DECOMPOSITION (sums exactly to −$1,157.52)
---------------------------------------------------
A. Missing records — HS has record, no billing sub: +$16,497.24
B. Missing records — billing sub, no HS record: −$28,449.24
C. Status mismatch — HS still carries ARR on cancelled: +$13,158.48
D. Other / data-quality (active in both, |Δ| > $1): −$2,400.00
E. Rounding (active in both, |Δ| ≤ $1): +$36.00
-----------
SUM: −$1,157.52 ✓
MISMATCHED ACCOUNTS (with suggested owner)
------------------------------------------
Bucket A — HubSpot record with no active billing subscription
C-0D5BBE3A HS ARR $16,497.24, billing $0.00, Δ +$16,497.24
Suggested owner: Billing Ops — create/activate subscription in Chargebee, or CS/AM to confirm churn and zero out HS ARR.
Bucket B — Active billing subscription with no HubSpot company record
C-21629AA4 (SUB-0004) billing $28,449.24, HS $0.00, Δ −$28,449.24
Suggested owner: RevOps / HubSpot admin — create the company record and backfill ARR property.
Bucket C — HubSpot carrying ARR for cancelled subscriptions
C-0C8323BF (SUB-000E, cancelled) HS ARR $4,905.24 → should be $0
Suggested owner: CS Ops — close-lost / churn workflow on HS company; zero out ARR.
C-0DC4FB8C (SUB-000F, cancelled) HS ARR $8,253.24 → should be $0
Suggested owner: CS Ops — same treatment.
Bucket D — Material active-account delta
C-0F7269D7 (SUB-0006) billing $26,796.00 (MRR 2,233 × 12), HS $24,396.00, Δ −$2,400.00
Suggested owner: AM / Deal Desk — investigate whether HS ARR is stale (missed an expansion of ~$200 MRR / $2,400 ARR) or whether Chargebee MRR is overstated.
Bucket E — Sub-dollar rounding on active accounts (informational; no action)
C-0D66DF9E (SUB-0005) billing $23,184.00, HS $23,200.00, Δ +$16.00 — RevOps to normalize rounding rule.
C-14D70CE0 (SUB-0008) billing $18,180.00, HS $18,200.00, Δ +$20.00 — RevOps to normalize rounding rule.
BUSINESS-RULE VIOLATIONS (term ≠ 12 months must have cf_agreement_end_date)
---------------------------------------------------------------------------
SUB-0002 C-1794A52C term=24m status=active cf_agreement_end_date = <BLANK>
SUB-0019 C-22170CA1 term=36m status=active cf_agreement_end_date = <BLANK>
Compliant multi-year subs (for reference; not violations):
SUB-000C C-0DB48281 term=24m cf_agreement_end_date = 2027-11-30
SUB-001A C-0FC4DBB8 term=36m cf_agreement_end_date = 2027-11-30
DATA CAVEATS
------------
- "Billing ARR" is computed as MRR × 12 per the stated rule; multi-year subs are annualized the same way (no ACV amortization applied).
- 39 HS companies vs 38 billing subs; the intersection is 37 companies. Every account outside the intersection is captured in buckets A or B.
KVMs computed as unweighted means across the 30 companies per month (n=30 in each; balanced panel, same companies both months). All are tier_three, so plan_tier cannot drive variation; size_band is the only segmentation available. | KVM | 2026-07 | 2026-08 | Abs Δ | Rel Δ | Direction | |---|---|---|---|---|---| | giving_rate | 0.6023 | 0.6027 | +0.0004 | +0.07% | ↑ flat | | redemptions_per_user | 1.7300 | 1.7302 | +0.0002 | +0.01% | flat | | 1:1 meetings engagement | 0.4469 | 0.4472 | +0.0003 | +0.06% | ↑ flat | | pulse check engagement | 0.6006 | 0.5086 | −0.0920 | −15.31% | ↓ | Largest relative move: pulse check engagement (−15.31%). Segment driving it: enterprise. Pulse engagement by size_band, 2026-07 → 2026-08: - smb: 0.6588 → 0.6573 (−0.22%) - mid_market: 0.5930 → 0.5942 (+0.21%) - enterprise: 0.5500 → 0.2743 (−50.13%) All 10 enterprise companies drop from ~0.53–0.57 to ~0.26–0.29 in August while smb and mid_market are unchanged. Enterprise alone accounts for the entire aggregate decline; smb and mid_market are noise-level. The other three KVMs moved <0.1% and are effectively unchanged. Recommend confirming this isn't an enterprise pulse-instrumentation issue before treating it as a real engagement collapse.
Redemptions — YTD through 2026-08 Last completed month: 2026-08 (today is 2026-09-08). All 378 rows in the file fall within 2026-01 through 2026-08, so the YTD-through-last-completed-month window equals the full file. Headline metrics - Redemption count: 378 - Spend: $27,846.00 - Unique redeemers (distinct user_key): 235 - Redemptions per redeemer: 378 / 235 = 1.61 Provider mix (% of spend, sums to 100.00%) - custom: $10,873.00 / $27,846.00 = 39.05% - Tremendous: $8,505.00 / $27,846.00 = 30.54% - Snappy: $5,238.00 / $27,846.00 = 18.81% - TangoCard: $3,230.00 / $27,846.00 = 11.60% - Sum: 39.05 + 30.54 + 18.81 + 11.60 = 100.00% Top 5 countries by redemption count 1. US — 244 2. CA — 24 3. AU — 21 4. GB — 17 (tie) 4. NL — 17 (tie) Note on the tie: GB and NL are tied at 17 redemptions each; both are listed. The next country (SG) has 12.
CHURN-SAVE ANALYSIS — snapshot 2026-09-05 Eligibility gate: R1 health_score<60 AND R2 churn_save_eligible_amount>0 AND R3 renewal within 120 days (≤2027-01-03). Play-assignment logic (documented so you can audit): - Usage revival — usage_trend_3m=declining OR seat utilization <50% (there IS a usage lever to pull) - Executive touch — champion_active=false (no internal advocate; escalate) - Commercial concession — champion active AND usage healthy (no usage/relationship lever left; price/terms is what remains) Priority applied in that order (usage → executive → commercial). QUALIFIED ACCOUNTS (8) — $224,601.00 at stake 1. C-0F6C0F34 — $49,707.00 | hs=51, renewal 2026-10-03 (28d), trend=growing, util=308/395=78%, champion=false PLAY: Executive touch — signal: champion_active=false (no internal advocate 28 days from renewal) 2. C-0B827671 — $25,365.00 | hs=56, renewal 2026-11-14 (70d), trend=declining, util=113/202=56%, champion=true PLAY: Usage revival — signal: usage_trend_3m=declining 3. C-0B360C78 — $35,748.00 | hs=57, renewal 2026-10-28 (53d), trend=growing, util=246/327=75%, champion=true PLAY: Commercial concession — signal: growing usage + active champion + 75% utilization; no usage or relationship lever, price/terms is the remaining knob 4. C-0B0F1BAB — $5,494.00 | hs=38, renewal 2026-09-23 (18d), trend=flat, util=238/363=66%, champion=false PLAY: Executive touch — signal: champion_active=false, lowest health in set, renewal in 18 days 5. C-0CA21961 — $16,829.00 | hs=58, renewal 2026-12-28 (114d), trend=flat, util=84/325=26%, champion=true PLAY: Usage revival — signal: seat utilization 84/325=26% (240 unused seats) 6. C-0E9C27D1 — $41,235.00 | hs=39, renewal 2026-09-24 (19d), trend=flat, util=134/157=85%, champion=true PLAY: Commercial concession — signal: flat usage + active champion + 85% utilization; strong adoption but health=39 suggests dissatisfaction unrelated to usage — price/terms lever 7. C-0CEF69FD — $32,621.00 | hs=53, renewal 2026-11-21 (77d), trend=growing, util=97/136=71%, champion=false PLAY: Executive touch — signal: champion_active=false despite growing usage 8. C-0D3278C7 — $17,602.00 | hs=54, renewal 2026-11-12 (68d), trend=declining, util=126/380=33%, champion=true PLAY: Usage revival — signal: usage_trend_3m=declining AND seat utilization 126/380=33% (both usage signals fire) Arithmetic: 49,707 + 25,365 + 35,748 + 5,494 + 16,829 + 41,235 + 32,621 + 17,602 = $224,601.00 Play distribution: Usage revival 3 ($59,796) | Executive touch 3 ($87,822) | Commercial concession 2 ($76,983) AT-RISK (health<60) BUT DOES NOT QUALIFY (7) - C-0BC71BDD — hs=55, csea=$0, renewal 52d — fails R2 - C-0BA71F12 — hs=52, csea=$6,824, renewal 218d — fails R3 - C-0F6694C3 — hs=43, csea=$0, renewal 197d — fails R2, R3 - C-0BE96399 — hs=54, csea=$0, renewal 54d — fails R2 - C-0F876796 — hs=47, csea=$19,958, renewal 154d — fails R3 - C-0FCCD2DF — hs=43, csea=$0, renewal 230d — fails R2, R3 - C-10A56B0F — hs=54, csea=$0, renewal 98d — fails R2 Note on data limits: eligibility rules define the gate, but they do not define the play-selection logic — the three plays above (usage/executive/commercial) were assigned using signals in the file (usage_trend_3m, seats/seats_used, champion_active). If your playbook defines different play triggers, the assignments should be re-mapped to those.
Seat coverage: 150 licensed / 400 headcount = 37.5% covered.
Usage health:
- MAU grew 88 → 126 from Mar to Aug 2026, +38 users (+43.2% over 5 months).
- August MAU of 126 exceeds licensed seats of 150 by... correction: 126/150 = 84.0% of licensed seats active in August, up from 88/150 = 58.7% in March.
Headroom at current per-seat rate:
- Current ARR $9,000.00 / 150 seats = $60.00 per seat / year.
- Seat headroom to full headcount: 400 − 150 = 250 seats.
- ARR headroom at $60/seat: 250 × $60.00 = $15,000.00 incremental (total potential $24,000.00).
Who replied and can they buy:
- Maria S., People Operations Coordinator — replied 2026-09-02. Explicitly disqualified herself: "not the right person for purchasing decisions." Cannot buy. Offered warm intro to Dana R.
Right buyer from contacts:
- Dana R., VP People — economic buyer per Maria's reply ("Budget and seat expansion sit with Dana R."). Last engaged 2026-05-18 (107 days ago). Sam K., Office Manager, last engaged 2025-11-03 — not relevant to buying decision.
Reply email (under 150 words):
Subject: RE: Growing your team's recognition program
Hi Maria,
Thanks so much for the kind words — glad the team is getting real value out of Bonusly. And I appreciate you being upfront about where purchasing sits; that's genuinely helpful.
A warm intro to Dana would be great whenever it's convenient. One data point that might be useful for her: your monthly active users have grown from 88 in March to 126 in August — a 43% climb in five months. That kind of organic adoption is usually a good signal it's worth revisiting seat coverage, especially since you're currently licensed for 150 across a 400-person team.
Happy to put together a short usage snapshot for Dana ahead of any conversation, or just keep it casual — whatever you think works best.
Thanks again, Maria.
Best,
Cole
(word count: 132)
CSM Mid-Onboarding Call Prep — C-0D284E42 Signup: 2026-08-11 (25 days in as of 2026-09-04) COMPLETE (with data field) - Slack integration connected — integration_slack = 2026-08-12 - Allowance set — allowance_set = 2026-08-13 - Admins added — admins_added = 2 (2 admins) - First recognition given — first_recognition_at = 2026-08-15 14:22 NOT COMPLETE (field is blank) - HRIS integration — integration_hris is empty - First redemption — first_redemption_at is empty EARLY ENGAGEMENT SIGNALS (active_givers, 25 days) - Day 1 (2026-08-11): 3 givers - Latest (2026-09-04): 15 givers - Growth: 15 − 3 = 12 additional givers; 15 / 3 = 5.0x since signup - Time-to-first-recognition: 2026-08-15 − 2026-08-11 = 4 days - Trend by week (avg active_givers/day): - Week 1 (08-11 → 08-17, 7 days): (3+3+4+4+5+4+7)/7 = 30/7 = 4.29 - Week 2 (08-18 → 08-24, 7 days): (5+7+6+9+8+9+9)/7 = 53/7 = 7.57 - Week 3 (08-25 → 08-31, 7 days): (9+11+10+10+11+13+11)/7 = 75/7 = 10.71 - Partial Week 4 (09-01 → 09-04, 4 days): (13+13+15+15)/4 = 56/4 = 14.00 - Week-over-week: W1→W2 +76%, W2→W3 +42%, W3→W4(partial) +31% - Peak active_givers: 15 (2026-09-03 and 2026-09-04) — most recent 2 days are the peak, trend is still climbing - Signal: strong, accelerating giver adoption; no plateau yet in the data provided DATA GAPS TO FLAG - No redemption timestamp — cannot confirm the reward-loop has closed - No HRIS connection date — cannot confirm employee sync is live - Dataset does not include: receiver counts, recognition volume, admin names, seat count, or allowance amount — cannot quantify recognition-per-giver, coverage %, or budget burn from what was provided THREE THINGS TO COVER ON THE CALL 1. Close the redemption loop. first_redemption_at is blank 20 days after first_recognition_at (2026-08-15 → 2026-09-04). Givers are scaling (3 → 15) but no one has redeemed yet — highest risk to stickiness. Walk through the catalog, confirm rewards are visible/approved, and identify what's blocking the first redemption. 2. Complete the HRIS integration. integration_hris is blank while integration_slack completed the day after signup. Without HRIS, employee sync, terminations, and org data are manual. Get the technical owner named and a target connect date on the call. 3. Convert giver momentum into program depth. Active givers grew 5.0x (3 → 15) with W1→W2 +76%, W2→W3 +42%, W3→W4 +31% — real traction, still accelerating. Use the call to lock in the next expansion step (company-wide launch comms, manager enablement, or additional admins beyond the current 2) so the curve doesn't flatten once early adopters saturate.
90-DAY RENEWAL RISK BRIEF Window: 2026-09-08 → 2026-12-07 (today = 2026-09-08) SYSTEM-OF-RECORD RULE - Multi-year contracts (Chargebee is_multi_year=true): trust Chargebee. ChurnZero is known wrong on multi-year, and the data confirms it — all 5 multi-year accounts disagree with Chargebee. - Single-year contracts (is_multi_year=false): the two systems match on all 15 accounts; use ChurnZero. DISAGREEMENTS FLAGGED (all 5 are multi-year; Chargebee used) - C-0B7D2C30: CZ 2026-09-10 vs CB 2026-09-15 → used 2026-09-15 - C-0BCDB8C2: CZ 2027-09-18 vs CB 2026-09-18 → used 2026-09-18 (CZ off by a full year — would have hidden this renewal entirely) - C-0D2AB865: CZ 2026-09-10 vs CB 2026-09-22 → used 2026-09-22 - C-0BBE3E60: CZ 2027-09-26 vs CB 2026-09-26 → used 2026-09-26 (CZ off by a full year) - C-0F5D2323: CZ 2026-09-10 vs CB 2026-09-29 → used 2026-09-29 Note: C-0BCDB8C2 and C-0BBE3E60 do not appear on any 90-day view built from ChurnZero alone. Two live renewals ($85,420 combined ARR) would be invisible without the Chargebee cross-check. RENEWAL DETAIL (sorted by date used) | Company | CSM | ARR | Date used | Source | Seat util | 3-mo usage trend | Risk | Evidence | |---|---|---|---|---|---|---|---|---| | C-0B7D2C30 | Dana Mercer | $65,901 | 2026-09-15 | Chargebee (CZ wrong, multi-yr) | 274/476 (58%) | -18.2% | HIGH | Active users 155→84 over 12mo; last 3mo avg 91.7 vs prior 3mo 112.0 = -18.2%. | | C-0BCDB8C2 | Cole Ingram | $54,427 | 2026-09-18 | Chargebee (CZ wrong, multi-yr) | 232/424 (55%) | -17.6% | HIGH | Steady 12-mo decline 200→110; -17.6% last 3mo. CZ had date wrong by a year. | | C-0D2AB865 | Elena Sinclair | $38,022 | 2026-09-22 | Chargebee (CZ wrong, multi-yr) | 250/407 (61%) | -18.9% | HIGH | 199→109 users over 12mo; -18.9% last 3mo. | | C-0BBE3E60 | Dana Mercer | $30,993 | 2026-09-26 | Chargebee (CZ wrong, multi-yr) | 74/114 (65%) | -19.5% | HIGH | 63→33 users; -19.5% last 3mo. CZ had date wrong by a year. | | C-0F5D2323 | Cole Ingram | $90,647 | 2026-09-29 | Chargebee (CZ wrong, multi-yr) | 111/390 (28%) | +3.5% | HIGH | Seat util 28% (bought 390, using 111); usage flat-low around 17-21 for a year. Oversized deal. | | C-0EC6999D | Elena Sinclair | $79,419 | 2026-10-03 | ChurnZero (match) | 31/112 (28%) | +6.7% | HIGH | Seat util 28%; usage stuck 14-17 range all year. Largest single-year at-risk. | | C-0B20DB64 | Dana Mercer | $21,770 | 2026-10-07 | ChurnZero (match) | 214/378 (57%) | +0.1% | LOW | Usage flat ~294-298 for 12mo; healthy steady state. | | C-0BBC4E7A | Cole Ingram | $56,374 | 2026-10-10 | ChurnZero (match) | 228/337 (68%) | -0.9% | LOW | Usage flat ~140 for 12mo. | | C-0FD551AB | Elena Sinclair | $48,815 | 2026-10-14 | ChurnZero (match) | 210/376 (56%) | -1.6% | LOW | Usage flat ~122-127. | | C-0F9F8F13 | Dana Mercer | $46,230 | 2026-10-18 | ChurnZero (match) | 199/352 (57%) | +0.2% | LOW | Usage flat ~182-185. | | C-0BC34584 | Cole Ingram | $16,740 | 2026-10-22 | ChurnZero (match) | 327/494 (66%) | +1.0% | LOW | Usage flat ~102-106. | | C-0B7A7546 | Elena Sinclair | $35,062 | 2026-10-25 | ChurnZero (match) | 182/205 (89%) | +4.3% | MEDIUM (expansion) | Seat util 89% — approaching cap; usage rising 58→63. Expansion play. | | C-0B369871 | Dana Mercer | $85,128 | 2026-10-29 | ChurnZero (match) | 317/422 (75%) | +4.3% | LOW | Usage 289→333 over 12mo; healthy growth. | | C-0B144C78 | Cole Ingram | $30,899 | 2026-11-02 | ChurnZero (match) | 169/224 (75%) | +3.0% | LOW | Usage 90→106 over 12mo. | | C-0FC4DBB8 | Elena Sinclair | $94,732 | 2026-11-05 | ChurnZero (match) | 356/464 (77%) | +4.2% | LOW | Usage 168→193 over 12mo; largest renewal, trending well. | | C-0D5BBE3A | Dana Mercer | $39,740 | 2026-11-09 | ChurnZero (match) | 85/102 (83%) | +3.9% | LOW | Usage 76→91; small seat pool, high engagement. | | C-0FB9D5AF | Cole Ingram | $63,158 | 2026-11-13 | ChurnZero (match) | 144/199 (72%) | +4.6% | LOW | Usage 154→176 over 12mo. | | C-0B344485 | Elena Sinclair | $64,384 | 2026-11-16 | ChurnZero (match) | 224/287 (78%) | +4.2% | LOW | Usage 211→244 over 12mo. | | C-0CB2C1B4 | Dana Mercer | $40,628 | 2026-11-20 | ChurnZero (match) | 386/473 (82%) | -2.0% | LOW | Usage flat ~45-49; high seat util, minor recent dip. | | C-22170CA1 | Cole Ingram | $45,646 | 2026-11-24 | ChurnZero (match) | 251/294 (85%) | +2.6% | MEDIUM (expansion) | Seat util 85%, usage 130→146. Approaching seat cap. | RISK METHOD - HIGH: seat util <30% OR 3-mo usage trend ≤-10% - MEDIUM (expansion): seat util ≥85% with positive trend (upsell/cap risk, not churn risk) - LOW: neither ROLLUP - Total ARR renewing in 90 days: $1,048,715 - ARR at HIGH risk (churn): $359,409 (34.3% of the book) — 6 accounts - ARR at MEDIUM expansion risk: $80,708 — 2 accounts (C-0B7A7546, C-22170CA1) - ARR at LOW risk: $608,598 CSM concentration of HIGH risk: - Cole Ingram: $145,074 (C-0BCDB8C2, C-0F5D2323) - Dana Mercer: $96,894 (C-0B7D2C30, C-0BBE3E60) - Elena Sinclair: $117,441 (C-0D2AB865, C-0EC6999D) CALLOUTS - Two HIGH-risk multi-year renewals ($85,420: C-0BCDB8C2, C-0BBE3E60) would be missed entirely if the team worked ChurnZero alone — CZ dates them in 2027. - The four declining accounts (C-0B7D2C30, C-0BCDB8C2, C-0D2AB865, C-0BBE3E60) show near-identical -18% to -20% 3-mo drops and matching 12-mo slides — investigate whether they share a product surface or persona that regressed. - Two oversized-seat deals (C-0F5D2323 at 28% util / $90,647 and C-0EC6999D at 28% util / $79,419) together are $170,066 — right-size or lose.
Q3 support themes — read from ticket body text, not tags. 80 tickets, 24 distinct accounts. Ranked by ARR exposure. Broad patterns (multi-account): 1. HRIS provisioning failures — 12 tickets / 15.0% share / 3 accounts / $114,000 ARR Bodies: "HRIS provisioning is not creating accounts…", "HRIS sync skipped 12 new hires…", "New employees are not being provisioned from our HRIS sync." All three of these accounts are $30K+ ARR (C-0B2213A9 $36K, C-0DDFC9A7 $48K, C-0F6C0F34 $30K). Sample: IC-460053, IC-460054. Recommendation: Escalate to eng as a P1 — silent-fail provisioning (log shows no errors) is a churn risk at the top three ARR bands after C-0E9C27D1; add a sync-diff alert and a proactive outreach to all three accounts this week. 2. Redemption / checkout / gift-card failures — 18 tickets / 22.5% / 7 accounts / $68,800 ARR Bodies: "Checkout spins forever…", "Gift card order errored out but the points were still deducted," "Redemption failed at checkout and the gift card code never arrived," "Redemption failed twice today; gift card email never showed up." Recurring on C-0B827671, C-0CEF69FD, C-0F876796, C-0FCCD2DF, C-14264ABD. Sample: IC-460021, IC-460022. Recommendation: Ship checkout retry + points-refund-on-failure fix and audit the gift-card email queue; this is the highest-volume broad pattern and touches 7 mid-tier accounts. 3. Points not posting / recognition-to-balance lag — 20 tickets / 25.0% / 9 accounts / $31,100 ARR Bodies: "Points not posting for our whole team after the weekend," "Two recognitions I sent show as delivered but the points never arrived," "Points from last week's recognition are still not posting…", "Missing points — my balance has not updated since Tuesday." Sample: IC-460001, IC-460002. Recommendation: Highest volume + widest account spread (9 accts, all SMB tier <$5K); investigate the weekend/async posting job — recognition-delivered-but-points-missing is the core product promise and drives NPS damage even at low ARR. 4. Slack integration instability — 14 tickets / 17.5% / 4 accounts / $18,900 ARR Bodies: "Slack integration stopped syncing recognitions…", "Recognitions no longer post to Slack; the sync toggle resets itself," "Slack slash command returns an error for everyone on our team," "The Slack app disconnected and re-auth does not stick." Sample: IC-460039, IC-460040. C-0BA71F12 and C-10A56B0F are repeat filers. Recommendation: The self-resetting sync toggle and non-sticky re-auth suggest a token-refresh/OAuth-scope bug — reproduce and patch; Slack is the primary UX surface for these accounts. Single-account concentration (noise vs. broad pattern): 5. Billing / invoice / seat-count / renewal-tier errors — 16 tickets / 20.0% / 1 account / $52,000 ARR All 16 tickets are C-0E9C27D1. Four distinct complaints: seat count they never approved, charged 200 seats vs. 150 licensed, "third invoice in a row with the same seat-count error," annual renewal at wrong tier price. This is not a broad pattern — it is one $52K account in a 3-month billing dispute. Sample: IC-460065, IC-460066. Recommendation: Executive-sponsor + billing-ops joint call this week; issue credit memo and rebuild the account's billing record — 16 tickets on the same unresolved dispute is a hard churn signal, and this is your #2-ranked ARR exposure entirely from one account. Arithmetic notes: - ARR affected = sum of ARR across distinct accounts in the theme (each account counted once, not per ticket). - Share = theme_tickets / 80. - Total ARR across all 24 filing accounts = $284,800; the five themes sum to $284,800 because every ticket maps to exactly one theme and every account appears in at least one theme (some accounts appear in multiple themes, so theme ARR sums exceed $284,800 when totaled naively — do not add them). - Ranking is by ARR exposure per your instruction, not ticket volume; note that theme #3 (points not posting) is the largest by volume (20) and account spread (9) but ranks 3rd on ARR because affected accounts are all SMB.
Prospect: C-82AF3719 — Technology, Mid-Market, employee_recognition, NA-West
Filtering customers.csv to has_case_study=true (eligible pool, 8 rows):
- C-FEFCC020: Education, Enterprise, wellness, NA-East
- C-11209339: Manufacturing, SMB, peer_milestones, APAC
- C-9D69D147: Financial Services, Mid-Market, retention, NA-West
- C-11C31562: Manufacturing, Mid-Market, employee_recognition, NA-West
- C-CD4829A7: Technology, Mid-Market, retention, NA-East
- C-0CE315B2: Education, SMB, wellness, EMEA
- C-64171065: Technology, Mid-Market, employee_recognition, NA-East
- C-A13C193D: Technology, Mid-Market, retention, NA-West
Scoring: 1 point per exact match across {industry, size_band, use_case, region}. Max = 4.
- C-64171065: industry=Technology ✓, size_band=Mid-Market ✓, use_case=employee_recognition ✓, region=NA-East ✗ → 3
- C-A13C193D: industry=Technology ✓, size_band=Mid-Market ✓, use_case=retention ✗, region=NA-West ✓ → 3
- C-CD4829A7: industry=Technology ✓, size_band=Mid-Market ✓, use_case=retention ✗, region=NA-East ✗ → 2
- C-11C31562: industry=Manufacturing ✗, size_band=Mid-Market ✓, use_case=employee_recognition ✓, region=NA-West ✓ → 3
- C-9D69D147: industry=Financial Services ✗, size_band=Mid-Market ✓, use_case=retention ✗, region=NA-West ✓ → 2
- Others (C-FEFCC020, C-11209339, C-0CE315B2): 0
Top three (all tied at 3/4):
1. C-64171065 — matches industry (Technology), size_band (Mid-Market), use_case (employee_recognition); misses region (NA-East vs NA-West). Strongest use-case + industry fit.
2. C-A13C193D — matches industry (Technology), size_band (Mid-Market), region (NA-West); misses use_case (retention vs employee_recognition). Strongest geo + industry fit.
3. C-11C31562 — matches size_band (Mid-Market), use_case (employee_recognition), region (NA-West); misses industry (Manufacturing vs Technology). Strongest use-case + geo fit, but cross-industry.
Tiebreak note: three customers tied at 3/4. Ranking above prioritizes industry+use_case matches (#1), then industry+region (#2), then use_case+region across industry (#3), on the assumption that industry and use_case carry more weight than region for recognition social proof. If you weight region higher, swap #1 and #2.
CHANNEL PERFORMANCE — Trailing 6 Months (2026-03 through 2026-08) PAID CHANNELS channel spend SQM SQO $/SQM $/SQO SQM→SQO pipeline pipe/$ paid_search $36,000 40 18 $900 $2,000 45.0% $720,000 $20.00 linkedin_ads $24,000 25 8 $960 $3,000 32.0% $96,000 $4.00 paid_social $18,000 0 0 undef undef undef $0 undef webinars $9,000 12 5 $750 $1,800 41.7% $60,000 $6.67 ORGANIC CHANNELS channel volume(SQM) SQO SQO rate pipeline organic_search 30 10 33.3% $90,000 referral 15 6 40.0% $48,000 DATA ANOMALIES — SQO date precedes SQM date (flag for review) CT-000044 linkedin_ads sqm=2026-07-23 sqo=2026-07-18 (5-day inversion) CT-000041 linkedin_ads sqm=2026-06-14 sqo=2026-06-09 (5-day inversion) Both anomalies sit inside linkedin_ads and are included in the counts above as reported; if you treat inverted rows as untrusted and drop them, linkedin_ads becomes 25 SQM / 6 SQO / $72,000 pipeline / $3.00 pipe-per-$ / 24.0% SQM→SQO — directionally worse, same reallocation call. Arithmetic checks (paid): - paid_search: $/SQM = 36,000 / 40 = $900. $/SQO = 36,000 / 18 = $2,000. Rate = 18/40 = 45.0%. pipe/$ = 720,000 / 36,000 = $20.00. - linkedin_ads: $/SQM = 24,000 / 25 = $960. $/SQO = 24,000 / 8 = $3,000. Rate = 8/25 = 32.0%. pipe/$ = 96,000 / 24,000 = $4.00. - paid_social: spend $18,000, zero SQMs → all efficiency metrics undefined per instruction (not zero). - webinars: $/SQM = 9,000 / 12 = $750. $/SQO = 9,000 / 5 = $1,800. Rate = 5/12 = 41.7%. pipe/$ = 60,000 / 9,000 = $6.67. REALLOCATION RECOMMENDATION 1) paid_search is the clear winner: $20 pipeline per dollar, 45% SQM→SQO, largest absolute volume (18 SQOs, $720K pipeline). Shift budget INTO paid_search. Recommend +$6K/month (double from $6K → $12K) funded by cuts below, with a 60-day efficiency check — expect diminishing returns at some point. 2) paid_social is spending $3K/month producing zero measured SQMs. Two possibilities and both require action: (a) it is truly non-performing → cut to $0; (b) attribution/tracking is broken and SQMs are being credited elsewhere. Recommend pausing spend for 30 days and instrumenting tracking before any restart. Reclaim: $3K/month. 3) linkedin_ads at $4 pipe/$ is 5× worse than paid_search and has two SQO-before-SQM data-quality issues. Cut spend 50% ($4K → $2K/month), fix the date-inversion source, and re-evaluate in 60 days. Reclaim: $2K/month. 4) webinars at $6.67 pipe/$ and 41.7% conversion is a solid #2 efficiency play on a small base. Hold at $1.5K/month; consider a modest test increase after paid_search doubles. 5) organic_search (33.3% SQO rate, $90K pipeline, 30 SQMs) and referral (40% SQO rate, $48K pipeline, 15 SQMs) are producing pipeline at zero reported spend — invest in content/SEO and a formal referral program; these are the highest-leverage non-paid bets. Net reallocation, month 1: paid_search +$6K, linkedin_ads −$2K, paid_social −$3K, webinars flat. Net paid spend change: +$1K/month; expected pipeline lift dominated by paid_search efficiency. CONFIDENCE: MEDIUM. - paid_search (n=40 SQM, 18 SQO) and organic_search (n=30) — sample sizes are adequate for a directional call. - linkedin_ads (n=25, 8 SQO), webinars (n=12, 5 SQO), referral (n=15, 6 SQO) — small samples; a handful of contacts flips the ratios. Treat these numbers as directional, not precise. - paid_social — cannot evaluate at all from this data; a "zero" here is likely a tracking gap given six months of $3K/month spend with no SQMs. - Two SQO<SQM inversions in linkedin_ads suggest broader attribution/date-integrity work is needed before any large budget shift.
# Battlecard: Rivally (updated 2026-09-03) ## One-line positioning Points-based recognition platform with growing EU enterprise focus; strengths in recognition feed and Slack/Teams integrations, weaker in analytics and admin tooling. [S02, S04, S16, S19] ## Pricing - **Current list: $7 per user/month, annual billing required** (pricing page, 2026-08-12) [S17] - Confirmed in-deal: $7/user/mo list with 15% discount offered for 3-year term (2026-08-14) [S18] - **Conflict noted:** Earlier pricing page showed $5/user/month on 2026-01-20 [S03] and 2026-04-01 [S08]. A 500-seat deal was quoted $6.50/user/mo on 2026-06-02 [S13]. Newer source (2026-08-12) wins: **$7/user/mo list** [S17]. - Rivally Pulse is a paid add-on, not bundled (2026-09-01) [S23] ## Where they win - EU / distributed European teams with multi-language support [S12] - EU data residency (GA as of 2026-07-01, Dublin office) [S15]; pitched in competitive deals [S05] - Fast setup — under a week, Slack integration works out of the box [S04] - Engaging recognition feed [S02, S16] - Support responsiveness (under 4 hours) [S22] ## Where we win - **Analytics depth** — Rivally analytics called "limited" [S02] and dashboards "basic compared to enterprise tools" [S07]. Confirmed as decisive factor: 800-seat prospect picked Bonusly over Rivally citing analytics depth (2026-09-03) [S25] - **Enterprise provisioning** — Rivally lacks SCIM; manual user management is painful [S10] - **Admin tooling** — admin console lags peers [S16]; still lacks bulk recognition editing as of 2026-09-02 [S24] - **Data portability** — analytics exports are CSV-only, making migration off Rivally hard [S20] - **EMEA rewards catalog** — thinner than US catalog [S14] ## Objections and responses - *"Rivally is cheaper at $5/user."* — Outdated. List is now $7/user/mo as of 2026-08-12 [S17], confirmed in a live deal quote [S18]. - *"Rivally has EU data residency."* — True as of 2026-07-01 [S15]. Position on analytics, SCIM, and admin depth instead [S02, S07, S10, S24]. - *"Rivally has Microsoft Teams support."* — Teams app v2 is in **public preview** only as of 2026-08-20 [S19]; not GA. - *"Rivally Pulse gives us surveys too."* — Paid add-on, not bundled [S23]; total cost climbs. ## Recent changes (last 90 days) - Pricing raised from $5 to $7/user/mo (2026-08-12) [S17] - Microsoft Teams app v2 public preview (2026-08-20) [S19] - Dublin office opened; EU data residency GA (2026-07-01) [S15] - Rivally Pulse exited beta as paid add-on (2026-09-01) [S23] - Ex-Workday VP EMEA hired to lead European expansion (2026-05-09) [S11] - Series C $40M led by Northgate Ventures (2025-11-04) [S01] ## Our 12-month win/loss record vs Rivally Window: 2025-09 through 2026-08 (20 deals in file). - Wins: 13 — Deal-A9FD43, Deal-7AA785, Deal-44C524, Deal-0D0CD6, Deal-D5B790, Deal-5C636E, Deal-67BE14, Deal-1B6969, Deal-F03E7B, Deal-072E31, Deal-F65C8F, Deal-E46EAB, Deal-1D2392 - Losses: 7 — Deal-7767F5, Deal-D263E0, Deal-935746, Deal-5645A5, Deal-C6FFAA, Deal-9066A6, Deal-72A02F - **Record: 13W-7L, win rate = 13/20 = 65.0%** Trend note: 5 of 7 losses cluster in two windows (2025-11 to 2025-12: 2 losses; 2026-04 to 2026-05: 2 losses; 2026-03: 1 loss). Last 3 months on file (2026-06 to 2026-08) are 3-0. ## Old card items — reconciliation - ✅ "Points-based recognition for mid-market" — supported [S02, S04] - ❌ "Starts at $5/user/month" — **superseded**, now $7 [S17] - ❌ "Rivally lacks a Slack integration" — **contradicted**; Slack integration works out of the box [S04] - ⚠️ "Rivally was acquired by WorkHuman in 2025" — **UNVERIFIED**; no snippet supports this. Contradicting signal: Rivally raised an independent Series C in 2025-11 [S01]. Remove or re-source before using. - ✅ "Strong in EU enterprise with multi-language support" — supported [S12, S15] ## Excluded from this card - S09 (AE opinion on UI being clunky) and S21 (AE opinion on aggressive discounting) — rep opinions on calls, not facts about the competitor per your rule.
Now I have all the numbers. Writing the response under 350 words. SEQUENCE PERFORMANCE (totals across steps 1-3) New Logo Nurture: sent 1,386 · open 35.4% (490/1,386) · reply 6.49% (90/1,386) · meeting 1.95% (27/1,386) · weakest = Step 3 (reply 4.21%, 18/428). Expansion Nurture: sent 875 · open 64.6% (565/875, inflated — see tracking error) · reply 6.74% (59/875) · meeting 1.37% (12/875) · weakest = Step 3 (reply 4.36%, 12/275). Cold Outbound - HR Leaders: sent 1,785 · open 30.5% (545/1,785) · reply 0.45% (8/1,785) · meeting 0.00% (0/1,785) · weakest = Step 3 (reply 0.17%, 1/590). Cold Outbound - People Ops: sent 1,163 · open 29.2% (340/1,163) · reply 2.49% (29/1,163) · meeting 0.52% (6/1,163) · weakest = Step 3 (reply 1.59%, 6/377). TRACKING ERRORS Expansion Nurture Step 2: opened=340 vs sent=300 (113.3%). Impossible — opens exceed sends by 40. Likely causes: duplicate open-pixel firing, Apple MPP prefetch inflation, or a merge bug re-counting Step 1 opens against Step 2. Do not trust Expansion open metrics until reconciled. AUDIENCE OVERLAP (940 unique contacts, 963 memberships, 23 duplicates) - Cold Outbound - HR Leaders ↔ Cold Outbound - People Ops: 21 shared contacts (e.g., CT-001217, CT-001159, CT-001153, CT-001227, CT-000884, CT-000849, CT-001285, CT-001101, CT-001103, CT-001105, CT-001130, CT-001236, CT-001255, CT-001258, CT-001277, CT-001311, CT-001345, CT-000890, CT-000908, CT-001033, CT-001097). Same-person double-tap across two cold cadences. - Expansion Nurture ↔ New Logo Nurture: 2 (CT-000301, CT-000624). Existing customers being run as new logos — segmentation leak. SUB-2% FAILURE MODE Only Cold Outbound - HR Leaders is under 2% reply (0.45% overall, zero meetings across 1,785 sends). Opens are healthy (30.5%) but replies collapse — this is a copy/offer/CTA failure, not deliverability. Message is opened, then ignored. People Ops (same motion, similar opens) pulls 5.5x the reply rate, so the persona/pitch match is the variable. ONE CHANGE PER WEAK SEQUENCE - HR Leaders: rewrite body + CTA for HR-specific pain (retention $ / EX metrics); kill Step 3 or replace with a hand-written breakup. - People Ops Step 3: swap generic follow-up for a single-question reply-bait CTA. - Expansion Step 2: fix the open-tracking pixel/dedup before optimizing anything. - New Logo Step 3: tighten CTA to a specific 15-min slot offer. FIX FIRST: Cold Outbound - HR Leaders. Largest volume (1,785), worst reply (0.45%), zero meetings, and it's cross-contaminating People Ops with 21 duplicate contacts — every day it runs it burns the shared list.
Weekly Marketing Goals Update — Q3-2026 (Day 66/92, 71.7% elapsed) Pace rule: on-pace threshold = 71.7% of target for higher_better metrics (i.e., actual ≥ 0.717 × target = on/ahead). For lower_better (MIA rate), on-pace = actual ≤ target. SQMs - QTD actual: 230 - Target: 300 - Delta: 230 − 300 = −70 (76.7% of target) - Pace threshold: 0.717 × 300 = 215.1 → 230 ≥ 215.1 → ON PACE SQOs - QTD actual: 84 - Target: 120 - Delta: 84 − 120 = −36 (70.0% of target) - Pace threshold: 0.717 × 120 = 86.0 → 84 < 86.0 → BEHIND (by 2) DS2s - QTD actual: 40 - Target: 75 - Delta: 40 − 75 = −35 (53.3% of target) - Pace threshold: 0.717 × 75 = 53.8 → 40 < 53.8 → BEHIND (by 13.8) Closed-lost MIA rate - QTD actual: 5 / 25 = 0.20 (20.0%) - Target: ≤ 0.10 (10.0%) - Delta: 0.20 − 0.10 = +0.10 (2.0× the ceiling) - Pace: BEHIND (lower_better; actual exceeds ceiling) Same-quarter closes - QTD actual: 10 - Target: 20 - Delta: 10 − 20 = −10 (50.0% of target) - Pace threshold: 0.717 × 20 = 14.3 → 10 < 14.3 → BEHIND (by 4.3) Active pipeline coverage - QTD actual: $3,000,000 - Target: $4,000,000 - Delta: −$1,000,000 (75.0% of target) - Coverage is a point-in-time stock metric, not a cumulative flow, so pace-vs-days-elapsed does not strictly apply. Against target: BEHIND by $1.0M / 25.0%. What moved this week: Not answerable from the data provided — the files contain only QTD snapshots with no week-over-week deltas, no prior-week values, and no dated activity records. Cannot cite what moved without the underlying weekly data.
Q3 forecast lands at $115,977 (COMMIT $44,729 + 35% of BEST_CASE $203,565) on 54 in-quarter deals, with $227,575 across 32 deals slipping past 9/30 including one COMMIT ($13,770, Deal-D348E1). Top BEST_CASE exposure: Deal-2D7423 $38,935 and Deal-25F752 $24,000. Caveat: 71 of 86 deals have no why-buy (including all 7 COMMITs) and owner is blank on 85 of 86, so this cannot be rep-rolled or defended.
Subject: Quick check on the 150-seat pricing Hi — following up on the pricing recap I sent August 5 for 150 seats after our July 28 demo with your People team. Wanted to make sure it landed and answer any questions the VP People or the HR admins had after seeing the automated milestone awards and points catalog. Are you open to a 20-minute call this week or next to walk through the proposal and next steps? If timing has shifted on your side, just let me know and I'll adjust. Thanks, Alex (Word count: 76)
Weekly GTM Digest — Week of 2026-08-31 Marketing The team pulled in 46 SQMs against a target of 52, landing 6 short (88% of goal). Webinars carried the week, driving 18 SQMs — that's 39% of total volume from a single channel. Paid search cost per SQM held steady at $150. The mix is working, but we need to close the 6-SQM gap; leaning harder into the webinar engine while paid search stays efficient looks like the fastest path back to target. Sales Sales converted 14 SQOs and booked 9 DS2 meetings, generating $310,000 in new pipeline — that pencils out to roughly $22,143 per SQO ($310,000 ÷ 14). Three deals closed in-quarter, giving us real same-Q velocity on top of the pipeline build. Solid week of turning qualified demand into committed revenue motion. CS The team saved 2 renewals and moved team NPS to 61 — a strong signal that the customer experience is landing. Heading into next week, 3 red-flag accounts remain open and are the priority. Momentum is on our side; let's convert the NPS tailwind into red-flag resolutions before they compound. PLG 412 new signups joined the platform with activation at 31%, meaning roughly 128 users hit their activation moment (412 × 0.31 = 127.7). 38 companies crossed the aha threshold of 10 recognition gives — the point where recognition starts to feel like culture, not a campaign. Healthy top-of-funnel with a clear cohort ready for the next nudge toward paid. — Word count: ~230
# Partner Digest — 2026-08-24 to 2026-09-04 ## Active Partners **Apex Rewards Co** — Co-webinar locked for 09-15. 2 sourced opps this period, both in DS1. - Deal-DDAAF2: $180,000 - Deal-2CF33E: $95,000 - Subtotal: 2 deals / $275,000 **HRCloud Partners** — Integration referral cleared security review; opp moved to DS2. 1 sourced opp this period. - Deal-F1CDA5: $140,000 - Subtotal: 1 deal / $140,000 **CultureBridge** — Lunch-and-learn produced 2 sourced opps, both early stage. - Deal-096E1D: $60,000 - Deal-067213: $75,000 - Subtotal: 2 deals / $135,000 **WorkWell Group** — Wants to restart joint playbook in Q4; planning call booked 09-09. 0 sourced deals this period. ## Quiet Partners - **Recogniq** — no activity this period. - **KudosWave** — no activity this period. - **PeopleFirst Advisors** — no activity this period. - **TotalPerk** — no activity this period. ## Partner-Sourced Pipeline Totals Deal count: 2 + 1 + 2 + 0 = **5 deals** Amount: $275,000 + $140,000 + $135,000 = **$550,000** Reconciles to partner_deals.csv (5 rows, all utm_source = Partner): 180,000 + 95,000 + 140,000 + 60,000 + 75,000 = $550,000. ✓
Q1: Yes. Customer data is encrypted at rest using AES-256. [P1] Q2: Yes. Data in transit is encrypted with TLS 1.2 or higher. [P1] Q3: Yes. Bonusly maintains a SOC 2 Type II report, renewed annually. A copy is available to prospects under NDA. [P2] Q4: Customer data is retained for the duration of the contract plus 90 days, after which it is deleted from production systems. [P3] Q5: The current subprocessor list is published at trust.bonusly.com. Customers receive 30 days notice before a new subprocessor is added. [P4] Q6: Yes. SAML 2.0 single sign-on is available on the Enterprise plan. [P5] Q7: Production databases are backed up daily. Backups are encrypted and retained for 35 days. [P6] Q8: Unanswerable from the provided excerpts. ISO 27001 certification status is not addressed. Would require the Bonusly security/compliance certifications inventory or trust portal certifications page. Q9: Unanswerable from the provided excerpts. No uptime SLA percentage is stated. Would require the Master Services Agreement or Service Level Agreement document. Q10: Unanswerable from the provided excerpts. HIPAA BAA policy is not addressed. Would require the Bonusly HIPAA/regulated-data policy or legal team's BAA stance document.
Now let me analyze the qualitative checks (1, 2, 3, 4, 6) by reading the skill contents carefully.
**Check 1 — ALWAYS-trigger overlaps:** comms-drafter and email-drafter both say ALWAYS trigger for "write me an email," "draft a follow-up," "help me reply," "what should I say," "bump email," "contract nudge." Verbatim overlap.
**Check 2 — Circular delegation:** deal-strategy-coach → email-drafter ("use the `email-drafter` skill"). email-drafter → deal-strategy-coach ("For deal strategy... use deal-strategy-coach"). Cycle.
Also: closed-lost-analysis → pipeline-intelligence-report? No — pipeline-intelligence-report → closed-lost-analysis (Mode 4). And closed-lost-analysis mentions "called from pipeline-intelligence-report" in Mode 4. That's one-way (pip→CL).
**Check 3 — Dangling delegations:**
- comms-drafter references `bonusly-brand`, `prospect-research-multithreading` — not in manifest
- deal-strategy-coach references `prospect-research-multithreading`, `email-drafter` (exists)
- email-drafter references `prospect-research-multithreading`, `bonusly-brand`, `deal-strategy-coach` (exists)
- analysis-validator §12.4 references 8 bonusly-* skills + `skill-orchestrator`, `CUSTOMER_DATA_REFERENCE`, `HUBSPOT_CONNECTOR_REFERENCE`, `SIGNALFORGE_PRODUCT_INSIGHT_SKILL`
- signalforge-feedback references `skill-orchestrator`, `analysis-validator` (exists), `signalforge-claim-compressor` (exists)
- signalforge-claim-compressor references `bonusly-brand`, `analysis-validator` (exists)
- next-to-close references `pipeline-intelligence-report` (exists)
- pipeline-intelligence-report references `signalforge-reports` (path), `closed-lost-analysis` (exists)
- partner-digest references `prospect-research-multithreading`
- sales-forecast references `bonusly-brand`, `analysis-validator` (exists)
- stale-pipeline-report references `signalforge-reports` (path)
- weekly-pipeline-report references `signalforge-reports` (path)
**Check 4 — Version conflicts:** analysis-validator frontmatter says "v3.6". Body: "**Version:** 3.6", "**Last Updated:** May 9, 2026 (v3.6 — G2-F...)". But validation trail template says `Validator: analysis-validator v3.2`. That's stale. Also `weekly-pipeline-report` frontmatter has no version but description body has no conflict. Real conflict: analysis-validator internal — body current is v3.6 but the trail template still prints "v3.2". Survivor: **v3.6**.
**Check 6 — Hardcoded IDs/dates/names in bodies:** many. Let me list the strongest.
Now composing the report:
═══════════════════════════════════════════════
SKILL SET RECONCILIATION REPORT — 14 skills
═══════════════════════════════════════════════
(1) ALWAYS-TRIGGER OVERLAP
──────────────────────────────────────────────
Severity: CRITICAL | Action: MERGE
Finding: comms-drafter and email-drafter have overlapping ALWAYS-trigger phrases. Both declare trigger duty for identical phrases: "write me an email," "draft a follow-up," "help me reply," "what should I say," "bump email," "contract nudge," plus paraphrased variants ("review this email"/"rewrite this"). comms-drafter's description explicitly claims scope over "outbound prospecting, follow-ups, post-demo recaps, stakeholder outreach, pricing and contract follow-up, end-of-quarter pushes, renewal and expansion emails, QBR follow-ups, onboarding check-ins" — the same lifecycle stages email-drafter claims. Router will have no deterministic tie-break; whichever loads first wins.
Proposal: Merge email-drafter INTO comms-drafter (comms-drafter is the superset — it already covers Intercom, support tickets, partner outreach, rewards inquiries in addition to email). Move the Gmail-signature retrieval block from email-drafter into comms-drafter's outbound section, then delete email-drafter with absorbed_into="comms-drafter". Update deal-strategy-coach's "use email-drafter" reference to comms-drafter in the same change.
(2) CIRCULAR DELEGATION
──────────────────────────────────────────────
Severity: CRITICAL | Action: REVIEW
Cycle name: deal-strategy-coach ↔ email-drafter
Evidence:
- deal-strategy-coach body: "When drafting manager-to-prospect emails, use the `email-drafter` skill which automatically retrieves your Gmail signature..."
- email-drafter body: "If the user needs strategic deal coaching... point them to the deal-strategy-coach skill."
Both skills reciprocally hand off. Router entering either can bounce back to the other with no terminal state.
Proposal: Make the handoff one-way. deal-strategy-coach owns diagnosis + coaching AND may embed a draft inline; comms-drafter (post-merge, see finding 1) owns pure email execution and should NOT redirect back to deal-strategy-coach — it should just draft. Remove the "point them to deal-strategy-coach" clause from email-drafter/comms-drafter's lane marker; keep the one-way pointer only in deal-strategy-coach.
(3) DANGLING DELEGATION TARGETS
──────────────────────────────────────────────
Severity: WARNING | Action: REVIEW
Targets referenced in skill bodies that do NOT exist in the manifest:
bonusly-brand — referenced by comms-drafter (Step 0 "Brand First"), email-drafter, signalforge-claim-compressor, sales-forecast
prospect-research-multithreading — referenced by comms-drafter, deal-strategy-coach (cross-skill handoff block), email-drafter, partner-digest
skill-orchestrator — referenced by analysis-validator §11, signalforge-feedback (activation checklist)
bonusly-data-questions — referenced by analysis-validator §12.4 and G1-J
bonusly-product-questions — referenced by analysis-validator §12.4
bonusly-business-reporting-questions — analysis-validator §12.4
bonusly-rewards-questions — analysis-validator §12.4
bonusly-ppp-questions — analysis-validator §12.4
bonusly-feature-flag-questions — analysis-validator §12.4
bonusly-deal-desk-questions — analysis-validator §12.4
bonusly-datadog-questions — analysis-validator §12.4
signalforge-reports — referenced by pipeline-intelligence-report, stale-pipeline-report, weekly-pipeline-report (as filesystem path org skill, not in this manifest)
CUSTOMER_DATA_REFERENCE, HUBSPOT_CONNECTOR_REFERENCE, SIGNALFORGE_PRODUCT_INSIGHT_SKILL — analysis-validator §11 "cascading files"
Proposal: Distinguish two classes.
- Class A (in-scope, truly missing from THIS manifest but expected: bonusly-brand, prospect-research-multithreading, skill-orchestrator): create stubs or remove the delegation calls. Priority target = bonusly-brand — hit by 4 skills.
- Class B (external/org-level: 8 bonusly-* specialists, signalforge-reports): confirm these live in a separate org manifest. If yes, annotate the references as `[external]`; if no, drop the §12.4 delegation table from analysis-validator.
(4) VERSION CONFLICT
──────────────────────────────────────────────
Severity: WARNING | Action: UPDATE_BODY
Location: analysis-validator (internal inconsistency).
- Frontmatter description: implicit current
- Body Version line: "**Version:** 3.6"
- Section 14 Changelog: v3.6 is latest, dated May 9, 2026
- Section 7 Validation Trail template still prints: "Validator: analysis-validator v3.2"
Survivor: **v3.6** (matches frontmatter, changelog top row, and body header).
Proposal: Patch section 7 template to read `Validator: analysis-validator v3.6`. Same-date collision noted in prior reconciliation memory (3.5 and 3.6 both May 9) is resolved in favor of 3.6 as designed — no action needed there.
(5) MANIFEST DESCRIPTION LENGTH
──────────────────────────────────────────────
Severity: INFO | Action: none
Descriptions exceeding 1,024 chars: **0 of 14**.
Longest: pipeline-intelligence-report and signalforge-claim-compressor tied at 1,006 chars; partner-digest at 1,004; comms-drafter at 996.
Proposal: No action required. Four skills sit within 20 chars of the ceiling — if any future edit adds trigger phrases, they will breach. Flag for monitoring, not for trimming.
(6) HARDCODED IDS / DATES / PERSON NAMES IN BODIES
──────────────────────────────────────────────
Severity: WARNING | Action: REVIEW (Amani-owned decision on refactor scope)
Confirmed hardcoded values found in skill bodies:
Deal stage IDs (analysis-validator §12.2, pipeline-intelligence-report, next-to-close, closed-lost-analysis, stale-pipeline-report):
150582536 (DS1), 150582537 (DS2), 150582538 (DS3), 150582539 (DS4), 1175632767 (DS5)
HubSpot Owner IDs (analysis-validator §12.3, pipeline-intelligence-report Phase 1):
AEs: Bryce Harmon 119337721, Hugo Lindqvist 77260721, Dana Mercer 83155923, Alex Franklin 84342457,
Cole Ingram 83155924, Gavin Porter 1520255671
CSMs: Colleen Perry 77938470, Ellie Barton 79580306, Ashley Reyer 81969994, Megan Franz 321546903,
Elena Sinclair 701163055, Youssef Elkhateeb 725397794, Amanda Czenkus 1556884388
Leadership: Alaina Loori 82535637, Shealagh Coughlin 119069206, Ben Castelli 348210196,
Amani Phipps 210200121, John Thomas 78303262, Yasmin Wahid 89062643
Referenced Slack user: Amani <@U03QLMBL7AR> (partner-digest)
Snowflake / infra IDs:
HubSpot org ID 1973303 (deal URL template — pipeline-intelligence-report, stale-pipeline-report)
Slack channel C0561C1JCPJ (stale-pipeline-report)
Confluence cloudId 73fe98de-a4a3-4869-9f8a-bb1eeed4cf7f, spaceId 1958248479, folder 2286616609
(partner-digest); spaceId 2232811524, parent 2232582148 (sales-forecast);
page 2295136266 (signalforge-feedback); page 2247295002 build log (signalforge-feedback);
page 2286321666 May 16 digest reference (partner-digest); page 2257879045 AE playbook (deal-strategy-coach)
Google Drive spreadsheet IDs: 1CLZeOsElVDF_LF0ZG_t2nfwvhnZ6bpwqM_nX3WEYzcw (targets),
1ENuaEcCuLjdKhMvp8FK3Ys1ek5Aw9ZuOZhsHJJFoB_k (bookings forecast) — weekly-pipeline-report
Dates baked into logic (not just changelog):
analysis-validator: "March 28, 2023" (HubSpot DEALS staleness), "May 4, 2026" (CALL_SPOTLIGHT_BRIEF removal, CLOSEDWON_DEALS confirmation, GTM roster update)
closed-lost-analysis: "March 28, 2023," "May 4, 2026," "May 2026" (field confirmations)
partner-digest: "Q2/Q3 2026" in link title; May 16, 2026 first-run reference
Q1 2026 actuals frozen in sales-forecast: $365,152 bookings actual, $475,000 plan (77%);
$2,490,532 pipeline actual, $3,288,000 forecast (76%)
Population anchors frozen (analysis-validator §8, G1-J):
~452,000 provisioned users, ~110,097 dormant users, 3,000–3,500 paying customers,
850–1,100 Gong calls (90d), 150–350 open pipeline deals — labeled "as of May 2026"
2026 pricing table (deal-strategy-coach): full 8-tier proposal/floor grid, e.g. 51–250 Org proposal $4.63 / floor $3.90
Proposal: Two changes.
- (a) Extract every roster/ID reference into a single canonical reference file (e.g. `references/gtm-roster.md` and `references/hubspot-ids.md`) that lives under one owner skill (analysis-validator §12 is the natural home since it's already the ground-truth section). Have pipeline-intelligence-report, next-to-close, closed-lost-analysis, stale-pipeline-report, sales-forecast, weekly-pipeline-report cite that reference instead of restating IDs. This kills copy drift when a rep joins/leaves.
- (b) Keep pricing, Q1 actuals, and population anchors in-body but wrap each in a `<!-- REFRESH: YYYY-MM-DD -->` marker so the next quarterly reconciliation can find them via grep. Do NOT try to make these dynamic — they are decision inputs, not lookups.
(7) MANIFEST DRIFT
──────────────────────────────────────────────
Severity: INFO | Action: none
Files without a manifest row: **0**
Manifest rows without a file: **0**
Row/file parity: 14 = 14
Proposal: No action. The manifest matches the file set exactly.
═══════════════════════════════════════════════
SUMMARY OF PROPOSED ACTIONS (one per finding)
═══════════════════════════════════════════════
1. MERGE email-drafter → comms-drafter (absorbed_into="comms-drafter")
2. REVIEW break deal-strategy-coach ↔ email-drafter cycle; keep pointer one-way
3. REVIEW classify 13 dangling targets as in-scope (create/remove) vs external (annotate)
4. UPDATE_BODY patch analysis-validator §7 trail template "v3.2" → "v3.6"
5. (none) 0 descriptions over 1,024 chars
6. REVIEW extract GTM roster + HubSpot IDs to a canonical references file cited by 6 skills
7. (none) manifest drift = 0 in both directions
# Runbook: Reward Worker Queue Backlog Recovery Derived from #incident-2026-08-29-reward-queue. Every step cites the source message. --- **Step 1 — Acknowledge alert and assume Incident Commander** - Action: Acknowledge PagerDuty alert for reward-worker queue depth > 10k; take IC. - Who: Bryce Harmon - Verification: (not stated in thread — needs confirmation) - Rollback: N/A (no state change) - Source: [M01] --- **Step 2 — Measure current queue depth** - Command: `bundle exec rake sidekiq:queue_depth` - Who: Farid Osman - Verification: Returned 48,213 pending jobs on reward queue (normal < 500). - Rollback: N/A (read-only) - Source: [M02] --- **Step 3 — Inspect dead set** - Action: Inspected Sidekiq dead set. - Who: Farid Osman - Verification: 112 jobs present, all `Redis::TimeoutError` around 13:58. - Rollback: N/A (read-only) - Exact command not stated in thread — needs confirmation. - Source: [M03] --- **Step 4 — Pause enqueue to stop the bleed** - Command: `bin/rails runner 'FeatureFlag.disable(:auto_recognition_enqueue)'` - Who: Farid Osman - Verification: (not stated in thread — needs confirmation) - Rollback: `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` (explicitly given in [M04]; also executed later in Step 8) - Source: [M04] --- **Step 5 — Clear the dead set** - Action: Cleared the Sidekiq dead set from the console. - Who: Elena Sinclair - Verification: (not stated in thread — needs confirmation) - Rollback: (not stated in thread — needs confirmation; cleared dead-set jobs are not trivially restorable) - Exact command not stated in thread — needs confirmation. - Source: [M05] --- **Step 6 — Scale workers up** - Command: `kubectl scale deployment/reward-worker --replicas=6` (previous replicas: 3) - Who: Bryce Harmon - Verification: Queue depth dropped to 9,400 and was falling ~1,200/min (observed at 14:33:41Z, ~12 min after scale-up). - Rollback: `kubectl scale deployment/reward-worker --replicas=3` (explicitly given in [M06]; also executed later in Step 9) - Source: [M06], verified in [M07] --- **Step 7 — Confirm drain to zero and error rate recovery** - Command: `bundle exec rake sidekiq:queue_depth` - Who: Cole Ingram - Verification: Returned 0. Datadog error rate back to baseline. - Rollback: N/A (read-only) - Source: [M08] --- **Step 8 — Re-enable enqueue** - Command: `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` - Who: Bryce Harmon - Verification: 40 new jobs processed cleanly in the following 3 minutes. - Rollback: `bin/rails runner 'FeatureFlag.disable(:auto_recognition_enqueue)'` (inverse of Step 4) - Source: [M09] --- **Step 9 — Scale workers back to baseline** - Command: `kubectl scale deployment/reward-worker --replicas=3` - Who: Bryce Harmon - Verification: Queue stable at 0; incident declared resolved. - Rollback: `kubectl scale deployment/reward-worker --replicas=6` (inverse of Step 6) - Source: [M10] --- ## Items needing confirmation - Step 1: How IC acknowledgement was verified (PagerDuty ack confirmation?). - Step 3: Exact command used to inspect the dead set. - Step 4: How the enqueue-pause was verified (e.g., feature flag state check, no new jobs entering queue). - Step 5: Exact command used to clear the dead set, verification method, and rollback expectations. ## Not in thread (do not assume) - Root cause of the initial `Redis::TimeoutError` burst at ~13:58. - Whether the 112 dead-set jobs were retried, exported, or discarded before Step 5. - Any customer-facing impact assessment or comms.
First error - 2026-09-03T14:01:12Z — reward-service — Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s Service and job involved - Service: reward-service (Redis client to redis-primary:6379) - Job: RewardGiveJob (also impacted: RecognitionDigestJob per sidekiq_jobs.csv) Cascade (in order) 1. 14:01:12Z reward-service — initial Redis::TimeoutError to redis-primary:6379 2. 14:01:20Z / 14:01:30Z / 14:01:40Z reward-service — Redis::TimeoutError, "retry exhausted for RewardGiveJob" (3x) 3. 14:01:40Z sidekiq — RewardGiveJob failed: Redis::TimeoutError; retrying in 60s 4. 14:01:46Z–14:01:57Z sidekiq_jobs — J-00001..J-00006 RewardGiveJob failures recorded 5. 14:02:28Z sidekiq — RewardGiveJob failed: Redis::TimeoutError; retrying 6. 14:02:30Z sidekiq — WARN "Queue reward depth above 10,000" (backpressure) 7. 14:02:36Z–14:02:58Z sidekiq_jobs — RecognitionDigestJob (J-00013) and RewardGiveJob J-00007..J-00012 failing (blast radius widens beyond RewardGiveJob) 8. 14:03:05Z api-gateway — first "502 upstream timeout calling reward-service /gives" 9. 14:03:30Z web-app — first user-facing "Give form submission failed: upstream 502 from api-gateway" 10. 14:03:31Z–14:06:52Z — sustained loop: sidekiq retries + api-gateway 502s + web-app Give submission failures; RecognitionDigestJob failures continue (J-00014 14:03:15Z, J-00015 14:04:55Z, J-00016 14:05:50Z) 11. 14:22:10Z reward-service — "Redis connection restored; resuming job processing" (recovery) 12. 14:24:45Z sidekiq — "Queue reward depth below 500" (queue drained) Datadog query to confirm the first error - service:reward-service status:error "Redis::TimeoutError" "redis-primary:6379" - Time-bounded: from:2026-09-03T13:55:00Z to:2026-09-03T14:05:00Z, sort:asc, limit:1 What the logs do NOT show - Root cause on the Redis side (no redis-primary logs, no CPU/memory/eviction/maxclients/replication/failover events, no network/DNS metrics) - Whether redis-primary was actually down, degraded, saturated, or unreachable due to network - Any deploy, config change, or feature flag flip preceding 14:01:12Z - Traffic volume / RPS to reward-service /gives before the incident (no request-rate signal, only INFO "request completed" at 13:57:46Z) - Client-side Redis pool metrics (pool size, checkout waits, timeouts config beyond the "5s" string in the error) - api-gateway upstream timeout threshold and retry policy - Whether Sidekiq's "retrying in 60s" backoff was honored or overridden (retries appear at ~60s cadence but not confirmed as policy) - Total count of failed RewardGiveJob attempts beyond the 12 rows in sidekiq_jobs.csv (log shows many more sidekiq ERROR lines than the CSV enumerates) - Business impact: number of distinct users affected, gives attempted vs. dropped, dollar value of pending rewards - Postgres relevance — checkpoints from 14:10:56Z–14:20:59Z appear during the incident but no error/latency signal ties them to the failure - Gap between 14:06:52Z (last api-gateway 502) and 14:22:10Z recovery — no logs from reward-service, api-gateway, web-app, or sidekiq for ~15 minutes; unclear if silence = still failing, restarted, or scaled down
Feature flag state summary (9 flags in export): 1) recognition_streaks_v2 - State: on - Controls (per code): in app/models/recognition.rb, when enabled for a company, calls StreakTracker.record(give) on recognition events. - Targeting: segment:beta_companies - Company count: 42 2) points_budget_guardrails - State: on - Controls (per code): in app/services/budget_service.rb, when enabled, calls BudgetService.new(company).enforce!(giver, points) to enforce budget on give actions. - Targeting: all_companies - Company count: 220 3) slack_dm_nudges - State: on - Controls (per code): in app/jobs/nudge_job.rb, gates SlackDm.send_nudge(user); job returns early unless enabled. - Targeting: segment:region_na - Company count: 87 4) redeem_flow_redesign - State: off - Controls (per code): in app/controllers/redeem_controller.rb, when enabled renders RedeemV2Component; otherwise renders RedeemV1Component. - Targeting: targeted_list - Company count: 12 5) analytics_dashboard_v3 - State: on - Controls (per code): in app/controllers/analytics_controller.rb, when enabled assigns @dashboard = AnalyticsV3.new(company). - Targeting: segment:tier_three - Company count: 65 6) ms_teams_app_v2 - State: off - Controls (per code): in app/services/teams_installer.rb, when enabled calls TeamsAppV2.install(company). - Targeting: targeted_list - Company count: 9 7) legacy_give_modal - State: off - Controls: NO CODE REFERENCE in the provided excerpt. - Targeting: segment:legacy_plan - Company count: 14 8) survey_boosters_q3 - State: on - Controls: NO CODE REFERENCE in the provided excerpt. - Targeting: segment:legacy_plan - Company count: 7 9) paused_offboard_cleanup - State: off - Controls: NO CODE REFERENCE in the provided excerpt. - Targeting: none (empty targeting_rules) - Company count: 0 (no targets) Flags with no code reference: legacy_give_modal, survey_boosters_q3, paused_offboard_cleanup. Flags with no targets: paused_offboard_cleanup (0 companies, empty targeting). Flag both off and untargeted with no code reference: paused_offboard_cleanup — safe-to-remove candidate based on provided data. Total company_count across flags (sum, not unique companies since a company can hold multiple flags): 42 + 220 + 87 + 12 + 65 + 9 + 14 + 7 + 0 = 456.
NDA-1 — GREEN (standard approval) Reasoning: Mutual, 2-year term with 3-year survival, standard carve-outs (a)–(e), Delaware law, no license/exclusivity — quote: "Carve-outs: information that (a) is or becomes publicly available through no breach, (b) was known prior to disclosure, (c) is received from a third party without duty of confidence, (d) is independently developed, or (e) must be disclosed by law or court order." NDA-2 — YELLOW (counsel review) Reasoning: Embedded 18-month non-solicit with no "general solicitation / job board" carve-out — quote: "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." NDA-3 — RED (full legal review) Reasoning: One-way in Discloser's favor, 5-year term, 3-year non-compete, Republic of Ireland exclusive jurisdiction, and zero confidentiality carve-outs — quote: "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."