--- name: lifecycle-stage-stagnation-scanner description: Finds contacts stuck in a lifecycle stage past its SLA, clusters them by likely stall reason, and drafts an unblock play per cluster. Use when the user asks to "find stuck contacts", "who's stalled in lifecycle", "scan for lifecycle stagnation", "which leads are aging past SLA", or runs a recurring funnel-health check. license: MIT compatibility: Requires a connected CRM. Read-only — drafts plays, no writes. metadata: author: Builder.org version: 2.0.0 persona: Marketing Meg, Operator Owen rave: R3 A4 V3 E3 category: crm --- # Lifecycle Stage Stagnation Scanner ## What it does Catches contacts that have aged past the SLA for their lifecycle stage, groups them by why they are stuck, and hands marketing or ops one unblock play per group. The clustering is the product: 340 stuck contacts is a panic, but four named clusters with four plays is a Tuesday afternoon. Read-only; it recommends, humans run the plays. ## When to use - "Find stuck contacts", "who's stalled in lifecycle", "scan for lifecycle stagnation". - "Which leads are aging past SLA", or a recurring weekly funnel-health check. - Not for individual deals going quiet; that is `stalled-deal-revival`. This skill works the funnel in bulk, above the level of any one relationship. ## Inputs None required. Optional: per-stage SLA thresholds (defaults: MQL over 14 days, SQL over 7, Opportunity over 30), owner, segment. Works with any CRM your assistant can read that tracks lifecycle or funnel stages (HubSpot, Salesforce, or similar). ## The bar - Every cluster gets one named, runnable play. A cluster without a play is just a sad statistic. - Clusters are sized and dated: count, oldest member, attached value where deals exist. Priorities need numbers. - Four to six clusters, no more. Fifteen micro-clusters means the clustering failed; merge until each group shares one fix. - The play names its mechanism (a re-engagement sequence, a routing rule, a re-score, a reassignment), not a vibe ("nurture them better"). ## Workflow 1. **Scan by stage.** Find contacts exceeding their stage SLA and capture time-in-stage. Defaults exist because MQLs decay in days while Opportunities legitimately take a month; override per team. 2. **Cluster by stall reason** using engagement patterns: never contacted, contacted but no reply, engaged then went cold, awaiting routing or unassigned, and owner inactive (assigned to someone who has not touched anything in the window). Merge clusters until each shares one fix. 3. **Quantify each cluster.** Count, oldest member in days, and total attached deal value where any exists. Rank clusters by count times fixability; a big cluster with a mechanical fix (routing) outranks a bigger one needing human effort. 4. **Draft the unblock play per cluster.** The specific action that moves that group: the three-touch re-engagement sequence with its angle stated, the routing rule to add, the re-score criteria, the reassignment with the receiving owner named as a role. One play each, with the expected effect in a phrase. 5. **Output the clustered report**, biggest fixable cluster first, ending with the one play to run today if only one gets run. ## Output ``` ## Lifecycle stagnation · [date] **Stuck contacts:** [N] across [stages] ### Cluster: [stall reason] · [N] contacts (oldest [D] days, value $[X]) Play: [the specific unblock action and expected effect] Sample: [2-3 names/companies] ### Cluster: ... If you run one play today: [which, and why]. ``` ## Worked example ``` Fictional example. Never reuse these names or numbers in real output. ## Lifecycle stagnation · March 3 **Stuck contacts:** 214 across MQL, SQL, Opportunity ### Cluster: never contacted · 96 MQLs (oldest 41 days, no attached value) Play: these came from the January webinar and were never routed. Add a routing rule for webinar sources, then run a three-touch sequence opening with the webinar topic, not a cold pitch. Expected effect: clears the biggest block mechanically. Sample: R. Alvarez (Summit Physical Therapy), J. Chen (Oakwood Title), M. Duran (Pinnacle HVAC) ### Cluster: engaged then went cold · 61 MQLs (oldest 33 days) Play: they opened 2+ emails then stopped. Re-engage with a different angle: one plain-text question email from a human sender, no template styling. Expected effect: separates the tire-kickers from the mistimed. Sample: K. Osei (Harborline Marine), T. Nguyen (Bright Sky Childcare) ### Cluster: awaiting routing · 38 SQLs (oldest 12 days, value $67k attached) Play: unassigned SQLs with open deals. Reassign to the deal owner today; this is a data fix, not a marketing fix. Sample: Fieldstone Payroll (2 contacts), Lakeview Dental (1) ### Cluster: owner inactive · 19 Opportunities (oldest 48 days, value $112k) Play: all owned by a rep who left in January. Reassign to the territory owner and flag the three oldest for a revival pass. Sample: Meridian Freight, Cobalt Build Co If you run one play today: the SQL routing fix. It is 38 sales-ready contacts and $67k unblocked by an afternoon of admin. ``` ## Never - Never dump a flat list of stuck contacts. The clustering is the deliverable. - Never propose a play that requires a tool or team the cluster's data does not support; a re-engagement sequence for contacts with no email consent is not a play. - Never hide the ugly cluster (owner inactive, routing broken) to keep the report comfortable. The ops failure is usually the most valuable finding. - Never write, route, reassign, or enroll anyone. Every play is a recommendation. ## Recovery - Lifecycle stages unused or all defaulted: say the funnel is not instrumented, fall back to clustering by engagement recency alone, and recommend the two stages worth adopting first. - One giant cluster (everything is "never contacted"): split it by source or recency so the plays differ, and say the real finding is upstream (routing or capacity). - SLAs unknown for a custom stage: apply the nearest default by funnel position, show the assumption, and invite an override. - Tiny result (a dozen stuck contacts): skip clustering, list them individually with per-contact suggestions, and say the funnel is healthy enough to work retail instead of wholesale.