Mean 0.952 · 31/40 perfect tests · $97.83 total · each card: the question → the correct answer (gold) → this model's actual answer
Definitions (per your rules)
- “DS2+ deal”: stage is DS2, DS3, DS4, or DS5.
- “Why-buys compliant” (DS2+ only): why_buys is either LONG(n), OR (a) ≥15 characters AND (b) not a placeholder (tbd, n/a, na, see notes).
- “Has DS1 timestamp”: t_ds1 is non-empty.
- “Regressed”: any earlier-stage timestamp is later than any later-stage timestamp (for non-empty t_ds1…t_ds5), e.g., t_ds2 > t_ds3.
Why-buys hygiene (DS2+)
- Overall DS2+ non-compliant: 101 / 124
- Arithmetic: 101 ÷ 124 = 0.8145161290 → 0.8145161290 × 100 = 81.45161290% (≈ 81.45%)
- By owner (owner names from owners.csv)
- Farid Osman: 1 / 1
- 1 ÷ 1 = 1.0 → 100.0%
- Cole Ingram: 19 / 22
- 19 ÷ 22 = 0.8636363636 → 86.36363636% (≈ 86.36%)
- Bryce Harmon: 15 / 18
- 15 ÷ 18 = 0.8333333333 → 83.33333333% (≈ 83.33%)
- Dana Mercer: 18 / 22
- 18 ÷ 22 = 0.8181818182 → 81.81818182% (≈ 81.82%)
- Alex Franklin: 48 / 61
- 48 ÷ 61 = 0.7868852459 → 78.68852459% (≈ 78.69%)
DS1 timestamp hygiene
- Deals with no DS1 timestamp (blank t_ds1): 1
Regression check
- Deals that regressed (out-of-order stage timestamps): 0
Three process fixes
1) Stage-gate why_buys: enforce required + minimum length (≥15) + block placeholders when moving a deal into DS2 (and keep enforced for DS3–DS5).
2) Enforce DS1 entry timestamp: auto-set t_ds1 on deal creation (or first entry into DS1) and block saves where stage is populated but t_ds1 is blank.
3) Prevent timestamp disorder: lock stage-entry timestamps after first set (or derive them from immutable stage-history) so manual edits can’t create out-of-order sequences/regressions.
Deals resolved to an owner name (via owners.csv): - 156 / 156 deals resolved Deals whose owner_id has no match in owners.csv: - None Owner_ids that map to archived/deactivated owners (owners.csv archived=true): - None - Note: owners.csv contains archived owners Gavin Porter (1520255671) and Hugo Lindqvist (77260721), but neither owner_id appears in deals_open.csv. Total pipeline amount per resolved owner (pipeline amount = sum(amount) across all rows in deals_open.csv for that owner): 1) Bryce Harmon (owner_id=119337721) — 35 deals - Arithmetic: 24000 + 19656 + 13500 + 7000 + 2520 + 240000 + 99000 + 72000 + 70000 + 63600 + 45000 + 1 + 21000 + 23400 + 13680 + 5502 + 8160 + 1 + 11400 + 1 + 36000 + 31500 + 6000 + 10800 + 30275 + 17400 + 12600 + 18000 + 37440 + 18828 + 2880 + 36000 + 20880 + 10920 + 25200 = 1054144 2) Dana Mercer (owner_id=83155923) — 24 deals - Arithmetic: 11250 + 10500 + 9000 + 9000 + 5400 + 4800 + 4600 + 1920 + 15000 + 4200 + 18900 + 27000 + 43875 + 20000 + 60000 + 8100 + 16250 + 3150 + 5000 + 2100 + 23400 + 5400 + 7350 + 25000 = 341195 3) Alex Franklin (owner_id=84342457) — 67 deals - Arithmetic: 14850 + 13770 + 11200 + 9000 + 6360 + 5400 + 3240 + 2484 + 1920 + 1080 + 7200 + 19000 + 2880 + 1400 + 4800 + 1632 + 10000 + 9300 + 2700 + 2160 + 1800 + 3600 + 3840 + 15000 + 1968 + 4000 + 3600 + 4800 + 3120 + 2520 + 9000 + 2400 + 62000 + 5400 + 5100 + 16700 + 4400 + 1620 + 2600 + 7200 + 18000 + 17000 + 8316 + 8100 + 18000 + 12600 + 24000 + 15000 + 9000 + 7200 + 3780 + 16200 + 7200 + 4680 + 1800 + 18000 + 2730 + 2400 + 3060 + 18000 + 12000 + 1800 + 4400 + 31200 + 7200 + 1600 + 60000 = 624310 4) Cole Ingram (owner_id=83155924) — 22 deals - Arithmetic: 2760 + 1330 + 7225.4 + 3360 + 5616 + 2700 + 7781.2 + 6947.5 + 40000 + 12168 + 2480.4 + 11116 + 11193 + 1875 + 31750 + 32175 + 4779.88 + 3334.8 + 58529.25 + 4140 + 18000 + 18900 = 288161.43 5) Farid Osman (owner_id=716654662) — 7 deals - Arithmetic: 1249 + 1 + 1 + 1 + 2880 + 1 + 1 = 4134 6) Elena Sinclair (owner_id=701163055) — 1 deal - Arithmetic: 2100 = 2100
(a) Gong rows whose hs_deal_id has NO match in deals_open (orphans) - Orphan row count = 30 Arithmetic: 67 gong rows total − 37 matched rows = 30 orphans - Sample orphan deal_alias values (from gong table): Deal-8FA85D, Deal-8FC3F9, Deal-3B7945, Deal-42B265, Deal-9CCC42, Deal-36EA09, Deal-9A43B4, Deal-605F3C (b) Duplicate conversation keys (calls_90d > distinct_conversation_keys) - Count = 0 Arithmetic: number of gong rows where calls_90d − distinct_conversation_keys > 0 = 0 (c) Among open deals at stage DS3 or later, share with ≥1 logged call - DS3+ open deals (denominator) = 85 - DS3+ open deals with ≥1 call in gong (numerator) = 25 - Share = 25 / 85 = 0.2941176471 = 29.41%
```sql
WITH first_month_cohort AS (
SELECT
c.COMPANY_ID,
DATE_TRUNC('month', c.FIRST_SUB_PAYMENT_DATE) AS FIRST_CUSTOMER_CALENDAR_MONTH,
/* Do NOT apply any "exclude deleted givers" filter here; historical giving counts must include them. */
c.M1_USERS AS UNIQUE_GIVERS,
c.M1_GIVES AS RECOGNITION_COUNT
-- Use PRODUCTION.PLG.COMPANY_COHORT_SUMMARY because it is the only cataloged source that already provides first-month (M1_*) giving metrics per self-serve company.
FROM PRODUCTION.PLG.COMPANY_COHORT_SUMMARY c
WHERE c.FIRST_SUB_PAYMENT_DATE IS NOT NULL
),
successful_redemptions_by_month AS (
SELECT
r.COMPANY_ID,
DATE_TRUNC('month', r.CREATED_AT) AS CALENDAR_MONTH,
COUNT(*) AS SUCCESSFUL_REDEMPTION_COUNT
-- Use PRODUCTION.DEPRECATED_RECOGNITION.REDEMPTION_RECORDS_V2 because it is the documented source for redemption events, and we must count only STATE='succeeded'.
FROM PRODUCTION.DEPRECATED_RECOGNITION.REDEMPTION_RECORDS_V2 r
WHERE r.STATE = 'succeeded'
GROUP BY
r.COMPANY_ID,
DATE_TRUNC('month', r.CREATED_AT)
)
SELECT
c.COMPANY_ID,
c.FIRST_CUSTOMER_CALENDAR_MONTH,
c.UNIQUE_GIVERS,
c.RECOGNITION_COUNT,
COALESCE(r.SUCCESSFUL_REDEMPTION_COUNT, 0) AS SUCCESSFUL_REDEMPTION_COUNT
-- Use first_month_cohort as the base so results are per company for its first calendar month as a customer.
FROM first_month_cohort c
-- Left join monthly succeeded redemptions so companies with zero succeeded redemptions still return a row.
LEFT JOIN successful_redemptions_by_month r
ON r.COMPANY_ID = c.COMPANY_ID
AND r.CALENDAR_MONTH = c.FIRST_CUSTOMER_CALENDAR_MONTH
;
```
DEALS (owner, stage, amount, close date, why-buys)
- Deals extract is not provided, so I cannot:
- report completeness % per deal field
- compute “pipeline amount at stake”
- produce the “10 fixes with the most pipeline amount at stake”
Needed file: deals.csv (at minimum: deal_alias (or key), owner, stage, amount, close_date, why_buys, company_alias).
COMPANIES (34 rows)
1) Completeness % per required field (arithmetic shown)
- industry: 34/34 = 1.0000 = 100.00%
- employee_count: 25/34 = 0.735294... = 73.53%
- hq_country: 28/34 = 0.823529... = 82.35%
2) Duplicate company clusters (shared domain) + survivor
Note: no company “name” field exists here, so I can only cluster by shared domain (not name variants).
- Cluster: domain = acme-corp.com
- Members: C-0A092931, C-0A092932
- Survivor (chosen by most-complete tie-break, then lexicographic): C-0A092931
- Differences to resolve:
- industry: C-0A092931 = Technology; C-0A092932 = tech
- employee_count: C-0A092931 = 500; C-0A092932 = 510
- hq_country: C-0A092931 = US; C-0A092932 = USA
- Cluster: domain = globex.io
- Members: C-0A092933, C-0A092934
- Survivor (chosen by most-complete tie-break, then lexicographic): C-0A092933
- Differences to resolve:
- industry: C-0A092933 = SaaS; C-0A092934 = Technology
- (employee_count and hq_country are the same: 200, US)
3) Fill missing company fields ONLY where zoominfo_enrichment.csv has a matching domain row
- employee_count is missing for 9 companies; 8 of those have a ZoomInfo match with a non-empty zi_employee_count and can be filled:
- C-EC3025 (ec3025.com): employee_count = (blank in CRM) → 400 (ZoomInfo)
- C-96039F (96039f.com): employee_count = (blank) → 400
- C-44EA29 (44ea29.com): employee_count = (blank) → 400
- C-D04904 (d04904.com): employee_count = (blank) → 400
- C-B23205 (b23205.com): employee_count = (blank) → 400
- C-60C75F (60c75f.com): employee_count = (blank) → 400
- C-7BBDFA (7bbdfa.com): employee_count = (blank) → 400
- C-50D386 (50d386.com): employee_count = (blank) → 400
- employee_count missing but cannot be filled from enrichment (no matching enrichment row):
- C-93C8BF (93c8bf.com): employee_count is blank; no ZoomInfo row provided for 93c8bf.com
- hq_country missing for 6 companies; none can be filled from enrichment based on the provided export:
- C-2D1F1B (2d1f1b.com): CRM blank; ZoomInfo zi_hq_country is also blank
- C-D73B89 (d73b89.com): CRM blank; ZoomInfo blank
- C-44EA29 (44ea29.com): CRM blank; ZoomInfo blank
- C-D04904 (d04904.com): CRM blank; ZoomInfo blank
- C-2C60E5 (2c60e5.com): CRM blank; ZoomInfo blank
- C-EE9FFB (ee9ffb.com): CRM blank; no ZoomInfo row provided for ee9ffb.com
4) Where CRM and enrichment DISAGREE: list both + recommend a source
Recommendation logic (no new facts): use ZoomInfo for standardized values (industry taxonomy + country normalization) and keep any internal segmentation separately (don’t overload “industry” with “tech/Technology”).
Industry conflicts (CRM vs ZoomInfo)
- C-66D1FC (66d1fc.com): industry CRM=tech; ZoomInfo=Computer Software → recommend ZoomInfo for industry
- C-EC3025 (ec3025.com): industry CRM=Technology; ZoomInfo=Computer Software → recommend ZoomInfo
- C-44EA29 (44ea29.com): industry CRM=tech; ZoomInfo=Computer Software → recommend ZoomInfo
- C-92D97D (92d97d.com): industry CRM=Technology; ZoomInfo=Computer Software → recommend ZoomInfo
- C-D04904 (d04904.com): industry CRM=Technology; ZoomInfo=Computer Software → recommend ZoomInfo
- C-77A95A (77a95a.com): industry CRM=Technology; ZoomInfo=Computer Software → recommend ZoomInfo
- C-AA8DDA (aa8dda.com): industry CRM=Technology; ZoomInfo=Computer Software → recommend ZoomInfo
- C-B25F40 (b25f40.com): industry CRM=Technology; ZoomInfo=Computer Software → recommend ZoomInfo
- C-60C75F (60c75f.com): industry CRM=tech; ZoomInfo=Computer Software → recommend ZoomInfo
- C-425E2A (425e2a.com): industry CRM=Tech ; ZoomInfo=Computer Software → recommend ZoomInfo
HQ country conflicts (CRM vs ZoomInfo; mostly normalization)
- C-66D1FC (66d1fc.com): hq_country CRM=US; ZoomInfo=United States → recommend ZoomInfo (or normalize CRM to “United States”)
- C-950043 (950043.com): hq_country CRM=US; ZoomInfo=United States → recommend ZoomInfo/normalize
- C-EC3025 (ec3025.com): hq_country CRM=USA; ZoomInfo=United States → recommend ZoomInfo/normalize
- C-96039F (96039f.com): hq_country CRM=USA; ZoomInfo=United States → recommend ZoomInfo/normalize
- C-77A95A (77a95a.com): hq_country CRM=US; ZoomInfo=United States → recommend ZoomInfo/normalize
- C-B23205 (b23205.com): hq_country CRM=US; ZoomInfo=United States → recommend ZoomInfo/normalize
- C-E51FB7 (e51fb7.com): hq_country CRM=USA; ZoomInfo=United States → recommend ZoomInfo/normalize
- C-D0662E (d0662e.com): hq_country CRM=US; ZoomInfo=United States → recommend ZoomInfo/normalize
- C-425E2A (425e2a.com): hq_country CRM=USA; ZoomInfo=United States → recommend ZoomInfo/normalize
- C-2D7423 (2d7423.com): hq_country CRM=USA; ZoomInfo=United States → recommend ZoomInfo/normalize
Companies with no enrichment match in the provided export (cannot enrich from provided data)
- C-BA969B (ba969b.com)
- C-332637 (332637.com)
- C-93C8BF (93c8bf.com)
- C-EE9FFB (ee9ffb.com)
- C-C9BB20 (c9bb20.com)
- C-0A092931 (acme-corp.com)
- C-0A092932 (acme-corp.com)
- C-0A092933 (globex.io)
- C-0A092934 (globex.io)
CONTACTS (52 rows)
1) Completeness % per required field (arithmetic shown)
- email (non-empty): 52/52 = 1.0000 = 100.00%
- title: 39/52 = 0.7500 = 75.00%
- persona: 37/52 = 0.711538... = 71.15%
2) Invalid emails (format)
(Also: “email non-empty” is 100%, but valid-format is lower.)
- Valid-format email rate: 48/52 = 0.923076... = 92.31%
- Invalid emails:
- CT-0010 (C-66D1FC): email = user0@
- CT-0080 (C-92D97D): email = user0@
- CT-0081 (C-92D97D): email = user1@
- CT-0192 (C-425E2A): email = user2@
3) Domain mismatches (email domain != contact domain), among valid-format emails
- CT-0011 (C-66D1FC): email = user1@other-domain.com; domain = 66d1fc.com
PROPOSED FIXES (what to change in CRM ops / validation)
- Deals: cannot audit or rank by pipeline until deals.csv is provided. Add hard-required fields for owner, stage, amount, close date, why-buys at the stage(s) you consider commit-qualified.
- Companies:
1) Backfill employee_count from ZoomInfo ONLY for the 8 matched companies listed above; leave C-93C8BF blank unless a matching enrichment row is provided.
2) Normalize hq_country to a single standard (e.g., use ZoomInfo “United States” vs CRM “US/USA”) to eliminate reporting fragmentation.
3) Standardize industry: if you adopt ZoomInfo, migrate CRM “tech/Technology/Tech ” into a separate internal segment field (so you don’t lose seller segmentation).
4) Deduplicate by domain:
- Merge C-0A092932 → C-0A092931 (acme-corp.com)
- Merge C-0A092934 → C-0A092933 (globex.io)
- Contacts:
5) Enforce email-format validation (blocks user0@ patterns).
6) Enforce/flag email-domain alignment to company domain; route exceptions to review (CT-0011).
7) Make title + persona required for roles used in opportunity qualification (or at least require persona when linked to active opportunities).
TOP 10 FIXES BY PIPELINE AMOUNT AT STAKE
- Cannot compute: deal amounts and deal-to-company/contact linkage are not provided (no deals.csv). Provide the deals extract and I will rank the fixes by summed amount (with arithmetic shown) and cite deal aliases exactly as given.
deal_alias,primary_category,side Deal-DB0AAC,timing,buyer Deal-F7F635,competitor,buyer Deal-AC944F,no decision,buyer Deal-214060,no decision,buyer Deal-91A056,timing,buyer Deal-29326C,timing,buyer Deal-5DB9B0,other,Bonusly Deal-831B7B,timing,buyer Deal-F97C37,competitor,buyer Deal-13E9CF,no decision,buyer Deal-39E25C,timing,buyer Deal-7ED004,pricing,buyer Deal-21B045,no decision,buyer Deal-B3ABED,timing,buyer Deal-422BA6,competitor,buyer Deal-ED9AE7,timing,buyer Deal-988493,no decision,buyer Deal-381C8C,competitor,buyer Deal-F308CA,no decision,buyer Deal-F1E8A6,competitor,buyer Deal-B6AC09,timing,buyer Deal-70F704,no decision,buyer Deal-E6E80A,timing,buyer Deal-B038F0,timing,buyer Deal-4664E1,no decision,buyer Deal-175756,timing,buyer Deal-E74A73,timing,buyer Deal-DDAB52,competitor,buyer Deal-ACE061,competitor,buyer Deal-BB78F3,timing,buyer Deal-D48E0B,no decision,buyer Deal-15DA99,timing,buyer Deal-F4AF5D,timing,buyer Deal-79B7A1,timing,buyer Deal-583ADB,no decision,buyer Deal-8E27DA,product gap,buyer Deal-2D2F8D,competitor,buyer Deal-E0441F,no decision,buyer Deal-7CB44D,no decision,buyer Deal-0F96AA,competitor,buyer Deal-1BCA50,competitor,buyer Deal-7CC678,competitor,buyer Deal-FAC17C,no decision,buyer Deal-242273,competitor,buyer Deal-50E5D8,timing,buyer Deal-A2C349,competitor,buyer Deal-9F176A,timing,buyer Deal-7B2236,pricing,buyer Deal-AFA56C,no decision,buyer Deal-C7156E,competitor,buyer Deal-C33D91,pricing,buyer Deal-9048EB,no decision,buyer Deal-5E64CE,pricing,buyer Deal-8A0992,competitor,buyer Deal-D0C698,competitor,buyer Deal-69CF3D,timing,buyer Deal-ECBF89,timing,buyer Deal-3618CC,product gap,buyer Deal-EECC02,competitor,buyer Deal-5AD03E,competitor,buyer Deal-D1A623,timing,buyer Deal-413C56,no decision,buyer Deal-47F1A1,competitor,buyer Deal-BF2A98,competitor,buyer Deal-2A292B,no decision,buyer Deal-D1AABF,no decision,buyer Deal-FEDBCB,timing,buyer Deal-1E7DA9,competitor,buyer Deal-2BBA21,no decision,buyer Deal-286F9C,competitor,buyer Deal-7FBAC6,timing,buyer Deal-369281,competitor,buyer Deal-386F6E,no decision,buyer Deal-9FCD0D,competitor,buyer Deal-55867E,timing,buyer Deal-DAFB82,pricing,buyer Deal-2FEDDB,no decision,buyer Deal-64B19A,competitor,buyer Deal-3F86A0,no decision,buyer Deal-096750,no decision,buyer Deal-F325A5,champion left,buyer Deal-ABD14C,no decision,buyer Deal-79E61A,no decision,buyer Deal-8A119B,pricing,buyer Deal-AE7C4E,no decision,buyer Deal-DAB4F1,no decision,buyer Deal-B4B50F,no decision,buyer Deal-981AD4,product gap,Bonusly Deal-DC77FE,competitor,buyer Deal-5885B9,no decision,buyer SUMMARY 1) Category counts (arithmetic shown) pricing: 6 competitor: 26 no decision: 29 timing: 24 product gap: 3 champion left: 1 other: 1 Check total: 6 + 26 + 29 + 24 + 3 + 1 + 1 = 90 deals 2) Side split (arithmetic shown) Bonusly: 2 buyer: 88 unknown: 0 Check total: 2 + 88 + 0 = 90 deals 3) Structured tag vs free-text clear disagreements Count: 6 deals where closed_lost_tag suggests “Doing nothing/Not a priority/Cost” but free-text clearly indicates a different primary category: - Deal-E74A73: tag Doing nothing/Not a priority/Cost vs reason implies timing (“…be in touch again sometime next year!”) - Deal-50E5D8: tag Doing nothing/Not a priority/Cost vs reason implies timing (“pause…reach out in the future”) - Deal-7B2236: tag Doing nothing/Not a priority/Cost vs reason implies pricing (“simpler and cheaper” + “budget”) - Deal-5E64CE: tag Doing nothing/Not a priority/Cost vs reason implies pricing (“fee…Nectar agreement…”) - Deal-FEDBCB: tag Doing nothing/Not a priority/Cost vs reason implies timing (“reconnect closer to the end of the year”) - Deal-7FBAC6: tag Doing nothing/Not a priority/Cost vs reason implies timing (“pause (again) for now”) 4) Two patterns most worth acting on (from tag + free-text only) Pattern A — “No decision” is the largest bucket (29/90), heavily driven by MIA/unresponsive/stale. - Evidence in free-text: “unresponsive”, “No meaningful contact…ignored outreach”, “MIA”. - Examples (deal_aliases): Deal-AC944F, Deal-214060, Deal-21B045, Deal-F308CA, Deal-4664E1, Deal-7CB44D, Deal-2BBA21, Deal-096750, Deal-5885B9. Pattern B — “Timing” deferrals are nearly as large (24/90) and repeatedly reference “next year / 2027 / 2028 / reconnect”. - Evidence in free-text: “reconnect early in 2027”, “circle back then”, “On Hold”, “pushed into early 2027”, “budget for in 2028”. - Examples (deal_aliases): Deal-DB0AAC, Deal-91A056, Deal-831B7B, Deal-B6AC09, Deal-E6E80A, Deal-175756, Deal-15DA99, Deal-69CF3D, Deal-D1A623.
{"tier_counts":{"LOCK":1,"ACTION":1,"BUILD":2,"REVIVE":98,"WATCH":12,"RISKY":42},"tier_examples":{"LOCK":["Deal-C26D20"],"ACTION":["Deal-944310"],"BUILD":["Deal-93C8BF","Deal-3795AD"],"REVIVE":["Deal-2D1F1B","Deal-66D1FC","Deal-C6FE92"],"WATCH":["Deal-036E80","Deal-C1FA6D","Deal-D9A72E"],"RISKY":["Deal-7BBDFA","Deal-F9A3C1","Deal-BA3DDC"]},"risky_deals":["Deal-0660B4","Deal-15D24F","Deal-1CCE5C","Deal-1FC049","Deal-2465CE","Deal-3BA5EA","Deal-4A13AD","Deal-5296C9","Deal-5408B0","Deal-547B2B","Deal-55164C","Deal-584EE5","Deal-5EED42","Deal-5FDCE4","Deal-60C2C2","Deal-635B8E","Deal-690476","Deal-7599B8","Deal-7B3B0F","Deal-7BBDFA","Deal-898FC5","Deal-8AD4A5","Deal-9AAE5F","Deal-9D0060","Deal-A2B47C","Deal-A5E80A","Deal-B7EBD1","Deal-BA3DDC","Deal-BA571A","Deal-C61CF7","Deal-C6D97A","Deal-E531A6","Deal-E53952","Deal-E73427","Deal-ED725A","Deal-F336B6","Deal-F9A08A","Deal-F9A3C1","Deal-FA053A","Deal-FA32A0","Deal-FC22A3","Deal-FD9F4E"],"lock_violations":0,"pipeline_shape":"As-of date derived from data=max(last_email/last_call/last_meeting)=2026-10-02. Total deals=156; tier sum check: LOCK(1)+ACTION(1)+BUILD(2)+REVIVE(98)+WATCH(12)+RISKY(42)=156 (should equal 156). Stage mix: DS1=32, DS2=39, DS3=61, DS4=14, DS5=10. Forecast mix: BEST_CASE=40, COMMIT=11, PIPELINE=105. Meetings signal is sparse: meetings_30d==0 for 101 deals and >=1 for 55 deals (check: 101+55=156 equals 156)."}
[
{
"transcript_id": "TX-001",
"deal_alias": "Deal-CFE7F4",
"why_buys": [
"Automating anniversary and birthday awards so HR (team of three) can keep up.",
"Stop people slipping through the cracks from spreadsheet-based tracking."
],
"pain_points": [
"HR team of three cannot keep up with manual anniversary and birthday awards.",
"Tracking in a spreadsheet leads to people slipping through the cracks."
],
"stakeholders": [
"Prospect (VP People)",
"Prospect (HR Admin)"
],
"budget_signal": "$40k earmarked for engagement tools this fiscal year",
"timeline_signal": "Live before open enrollment in November",
"competitor_mentioned": "Achievers",
"next_step": "Security review scheduled on September 12",
"objections": [
"Need SSO and audit logs for IT to sign off.",
"Achievers was too heavy for a team our size (prior evaluation context)."
],
"confidence": "high"
},
{
"transcript_id": "TX-002",
"deal_alias": "Deal-70BB30",
"why_buys": [
"Tie recognition to retention for the hourly workforce (regretted turnover over 30%)."
],
"pain_points": [
"Regretted turnover for hourly workforce is over 30%."
],
"stakeholders": [
"Prospect (Head of Total Rewards)",
"Prospect (CFO)"
],
"budget_signal": "$25k pilot budget approved for this quarter",
"timeline_signal": "Decision by end of September",
"competitor_mentioned": null,
"next_step": "Send the pilot agreement; prospect will route it to legal this week",
"objections": [
"Integration with Workday has to be rock solid (CFO's one condition)."
],
"confidence": "high"
},
{
"transcript_id": "TX-003",
"deal_alias": "Deal-530B50",
"why_buys": [
"Make recognition visible across 12 retail locations."
],
"pain_points": [
"Recognition is not visible across 12 retail locations.",
"Store managers have zero budget autonomy for on-the-spot recognition."
],
"stakeholders": [
"Prospect (People Ops Manager)"
],
"budget_signal": null,
"timeline_signal": "No rush until Q1",
"competitor_mentioned": "Bucketlist",
"next_step": "Schedule a call with the CEO; prospect will send two times",
"objections": [
"The CEO has to be sold first; she decides anything people-related."
],
"confidence": "medium"
},
{
"transcript_id": "TX-004",
"deal_alias": "Deal-180D02",
"why_buys": [
"Consolidate three separate recognition tools into one.",
"Have recognition tools that talk to their HRIS."
],
"pain_points": [
"Paying for three tools and none of them talk to the HRIS."
],
"stakeholders": [
"Prospect (VP People)",
"Prospect (IT Security Lead)"
],
"budget_signal": "Under $15k annually can be approved without going to the board",
"timeline_signal": "Procurement cycle runs six to eight weeks minimum",
"competitor_mentioned": null,
"next_step": null,
"objections": [
"Security review took three months for the last vendor (hesitation).",
"Procurement cycle runs six to eight weeks minimum."
],
"confidence": "low"
},
{
"transcript_id": "TX-005",
"deal_alias": "Deal-F8767A",
"why_buys": [
"Automate service milestones.",
"Get analytics on recognition equity across departments.",
"Address night-shift teams feeling invisible (engagement scores 20 points lower)."
],
"pain_points": [
"Need to automate service milestones.",
"Need analytics on recognition equity across departments.",
"Night-shift teams feel invisible; engagement scores run 20 points lower."
],
"stakeholders": [
"Prospect (HR Director)",
"Prospect (People Ops Coordinator)"
],
"budget_signal": "$12k approved under engagement line",
"timeline_signal": "Running before January all-hands",
"competitor_mentioned": "Nectar",
"next_step": "Exec team presentation scheduled on October 2",
"objections": [
"Mid-pilot with Nectar; you’d need to beat that experience.",
"Exec team is skeptical after a failed rollout two years ago."
],
"confidence": "high"
},
{
"transcript_id": "TX-006",
"deal_alias": "Deal-EE195F",
"why_buys": [
"Cut admin time on service awards."
],
"pain_points": [
"Personally spends five hours a month ordering and shipping plaques for service awards."
],
"stakeholders": [
"Prospect (HR Manager)"
],
"budget_signal": "Budget isn't the issue — time is",
"timeline_signal": "Fiscal year resets in February; a Q1 start is realistic",
"competitor_mentioned": null,
"next_step": "Send the one-page overview; prospect will forward it to the COO this week",
"objections": [
"COO usually prefers building things in-house.",
"Comparing this against doing it internally (alternative)."
],
"confidence": "medium"
}
]
1) Deal-547B2B — $11,200 - Why it is close: Slack (Alex, 2026-09-04) says “redlines came back clean,” “signing page is out,” and their VP People said they are “signing tomorrow” (signature-imminent). CRM also shows DS5 / COMMIT with close_date 2026-09-11. - What is left: Executed signature (final signing step). 2) Deal-403845 — $9,000 - Why it is close: Slack (Dana, 2026-09-04) says “the order form is with their finance team,” implying late-stage internal approval/signature routing. CRM shows DS5 / COMMIT with close_date 2026-09-11. (Note: CRM owner is Alex Franklin; Slack update is from Dana.) - What is left: Finance approval of order form + signature. 3) Deal-A2B47C — $6,360 - Why it is close: Slack (Alex, 2026-09-04) says it’s “still warm, just normal legal-review pace.” CRM shows DS5 / COMMIT with close_date 2026-09-11. - What is left: Complete legal review/redlines (if any) + signature. Arithmetic (amounts): 11,200 + 9,000 + 6,360 = 26,560 total.
SUMMARY — real product gaps (prospect voice only) 1) Deal-EC3025 — Amount: NOT PROVIDED in the data Prospect quote: “We need SCIM user provisioning — our security team will not approve any tool that requires manual account management.” Why it’s a real gap per docs: Product docs state “SCIM user provisioning … [is] NOT currently listed as supported capabilities.” 2) Deal-D0D6B5 — Amount: NOT PROVIDED in the data Prospect quote: “Our payroll runs on ADP Workforce Now and I don't see ADP anywhere in your integration list — that's a dealbreaker for us.” Why it’s a real gap per docs: Product docs state “ADP Workforce Now integrations are NOT currently listed as supported capabilities.” Arithmetic (counts) - Real gaps = 2 (= 1 SCIM + 1 ADP) - Other prospect-raised candidates evaluated = 2 (plan gate 1 + rollout/enablement 1) - Total prospect-raised candidates evaluated = 4 (= 2 real gaps + 1 plan gate + 1 rollout/enablement) CANDIDATES (each prospect line + classification + deal + amount) - TG-001 / Deal-EC3025 / Amount: NOT PROVIDED Quote: “We need SCIM user provisioning — our security team will not approve any tool that requires manual account management.” Classification (using docs): REAL GAP (SCIM not listed as supported) - TG-002 / Deal-D0D6B5 / Amount: NOT PROVIDED Quote: “Our payroll runs on ADP Workforce Now and I don't see ADP anywhere in your integration list — that's a dealbreaker for us.” Classification (using docs): REAL GAP (ADP Workforce Now not listed as supported) - TG-003 / Deal-CFE7F4 / Amount: NOT PROVIDED Quote: “I tried to build a custom report combining recognition frequency with turnover and couldn't — is that possible on our current plan?” Classification (using docs): PLAN GATE (custom report builder is Enterprise-only) - TG-004 / Deal-84DBA6 / Amount: NOT PROVIDED Quote: “We turned on the Slack integration in July, but half our managers still haven't given a single recognition — nobody ever trained them on it.” Classification (using docs): ROLLOUT/ENABLEMENT ISSUE (Slack integration exists on all plans; issue is training/adoption) Excluded (not prospect voice) - TG-005 rep language about “we don't have a native mobile app…” was not counted because it’s not a prospect line.
Snapshot date = 2026-09-05 Stale criterion = max(last_email, last_call, last_meeting) is earlier than 2026-08-29 (i.e., days_since_last_contact > 7) Owner: Bryce Harmon Deal-2D1F1B | Bryce Harmon | DS1 | amount=240000 | days_since_last_contact=81 (2026-09-05 - 2026-06-16 = 81) Deal-66D1FC | Bryce Harmon | DS1 | amount=99000 | days_since_last_contact=16 (2026-09-05 - 2026-08-20 = 16) Deal-950043 | Bryce Harmon | DS1 | amount=70000 | days_since_last_contact=19 (2026-09-05 - 2026-08-17 = 19) Deal-B23205 | Bryce Harmon | DS1 | amount=45000 | days_since_last_contact=16 (2026-09-05 - 2026-08-20 = 16) Deal-7BBDFA | Bryce Harmon | DS3 | amount=37440 | days_since_last_contact=46 (2026-09-05 - 2026-07-21 = 46) Deal-332637 | Bryce Harmon | DS2 | amount=36000 | days_since_last_contact=9 (2026-09-05 - 2026-08-27 = 9) Deal-1BEEBF | Bryce Harmon | DS1 | amount=31500 | days_since_last_contact=19 (2026-09-05 - 2026-08-17 = 19) Deal-C5658B | Bryce Harmon | DS1 | amount=23400 | days_since_last_contact=16 (2026-09-05 - 2026-08-20 = 16) Deal-40522D | Bryce Harmon | DS3 | amount=21000 | days_since_last_contact=19 (2026-09-05 - 2026-08-17 = 19) Deal-F0EBBB | Bryce Harmon | DS3 | amount=11400 | days_since_last_contact=24 (2026-09-05 - 2026-08-12 = 24) Deal-E25A09 | Bryce Harmon | DS1 | amount=6000 | days_since_last_contact=9 (2026-09-05 - 2026-08-27 = 9) Deal-C9C286 | Bryce Harmon | DS2 | amount=5502 | days_since_last_contact=9 (2026-09-05 - 2026-08-27 = 9) Deal-012CB1 | Bryce Harmon | DS1 | amount=1 | days_since_last_contact=23 (2026-09-05 - 2026-08-13 = 23) Owner total: 13 stale deals; total stale amount = 240000 + 99000 + 70000 + 45000 + 37440 + 36000 + 31500 + 23400 + 21000 + 11400 + 6000 + 5502 + 1 = 626243 Owner: Dana Mercer Deal-44EA29 | Dana Mercer | DS2 | amount=60000 | days_since_last_contact=10 (2026-09-05 - 2026-08-26 = 10) Deal-E51FB7 | Dana Mercer | DS2 | amount=43875 | days_since_last_contact=12 (2026-09-05 - 2026-08-24 = 12) Deal-B42F46 | Dana Mercer | DS1 | amount=27000 | days_since_last_contact=19 (2026-09-05 - 2026-08-17 = 19) Deal-BA3DDC | Dana Mercer | DS3 | amount=23400 | days_since_last_contact=15 (2026-09-05 - 2026-08-21 = 15) Deal-9DDE86 | Dana Mercer | DS2 | amount=20000 | days_since_last_contact=15 (2026-09-05 - 2026-08-21 = 15) Deal-215CCA | Dana Mercer | DS3 | amount=18900 | days_since_last_contact=17 (2026-09-05 - 2026-08-19 = 17) Deal-5EED42 | Dana Mercer | DS3 | amount=16250 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-57887A | Dana Mercer | DS2 | amount=15000 | days_since_last_contact=8 (2026-09-05 - 2026-08-28 = 8) Deal-B7EBD1 | Dana Mercer | DS5 | amount=9000 | days_since_last_contact=16 (2026-09-05 - 2026-08-20 = 16) Deal-3974EB | Dana Mercer | DS4 | amount=9000 | days_since_last_contact=8 (2026-09-05 - 2026-08-28 = 8) Deal-F40F04 | Dana Mercer | DS2 | amount=8100 | days_since_last_contact=15 (2026-09-05 - 2026-08-21 = 15) Deal-87DDD1 | Dana Mercer | DS1 | amount=5000 | days_since_last_contact=19 (2026-09-05 - 2026-08-17 = 19) Deal-F336B6 | Dana Mercer | DS3 | amount=4200 | days_since_last_contact=15 (2026-09-05 - 2026-08-21 = 15) Deal-0660B4 | Dana Mercer | DS4 | amount=1920 | days_since_last_contact=16 (2026-09-05 - 2026-08-20 = 16) Owner total: 14 stale deals; total stale amount = 60000 + 43875 + 27000 + 23400 + 20000 + 18900 + 16250 + 15000 + 9000 + 9000 + 8100 + 5000 + 4200 + 1920 = 261645 Owner: Alex Franklin Deal-CC08D1 | Alex Franklin | DS1 | amount=24000 | days_since_last_contact=16 (2026-09-05 - 2026-08-20 = 16) Deal-885F45 | Alex Franklin | DS2 | amount=9300 | days_since_last_contact=12 (2026-09-05 - 2026-08-24 = 12) Deal-C2FF3C | Alex Franklin | DS1 | amount=8316 | days_since_last_contact=10 (2026-09-05 - 2026-08-26 = 10) Deal-0D2F7A | Alex Franklin | DS3 | amount=5100 | days_since_last_contact=12 (2026-09-05 - 2026-08-24 = 12) Deal-6C60D4 | Alex Franklin | DS3 | amount=4800 | days_since_last_contact=12 (2026-09-05 - 2026-08-24 = 12) Deal-13FEBD | Alex Franklin | DS2 | amount=4680 | days_since_last_contact=12 (2026-09-05 - 2026-08-24 = 12) Deal-9D0060 | Alex Franklin | DS3 | amount=3840 | days_since_last_contact=12 (2026-09-05 - 2026-08-24 = 12) Deal-690476 | Alex Franklin | DS2 | amount=3600 | days_since_last_contact=18 (2026-09-05 - 2026-08-18 = 18) Deal-C6D97A | Alex Franklin | DS4 | amount=3240 | days_since_last_contact=8 (2026-09-05 - 2026-08-28 = 8) Deal-EE195F | Alex Franklin | DS3 | amount=3120 | days_since_last_contact=8 (2026-09-05 - 2026-08-28 = 8) Deal-278DEC | Alex Franklin | DS3 | amount=2700 | days_since_last_contact=8 (2026-09-05 - 2026-08-28 = 8) Deal-635B8E | Alex Franklin | DS3 | amount=2600 | days_since_last_contact=18 (2026-09-05 - 2026-08-18 = 18) Deal-6883F3 | Alex Franklin | DS1 | amount=2400 | days_since_last_contact=16 (2026-09-05 - 2026-08-20 = 16) Deal-4A13AD | Alex Franklin | DS3 | amount=2160 | days_since_last_contact=26 (2026-09-05 - 2026-08-10 = 26) Deal-F67D31 | Alex Franklin | DS2 | amount=1800 | days_since_last_contact=8 (2026-09-05 - 2026-08-28 = 8) Deal-5FDCE4 | Alex Franklin | DS3 | amount=1600 | days_since_last_contact=12 (2026-09-05 - 2026-08-24 = 12) Deal-BA571A | Alex Franklin | DS4 | amount=1080 | days_since_last_contact=18 (2026-09-05 - 2026-08-18 = 18) Owner total: 17 stale deals; total stale amount = 24000 + 9300 + 8316 + 5100 + 4800 + 4680 + 3840 + 3600 + 3240 + 3120 + 2700 + 2600 + 2400 + 2160 + 1800 + 1600 + 1080 = 84336 Owner: Cole Ingram Deal-D04904 | Cole Ingram | DS2 | amount=58529.25 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-B25F40 | Cole Ingram | DS3 | amount=40000 | days_since_last_contact=8 (2026-09-05 - 2026-08-28 = 8) Deal-813836 | Cole Ingram | DS2 | amount=32175 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-1BA595 | Cole Ingram | DS2 | amount=31750 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-CFE1E8 | Cole Ingram | DS3 | amount=18000 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-CD47A6 | Cole Ingram | DS2 | amount=12168 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-627646 | Cole Ingram | DS3 | amount=11193 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-FF809F | Cole Ingram | DS2 | amount=7781.2 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-AF932D | Cole Ingram | DS2 | amount=7225.4 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-A71728 | Cole Ingram | DS2 | amount=6947.5 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-8BC9F5 | Cole Ingram | DS2 | amount=5616 | days_since_last_contact=10 (2026-09-05 - 2026-08-26 = 10) Deal-175395 | Cole Ingram | DS3 | amount=4779.88 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-481E24 | Cole Ingram | DS3 | amount=4140 | days_since_last_contact=10 (2026-09-05 - 2026-08-26 = 10) Deal-C7F9BF | Cole Ingram | DS2 | amount=3360 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-2F3A66 | Cole Ingram | DS3 | amount=3334.8 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-342E96 | Cole Ingram | DS2 | amount=2700 | days_since_last_contact=24 (2026-09-05 - 2026-08-12 = 24) Deal-E568D5 | Cole Ingram | DS3 | amount=1875 | days_since_last_contact=11 (2026-09-05 - 2026-08-25 = 11) Deal-FD9F4E | Cole Ingram | DS5 | amount=1330 | days_since_last_contact=10 (2026-09-05 - 2026-08-26 = 10) Owner total: 18 stale deals; total stale amount = 58529.25 + 40000 + 32175 + 31750 + 18000 + 12168 + 11193 + 7781.2 + 7225.4 + 6947.5 + 5616 + 4779.88 + 4140 + 3360 + 3334.8 + 2700 + 1875 + 1330 = 252905.03 Missing data (cannot compute days since last contact because no row in engagements_by_deal_90d.csv): Deal-3EED2C (Alex Franklin) Deal-57FF13 (Elena Sinclair)
Snapshot date: 2026-09-05 DS2 “last 30 days” window (inclusive): 2026-08-06 to 2026-09-05 Data constraint (cannot attribute owner): 10 rows in engagements_by_deal_90d.csv have deal_id not present in deals_open.csv, so they are excluded from owner totals: 59915123992, 61180233512, 61390497109, 61432482880, 61475253432, 63027793424, 63083909749, 63087338777, 63186780704, 64338498392 Per rep (owner): last-30d totals from engagements_by_deal_90d.csv (sum of emails_30d, calls_30d, meetings_30d across that owner’s deals in deals_open.csv) + DS2 entries from deals_open.csv (count of deals where t_ds2 is in the window) RANKED by efficiency = total_activities / DS2_entries (lower = more efficient) 1) Alex Franklin (owner_id=84342457) - Emails=303, Calls=36, Meetings=41 - Total activities = 303 + 36 + 41 = 380 - Activity mix: - Emails% = 303/380 = 79.7% - Calls% = 36/380 = 9.5% - Meetings% = 41/380 = 10.8% - DS2 entries (t_ds2 in window) = 18 - Activities per DS2 entry = 380/18 = 21.11 2) Bryce Harmon (owner_id=119337721) - Emails=162, Calls=0, Meetings=43 - Total activities = 162 + 0 + 43 = 205 - Activity mix: - Emails% = 162/205 = 79.0% - Calls% = 0/205 = 0.0% - Meetings% = 43/205 = 21.0% - DS2 entries (t_ds2 in window) = 4 - Activities per DS2 entry = 205/4 = 51.25 3) Cole Ingram (owner_id=83155924) - Emails=56, Calls=5, Meetings=0 - Total activities = 56 + 5 + 0 = 61 - Activity mix: - Emails% = 56/61 = 91.8% - Calls% = 5/61 = 8.2% - Meetings% = 0/61 = 0.0% - DS2 entries (t_ds2 in window) = 1 - Activities per DS2 entry = 61/1 = 61.00 4) Farid Osman (owner_id=716654662) - Emails=38, Calls=0, Meetings=34 - Total activities = 38 + 0 + 34 = 72 - Activity mix: - Emails% = 38/72 = 52.8% - Calls% = 0/72 = 0.0% - Meetings% = 34/72 = 47.2% - DS2 entries (t_ds2 in window) = 1 - Activities per DS2 entry = 72/1 = 72.00 5) Dana Mercer (owner_id=83155923) - Emails=84, Calls=18, Meetings=11 - Total activities = 84 + 18 + 11 = 113 - Activity mix: - Emails% = 84/113 = 74.3% - Calls% = 18/113 = 15.9% - Meetings% = 11/113 = 9.7% - DS2 entries (t_ds2 in window) = 1 - Activities per DS2 entry = 113/1 = 113.00 Owners with 0 DS2 entries in-window (efficiency ratio undefined / not rankable): - Gavin Porter (owner_id=1520255671): total=0, DS2 entries=0 → N/A - Hugo Lindqvist (owner_id=77260721): total=0, DS2 entries=0 → N/A - Elena Sinclair (owner_id=701163055): total=0, DS2 entries=0 → N/A Most efficient rep (lowest activities per DS2 entry): Alex Franklin (owner_id=84342457) at 380/18 = 21.11 Highest-volume rep (most total activities): Alex Franklin (owner_id=84342457) with 380 total activities Do they differ? NO
QTD scorecard — AE: Alex Franklin — as of 2026-09-05 (Quarter = 2026-Q3; quota snapshot_date = 2026-09-05) 1) Bookings vs quota (QTD; CLOSED_WON on/after 2026-07-01 and on/before 2026-09-05) Excluded per instruction (pre-quarter): Deal-B3E6F1 (close_date 2026-06-20, amount 24000) QTD bookings arithmetic: = Deal-A1C3E5 40000 + Deal-F2C7D8 20000 + Deal-B7D2F4 35000 + Deal-C9E1A6 21000 + Deal-A8B4D6 12000 + Deal-D4B8C2 11000 + Deal-E6F3A9 6500 + Deal-C5D9E2 4500 = 150000 Quota (2026-Q3 as of 2026-09-05) = 200000 Attainment arithmetic: = 150000 / 200000 = 0.75 = 75% 2) New vs expansion split (QTD bookings only; same inclusion rules as above) New bookings arithmetic: = Deal-A1C3E5 40000 + Deal-B7D2F4 35000 + Deal-C9E1A6 21000 + Deal-D4B8C2 11000 + Deal-E6F3A9 6500 = 113500 Expansion bookings arithmetic: = Deal-F2C7D8 20000 + Deal-A8B4D6 12000 + Deal-C5D9E2 4500 = 36500 3) Active pipeline by stage (status = open; as of snapshot — dataset does not provide historical stage-as-of, so this is “currently open” in the provided extract) DS1 = 284621 DS2 = 353760 DS3 = 552705 DS4 = 23574 DS5 = 45730 Total active pipeline arithmetic = 284621 + 353760 + 552705 + 23574 + 45730 = 1260390 4) Rolling 90-day DS2-to-won rate (as of 2026-09-05) Definition used (based on available fields): cohort = deals with entered_ds2 between 2026-06-07 and 2026-09-05 (inclusive). Outcomes counted only when status is won/lost with close_date on/before 2026-09-05. Cohort size (entered DS2 in last 90 days) = 111 Cohort with known outcomes by snapshot (won or lost) = 35 - Won = 8 - Lost = 27 DS2→Won rate (closed outcomes only) arithmetic: = 8 / (8 + 27) = 8 / 35 = 0.228571... = 22.86% Note: 111 − 35 = 76 deals in this 90-day DS2 cohort are still open as of 2026-09-05, so a full “eventual” DS2→Won rate is not observable from the provided snapshot. 5) Wins, losses, and top loss reason (QTD; close_date 2026-07-01 to 2026-09-05) Win count (CLOSED_WON in window) = 8 Loss count (CLOSED_LOST in window) = 27 Top loss reason by count (QTD): Lost- Timing (1 year or more) = 13 losses Arithmetic share of losses = 13 / 27 = 0.48148... = 48.15% (Amount context, still QTD losses only) Total lost amount = 329272 Lost amount tagged “Lost- Timing (1 year or more)” = 184681 Arithmetic share of lost $ = 184681 / 329272 = 0.56088... = 56.09% 6) Activity volume by type (last 30 days; summed from ae_engagements.csv across Alex Franklin deal_ids) Emails_30d total = 807 Calls_30d total = 112 Meetings_30d total = 128 Notes_30d total = 50 Three coaching observations (grounded in the numbers above) 1) Loss profile is dominated by “Lost- Timing (1 year or more)”. - 13 of 27 losses = 48.15% - 184681 of 329272 lost $ = 56.09% Coaching focus: tighten timeline qualification and mutual plan earlier (DS2), because timing is both the most frequent and the largest-dollar loss driver. 2) Pipeline is very bottom/mid heavy with limited late-stage coverage. - Early-stage (DS1+DS2) = 284621 + 353760 = 638381, which is 638381 / 1260390 = 50.65% of active pipeline. - Late-stage (DS4+DS5) = 23574 + 45730 = 69304, which is 69304 / 1260390 = 5.50% of active pipeline. Coaching focus: prioritize progressing a subset of DS2/DS3 to DS4/DS5 to create more near-term closing surface area. 3) Activity mix skews heavily to email, and a large share of open deals show zero call/meeting activity in the last 30 days (per ae_engagements.csv). - Emails per call = 807 / 112 = 7.205 - Open deals with 0 calls AND 0 meetings in last 30 days = 62 out of 125 open deals = 62 / 125 = 49.6% Coaching focus: pick the highest-$ DS2/DS3 deals and enforce a “call/meeting required” cadence to avoid pipeline stagnation and improve DS2→Won conversion (currently 22.86% on closed outcomes in the last-90-day DS2 cohort).
Active definition used (per your rules): - active = (last_engaged_date within last 60 days) AND (is_former=false) - as-of date not provided; using 2026-09-13 (today in this session) solely to compute “last 60 days” - cutoff arithmetic: 2026-09-13 - 60 days = 2026-07-15 (inclusive) Data missing: - amount: MISSING (not in provided files) - stage: MISSING (not in provided files) - “most valuable persona to add given the stage”: stage is MISSING, so I apply a default threading priority: economic buyer > finance > IT security > HR admin > champion Flagged open deals (single-threaded <2 active contacts OR under-threaded <3 OR all contacts in one persona): Deal-EC3025 (deal_id 61032318100) — company C-FDD0C7 - amount: MISSING - stage: MISSING - active contact count: 1 - personas present (active): champion - personas missing: economic buyer, HR admin, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: CT-6827DB (Chief People Officer, economic buyer) Deal-92D97D (deal_id 59728118877) — company C-E23238 - amount: MISSING - stage: MISSING - active contact count: 1 - personas present (active): HR admin - personas missing: economic buyer, champion, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: none on file Deal-50D386 (deal_id 61055128146) — company C-EB10E4 - amount: MISSING - stage: MISSING - active contact count: 2 - personas present (active): champion, HR admin - personas missing: economic buyer, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: CT-A1C4B3 (Chief People Officer, economic buyer) Deal-D0D6B5 (deal_id 60081655042) — company C-32918E - amount: MISSING - stage: MISSING - active contact count: 3 - personas present (active): champion - personas missing: economic buyer, HR admin, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: CT-1FA4DB (Chief People Officer, economic buyer) Deal-5BFE3B (deal_id 51674270311) — company C-535D36 - amount: MISSING - stage: MISSING - active contact count: 2 - personas present (active): champion - personas missing: economic buyer, HR admin, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: none on file Deal-36C33F (deal_id 63739413805) — company C-077A0E - amount: MISSING - stage: MISSING - active contact count: 1 - personas present (active): IT security - personas missing: economic buyer, champion, HR admin, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: CT-1DB73E (Chief People Officer, economic buyer) Deal-885F45 (deal_id 60686135564) — company C-5E8EFB - amount: MISSING - stage: MISSING - active contact count: 2 - personas present (active): economic buyer, champion - personas missing: HR admin, IT security, finance - most valuable persona to add: finance - on-file unengaged contact who fits: none on file Deal-FCBE5B (deal_id 62639586615) — company C-737030 - amount: MISSING - stage: MISSING - active contact count: 1 - personas present (active): champion - personas missing: economic buyer, HR admin, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: none on file Deal-5408B0 (deal_id 60182332309) — company C-2AE3AA - amount: MISSING - stage: MISSING - active contact count: 2 - personas present (active): champion, HR admin - personas missing: economic buyer, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: CT-07FA76 (Chief People Officer, economic buyer) Deal-C6D97A (deal_id 62121783047) — company C-5A8FC2 - amount: MISSING - stage: MISSING - active contact count: 3 - personas present (active): champion - personas missing: economic buyer, HR admin, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: none on file Deal-F9A08A (deal_id 49757401138) — company C-0D15DF - amount: MISSING - stage: MISSING - active contact count: 1 - personas present (active): champion - personas missing: economic buyer, HR admin, IT security, finance - most valuable persona to add: economic buyer - on-file unengaged contact who fits: CT-697541 (Chief People Officer, economic buyer)
What they lead with in the first five minutes (10 calls total) 1) Case-study / ROI opener (8 of 10 calls) - Arithmetic: 8 ÷ 10 = 0.8 = 80% - 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.” 2) “Agenda first” framing (1 of 10 calls) - Arithmetic: 1 ÷ 10 = 0.1 = 10% - Quote: “I put together a short agenda — security review first, then pricing.” 3) “Start with pricing” framing (1 of 10 calls) - Arithmetic: 1 ÷ 10 = 0.1 = 10% - Quote: “You asked for straight pricing last time, so let's start there.” How they handle the three most common objections (by frequency across the 10 calls) 1) Budget locked / can’t add a line item (4 of 10 calls) - Arithmetic: 4 ÷ 10 = 0.4 = 40% - Handling (rep 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.” 2) Timing push / “revisit next quarter” (3 of 10 calls) - Arithmetic: 3 ÷ 10 = 0.3 = 30% - Handling (rep quote): “Makes sense. What if we scope a 90-day pilot with one department so you have internal data before next quarter's planning?” 3) Status quo / “we already do recognition with a spreadsheet + gift cards” (3 of 10 calls) - Arithmetic: 3 ÷ 10 = 0.3 = 30% - Handling (rep 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.” How often a concrete next step is agreed (rate) - Count with an explicit agreed next step: 7 calls (TT-001, TT-002, TT-003, TT-005, TT-006, TT-008, TT-009) - Total calls: 10 - Arithmetic: 7 ÷ 10 = 0.7 = 70% - Quote: “Yes, Thursday at 2pm works — send the invite and I'll bring our HRIS manager.” Every competitor a prospect raised (prospect-said only) - Awardco - Quote: “We're also in late talks with Awardco — their rewards catalog looks bigger than yours.” - Kudos - Quote: “How are you different from Kudos? Our CEO used them at her last company.” Note: Workhuman is mentioned by the rep, but no prospect line raises Workhuman in these transcripts. Two coaching notes 1) The first-5-minutes opener is highly repetitive (80% identical opener). Keep the case study, but add 1–2 alternative openers (e.g., security-first or pricing-first) matched to what the prospect asked for to reduce “script” feel. 2) When “committee/no urgency” shows up, the rep response doesn’t capture a dated next step in the provided lines; add a consistent close that converts “committee” into a scheduled working session with named attendees and a calendar time (the same way the Thursday 2pm close works when it lands).
Q3 2026 window = 2026-07-01 to 2026-09-30 (inclusive). Only deals with close_date inside this window are counted. COMMIT (inside Q3) - Count: 7 - Total COMMIT = 11200 + 9000 + 9000 + 6360 + 5400 + 2520 + 1249 = 44729 - Deal-547B2B 11200 (2026-09-11) - Deal-B7EBD1 9000 (2026-09-10) - Deal-403845 9000 (2026-09-11) - Deal-A2B47C 6360 (2026-09-11) - Deal-2465CE 5400 (2026-09-10) - Deal-A5E80A 2520 (2026-09-11) - Deal-499BF6 1249 (2026-09-30) BEST_CASE (inside Q3) - Count: 24 - Total BEST_CASE = 38935 + 24000 + 19656 + 16250 + 11116 + 10800 + 10500 + 9890 + 9720 + 9000 + 7200 + 3840 + 3780 + 3600 + 3240 + 3150 + 3120 + 3060 + 2916 + 2760 + 2484 + 2100 + 1920 + 528 = 203565 PIPELINE (inside Q3) - Count: 23 - Total PIPELINE (counts zero in weighted forecast per rule): 201637.4 Weighted forecast (Q3 2026) - Rule: 100% of COMMIT + 35% of BEST_CASE (PIPELINE = 0) - Weighted forecast = 44729 + 0.35 * 203565 = 44729 + 71247.75 = 115976.75 Deals excluded for being outside Q3 (close_date not in 2026-07-01..2026-09-30) - Excluded count: 32 - Excluded total amount (all categories) = 227575 - Excluded deals (deal_alias (forecast_category) amount close_date): - Deal-E51FB7(PIPELINE) 43875 2026-10-01 - Deal-5FDCE4(BEST_CASE) 1600 2026-10-01 - Deal-7FA0C3(PIPELINE) 1400 2026-10-01 - Deal-600CD9(PIPELINE) 5400 2026-10-02 - Deal-FCBE5B(PIPELINE) 7500 2026-10-07 - Deal-8AD4A5(BEST_CASE) 1800 2026-10-07 - Deal-9F2E43(PIPELINE) 7690 2026-10-08 - Deal-ED725A(BEST_CASE) 2400 2026-10-08 - Deal-F5A622(BEST_CASE) 1080 2026-10-08 - Deal-B936FE(PIPELINE) 18000 2026-10-09 - Deal-293AF3(PIPELINE) 9000 2026-10-09 - Deal-C61CF7(BEST_CASE) 5400 2026-10-09 - Deal-D1E6C2(PIPELINE) 4400 2026-10-09 - Deal-D9E112(PIPELINE) 4300 2026-10-09 - Deal-47AE31(BEST_CASE) 3600 2026-10-09 - Deal-15D24F(BEST_CASE) 3600 2026-10-09 - Deal-ED13B0(PIPELINE) 1680 2026-10-09 - Deal-766C74(PIPELINE) 3300 2026-10-14 - Deal-D9A12F(PIPELINE) 17000 2026-10-15 - Deal-D348E1(COMMIT) 13770 2026-10-15 - Deal-4062CF(PIPELINE) 10800 2026-10-15 - Deal-034D49(PIPELINE) 9000 2026-10-15 - Deal-E0ADD8(PIPELINE) 7920 2026-10-15 - Deal-712010(PIPELINE) 7200 2026-10-15 - Deal-6691E0(PIPELINE) 5700 2026-10-15 - Deal-A92065(PIPELINE) 5400 2026-10-15 - Deal-1D532E(PIPELINE) 5400 2026-10-15 - Deal-48B656(BEST_CASE) 5160 2026-10-15 - Deal-E531A6(PIPELINE) 4800 2026-10-15 - Deal-5AD94B(PIPELINE) 4000 2026-10-15 - Deal-901332(BEST_CASE) 3600 2026-10-15 - Deal-D7E999(PIPELINE) 1800 2026-10-15 Top 5 BEST_CASE deals by amount (inside Q3) 1) Deal-2D7423 38935 (2026-09-30) 2) Deal-25F752 24000 (2026-09-25) 3) Deal-E53952 19656 (2026-09-30) 4) Deal-5EED42 16250 (2026-09-30) 5) Deal-FA32A0 11116 (2026-09-25) ## Data quality Most deals have owner blank (only Deal-C9C286 shows an owner), so accountability/routing for updates is missing. why_buys_chars is 0 for most rows, suggesting missing/empty “why buys” context that would normally support stage/forecast categorization. Forecast categories appear inconsistent with stage in at least two cases (Deal-A5E80A is DS1 but COMMIT; Deal-499BF6 is DS2 but COMMIT), which can misstate the weighted forecast if not corrected. Amount precision is inconsistent (e.g., Deal-42326B has 2480.4), which can create rounding/formatting errors in unattended rollups if currency rules aren’t enforced.
2x2 by activation signals (this extract only; retained@24m := current_status = active) Both signals (m1_users >= 5 AND m1_redemptions >= 1) - Cohort size: 47 - Retained @24m: 31 - 24m retention rate: 31 / 47 = 0.659574... = 65.96% Givers-only (m1_users >= 5 AND m1_redemptions = 0) - Cohort size: 49 - Retained @24m: 23 - 24m retention rate: 23 / 49 = 0.469387... = 46.94% Redemption-only (m1_users < 5 AND m1_redemptions >= 1) - Cohort size: 29 - Retained @24m: 9 - 24m retention rate: 9 / 29 = 0.310344... = 31.03% Neither (m1_users < 5 AND m1_redemptions = 0) - Cohort size: 95 - Retained @24m: 38 - 24m retention rate: 38 / 95 = 0.4 = 40.00% Excluded from denominator - 0 companies excluded (every row in the extract has m1_users, m1_redemptions, and current_status populated, which are the only fields needed for this 2x2 + outcome). Single-signal with the largest retention lift (vs “neither”) Baseline (“neither”) retention = 38/95 = 40.00% - Givers-only lift = (23/49) − (38/95) = 46.94% − 40.00% = +6.94 percentage points - Redemption-only lift = (9/29) − (38/95) = 31.03% − 40.00% = −8.97 percentage points Largest lift single signal: givers-only (m1_users >= 5), +6.94 pp vs neither. What this does prove vs does not prove - Does: In this extract, companies with both signals have higher observed 24m retention (65.96%) than givers-only (46.94%), redemption-only (31.03%), or neither (40.00%). - Does not: Prove causality (that early givers/redemptions cause retention), rule out confounding (tier, ARR, integrations, industry, etc.), or establish statistical significance. It also does not prove “redemptions hurt retention”; the redemption-only segment here may differ systematically from others, and the sample is limited to this extract.
Totals (ARR as of 2026-09-05) Assumption (data limitation): No effective/period dates are provided in chargebee_subscriptions.csv, so “as of 2026-09-05” can only be interpreted using status. I treated billing ARR as the sum of status=active subscriptions only. Cancelled subscriptions contribute 0 to “billing ARR as of” in this calc. 1) CRM total ARR (sum of company_arr.csv hubspot_arr) = 603,581.76 2) Billing total ARR (sum over active subscriptions of (mrr × 12)) = 604,739.28 Arithmetic: Billing ARR = Σ(mrr × 12) across status=active rows, with each subscription’s (mrr×12) rounded to 2 decimals before summing. 3) Variance Variance = CRM total − Billing total = 603,581.76 − 604,739.28 = -1,157.52 (billing higher by 1,157.52) Variance decomposition (must sum exactly to -1,157.52) All bucket amounts are computed as Σ(company-level (hubspot_arr − active_billing_arr)) within the bucket. - Status mismatch: 13,158.48 = 4,905.24 (C-0C8323BF) + 8,253.24 (C-0DC4FB8C) - Rounding: 0.00 - Missing records: -11,952.00 = +16,497.24 (CRM-only: C-0D5BBE3A) + (-28,449.24) (Billing-only: C-21629AA4) - Other: -2,364.00 = 16.00 (C-0D66DF9E) + (-2,400.00) (C-0F7269D7) + 20.00 (C-14D70CE0) Check: 13,158.48 + 0.00 + (-11,952.00) + (-2,364.00) = -1,157.52 Mismatched accounts (company-level CRM ARR vs active billing ARR) (Per-company diff = hubspot_arr − active_billing_arr) 1) C-0C8323BF - hubspot_arr: 4,905.24 - active billing ARR: 0.00 (no active sub) - cancelled billing ARR present: 4,905.24 - diff: +4,905.24 - bucket: status mismatch (cancelled in billing) - suggested owner: RevOps / CRM Ops 2) C-0DC4FB8C - hubspot_arr: 8,253.24 - active billing ARR: 0.00 (no active sub) - cancelled billing ARR present: 8,253.24 - diff: +8,253.24 - bucket: status mismatch (cancelled in billing) - suggested owner: RevOps / CRM Ops 3) C-0D5BBE3A - hubspot_arr: 16,497.24 - active billing ARR: 0.00 (no subscription record found) - diff: +16,497.24 - bucket: missing records (CRM-only) - suggested owner: Billing Ops 4) C-21629AA4 - hubspot_arr: missing (no CRM company record provided) - active billing ARR: 28,449.24 (SUB-0004 mrr 2370.77 × 12 = 28,449.24) - diff: -28,449.24 - bucket: missing records (Billing-only) - suggested owner: RevOps / CRM Ops 5) C-0F7269D7 - hubspot_arr: 24,396.00 - active billing ARR: 26,796.00 (SUB-0006 mrr 2233.00 × 12 = 26,796.00) - diff: -2,400.00 - bucket: other - suggested owner: RevOps Analytics 6) C-0D66DF9E - hubspot_arr: 23,200.00 - active billing ARR: 23,184.00 (SUB-0005 mrr 1932.00 × 12 = 23,184.00) - diff: +16.00 - bucket: other - suggested owner: RevOps Analytics 7) C-14D70CE0 - hubspot_arr: 18,200.00 - active billing ARR: 18,180.00 (SUB-0008 mrr 1515.00 × 12 = 18,180.00) - diff: +20.00 - bucket: other - suggested owner: RevOps Analytics Business rule check: term_months != 12 must have cf_agreement_end_date populated Violations (missing/blank cf_agreement_end_date with non-12-month term): - SUB-0002 (company_alias C-1794A52C): term_months=24, status=active, cf_agreement_end_date missing - SUB-0019 (company_alias C-22170CA1): term_months=36, status=active, cf_agreement_end_date missing
KVMs (company-average across all rows in kvm_monthly.csv): giving_rate: 0.6027133 vs 0.6022967; abs Δ = 0.6027133-0.6022967=+0.0004167; rel Δ = +0.0004167/0.6022967=+0.0006918 (+0.0692%); up. redemptions_per_user: 1.7301633 vs 1.7299833; abs Δ = +0.0001800; rel Δ = +0.0001800/1.7299833=+0.0001040 (+0.0104%); up. 1:1 meetings engagement: 0.4471767 vs 0.4468867; abs Δ = +0.0002900; rel Δ = +0.0002900/0.4468867=+0.0006489 (+0.0649%); up. pulse check engagement: 0.5086100 vs 0.6005867; abs Δ = 0.5086100-0.6005867=-0.0919767; rel Δ = -0.0919767/0.6005867=-0.1531447 (-15.3145%); down. Largest relative move: pulse check engagement (down -15.3145%). Driver segment: size_band=enterprise (plan_tier is always tier_three here). Enterprise pulse mean 0.54998→0.27428: rel -50.1291%; contribution to overall abs change ≈ (-0.27570)*(10/30)=-0.09190 (nearly the full -0.09198). KVM 2026-08 2026-07 Abs Δ Rel Δ Dir giving_rate 0.6027133 0.6022967 +0.0004167 +0.0692% up redemptions_per_user 1.7301633 1.7299833 +0.0001800 +0.0104% up 1:1 meetings engagement 0.4471767 0.4468867 +0.0002900 +0.0649% up pulse check engagement 0.5086100 0.6005867 -0.0919767 -15.3145% down
Last completed month: 2026-08
Redemptions (through 2026-08)
- Redemption count: 378
- Check (by provider counts): 90 (TangoCard) + 192 (Tremendous) + 37 (custom) + 59 (Snappy) = 378
- Spend (USD): 27,846.00
- Check (by provider spend): 3,230.00 (TangoCard) + 8,505.00 (Tremendous) + 10,873.00 (custom) + 5,238.00 (Snappy)
- 3,230.00 + 8,505.00 = 11,735.00
- 11,735.00 + 10,873.00 = 22,608.00
- 22,608.00 + 5,238.00 = 27,846.00
- Unique redeemers (distinct user_key): 233
- Redemptions per redeemer: 378 / 233 = 1.6223
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%
- Total: 39.05% + 30.54% + 18.81% + 11.60% = 100.00%
Top 5 countries by redemptions (count)
1) US: 244
2) CA: 24
3) AU: 21
4) GB: 17
5) NL: 17
ASSUMPTION (because eligibility_rules.csv doesn’t define inclusive/exclusive):
- R3 “within_days 120” interpreted as: 0 <= (renewal_date − snapshot 2026-09-05) <= 120 days.
QUALIFYING at-risk accounts (must pass R1+R2+R3):
R1: health_score < 60
R2: churn_save_eligible_amount > 0
R3: renewal within 120 days of 2026-09-05
Play-picking logic (uses only provided signals):
- If champion_active = false → executive touch (relationship risk: no active champion)
- Else if usage_trend_3m in {declining, flat} → usage revival
- Else → commercial concession
1) QUALIFY + AMOUNT AT STAKE + FITTING PLAY (with cited signal)
Account: C-0B0F1BAB
- Eligibility:
- R1: health_score 38 < 60
- R2: churn_save_eligible_amount 5,494.00 > 0
- R3: renewal_date 2026-09-23; (2026-09-23 − 2026-09-05) = 18 days <= 120
- Amount at stake: 5,494.00
- Play: executive touch
- Signal justifying play: champion_active = false
- Usage context: usage_trend_3m = flat; seat utilization = 238/363 = 65.6%
Account: C-0E9C27D1
- Eligibility:
- R1: health_score 39 < 60
- R2: churn_save_eligible_amount 41,235.00 > 0
- R3: renewal_date 2026-09-24; (2026-09-24 − 2026-09-05) = 19 days <= 120
- Amount at stake: 41,235.00
- Play: usage revival
- Signal justifying play: usage_trend_3m = flat
- Usage context: seat utilization = 134/157 = 85.4%; champion_active = true
Account: C-0F6C0F34
- Eligibility:
- R1: health_score 51 < 60
- R2: churn_save_eligible_amount 49,707.00 > 0
- R3: renewal_date 2026-10-03; (2026-10-03 − 2026-09-05) = 28 days <= 120
- Amount at stake: 49,707.00
- Play: executive touch
- Signal justifying play: champion_active = false
- Usage context: usage_trend_3m = growing; seat utilization = 308/395 = 78.0%
Account: C-0B360C78
- Eligibility:
- R1: health_score 57 < 60
- R2: churn_save_eligible_amount 35,748.00 > 0
- R3: renewal_date 2026-10-28; (2026-10-28 − 2026-09-05) = 53 days <= 120
- Amount at stake: 35,748.00
- Play: commercial concession
- Signal justifying play: usage_trend_3m = growing AND champion_active = true (adoption not the stated issue; still at risk by health_score)
- Usage context: seat utilization = 246/327 = 75.2%
Account: C-0D3278C7
- Eligibility:
- R1: health_score 54 < 60
- R2: churn_save_eligible_amount 17,602.00 > 0
- R3: renewal_date 2026-11-12; (2026-11-12 − 2026-09-05) = 68 days <= 120
- Amount at stake: 17,602.00
- Play: usage revival
- Signal justifying play: usage_trend_3m = declining
- Usage context: seat utilization = 126/380 = 33.2%; champion_active = true
Account: C-0B827671
- Eligibility:
- R1: health_score 56 < 60
- R2: churn_save_eligible_amount 25,365.00 > 0
- R3: renewal_date 2026-11-14; (2026-11-14 − 2026-09-05) = 70 days <= 120
- Amount at stake: 25,365.00
- Play: usage revival
- Signal justifying play: usage_trend_3m = declining
- Usage context: seat utilization = 113/202 = 55.9%; champion_active = true
Account: C-0CEF69FD
- Eligibility:
- R1: health_score 53 < 60
- R2: churn_save_eligible_amount 32,621.00 > 0
- R3: renewal_date 2026-11-21; (2026-11-21 − 2026-09-05) = 77 days <= 120
- Amount at stake: 32,621.00
- Play: executive touch
- Signal justifying play: champion_active = false
- Usage context: usage_trend_3m = growing; seat utilization = 97/136 = 71.3%
Account: C-0CA21961
- Eligibility:
- R1: health_score 58 < 60
- R2: churn_save_eligible_amount 16,829.00 > 0
- R3: renewal_date 2026-12-28; (2026-12-28 − 2026-09-05) = 114 days <= 120
- Amount at stake: 16,829.00
- Play: usage revival
- Signal justifying play: usage_trend_3m = flat
- Usage context: seat utilization = 84/325 = 25.8%; champion_active = true
2) TOTAL AMOUNT AT STAKE (qualifying accounts only)
Per-account churn_save_eligible_amount:
- C-0B0F1BAB: 5,494.00
- C-0E9C27D1: 41,235.00
- C-0F6C0F34: 49,707.00
- C-0B360C78: 35,748.00
- C-0D3278C7: 17,602.00
- C-0B827671: 25,365.00
- C-0CEF69FD: 32,621.00
- C-0CA21961: 16,829.00
Arithmetic:
5,494 + 41,235 + 49,707 + 35,748 + 17,602 + 25,365 + 32,621 + 16,829
= 224,601.00 total at stake
3) AT-RISK ACCOUNTS THAT DO NOT QUALIFY (and why)
These “look at risk” per R1 (health_score < 60) but fail eligibility due to R2 and/or R3:
C-0BC71BDD
- At risk (R1): health_score 55 < 60
- Does NOT qualify: fails R2 (churn_save_eligible_amount = 0.00, not > 0)
- R3 status: renewal_date 2026-10-27; (2026-10-27 − 2026-09-05) = 52 days (within 120)
C-0BE96399
- At risk (R1): health_score 54 < 60
- Does NOT qualify: fails R2 (churn_save_eligible_amount = 0.00)
- R3 status: renewal_date 2026-10-29; (2026-10-29 − 2026-09-05) = 54 days (within 120)
C-10A56B0F
- At risk (R1): health_score 54 < 60
- Does NOT qualify: fails R2 (churn_save_eligible_amount = 0.00)
- R3 status: renewal_date 2026-12-12; (2026-12-12 − 2026-09-05) = 98 days (within 120)
C-0F876796
- At risk (R1): health_score 47 < 60
- Does NOT qualify: fails R3 (renewal not within 120 days)
- renewal_date 2027-02-06; (2027-02-06 − 2026-09-05) = 154 days > 120
- R2 status: churn_save_eligible_amount 19,958.00 > 0 (passes R2)
C-0F6694C3
- At risk (R1): health_score 43 < 60
- Does NOT qualify: fails R2 and R3
- R2 fail: churn_save_eligible_amount = 0.00
- R3 fail: renewal_date 2027-03-21; (2027-03-21 − 2026-09-05) = 197 days > 120
C-0BA71F12
- At risk (R1): health_score 52 < 60
- Does NOT qualify: fails R3
- renewal_date 2027-04-11; (2027-04-11 − 2026-09-05) = 218 days > 120
- R2 status: churn_save_eligible_amount 6,824.00 > 0 (passes R2)
C-0FCCD2DF
- At risk (R1): health_score 43 < 60
- Does NOT qualify: fails R2 and R3
- R2 fail: churn_save_eligible_amount = 0.00
- R3 fail: renewal_date 2027-04-23; (2027-04-23 − 2026-09-05) = 230 days > 120
Expansion kit — C-0DDFC9A7 1) Seat coverage (licensed over headcount) - Licensed seats / headcount = 150 / 400 = 0.375 = 37.5% coverage 2) Usage health (2 lines) - Monthly active users rose from 88 (2026-03) to 126 (2026-08): +38 users; +38/88 = 43.18% growth - Latest usage vs licenses: 126 / 150 = 0.84 = 84.0% of licensed seats active (as of 2026-08) 3) Headroom in seats + ARR at current per-seat rate - Current per-seat ARR rate = 9000.00 / 150 = 60.00 ARR per seat - Seat headroom to cover headcount = 400 − 150 = 250 seats - ARR headroom = 250 × 60.00 = 15,000.00 incremental ARR (total at 400 seats = 400 × 60.00 = 24,000.00) 4) Who replied + can they buy? - Replied: Maria S., People Operations Coordinator (2026-09-02) - Can buy: No (explicitly said purchasing decisions/seat expansion sit with Dana R.) 5) Right buyer from contacts - Dana R., VP People (last engaged: 2026-05-18) 6) Reply email (<150 words; cites 1 real usage fact) Subject: Re: Bonusly seat expansion + usage numbers Hi Maria, Thanks — glad to hear Bonusly’s working well. Appreciate the offer to connect me with Dana. For context you can forward: your monthly active users were 126 in 2026-08 (up from 88 in 2026-03), and you’re currently licensed for 150 seats. If Dana’s been asking about usage, I can share a quick snapshot of the trend and what seat coverage could look like as headcount grows. If you’re comfortable, could you intro me to Dana R.? Happy to send 2–3 bullets you can paste into the intro. Best, Cole
Account: C-0D284E42 1) What is complete (only where a data field shows it) - Integrations connected - Slack: COMPLETE (integration_slack = 2026-08-12) - Allowance set: COMPLETE (allowance_set = 2026-08-13) - Admins added: COMPLETE (admins_added = 2) - First recognition given: COMPLETE (first_recognition_at = 2026-08-15 14:22) 2) What is not complete (or cannot be marked complete from fields provided) - Integrations connected - HRIS: NOT COMPLETE / no evidence (integration_hris is blank) - First redemption: NOT COMPLETE / no evidence (first_redemption_at is blank) 3) Early engagement signals (from onboarding_usage.csv) - Active givers growth from 2026-08-11 to 2026-09-04: - Start = 3 (2026-08-11) - End = 15 (2026-09-04) - Absolute change = 15 − 3 = 12 - Relative change = (15 − 3) / 3 = 12/3 = 4.0 (= +400% vs start) - First 7 days average active_givers (2026-08-11 to 2026-08-17): - Sum = 3+3+4+4+5+4+7 = 30 - Avg = 30 / 7 = 4.2857 - Last 7 days average active_givers (2026-08-29 to 2026-09-04): - Sum = 11+13+11+13+13+15+15 = 91 - Avg = 91 / 7 = 13.0 - Peak daily active_givers = 15 (on 2026-09-03 and 2026-09-04) - Breadth signal: days with active_givers ≥ 10 = 10 days (out of 25 total days in file) 4) Three things to cover on the mid-onboarding call 1. HRIS integration: confirm whether it’s intended, and if yes, timeline/owner/blockers (integration_hris is currently blank → no evidence it’s connected). 2. Drive first redemption: what needs to be in place to trigger the first one (first_redemption_at is blank → no evidence of any redemption yet). 3. Sustain and operationalize the engagement uptick: align on a rollout/enablement plan with the 2 admins (admins_added = 2) to maintain momentum (active_givers avg moved from 30/7=4.2857 in week 1 to 91/7=13.0 in the last 7 days).
90-day renewal risk brief (based on renewals provided; date range used spans 2026-09-15 to 2026-11-24) DISAGREEMENTS (cz_renewal_date vs cb_renewal_date) — all are is_multi_year=true, so date used = Chargebee - C-0B7D2C30: CZ 2026-09-10 vs CB 2026-09-15 (term_months=36, is_multi_year=true) → use 2026-09-15 - C-0BCDB8C2: CZ 2027-09-18 vs CB 2026-09-18 (term_months=36, is_multi_year=true) → use 2026-09-18 - C-0D2AB865: CZ 2026-09-10 vs CB 2026-09-22 (term_months=24, is_multi_year=true) → use 2026-09-22 - C-0BBE3E60: CZ 2027-09-26 vs CB 2026-09-26 (term_months=24, is_multi_year=true) → use 2026-09-26 - C-0F5D2323: CZ 2026-09-10 vs CB 2026-09-29 (term_months=24, is_multi_year=true) → use 2026-09-29 Renewals (all accounts in churnzero_renewals.csv) 1) Company: C-0B7D2C30 CSM: Dana Mercer | ARR: 65901.00 Date used: 2026-09-15 (DISAGREEMENT: CZ 2026-09-10 vs CB 2026-09-15; is_multi_year=true so trust Chargebee) Seat utilization: 274/476 = 57.6% 3-mo usage trend (active users): 2026-06 97 → 2026-07 94 → 2026-08 84; change = 84-97 = -13; (-13/97)= -13.4% Risk rating: High — seat utilization is 57.6% and 3-month active users declined 97→84 (-13.4%). 2) Company: C-0BCDB8C2 CSM: Cole Ingram | ARR: 54427.00 Date used: 2026-09-18 (DISAGREEMENT: CZ 2027-09-18 vs CB 2026-09-18; is_multi_year=true so trust Chargebee) Seat utilization: 232/424 = 54.7% 3-mo usage trend: 127 → 118 → 110; change = 110-127 = -17; (-17/127)= -13.4% Risk rating: High — seat utilization is 54.7% and usage declined 127→110 (-13.4%). 3) Company: C-0D2AB865 CSM: Elena Sinclair | ARR: 38022.00 Date used: 2026-09-22 (DISAGREEMENT: CZ 2026-09-10 vs CB 2026-09-22; is_multi_year=true so trust Chargebee) Seat utilization: 250/407 = 61.4% 3-mo usage trend: 125 → 117 → 109; change = 109-125 = -16; (-16/125)= -12.8% Risk rating: High — despite 61.4% utilization, usage declined 125→109 (-12.8%). 4) Company: C-0BBE3E60 CSM: Dana Mercer | ARR: 30993.00 Date used: 2026-09-26 (DISAGREEMENT: CZ 2027-09-26 vs CB 2026-09-26; is_multi_year=true so trust Chargebee) Seat utilization: 74/114 = 64.9% 3-mo usage trend: 39 → 35 → 33; change = 33-39 = -6; (-6/39)= -15.4% Risk rating: High — usage declined 39→33 (-15.4%) leading into renewal. 5) Company: C-0F5D2323 CSM: Cole Ingram | ARR: 90647.00 Date used: 2026-09-29 (DISAGREEMENT: CZ 2026-09-10 vs CB 2026-09-29; is_multi_year=true so trust Chargebee) Seat utilization: 111/390 = 28.5% 3-mo usage trend: 20 → 21 → 18; change = 18-20 = -2; (-2/20)= -10.0% Risk rating: High — very low seat utilization (28.5%) and usage declined 20→18 (-10.0%). 6) Company: C-0EC6999D CSM: Elena Sinclair | ARR: 79419.00 Date used: 2026-10-03 (CZ matches CB: 2026-10-03; using Chargebee date) Seat utilization: 31/112 = 27.7% 3-mo usage trend: 17 → 16 → 15; change = 15-17 = -2; (-2/17)= -11.8% Risk rating: High — very low seat utilization (27.7%) and usage declined 17→15 (-11.8%). 7) Company: C-0B20DB64 CSM: Dana Mercer | ARR: 21770.00 Date used: 2026-10-07 (CZ matches CB: 2026-10-07; using Chargebee date) Seat utilization: 214/378 = 56.6% 3-mo usage trend: 294 → 298 → 294; change = 294-294 = 0; (0/294)= 0.0% Risk rating: Medium — seat utilization is 56.6% with flat 3-month usage (294→294). 8) Company: C-0BBC4E7A CSM: Cole Ingram | ARR: 56374.00 Date used: 2026-10-10 (CZ matches CB: 2026-10-10; using Chargebee date) Seat utilization: 228/337 = 67.7% 3-mo usage trend: 142 → 141 → 139; change = 139-142 = -3; (-3/142)= -2.1% Risk rating: Low — 67.7% utilization and only a small usage decline (-2.1%). 9) Company: C-0FD551AB CSM: Elena Sinclair | ARR: 48815.00 Date used: 2026-10-14 (CZ matches CB: 2026-10-14; using Chargebee date) Seat utilization: 210/376 = 55.9% 3-mo usage trend: 123 → 122 → 126; change = 126-123 = 3; (3/123)= 2.4% Risk rating: Medium — utilization is 55.9% even though usage is up slightly (123→126, +2.4%). 10) Company: C-0F9F8F13 CSM: Dana Mercer | ARR: 46230.00 Date used: 2026-10-18 (CZ matches CB: 2026-10-18; using Chargebee date) Seat utilization: 199/352 = 56.5% 3-mo usage trend: 185 → 185 → 182; change = 182-185 = -3; (-3/185)= -1.6% Risk rating: Medium — utilization is 56.5% with slightly down usage (185→182, -1.6%). 11) Company: C-0BC34584 CSM: Cole Ingram | ARR: 16740.00 Date used: 2026-10-22 (CZ matches CB: 2026-10-22; using Chargebee date) Seat utilization: 327/494 = 66.2% 3-mo usage trend: 104 → 104 → 106; change = 106-104 = 2; (2/104)= 1.9% Risk rating: Low — 66.2% utilization and usage is up (104→106, +1.9%). 12) Company: C-0B7A7546 CSM: Elena Sinclair | ARR: 35062.00 Date used: 2026-10-25 (CZ matches CB: 2026-10-25; using Chargebee date) Seat utilization: 182/205 = 88.8% 3-mo usage trend: 64 → 65 → 63; change = 63-64 = -1; (-1/64)= -1.6% Risk rating: Low — very high utilization (88.8%) with near-flat usage (-1.6%). 13) Company: C-0B369871 CSM: Dana Mercer | ARR: 85128.00 Date used: 2026-10-29 (CZ matches CB: 2026-10-29; using Chargebee date) Seat utilization: 317/422 = 75.1% 3-mo usage trend: 326 → 330 → 333; change = 333-326 = 7; (7/326)= 2.1% Risk rating: Low — 75.1% utilization and usage is up (326→333, +2.1%). 14) Company: C-0B144C78 CSM: Cole Ingram | ARR: 30899.00 Date used: 2026-11-02 (CZ matches CB: 2026-11-02; using Chargebee date) Seat utilization: 169/224 = 75.4% 3-mo usage trend: 101 → 101 → 106; change = 106-101 = 5; (5/101)= 5.0% Risk rating: Low — 75.4% utilization and usage is up (101→106, +5.0%). 15) Company: C-0FC4DBB8 CSM: Elena Sinclair | ARR: 94732.00 Date used: 2026-11-05 (CZ matches CB: 2026-11-05; using Chargebee date) Seat utilization: 356/464 = 76.7% 3-mo usage trend: 189 → 191 → 193; change = 193-189 = 4; (4/189)= 2.1% Risk rating: Low — 76.7% utilization and usage is up (189→193, +2.1%). 16) Company: C-0D5BBE3A CSM: Dana Mercer | ARR: 39740.00 Date used: 2026-11-09 (CZ matches CB: 2026-11-09; using Chargebee date) Seat utilization: 85/102 = 83.3% 3-mo usage trend: 88 → 90 → 91; change = 91-88 = 3; (3/88)= 3.4% Risk rating: Low — high utilization (83.3%) and usage is up (88→91, +3.4%). 17) Company: C-0FB9D5AF CSM: Cole Ingram | ARR: 63158.00 Date used: 2026-11-13 (CZ matches CB: 2026-11-13; using Chargebee date) Seat utilization: 144/199 = 72.4% 3-mo usage trend: 173 → 173 → 176; change = 176-173 = 3; (3/173)= 1.7% Risk rating: Low — 72.4% utilization and usage is up slightly (173→176, +1.7%). 18) Company: C-0B344485 CSM: Elena Sinclair | ARR: 64384.00 Date used: 2026-11-16 (CZ matches CB: 2026-11-16; using Chargebee date) Seat utilization: 224/287 = 78.0% 3-mo usage trend: 238 → 240 → 244; change = 244-238 = 6; (6/238)= 2.5% Risk rating: Low — 78.0% utilization and usage is up (238→244, +2.5%). 19) Company: C-0CB2C1B4 CSM: Dana Mercer | ARR: 40628.00 Date used: 2026-11-20 (CZ matches CB: 2026-11-20; using Chargebee date) Seat utilization: 386/473 = 81.6% 3-mo usage trend: 47 → 48 → 49; change = 49-47 = 2; (2/47)= 4.3% Risk rating: Low — 81.6% utilization and usage is up (47→49, +4.3%). 20) Company: C-22170CA1 CSM: Cole Ingram | ARR: 45646.00 Date used: 2026-11-24 (CZ matches CB: 2026-11-24; using Chargebee date) Seat utilization: 251/294 = 85.4% 3-mo usage trend: 143 → 148 → 146; change = 146-143 = 3; (3/143)= 2.1% Risk rating: Low — 85.4% utilization and usage is up vs June (143→146, +2.1%). Totals - Total ARR renewing (all accounts listed): 65901.00 + 54427.00 + 38022.00 + 30993.00 + 90647.00 + 79419.00 + 21770.00 + 56374.00 + 48815.00 + 46230.00 + 16740.00 + 35062.00 + 85128.00 + 30899.00 + 94732.00 + 39740.00 + 63158.00 + 64384.00 + 40628.00 + 45646.00 = 1048715.00 - ARR at risk (Medium or High risk ratings in this brief): 65901.00 + 54427.00 + 38022.00 + 30993.00 + 90647.00 + 79419.00 + 21770.00 + 48815.00 + 46230.00 = 476224.00 (High-risk subset, if you want the “most urgent” number: 65901.00 + 54427.00 + 38022.00 + 30993.00 + 90647.00 + 79419.00 = 359409.00)
Total tickets: 80 BROAD PATTERNS (multi-account), ranked by ARR affected (unique accounts) 1) HRIS provisioning/sync not creating accounts - Count: 12 - Share: 12/80 = 0.15 = 15.0% - Distinct accounts (3): C-0B2213A9, C-0DDFC9A7, C-0F6C0F34 - ARR affected: 36,000 + 48,000 + 30,000 = 114,000 - Example ticket_ids: IC-460059, IC-460057 - Recommendation: Add HRIS sync reconciliation + alerting (explicit “skipped hires” list with actionable error reasons) so missed provisions are detected and recoverable. 2) Redemption/checkout & gift card fulfillment failures - Count: 18 - Share: 18/80 = 0.225 = 22.5% - Distinct accounts (7): C-0B0F1BAB, C-0B827671, C-0CEF69FD, C-0D9CA315, C-0F876796, C-0FCCD2DF, C-14264ABD - ARR affected: 10,300 + 10,700 + 8,900 + 9,600 + 8,700 + 9,600 + 11,000 = 68,800 - Example ticket_ids: IC-460025, IC-460034 - Recommendation: Implement end-to-end redemption idempotency + clear failure states (checkout spin, points deduction, gift card delivery) with monitoring on each step. 3) Recognition points ledger: points missing / not posting / balance not updated - Count: 20 - Share: 20/80 = 0.25 = 25.0% - Distinct accounts (9): C-0B2895EF, C-0BE96399, C-0BF20542, C-0D0B047C, C-0D284E42, C-0D3278C7, C-0D6CC8E3, C-0DD0626C, C-21FEBCBB - ARR affected: 2,900 + 2,700 + 4,500 + 4,500 + 3,400 + 3,500 + 4,200 + 2,500 + 2,900 = 31,100 - Example ticket_ids: IC-460004, IC-460007 - Recommendation: Add a points-posting “ledger status” + automated reconciliation for delivered recognitions vs posted balances to prevent silent drop/delay. 4) Slack integration failures (posting, auth, slash command) - Count: 14 - Share: 14/80 = 0.175 = 17.5% - Distinct accounts (4): C-0B843542, C-0BA71F12, C-10A56B0F, C-8C2E8F00 - ARR affected: 4,400 + 3,900 + 5,400 + 5,200 = 18,900 - Example ticket_ids: IC-460041, IC-460042 - Recommendation: Add integration health checks + harden auth/token persistence (stop re-auth “not sticking” / toggle reset) and instrument slash-command errors. SINGLE-ACCOUNT NOISE (one account), ranked by ARR affected 5) Billing accuracy: seat-count / invoice discrepancy / renewal tier pricing (single-account concentration) - Count: 16 - Share: 16/80 = 0.20 = 20.0% - Distinct accounts (1): C-0E9C27D1 - ARR affected: 52,000 = 52,000 - Example ticket_ids: IC-460071, IC-460079 - Recommendation: Do a targeted billing audit for C-0E9C27D1 (seat count + tier price + renewal charge logic) and add pre-invoice validation to prevent repeat discrepancies.
Prospect (C-82AF3719): Technology | Mid-Market | employee_recognition | NA-West Similarity scoring (equal weight): 1 point each for industry, size_band, use_case, region match. Total possible = 4. 1) C-64171065 (has_case_study=true) - Matching fields: industry=Technology (1) + size_band=Mid-Market (1) + use_case=employee_recognition (1) + region=NA-East (0) - Arithmetic: 1+1+1+0 = 3/4 - Why this ranks #1 among 3/4 matches: it matches the prospect on both “industry” and “use_case” (plus size). 2) C-A13C193D (has_case_study=true) - Matching fields: industry=Technology (1) + size_band=Mid-Market (1) + use_case=retention (0) + region=NA-West (1) - Arithmetic: 1+1+0+1 = 3/4 - Key drivers: same industry/size/region; differs on use_case. 3) C-11C31562 (has_case_study=true) - Matching fields: industry=Manufacturing (0) + size_band=Mid-Market (1) + use_case=employee_recognition (1) + region=NA-West (1) - Arithmetic: 0+1+1+1 = 3/4 - Key drivers: same size/use_case/region; differs on industry.
Trailing 6 months (as provided in channel_spend.csv): 2026-03 through 2026-08, inclusive. All SQM/SQO/pipeline counts below are based on contacts whose sqm_date falls in 2026-03..2026-08. PAID channel performance (2026-03..2026-08) channel | spend | SQMs | SQOs | cost per SQM | cost per SQO | SQM->SQO rate | pipeline | pipeline per $ (pipeline/$) -------------+---------+------+------+--------------------+----------------------+---------------------+----------+---------------------------- paid_search | $36,000 | 40 | 18 | $36,000/40=$900.00 | $36,000/18=$2,000.00 | 18/40=0.450 (45.0%) | $720,000 | $720,000/$36,000=20.000 webinars | $9,000 | 12 | 5 | $9,000/12=$750.00 | $9,000/5=$1,800.00 | 5/12=0.417 (41.7%) | $60,000 | $60,000/$9,000=6.667 linkedin_ads | $24,000 | 25 | 8 | $24,000/25=$960.00 | $24,000/8=$3,000.00 | 8/25=0.320 (32.0%) | $96,000 | $96,000/$24,000=4.000 paid_social | $18,000 | 0 | 0 | undefined | undefined | undefined | $0 | $0/$18,000=0.000 Note on “undefined”: paid_social has spend with zero SQMs, so cost per SQM and SQM->SQO rate are undefined (not 0). ORGANIC channel performance (2026-03..2026-08) channel | volume (SQMs) | SQOs | SQO rate | pipeline ---------------+---------------+------+---------------------+--------- organic_search | 30 | 10 | 10/30=0.333 (33.3%) | $90,000 referral | 15 | 6 | 6/15=0.400 (40.0%) | $48,000 Flag: SQO date precedes SQM date (data issue to investigate) - CT-000041 (linkedin_ads): sqm_date=2026-06-14, sqo_date=2026-06-09, pipeline_amount=12000 - CT-000044 (linkedin_ads): sqm_date=2026-07-23, sqo_date=2026-07-18, pipeline_amount=12000 Reallocation recommendation (paid) - Reallocate paid_social budget ($18,000 over the 6 months; $3,000/mo) away from paid_social (0 SQMs, 0 SQOs, $0 pipeline in this window). - Primary destination: paid_search (best pipeline efficiency: $720,000/$36,000=20.000 pipeline per $; also strongest observed SQM->SQO rate: 18/40=45.0%). - Secondary / test budget: webinars (smaller sample: 12 SQMs, 5 SQOs; pipeline/$=6.667), if you want diversification beyond paid_search. Confidence (explicitly tied to sample sizes) - High confidence that paid_social should be cut/reworked before further spend: sample shows spend>0 with SQMs=0 across the trailing 6 months. - Medium-high confidence that paid_search is the best paid channel here: it has the largest paid sample (40 SQMs, 18 SQOs) and dominates paid pipeline. - Medium confidence on webinars and linkedin_ads ranking vs each other due to smaller SQO counts (webinars: 5 SQOs; linkedin_ads: 8 SQOs) and the two linkedin_ads date-order anomalies flagged above.
Battlecard: Rivally (updated from provided data only) One-line positioning - Rivally is a points-based employee recognition product with an engaging recognition feed. [S02, S16] - Unverified from old card: “points-based recognition for mid-market.” (no snippet explicitly claims “mid-market positioning” as a company statement; only reviewer segments mention mid-market) [S04] Pricing (with source + date; newer source wins; note conflict) - Current list price (newer): “Recognition Starter now $7 per user/month, annual billing required” (pricing page, 2026-08-12). [S17] - Prior list price (older): “$5 per user/month, annual billing required” (pricing page, 2026-01-20) and still $5 on 2026-04-01. Conflict resolved by newer source. [S03, S08] - Deal-reported quote (not a public list price): $6.50/user/mo for a 500-seat prospect, annual term (call notes, 2026-06-02). This conflicts with both $5 (older) and is below $7 (newer); treat as negotiated quote. [S13] - Deal-reported discounting: $7/user/mo list with 15% discount for 3-year term (call notes, 2026-08-14). Arithmetic: $7.00 × (1 − 0.15) = $7.00 × 0.85 = $5.95 per user/month effective (if applied as described). [S18] - Rivally Pulse: priced as an add-on, not bundled (press, 2026-09-01). Price amount not provided. [S23] Where they win - EU requirements: pitched EU data residency (call notes, 2026-02-18) and later announced EU data residency generally available (press, 2026-07-01). [S05, S15] - EU teams: “strong for distributed EU teams” and “multi-language support praised” (G2 review, 2026-05-21). [S12] - Fast time-to-setup + Slack integration working out of the box (G2 review, 2026-02-02). [S04] - Support responsiveness: “under 4 hours” response time praised (G2 review, 2026-08-30). [S22] - Teams presence: Microsoft Teams app v2 in public preview (press, 2026-08-20). [S19] Where we win - Analytics depth: an 800-seat prospect picked Bonusly over Rivally citing analytics depth (call notes, 2026-09-03). [S25] - Rivally analytics/admin gaps reported by reviewers: - “limited analytics” (G2 review, 2025-12-15). [S02] - “reporting dashboards are basic compared to enterprise tools” (Capterra review, 2026-03-22). [S07] - “admin tooling lags peers” (G2 review, 2026-07-19). [S16] - “lacks SCIM provisioning; manual user management is painful” (G2 review, 2026-04-28). [S10] - “admin console still lacks bulk recognition editing” (G2 review, 2026-09-02). [S24] Objections and responses (only grounded in provided snippets) - Objection: “Rivally has EU data residency; we need EU compliance.” - Response: Rivally does have EU data residency GA (press). If EU data residency is required, treat Rivally as meeting that requirement; differentiate on analytics depth (Bonusly cited win reason) and admin maturity gaps cited by reviewers (SCIM, bulk admin). [S15, S25, S10, S24] - Objection: “Rivally is cheaper.” - Response: Their public list price moved from $5 to $7/user/mo annual. They may discount on multi-year terms (example: 15% for 3-year). If price is the driver, quantify effective price vs needs; also note reviewer-cited admin/analytics limitations that can add operational cost. [S03, S17, S18, S02, S10, S24] - Objection: “Rivally integrates well with Slack / Teams.” - Response: Slack integration is reported to work out of the box; Teams app v2 is in public preview. Validate requirements (provisioning/SCIM, admin bulk actions, export needs) because reviewers cite gaps there. [S04, S19, S10, S24] Recent changes (chronological, only what’s in snippets) - 2025-11-04: Series C round of $40M led by Northgate Ventures. [S01] - 2026-03-05: Launched “Rivally Pulse,” a lightweight engagement survey add-on. [S06] - 2026-05-09: Hired ex-Workday VP EMEA to lead European expansion. [S11] - 2026-07-01: Opened Dublin office; EU data residency generally available. [S15] - 2026-08-12: Pricing page updated: Recognition Starter now $7/user/mo, annual billing required. [S17] - 2026-08-20: Microsoft Teams app v2 in public preview. [S19] - 2026-09-01: Rivally Pulse exits beta; priced as add-on, not bundled. [S23] Our 12-month win/loss record against them (from deals_with_competitor.csv) Window covered by file: 2025-09 through 2026-08 (12 months). Totals - Total deals: 20 (wins 13 + losses 7 = 20). Arithmetic: 13 + 7 = 20. - Win rate: 13 / 20 = 0.65 = 65%. (Arithmetic shown) - Win deals (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. [deals_with_competitor.csv] - Loss deals (7): Deal-7767F5, Deal-5645A5, Deal-C6FFAA, Deal-D263E0, Deal-935746, Deal-9066A6, Deal-72A02F. [deals_with_competitor.csv] Monthly breakdown (wins-losses) - 2025-09: 1–1 (Deal-072E31 win; Deal-7767F5 loss). [deals_with_competitor.csv] - 2025-10: 2–0 (Deal-A9FD43 win; Deal-F65C8F win). [deals_with_competitor.csv] - 2025-11: 1–1 (Deal-7AA785 win; Deal-D263E0 loss). [deals_with_competitor.csv] - 2025-12: 1–1 (Deal-44C524 win; Deal-935746 loss). [deals_with_competitor.csv] - 2026-01: 2–0 (Deal-0D0CD6 win; Deal-E46EAB win). [deals_with_competitor.csv] - 2026-02: 2–0 (Deal-D5B790 win; Deal-1D2392 win). [deals_with_competitor.csv] - 2026-03: 1–1 (Deal-5C636E win; Deal-9066A6 loss). [deals_with_competitor.csv] - 2026-04: 0–2 (Deal-5645A5 loss; Deal-72A02F loss). [deals_with_competitor.csv] - 2026-05: 0–1 (Deal-C6FFAA loss). [deals_with_competitor.csv] - 2026-06: 1–0 (Deal-67BE14 win). [deals_with_competitor.csv] - 2026-07: 1–0 (Deal-1B6969 win). [deals_with_competitor.csv] - 2026-08: 1–0 (Deal-F03E7B win). [deals_with_competitor.csv] Items from existing_battlecard.md that are unverified / contradicted by provided data - “Rivally lacks a Slack integration.” Contradicted by reviewer stating Slack integration worked out of the box. Mark old claim unverified/incorrect vs current evidence. [S04] - “Rivally was acquired by WorkHuman in 2025.” Unverified (no snippet supports acquisition). [existing_battlecard.md only; no snippet] - “Pricing starts at $5 per user/month, annual billing (as of 2026-01).” Partially verified historically ($5 is supported), but outdated vs newer $7 pricing page. [S03, S17] - “Strong in EU enterprise with multi-language support.” Verified by G2 review. [S12]
Per sequence (totals across steps) New Logo Nurture - Sent = 500+458+428 = 1,386 - Open rate = (210+160+120)/1,386 = 490/1,386 = 35.35% - Reply rate = (42+30+18)/1,386 = 90/1,386 = 6.49% - Meeting rate = (12+9+6)/1,386 = 27/1,386 = 1.95% - Weakest step: Step 3 reply rate = 18/428 = 4.21% Expansion Nurture - Sent = 300+300+275 = 875 - Open rate = (130+340+95)/875 = 565/875 = 64.57% (note tracking error below) - Reply rate = (22+25+12)/875 = 59/875 = 6.74% - Meeting rate = (5+4+3)/875 = 12/875 = 1.37% - Weakest step: Step 3 reply rate = 12/275 = 4.36% Cold Outbound - HR Leaders - Sent = 600+595+590 = 1,785 - Open rate = (240+175+130)/1,785 = 545/1,785 = 30.53% - Reply rate = (5+2+1)/1,785 = 8/1,785 = 0.45% - Meeting rate = (0+0+0)/1,785 = 0/1,785 = 0.00% - Weakest step: Step 3 reply rate = 1/590 = 0.17% Cold Outbound - People Ops - Sent = 400+386+377 = 1,163 - Open rate = (150+110+80)/1,163 = 340/1,163 = 29.23% - Reply rate = (14+9+6)/1,163 = 29/1,163 = 2.49% - Meeting rate = (3+2+1)/1,163 = 6/1,163 = 0.52% - Weakest step: Step 3 reply rate = 6/377 = 1.59% Tracking errors - Expansion Nurture step 2: opened 340 > sent 300 (implies 340/300 = 113.33% open rate). Audience overlap between sequences (from audiences.csv) - 23 contact_key appear in >1 sequence. - Biggest overlap: Cold Outbound - HR Leaders AND Cold Outbound - People Ops share 21 contacts (e.g., CT-000849, CT-000884, CT-000890, CT-000908, CT-001033, CT-001097, CT-001101, CT-001103, CT-001105, CT-001130, …). - Expansion Nurture AND New Logo Nurture share 2 contacts: CT-000301, CT-000624. Failure mode for <2% reply - Cold Outbound - HR Leaders: replies collapse despite opens (30.53% open vs 0.45% reply; open→reply = 8/545 = 1.47%) and 0 meetings. - Cold Outbound - People Ops step 3: low open and low reply (80/377 = 21.22% open; 6/377 = 1.59% reply). One change per weak sequence + fix order 1) Cold Outbound - HR Leaders: dedupe audience vs People Ops first (21 shared contacts) to reduce overlap-driven fatigue; then re-test reply performance. 2) Cold Outbound - People Ops: rewrite/replace Step 3 (1.59% reply) since it’s the only sub-2% step. Fix first: Cold Outbound - HR Leaders (0.45% reply and 0 meetings).
Active quarter: Q3-2026 (days elapsed: 66/92 = 66 ÷ 92 = 0.717391) SQMs - QTD actual: 230 - Target: 300 - Delta (actual - target): 230 - 300 = -70 - Pace: ahead (expected-to-date = 300 * (66/92) = 300 * 0.717391 = 215.217391; actual 230 > 215.217391) SQOs - QTD actual: 84 - Target: 120 - Delta (actual - target): 84 - 120 = -36 - Pace: behind (expected-to-date = 120 * (66/92) = 120 * 0.717391 = 86.086957; actual 84 < 86.086957) DS2s - QTD actual: 40 - Target: 75 - Delta (actual - target): 40 - 75 = -35 - Pace: behind (expected-to-date = 75 * (66/92) = 75 * 0.717391 = 53.804348; actual 40 < 53.804348) Closed-lost MIA rate - QTD actual: closed_lost_mia / closed_lost_total = 5 / 25 = 0.200000 - Target: 0.1 - Delta (actual - target): 0.200000 - 0.100000 = +0.100000 - Pace: behind (lower_better; 0.200000 > 0.100000) Same-quarter close count - QTD actual: 10 - Target: 20 - Delta (actual - target): 10 - 20 = -10 - Pace: behind (expected-to-date = 20 * (66/92) = 20 * 0.717391 = 14.347826; actual 10 < 14.347826) Active pipeline coverage against target - QTD actual: $3,000,000 - Target: $4,000,000 - Delta (actual - target): $3,000,000 - $4,000,000 = -$1,000,000 - Coverage vs target: 3,000,000 / 4,000,000 = 0.750000 = 75.0% - Pace: ahead (expected-to-date = 4,000,000 * (66/92) = 4,000,000 * 0.717391 = 2,869,565.217391; actual 3,000,000 > 2,869,565.217391) What moved this week Week-over-week movement cannot be determined from the provided data: marketing_qtd.csv contains only QTD totals and does not include a prior-week QTD snapshot or any dated weekly increments.
Decision: do not treat the Q3 number as firm; fix deal hygiene and re-qualify close dates. Using 100% COMMIT + 35% BEST_CASE (PIPELINE=0) and in-quarter closes, 54/86 qualify: 44,729 + 0.35x203,565 = 115,976.75. 32 deals (227,575) excluded after 2026-09-30, incl COMMIT Deal-D348E1 (13,770, 2026-10-15); caveat: owner blank on 85/86 and why-buys empty on 71/86 incl all 7 COMMIT, so 115,976.75 is not defensible without cleanup.
Subject: Quick follow-up on July 28 demo recap Hi team — following up on the recap I sent on Aug 5 with pricing for 150 seats after our July 28 demo. Are you able to confirm whether you’d like to move forward with that 150-seat option, or should we pause this until a later date? If you reply with a simple “move forward” or “pause,” I’ll take the next step accordingly. Thanks, Alex Franklin
Marketing: This week we generated 46 SQMs vs a target of 52 (46/52 = 0.8846 = 88.46% to goal). Webinars brought in 18 of the 46 SQMs (18/46 = 0.3913 = 39.13% of SQMs), keeping the recognition-worthy moments coming from live engagement. Paid search efficiency held steady at $150 cost per SQM (given), giving us a clear benchmark as we tune for more high-intent hand-raisers next week. Sales: The team converted 14 SQOs and set 9 DS2 meetings (9/14 = 0.6429 = 64.29% DS2s per SQO). New pipeline created totaled $310,000 (given), which is $310,000/14 = $22,142.86 of new pipeline per SQO. Same-quarter closes landed at 3 (3/14 = 0.2143 = 21.43% closes per SQO), turning momentum into measurable wins without losing sight of what’s next in the queue. CS: We saved 2 renewals this week (given), adding real staying power to the customer base. Team NPS moved to 61 (given); no prior-week NPS was provided, so the size of the change can’t be calculated from this extract. Heading into next week, there are 3 open red-flag accounts (given) — a focused list to rally around and turn risk into renewed confidence. PLG: PLG added 412 new signups (given) with activation at 31% (412 × 0.31 = 127.72 activated signups, ~128 if rounded). On the product-led “feel it” moment, 38 companies reached the aha milestone of 10 recognition gives (given) — a strong signal that users aren’t just trying Bonusly, they’re building the habit of appreciation.
Partner digest (2026-08-24 to 2026-09-04) Apex Rewards Co — Active. Partner-sourced pipeline: 2 deals, $275,000 total. - Deals: Deal-DDAAF2 ($180,000) + Deal-2CF33E ($95,000) = $180,000 + $95,000 = $275,000. - Slack: Co-webinar locked for 09-15; “two sourced opps this week, both in DS1” and “both logged with UTM Source = Partner.” HRCloud Partners — Active. Partner-sourced pipeline: 1 deal, $140,000 total. - Deals: Deal-F1CDA5 ($140,000) = $140,000. - Slack: Integration referral closed security review; opp moved to DS2; “one sourced opp this period.” CultureBridge — Active. Partner-sourced pipeline: 2 deals, $135,000 total. - Deals: Deal-096E1D ($60,000) + Deal-067213 ($75,000) = $60,000 + $75,000 = $135,000. - Slack: Lunch-and-learn produced “two sourced opps; both early stage.” WorkWell Group — Active. Partner-sourced pipeline: 0 deals, $0 total. - Slack: Wants to restart joint playbook in Q4; “no sourced deals this period,” planning call booked for 09-09. Recogniq — Quiet. No partner-sourced deals in deal data this period (0 deals, $0). KudosWave — Quiet. No partner-sourced deals in deal data this period (0 deals, $0). PeopleFirst Advisors — Quiet. No partner-sourced deals in deal data this period (0 deals, $0). TotalPerk — Quiet. No partner-sourced deals in deal data this period (0 deals, $0).
Q1 (Is customer data encrypted at rest? If so, how?) Yes. All customer data is encrypted at rest using AES-256. [P1] Q2 (Is data encrypted in transit?) Yes. Data in transit is encrypted with TLS 1.2 or higher. [P1] Q3 (Do you hold a SOC 2 report, and can we obtain a copy?) Yes. Bonusly maintains a SOC 2 Type II report, renewed annually, and it is available to prospects under NDA. [P2] Q4 (How long is customer data retained after contract termination?) Customer data is retained for the duration of the contract plus 90 days, then deleted from production systems. Arithmetic: retention end date = contract end date + 90 days. [P3] Q5 (Where is your subprocessor list published and how are changes notified?) The current subprocessor list is maintained at trust.bonusly.com. Customers receive 30 days notice before a new subprocessor is added. [P4] Q6 (Do you support SAML single sign-on?) Yes. SAML 2.0 single sign-on is available on the Enterprise plan. [P5] Q7 (What is your production backup schedule and retention?) Production databases are backed up daily. Backups are encrypted and retained for 35 days. [P6] Q8 (Do you hold an ISO 27001 certification?) Unanswerable based on the provided excerpts; ISO 27001 certification is not addressed in [P1], [P2], [P3], [P4], [P5], [P6], [P7], or [P8]. A current ISO 27001 certificate and/or an ISO 27001 statement in the trust portal would answer this. [P1] [P2] [P3] [P4] [P5] [P6] [P7] [P8] Q9 (What is your contractual uptime SLA percentage?) Unanswerable based on the provided excerpts; uptime SLA percentage is not addressed in [P1], [P2], [P3], [P4], [P5], [P6], [P7], or [P8]. The MSA/SLA (service level agreement) section of the contract would answer this. [P1] [P2] [P3] [P4] [P5] [P6] [P7] [P8] Q10 (Will you sign a HIPAA Business Associate Agreement?) Unanswerable based on the provided excerpts; HIPAA BAA signing is not addressed in [P1], [P2], [P3], [P4], [P5], [P6], [P7], or [P8]. A HIPAA/BAA policy statement in the trust portal or the legal/compliance addendum/BAA template would answer this. [P1] [P2] [P3] [P4] [P5] [P6] [P7] [P8]
FINDINGS 1) CRITICAL | TRIM_DESC Overlapping ALWAYS-trigger phrases: comms-drafter vs email-drafter (exact duplicates). Evidence: - comms-drafter: Trigger for: "write me an email," "draft a follow-up," "bump email," "contract nudge," - email-drafter: triggers include "write me an email," "draft a follow-up," "bump email," "contract nudge" Proposal: TRIM_DESC one of these skills so only one “owns” the duplicated email-trigger phrases (keep comms-drafter for non-email comms, keep email-drafter for emails). 2) WARNING | TRIM_DESC Overlapping pipeline trigger language: pipeline-intelligence-report vs weekly-pipeline-report. Evidence: - pipeline-intelligence-report: ALWAYS trigger for: "pipeline update" - weekly-pipeline-report: triggers include "update the pipeline," "update the pipeline," "what does pipeline look like" Proposal: TRIM_DESC to remove/clarify overlapping “pipeline update/update the pipeline” wording so the routing between “full scored/tiered pipeline” vs “weekly performance update” is unambiguous. 3) CRITICAL | UPDATE_BODY Circular delegation chain: deal-strategy-coach ↔ email-drafter. Evidence: - deal-strategy-coach: “When drafting manager-to-prospect emails … use the `email-drafter` skill” - email-drafter: “For deal strategy, diagnosis, or coaching (not email drafting), use deal-strategy-coach instead.” Chain: deal-strategy-coach → email-drafter → deal-strategy-coach (loop risk). Proposal: UPDATE_BODY to make the handoff one-directional (or explicitly conditional) so invoking one cannot bounce back to the other. 4) CRITICAL | REVIEW Dangling delegation/dependency target (not present in manifest): bonusly-brand. Evidence: - comms-drafter: “Before drafting any communication, apply the `bonusly-brand` skill.” - email-drafter: “Before drafting, apply the bonusly-brand org skill…” Manifest declared skills/files (14): analysis-validator, closed-lost-analysis, comms-drafter, deal-strategy-coach, email-drafter, model-selection, next-to-close, partner-digest, pipeline-intelligence-report, sales-forecast, signalforge-claim-compressor, signalforge-feedback, stale-pipeline-report, weekly-pipeline-report. No bonusly-brand row. Proposal: REVIEW whether bonusly-brand should be added to the manifest (if required) or these skills should not hard-depend on it. 5) WARNING | REVIEW Dangling delegation/dependency target (not present in manifest): prospect-research-multithreading. Evidence: - comms-drafter: “invoke `prospect-research-multithreading` first” - email-drafter: “invoke prospect-research-multithreading…” - deal-strategy-coach: “Invoke prospect-research-multithreading…” Proposal: REVIEW: add prospect-research-multithreading to manifest (if it is part of this skill set) or remove/relax the hard dependency language. 6) WARNING | REVIEW Dangling delegation targets (not present in manifest): analysis-validator specialist skills. Evidence (analysis-validator §12.4): - `bonusly-data-questions`, `bonusly-product-questions`, `bonusly-business-reporting-questions`, `bonusly-rewards-questions`, `bonusly-ppp-questions`, `bonusly-feature-flag-questions`, `bonusly-deal-desk-questions`, `bonusly-datadog-questions` Proposal: REVIEW: either add these skills to the manifest (if in-scope) or mark them explicitly as “external/org skills not tracked in this manifest.” 7) WARNING | UPDATE_BODY Version conflict inside analysis-validator: v3.6 vs v3.2 reference in the validation trail template. Evidence: - analysis-validator header: “Version: 3.6” - validation trail template: “Validator: analysis-validator v3.2” Which should survive: analysis-validator v3.6. Proposal: UPDATE_BODY to replace the v3.2 string with v3.6 (or a version variable) so the template matches the skill’s declared version. 8) WARNING | REVIEW Cross-skill “version/data” conflict: AE roster mismatch between analysis-validator and pipeline-intelligence-report. Evidence: - analysis-validator §12.3 “Core 6 AEs” includes “Hugo Lindqvist | 77260721” - pipeline-intelligence-report “AE owner IDs (verified May 2026)” lists 5 AEs and omits Hugo Lindqvist. Which should survive: analysis-validator’s roster (it is explicitly a roster table with “Core 6 AEs”). Proposal: REVIEW and consolidate roster ownership into one canonical source (then remove/avoid duplicating the roster in pipeline-intelligence-report). 9) INFO | REVIEW Manifest descriptions exceeding 1,024 characters: 0. Arithmetic (per manifest description_chars column): - Count(>1024) = 0 - Sum of indicators across 14 rows = 0+0+0+0+0+0+0+0+0+0+0+0+0+0 = 0 Proposal: REVIEW only if the 1,024-char cap is intended to be enforced (no action needed from this dataset). 10) WARNING | REVIEW Hardcoded Confluence/page IDs in skill bodies. Evidence: - partner-digest: Cloud ID `73fe98de-a4a3-4869-9f8a-bb1eeed4cf7f`, Space ID `1958248479`, folder ID `2286616609`, example page `2286321666` - sales-forecast: Space ID `2232811524`, Cloud ID `73fe98de-a4a3-4869-9f8a-bb1eeed4cf7f`, Parent page ID `2232582148` - signalforge-feedback: Page ID `2295136266`, Parent `2234417154`, Build Log `2247295002` Proposal: REVIEW whether these IDs should be centralized (single config/reference) to avoid brittle breakage when pages/spaces move. 11) INFO | REVIEW Hardcoded person names in skill bodies. Evidence examples: - analysis-validator §12.3 roster includes names (e.g., “Dana Mercer”, “Gavin Porter”, “Amani Phipps”, “John Thomas”, “Yasmin Wahid”) and “Escalate to Finance (Manish or Amani)” - weekly-pipeline-report header: “Ben Lavin” - deal-strategy-coach references named individuals (e.g., “Alaina Loori”, “Shealagh Coughlin”) Proposal: REVIEW whether these should live in a single roster/people reference to reduce drift across skills. 12) INFO | REVIEW Hardcoded dates in skill bodies. Evidence examples: - analysis-validator: “Created: April 26, 2026”, “Last Updated: May 9, 2026” - partner-digest: examples “Week of May 19, 2026”, “Week of June 2, 2026”; “May 16, 2026 issue” - model-selection: `last_checked: 2026-05-19` Proposal: REVIEW whether these should be treated as metadata only (safe) vs logic inputs (brittle), and move any logic-relevant dates to computed runtime values. 13) INFO | REVIEW Manifest drift (both directions): none detected in the provided dataset. Arithmetic: - Manifest rows = 14 - Skill files provided below = 14 - Files with no manifest row = 14 − 14 = 0 - Manifest rows with no file = 14 − 14 = 0 Proposal: REVIEW only if additional files exist outside the provided list (not observable from the data given).
RUNBOOK — #incident-2026-08-29-reward-queue (resolved) (Every step below traces to a specific thread message [M01]–[M10].) 1) Acknowledge alert + assume Incident Commander (IC) - Source: [M01] - Who ran it: Bryce Harmon - Exact command/action taken: PagerDuty alert acknowledged; “taking IC.” - Success verified: Not specified in thread (needs confirmation: where/how acknowledgement/IC role was recorded beyond the message). - Rollback (state change?): N/A (no rollback described in thread). 2) Measure reward-worker queue depth (initial diagnosis) - Source: [M02] - Who ran it: Farid Osman - Exact command/action taken: `bundle exec rake sidekiq:queue_depth` - Success verified: - Command reported reward queue at 48,213 pending jobs. - Arithmetic shown: 48,213 > 10,000 (PagerDuty threshold from [M01]); 48,213 > 500 (“Normal is under 500” from [M02]). - Rollback: N/A (read-only check). 3) Check Sidekiq dead set + error signature (initial diagnosis) - Source: [M03] - Who ran it: Farid Osman - Exact command/action taken: Not provided (needs confirmation: exact command/UI used to inspect dead set). - Success verified: - Dead set count observed as 112 jobs. - All were `Redis::TimeoutError` from around 13:58. - Rollback: N/A (as stated, this is observation only; no change described). 4) Pause enqueue via feature flag to stop additional job creation (“stop the bleed”) - Source: [M04] - Who ran it: Farid Osman - Exact command/action taken: `bin/rails runner 'FeatureFlag.disable(:auto_recognition_enqueue)'` - Success verified: Not explicitly verified in-thread beyond the intent statement (needs confirmation: what check confirmed the flag was disabled / enqueue stopped). - Rollback (provided in-thread): `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` 5) Clear out the Sidekiq dead set - Source: [M05] - Who ran it: Elena Sinclair - Exact command/action taken: Not provided (“in the console I cleared out the dead set”) (needs confirmation: exact console commands/actions used). - Success verified: Not specified (needs confirmation: how “dead set cleared” was verified—e.g., dead set count returned to 0). - Rollback: Not provided (needs confirmation: whether any rollback was possible/appropriate for this action). 6) Scale up reward-worker deployment to increase processing capacity - Source: [M06] - Who ran it: Bryce Harmon - Exact command/action taken: `kubectl scale deployment/reward-worker --replicas=6` (was 3) - Success verified: Not explicitly verified in-thread (needs confirmation: whether `kubectl get deploy reward-worker` or similar was run to confirm replicas=6). - Rollback (provided in-thread): `kubectl scale deployment/reward-worker --replicas=3` 7) Re-check queue depth trend (mid-incident progress check) - Source: [M07] - Who ran it: Farid Osman - Exact command/action taken: Not provided (needs confirmation: whether this was another `bundle exec rake sidekiq:queue_depth` run or another measurement). - Success verified: - Queue depth reported as 9,400 and falling ~1,200/min. - Arithmetic shown: 9,400 < 48,213 (down by 48,213 − 9,400 = 38,813 since [M02], assuming the same queue measurement basis). - Rollback: N/A (measurement only). 8) Verify backlog cleared + system error rate normalized - Source: [M08] - Who ran it: Cole Ingram - Exact command/action taken: `bundle exec rake sidekiq:queue_depth` - Success verified: - Command returned 0. - “Error rate in Datadog back to baseline.” (needs confirmation: exact Datadog dashboard/query used). - Arithmetic shown: 48,213 − 0 = 48,213 pending jobs eliminated relative to [M02] (assuming same measurement basis). - Rollback: N/A (verification). 9) Re-enable enqueue + verify new jobs process cleanly - Source: [M09] - Who ran it: Bryce Harmon - Exact command/action taken: `bin/rails runner 'FeatureFlag.enable(:auto_recognition_enqueue)'` - Success verified: - “Verified 40 new jobs processed cleanly in the next 3 minutes.” - Needs confirmation: exact command/dashboard/log query used to count “40 new jobs” and confirm “processed cleanly.” - Rollback: Not explicitly stated here; the rollback can be inferred only because [M04] explicitly gave disable/enable commands (needs confirmation if rollback at this point should be `FeatureFlag.disable(:auto_recognition_enqueue)` again). 10) Scale reward-worker deployment back down to normal - Source: [M10] - Who ran it: Bryce Harmon - Exact command/action taken: `kubectl scale deployment/reward-worker --replicas=3` - Success verified: - “Queue stable at 0. Incident resolved.” - Needs confirmation: exact command/check used to confirm queue remained at 0 after scaling down (e.g., another `bundle exec rake sidekiq:queue_depth` run is not shown in-thread at this point). - Rollback: Not provided (needs confirmation: whether scaling back up to 6 was the intended rollback, i.e., `--replicas=6`).
First error (timestamp, service, job, message) - 2026-09-03T14:01:12Z — service=reward-service — job not named in this log line — message: “Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s” Cascade (in order, from that first error onward) 1) 2026-09-03T14:01:12Z — reward-service — ERROR — Redis timeout to redis-primary:6379 after 5s 2) 2026-09-03T14:01:20Z — reward-service — ERROR — “retry exhausted for RewardGiveJob” 3) 2026-09-03T14:01:30Z — reward-service — ERROR — “retry exhausted for RewardGiveJob” 4) 2026-09-03T14:01:40Z — reward-service — ERROR — “retry exhausted for RewardGiveJob” 5) 2026-09-03T14:01:40Z — sidekiq — ERROR — “RewardGiveJob failed: Redis::TimeoutError; retrying in 60s” 6) 2026-09-03T14:02:28Z — sidekiq — ERROR — “RewardGiveJob failed: Redis::TimeoutError; retrying” 7) 2026-09-03T14:02:30Z — sidekiq — WARN — “Queue reward depth above 10,000” 8) 2026-09-03T14:03:05Z — api-gateway — ERROR — “502 upstream timeout calling reward-service /gives” 9) 2026-09-03T14:03:30Z — web-app — ERROR — “Give form submission failed: upstream 502 from api-gateway” 10) 2026-09-03T14:03:31Z — sidekiq — ERROR — RewardGiveJob failed; retrying 11) 2026-09-03T14:03:48Z — api-gateway — ERROR — 502 upstream timeout calling reward-service 12) 2026-09-03T14:04:13Z — api-gateway — ERROR — 502 upstream timeout calling reward-service 13) 2026-09-03T14:04:22Z — sidekiq — ERROR — RewardGiveJob failed; retrying 14) 2026-09-03T14:04:45Z — web-app — ERROR — Give form submission failed: upstream 502 15) 2026-09-03T14:05:16Z — api-gateway — ERROR — 502 upstream timeout calling reward-service 16) 2026-09-03T14:05:26Z — sidekiq — ERROR — RewardGiveJob failed; retrying 17) 2026-09-03T14:05:42Z — web-app — ERROR — Give form submission failed: upstream 502 18) 2026-09-03T14:06:47Z — sidekiq — ERROR — RewardGiveJob failed; retrying 19) 2026-09-03T14:06:49Z — web-app — ERROR — Give form submission failed: upstream 502 20) 2026-09-03T14:06:52Z — api-gateway — ERROR — 502 upstream timeout calling reward-service 21) 2026-09-03T14:22:10Z — reward-service — INFO — “Redis connection restored; resuming job processing” 22) 2026-09-03T14:24:45Z — sidekiq — INFO — “Queue reward depth below 500” Service and job involved (from provided data) - Primary failing dependency surfaced in logs: reward-service failing to connect to Redis at redis-primary:6379 (Redis::TimeoutError) - Background job explicitly implicated: - RewardGiveJob (seen in reward-service “retry exhausted for RewardGiveJob” and sidekiq “RewardGiveJob failed…”) - sidekiq_jobs.csv also shows failures for RewardGiveJob and RecognitionDigestJob with error=Redis::TimeoutError (but RecognitionDigestJob is not named in the datadog log slice) Arithmetic (time deltas from first error) - First error: 14:01:12Z - Queue warning at 14:02:30Z - 14:02:30 − 14:01:12 = 78 seconds - First 502 at api-gateway at 14:03:05Z - 14:03:05 − 14:01:12 = 113 seconds - First web-app give failure at 14:03:30Z - 14:03:30 − 14:01:12 = 138 seconds - Redis restored at 14:22:10Z - 14:22:10 − 14:01:12 = 20 minutes 58 seconds = (20*60)+58 = 1,258 seconds Datadog query to confirm the first error - service:reward-service @level:error "Redis::TimeoutError: Connection to Redis at redis-primary:6379 timed out after 5s" - Time focus: 2026-09-03T14:01:12Z (around that minute) What the logs do not show (explicitly missing from provided data) - No explicit root cause for Redis timeouts (e.g., Redis CPU/memory saturation, network partition, failover event, maxclients, slowlog, node restart). - No Redis-side logs/metrics (latency, blocked clients, connection count, replication lag). - No confirmation of which upstream request/user action triggered the initial RewardGiveJob enqueue that later failed (job enqueued exists, but no job_id correlation in datadog logs). - No request IDs / trace IDs to correlate web-app → api-gateway → reward-service → sidekiq job execution. - No evidence of data loss vs delayed processing (only “retrying” and queue depth signals; no “dropped” / “dead” / “moved to DLQ” events in this slice). - No explicit deployment/config change, incident trigger, or host-level resource exhaustion for reward-service during the window.
Flags in export: 9 total (5 on + 4 off = 9). Per-flag summary (only from the provided export + code excerpt): 1) recognition_streaks_v2 - State (export): on - What it controls (code): In app/models/recognition.rb, when enabled, it runs `StreakTracker.record(give)` (records streaks on a “give”). - Who has it on (export targeting): segment:beta_companies - Company count (export): 42 2) points_budget_guardrails - State (export): on - What it controls (code): In app/services/budget_service.rb, when enabled, it runs `BudgetService.new(company).enforce!(giver, points)` (enforces budget guardrails). - Who has it on (export targeting): all_companies - Company count (export): 220 3) slack_dm_nudges - State (export): on - What it controls (code): In app/jobs/nudge_job.rb, it returns unless enabled; when enabled, it runs `SlackDm.send_nudge(user)` (sends Slack DM nudges). - Who has it on (export targeting): segment:region_na - Company count (export): 87 4) redeem_flow_redesign - State (export): off - What it controls (code): In app/controllers/redeem_controller.rb, when enabled it renders `RedeemV2Component`; otherwise it renders `RedeemV1Component` (switches redeem flow UI). - Targets (export targeting): targeted_list - Company count (export): 12 - Note: The export says state=off; the specific company aliases in the targeted_list are not provided, so I cannot name the companies. 5) analytics_dashboard_v3 - State (export): on - What it controls (code): In app/controllers/analytics_controller.rb, when enabled it sets `@dashboard = AnalyticsV3.new(company)` (turns on Analytics V3 dashboard object). - Who has it on (export targeting): segment:tier_three - Company count (export): 65 6) ms_teams_app_v2 - State (export): off - What it controls (code): In app/services/teams_installer.rb, when enabled it runs `TeamsAppV2.install(company)` (installs Teams App V2). - Targets (export targeting): targeted_list - Company count (export): 9 - Note: The export says state=off; the specific company aliases in the targeted_list are not provided, so I cannot name the companies. 7) legacy_give_modal - State (export): off - What it controls (code): No reference in the provided code excerpt, so control/behavior is unknown from the provided data. - Targets (export targeting): segment:legacy_plan - Company count (export): 14 8) survey_boosters_q3 - State (export): on - What it controls (code): No reference in the provided code excerpt, so control/behavior is unknown from the provided data. - Who has it on (export targeting): segment:legacy_plan - Company count (export): 7 9) paused_offboard_cleanup - State (export): off - What it controls (code): No reference in the provided code excerpt, so control/behavior is unknown from the provided data. - Targets (export targeting): (blank / none provided) - Company count (export): 0 - This is the only flag in the export with no targeting_rules and no targets (0 companies). Flags with no code reference in the provided excerpt: - Count: 3 = 9 total flags − 6 flags referenced in code excerpt - legacy_give_modal, survey_boosters_q3, paused_offboard_cleanup Flags with no targets in the export: - paused_offboard_cleanup (targeting_rules blank, company_count 0)
NDA-1 — GREEN (standard approval): “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.” (standard carve-outs + mutual confidentiality; Delaware governing law is standard: “the laws of the State of Delaware, USA.”) NDA-2 — YELLOW (counsel review): “Non-solicitation: ‘During the term of this Agreement and for eighteen (18) months thereafter, neither party shall solicit for employment or hire any employee…’” (embedded non-solicit; duration arithmetic: 18 months = 18/12 = 1.5 years post-term) NDA-3 — RED (full legal review): “Non-compete: ‘For a period of three (3) years following the Effective Date, Recipient shall not… engage in or provide services to any business that competes with Discloser’s business.’” (non-compete + missing carve-outs: “No confidentiality carve-outs are stated in this Agreement.” + unusual governing law/jurisdiction: “laws of the Republic of Ireland… exclusive jurisdiction of its courts.”)