{"id":"revops-stale-opportunities-cleanup-csv","audience":"revops","category":"sales-work","technique":"format","track":"sales","level":"intermediate","title":"Output a CSV of CRM cleanup actions for stale opportunities","free":false,"task":"Produce one fenced CSV block with header opp_id,action,reason and one row per opportunity listed. Action must be exactly one of: close_lost, update_next_step, keep. An opportunity with no activity in 60 or more days and close date in the past is close_lost; no activity 30 to 59 days is update_next_step; anything else is keep. Reason is under 8 words with no commas. Today is Nov 6 2026. At most 10 words outside the code block.","materialLabel":"CRM export (attached to your prompt automatically)","material":"opp_id | account | stage | close_date | last_activity | amount\nOPP-1042 | Tanner Plumbing | Proposal | 2026-09-15 | 2026-08-30 | 18,000\nOPP-1043 | Vega Studios | Negotiation | 2026-11-30 | 2026-10-02 | 52,000\nOPP-1044 | Linden Co-op | Discovery | 2027-01-31 | 2026-11-03 | 9,500\nOPP-1045 | Marsh & Daughters | Proposal | 2026-10-01 | 2026-11-01 | 27,000\nOPP-1046 | Quarry Hill Farms | Demo | 2026-12-15 | 2026-09-20 | 14,000\nOPP-1047 | Stonebridge Dental | Negotiation | 2026-08-31 | 2026-07-02 | 33,000\n\nNote: last_activity is the most recent logged call, email or meeting. A past close date with recent activity (within 29 days) should be update_next_step only if it is 30 or more days overdue; otherwise keep. Marsh & Daughters close date passed 36 days ago but the rep logged a call 5 days ago.","rules":[{"type":"codeBlocks","count":1},{"type":"maxProseWords","max":10}],"mistakes":[{"title":"Inventing actions","why":"The AI writes actions like \"follow up\" or \"review\".","fix":"Add: \"Action must be exactly one of close_lost, update_next_step, keep.\"","checks":["r2"]},{"title":"Ignoring the day counts","why":"The AI judges by gut feeling instead of counting days from Nov 6.","fix":"Add: \"Count days since last activity from Nov 6 2026.\"","checks":["r1"]},{"title":"Commas breaking the CSV","why":"Reasons contain commas.","fix":"Add: \"Reasons under 8 words with no commas.\"","checks":["r2"]},{"title":"Extra text and tables","why":"The AI adds a markdown table and commentary.","fix":"Add: \"One code block, at most 10 words outside it.\"","checks":["codeBlocks","maxProseWords","r0"]}],"promptHints":[{"label":"Names the header","patterns":["opp_id,action,reason","csv","header"]},{"label":"Lists the three actions","patterns":["close_lost","update_next_step","keep"]},{"label":"States the day thresholds","patterns":["60","30","days"]},{"label":"Gives today's date","patterns":["nov(ember)? 6","2026-11-06","today"]},{"label":"Bans commas in reasons","patterns":["no commas","commas"]}],"hint":"Give the exact action words, the day thresholds and today's date.","rubricLabels":["The code block has the header opp_id,action,reason and exactly 6 data rows, one for each opportunity","Actions are exactly: OPP-1042 close_lost, OPP-1043 update_next_step, OPP-1044 keep, OPP-1045 update_next_step, OPP-1046 update_next_step, OPP-1047 close_lost","Every action is one of close_lost, update_next_step or keep, and no reason contains a comma or exceeds 8 words"]}