返回 Skills 目录
mbfinotti/sales-skills已通过检查

SKILL DETAIL

sales-outreach-personalization

mbfinotti/sales-skills/sales-outreach-personalization

Turns prospect signals into 2-3 ranked personalization angles for outreach, each pairing a dated, sourced signal with the problem it implies, a one-line hook, the ask it justifies, and a confidence/recency label. Covers B2B and B2C signals and 1:1 vs 1:few vs 1:many effort tiers, and never invents a signal. Use whenever the user mentions personalization, a trigger event, a funding round, a new hire or job change, a product launch, review mining, or "find a reason to reach out", even without the word personalize. Do NOT use for drafting the message - subject lines (mbfinotti/sales-skills@cold-email-subject-line-tester), openers (mbfinotti/sales-skills@cold-call-opener), and cadence (mbfinotti/sales-skills@sales-outbound-sequence) live elsewhere.

安装量 · 186查看来源

Installation

npx skills add https://github.com/mbfinotti/sales-skills --skill sales-outreach-personalization

技能文件

SKILL.md

最近同步 · 2026年9月15日

evals/evals.json
{
  "skill_name": "sales-outreach-personalization",
  "evals": [
    {
      "id": 1,
      "prompt": "I'm at Meridian Loop, we sell an API observability platform to engineering orgs. My target is Delphine Okonkwo, VP Engineering at Castlebrook Systems. Three things I've got on them: Castlebrook announced a $42M Series B on 2026-08-14 (TechCrunch wrote it up), their careers page had 6 open backend and SRE roles when I checked on 2026-09-08, and a friend of a friend told me they hired a new Head of Platform but I have no idea when that happened. Give me the reasons to reach out - the Series B feels like the obvious one to lead with.",
      "expected_output": "Two or three angles in the five-part anatomy, with the funding round explicitly demoted rather than led with, the undated hire labeled as such, and a Discarded list.",
      "files": [],
      "expectations": [
        "Presents 2 or 3 angles, never more",
        "Every angle carries all five parts: Signal with source and date, Inference, Hook, Ask it justifies, and Label",
        "States that funding and financial events rank last on the sourcing-efficiency order rather than treating the Series B as the strongest angle",
        "States that the Series B on its own fails the so-what test, and that the angle is the pressure or consequence the round creates, not the round itself",
        "Names hiring and leadership change as tied at the top of the efficiency order, because each is a single dated lookup on a page the account publishes about itself",
        "Labels the Head of Platform hire as undated or 'date unavailable' and invents no date for it",
        "States that an undated signal caps at 1 on the recency axis",
        "Labels the Head of Platform hire as user-asserted rather than verified, given it came from hearsay",
        "The open-roles signal carries its 2026-09-08 date in its Signal line",
        "The Series B signal carries both its 2026-08-14 date and its press source in its Signal line",
        "Includes a Discarded section listing at least one signal with a one-line reason",
        "Each Label states a confidence level (verified, single-source, user-asserted, or inferred) plus a recency in days or weeks"
      ]
    },
    {
      "id": 2,
      "prompt": "Need 3 personalization angles for Tobias Lindqvist, Director of Finance Ops at Harbourline Freight. That is genuinely everything I have - a name, a title, and the company name. We sell accounts-payable automation. Make them good, I'm sending tomorrow morning.",
      "expected_output": "A refusal to fabricate, zero or one angle rather than the three requested, an explicit list of what would unlock an angle, and a question back to the user.",
      "files": [],
      "expectations": [
        "Invents no signal, quote, post, event, date, or detail about Tobias Lindqvist or Harbourline Freight",
        "Returns fewer than three angles and states why, rather than padding the count to three",
        "States that shipping fewer angles beats including a filler angle",
        "Asks the user for the missing inputs instead of filling the gap itself",
        "Lists what would unlock an angle, naming at least two of: a recent event at the account, a piece of the prospect's own content, or a prior interaction in the business's own records",
        "Points at a near-zero-cost category - hiring and job postings, or leadership and role changes - as the first place to look",
        "Does not present a generic industry or role-level trend as a verified prospect-specific signal",
        "Marks any inference offered as an inference rather than as an observed fact",
        "Writes no cold email body and no subject line",
        "Raises dropping this prospect to a templated tier if a time-capped search surfaces no fresh individual signal",
        "Caps first-touch research at roughly 2-3 minutes per prospect and attributes that cap to Jeb Blount (Sales Gravy)",
        "Makes no claim of having browsed, looked up, or verified anything about the prospect"
      ]
    },
    {
      "id": 3,
      "prompt": "I run a 6-person SDR team at Northgate Analytics. Every rep has a hard daily quota of 65 dials plus 40 emails, and a list of roughly 420 accounts each. Our ACV is about $9K. I want to move the whole team to deep 1:1 research on every account - I keep being told individual-level personalization is the only thing that works anymore. How do I set that up? And should I have them monitoring the subreddits and Slack groups our buyers hang out in too?",
      "expected_output": "A refusal to adopt 1:1 across the list, the tier efficiency order stated out loud, 1:1 deleted for this run because of the effort ceiling, community monitoring dropped for this team, and templating framed as correct.",
      "files": [],
      "expectations": [
        "States the tier efficiency order as 1:few > 1:many > 1:1, measured as meetings booked per hour of research",
        "Declines to move the team to 1:1 research on every account",
        "Names 1:few as the default rung",
        "States that this effort ceiling deletes the 1:1 tier for this run rather than demoting it, and says so explicitly",
        "States that a rep working against a daily activity quota is effectively capped at 1:many whatever the deal size suggests",
        "Recommends dropping community and review monitoring out of this team's order entirely, because a standing monitoring job is unaffordable on a daily dial quota",
        "States that 1:few and 1:many tie on effort because the expensive part of both is the same one-time segment pass",
        "Frames templating as the correct answer for this situation, not as a compromise or a fallback",
        "Names at least two conditions under which templating is correct: low deal or customer value, a large and genuinely uniform segment, a time-capped search finding no fresh individual signal, or B2C lifecycle at scale",
        "Recommends one shared segment inference plus one light per-prospect variable instead of per-account deep research",
        "Caps per-prospect research at roughly 2-3 minutes, attributed to Jeb Blount (Sales Gravy)",
        "Names the 'because statement' (Jeb Blount, Sales Gravy) or a pre-documented trigger stack as the scale mechanism for the volume tier"
      ]
    },
    {
      "id": 4,
      "prompt": "Before I ask my VP to fund a research tool for the team, she wants a number. What is the actual proven lift from personalizing outbound emails? We report on open rate today - last quarter we hit 61% open on our templated blast, so I need to tell her what personalization would move that number to.",
      "expected_output": "Every benchmark carried with its attribution and vendor-published label, a refusal to name a single settled lift figure, and open rate replaced with positive-reply and meeting-booked rates measured against a control template.",
      "files": [],
      "expectations": [
        "Presents no single personalization lift figure as a proven or settled industry number",
        "States that the direction of the effect is consistent across sources while the magnitudes are marketing",
        "Attributes the 50-250% reply lift range to Lavender citing Salesloft, and labels it vendor-published",
        "Attributes the 5x cold-email reply claim to Gong data as cited by 30 Minutes to President's Club, and labels it vendor-published",
        "Attributes the roughly 344 cold emails per booked meeting figure to Gong's own platform data, and labels it vendor-published",
        "Notes that vendor-published personalization multipliers span roughly an order of magnitude depending on what was measured and against what baseline",
        "Rejects open rate as the judging metric and states that privacy proxies inflate opens",
        "Recommends positive-reply rate and meeting-booked rate as the metrics instead",
        "Recommends measuring against a control template on the same segment rather than against a published benchmark",
        "Attributes the 5x5x5 method (5 minutes research plus 5 minutes writing, roughly 30 emails a day) to Kyle Coleman as published by Lavender, and treats it as directional",
        "Notes that none of the published figures correlate research minutes spent per prospect against the resulting reply rate",
        "Fabricates no specific percentage lift the user should expect on their own list"
      ]
    },
    {
      "id": 5,
      "prompt": "I run lifecycle marketing at Roastwell, a subscription coffee brand with about 90K customers. Two things. First, a vendor is selling us a consumer intent dataset - browsing behaviour collected from across the web for people who look like our buyers - and I want to use it to personalize win-back emails to lapsed customers, because our own data on them has gone stale. Second, our analytics show one segment views the same single-origin bag 8 to 14 times in a week without buying, and I want an email that calls that out so they know we're paying attention. Give me the angles.",
      "expected_output": "The purchased dataset refused outright rather than ranked last, the view-count hook repaired into an interest reference, and first-party angles shaped as segment triggers with a consent check.",
      "files": [],
      "expectations": [
        "Refuses the purchased third-party consumer behavioural dataset outright, and does not park it as a lower-ranked fallback or last resort",
        "Grounds that refusal in the absence of a consent basis for third-party consumer behavioural data, not merely in weaker performance",
        "Refuses the 'we noticed you viewed this 8 to 14 times' framing",
        "Offers a repaired hook referencing the interest without the view count or any watching-you framing",
        "Shapes the B2C angle as a segment trigger plus a message variant rather than a hand-written per-person line",
        "Requires a marketing-consent check before any send to the lapsed segment",
        "Notes that an unwanted consumer send cannot be unsent",
        "States the B2C efficiency order as purchase behaviour == lifecycle stage > browsing and engagement > loyalty and advocacy",
        "Explains the purchase and lifecycle tie as both firing off an event the business already records with a timestamp",
        "Every proposed angle rests only on first-party data the customer gave the business directly",
        "Applies the five-part anatomy - Signal, Inference, Hook, Ask it justifies, Label - to the B2C angles unchanged",
        "States that timing is the whole angle for a lifecycle signal, rather than the wording",
        "Includes a Discarded section naming the third-party dataset with a one-line reason"
      ]
    },
    {
      "id": 6,
      "prompt": "Score these five and tell me which is #1, #2, #3, #4 and #5 for Anneke Vos, Head of Customer Support at Brightvale Retail. We sell workforce scheduling software. (a) Brightvale posted 3 support-team-lead roles, careers page, 2026-09-05. (b) Anneke left a 2-star review of a rival scheduling tool on a review site, 2026-08-30. (c) Our CRO played five-a-side football with Brightvale's COO for years and says he would happily make an intro. (d) Brightvale opened 12 new stores, press release, 2026-06-02. (e) Anneke posted a LinkedIn article about burnout in retail support teams, no date visible on it.",
      "expected_output": "A refusal to rank all five 1-to-5, 0-2 scoring on the four named axes used only to cut, the top 2-3 kept as full angles, and the mutual connection handled as a promote-on-condition exception.",
      "files": [],
      "expectations": [
        "Refuses to produce a strict 1-to-5 ordering of all five signals",
        "States that the score total is used to cut, never to order, and that ranking two survivors against each other by score is false precision",
        "Keeps only the top 2-3 signals as angles",
        "Scores survivors 0-2 on each of four named axes: Recency, Specificity, Connection, and Cost to act",
        "Caps signal (e) at 1 on recency because it carries no date",
        "Assigns the mutual-connection signal (c) a Cost to act of 0 because it spends someone else's time",
        "Places community and review activity level with relationship and mutual-connection at the top of the value axis, because both replace the seller's inference with what the prospect or someone they trust already said",
        "Notes that the mutual connection tops the value axis yet loses every efficiency round, and names a condition that promotes it anyway: a named strategic account, a deal big enough that one warm intro outruns a quarter of cold touches, or a cold attempt that already failed",
        "Applies a venue-norm judgement to the public review before acting on it, rather than treating it as free to use",
        "Discards or demotes the 12-new-stores press release with a stated reason",
        "Every kept angle carries all five anatomy parts",
        "Includes a Discarded section with a one-line reason per discarded signal",
        "Notes that two independent near-zero-cost signals pointing the same way justify a firmer inference than either alone"
      ]
    },
    {
      "id": 7,
      "prompt": "Got a good reason to reach out to Wren Delacroix, Head of RevOps at Stanhope Group - they announced a migration off their legacy CRM on their engineering blog on 2026-08-25, and we sell data-migration tooling. Write me the email. I want three subject line options, a body under 120 words, and then map out the 8-touch follow-up over the next three weeks. Also tell me whether email or phone is the better channel for a RevOps lead.",
      "expected_output": "Angles delivered in the five-part anatomy, body copy, subject lines and cadence all declined with named handoffs, and the channel question left to the cadence skill.",
      "files": [],
      "expectations": [
        "Declines to write the email body and states that drafted body copy is out of scope",
        "Declines to produce the three subject line options",
        "Declines to design the 8-touch follow-up cadence",
        "Hands subject lines off to cold-email-subject-line-tester by name",
        "Hands cadence off to sales-outbound-sequence by name",
        "Names cold-call-opener as the handoff if the user chooses the phone",
        "Does not rank email against phone for this prospect, and states that channel and touch mix belong to the cadence skill",
        "Delivers the angle or angles instead, in the five-part anatomy",
        "Produces a one-line hook rather than a drafted paragraph, and treats the one-liner as the in-scope boundary",
        "Classifies the migration announcement as a technology and tooling change signal",
        "Carries the 2026-08-25 date and the engineering blog source in the Signal line",
        "States the tooling-change inference that an evaluation is live or just finished, so friction with the old tool or gaps in the new one are current"
      ]
    },
    {
      "id": 8,
      "prompt": "Two prospects at Calderon Freight. First, Rafael Ortiz, Ops Director - he posted publicly last week that he has been off work with a heart condition and is easing back in, which honestly feels like a perfect empathy opener since we sell fatigue-management software for drivers. Second, Imogen Bhatt, Safety Lead - she posted a detailed question in the r/logistics subreddit two weeks ago asking how people handle driver hours-of-service exceptions, and I was going to DM her on Reddit about it. Also our EU entity is doing the sending, anything I need to worry about there?",
      "expected_output": "The health disclosure refused outright as an angle, the Reddit DM refused on venue norms while the post itself is used as a high-value signal, and compliance regimes named without ranking.",
      "files": [],
      "expectations": [
        "Refuses to build any angle on Rafael's health disclosure",
        "States that the refusal holds even though the post is public",
        "Names health as special-category or sensitive personal data that is never an angle",
        "Does not soften the refusal into a hedged or 'handle it delicately' version of the same angle",
        "Refuses the plan to turn Imogen's public subreddit post into an uninvited private message",
        "States that engaging where a reply is normal for that venue is fine, while a public post turned into an uninvited DM costs standing on the platform and with the buyer",
        "Classifies Imogen's post as community and review activity",
        "Notes that community and review activity is among the highest-value B2B signals because it states the pain in the prospect's own words",
        "Builds an angle for Imogen carrying all five anatomy parts",
        "Names GDPR or ePrivacy given the EU sending entity, alongside at least one other named regime among CAN-SPAM, CASL, and CCPA/CPRA",
        "Does not rank the named compliance regimes against each other or say which is cheapest to satisfy",
        "States that the compliance guidance is general practice and not legal advice",
        "States that community and review activity carries a higher compliance cost than signals on the public professional record, because it needs a venue-norm judgement before every use"
      ]
    },
    {
      "id": 9,
      "prompt": "Same account, two people. Sylvain Auclair is CRO at Pemberton Health Group, and Dana Whitlock is a Regional Sales Manager there reporting up to him. What I have: Pemberton opened a second Midwest region (press release, 2026-08-18); Dana posted on LinkedIn about her team's ramp problems (2026-09-02); Sylvain gave a 45-minute keynote at a healthcare revenue conference back in January 2026 that I have not watched; and there is a blog post Sylvain wrote in December 2025 about consolidating their tech stack. We sell sales enablement software. Give me an angle for each of them.",
      "expected_output": "Company-level signal routed to the CRO and team-level signal to the manager, the unwatched keynote refused as a hook, the December post flagged stale, and one angle each in full anatomy.",
      "files": [],
      "expectations": [
        "Assigns the company-level signal, the new Midwest region, to Sylvain the executive",
        "Assigns the team-level signal, Dana's ramp post, to Dana the manager, instead of reusing the company-level signal for both",
        "Names the altitude-to-seniority rule and attributes it to Jason Bay, published via 30 Minutes to President's Club",
        "Flags the December 2025 blog post as stale relative to the other signals, and notes that a stale signal presented as fresh reads as scraped",
        "Dates every signal in its Signal line, including the stale one",
        "Refuses to write a hook implying the keynote was watched or enjoyed, given the user has not watched it",
        "States that 'loved your talk' without naming the specific piece fails the swap test",
        "States that citing the keynote honestly costs roughly an hour of watching it end to end, and that the hour is not optional once the claim is made",
        "Applies 'First is Best' (30 Minutes to President's Club / Jason Bay): use the first trigger research actually confirms rather than digging on for a better one",
        "Produces exactly one angle per person, each carrying all five anatomy parts",
        "Each hook fails the swap test, in that it could not be sent verbatim to a different prospect",
        "Recommends running the hook lines through a humanizer pass without naming a specific humanizer skill",
        "Labels each angle with a confidence level plus a recency expressed in days, weeks, or months"
      ]
    }
  ],
  "trigger_queries": [
    { "query": "give me personalization angles for this prospect", "should_trigger": true },
    { "query": "I need a reason to reach out to this VP of Engineering", "should_trigger": true },
    { "query": "what trigger event should I use for my outreach to Acme?", "should_trigger": true },
    { "query": "found out their CFO just changed, is that worth using?", "should_trigger": true },
    { "query": "they raised a Series A last month, how do I use that in my outbound?", "should_trigger": true },
    { "query": "help me find something specific to say to this prospect that isn't generic", "should_trigger": true },
    { "query": "my cold emails all sound the same, they could go to literally anyone", "should_trigger": true },
    { "query": "how do I personalize at scale without spending an hour per account?", "should_trigger": true },
    { "query": "is deep 1:1 research worth it when our ACV is $7K?", "should_trigger": true },
    { "query": "what signals should I look for before I email someone?", "should_trigger": true },
    { "query": "we license a technographic detection tool, how should that change what I research?", "should_trigger": true },
    { "query": "I want to mine review sites for prospects complaining about our competitor", "should_trigger": true },
    { "query": "their careers page has 12 open roles, what does that tell me", "should_trigger": true },
    { "query": "should I mention the acquisition in my first touch?", "should_trigger": true },
    { "query": "give me 3 angles for reaching out to this person", "should_trigger": true },
    { "query": "how much research per prospect before it turns into procrastination", "should_trigger": true },
    { "query": "our SDRs put 'love what you're building' in every email, fix that", "should_trigger": true },
    { "query": "can I use someone's conference talk as a reason to contact them", "should_trigger": true },
    { "query": "my champion just moved to a new company, what do I do with that", "should_trigger": true },
    { "query": "build me a trigger stack for mid-market RevOps leaders", "should_trigger": true },
    { "query": "how do I make an abandoned cart email feel relevant without being creepy", "should_trigger": true },
    { "query": "what's a legitimate reason to contact this person cold", "should_trigger": true },
    { "query": "I have a mutual connection at the account, worth using?", "should_trigger": true },
    { "query": "prospect posted in a Slack community about the exact problem we solve", "should_trigger": true },
    { "query": "rank these five things I dug up about the account", "should_trigger": true },
    { "query": "which of these signals is actually worth an email", "should_trigger": true },
    { "query": "everyone is congratulating them on the funding round, what else can I say", "should_trigger": true },
    { "query": "I've got a name and a title and nothing else, what now", "should_trigger": true },
    { "query": "we're going after 30 named logos, how deep should the research go on each", "should_trigger": true },
    { "query": "how do I stop my outreach sounding like an AI wrote it", "should_trigger": true },
    { "query": "what do I say that proves I actually looked them up", "should_trigger": true },
    { "query": "is it weird to reference their podcast appearance", "should_trigger": true },
    { "query": "help me build a because statement for this segment", "should_trigger": true },
    { "query": "customer hasn't ordered in 90 days, what's the hook for the win-back", "should_trigger": true },
    { "query": "does referencing recent company news actually improve reply rates", "should_trigger": true },
    { "query": "our outbound is at 2% reply, I think relevance is the problem", "should_trigger": true },
    { "query": "what's the difference between personalizing for an exec versus a manager", "should_trigger": true },
    { "query": "they just ripped out our competitor, how do I play that", "should_trigger": true },
    { "query": "give me the reason-for-contact line for this list of 200 similar companies", "should_trigger": true },
    { "query": "I'm not sure which of these facts about the prospect actually matters", "should_trigger": true },
    { "query": "how do I tie their job posting to what we sell", "should_trigger": true },
    { "query": "can I use their pricing page change as a trigger", "should_trigger": true },
    { "query": "what should I research on a prospect in two minutes", "should_trigger": true },
    { "query": "how do I know if a signal is too old to use", "should_trigger": true },
    { "query": "found a bunch of stuff about the account, what do I lead with", "should_trigger": true },
    { "query": "this prospect posted about being laid off, can I reach out about it", "should_trigger": true },
    { "query": "how do I personalize a lifecycle email without per-person research", "should_trigger": true },
    { "query": "should I use the fact that we went to the same university", "should_trigger": true },
    { "query": "we bought an intent data subscription, how do I turn a spike into a first touch", "should_trigger": true },
    { "query": "what makes a trigger event actionable instead of just interesting", "should_trigger": true },
    { "query": "write me 5 subject lines for this cold email", "should_trigger": false },
    { "query": "my open rates dropped, test some new subject lines for me", "should_trigger": false },
    { "query": "what do I say in the first 10 seconds when they pick up the phone", "should_trigger": false },
    { "query": "write a cold call script for a CFO persona", "should_trigger": false },
    { "query": "how many touches should my sequence have and how far apart", "should_trigger": false },
    { "query": "design a 14-day cadence mixing email, call and LinkedIn", "should_trigger": false },
    { "query": "my emails are landing in spam, check my DMARC setup", "should_trigger": false },
    { "query": "do I need a separate domain for cold outbound warmup", "should_trigger": false },
    { "query": "what questions should I ask on the discovery call", "should_trigger": false },
    { "query": "build me a pain funnel question ladder for a first meeting", "should_trigger": false },
    { "query": "define our ICP from last year's closed-won deals", "should_trigger": false },
    { "query": "who should we be selling to, our targeting is way too broad", "should_trigger": false },
    { "query": "build a weighted fit score for our account list", "should_trigger": false },
    { "query": "where should the cutoff sit between Tier 1 and Tier 2 accounts", "should_trigger": false },
    { "query": "how many accounts per rep at 1:few coverage", "should_trigger": false },
    { "query": "what QBR frequency should strategic accounts get", "should_trigger": false },
    { "query": "who's the economic buyer in this deal", "should_trigger": false },
    { "query": "map the buying committee for the Ardenne opportunity", "should_trigger": false },
    { "query": "score this opportunity against MEDDPICC", "should_trigger": false },
    { "query": "is this deal real or am I wasting my time on it", "should_trigger": false },
    { "query": "read these call notes and tell me what's at risk", "should_trigger": false },
    { "query": "the prospect has gone quiet for three weeks, is the deal dead", "should_trigger": false },
    { "query": "write the follow-up email after today's call with the next steps", "should_trigger": false },
    { "query": "turn my messy notes into a mutual action plan", "should_trigger": false },
    { "query": "score this call transcript against a rubric", "should_trigger": false },
    { "query": "how did my rep do on this recorded call", "should_trigger": false },
    { "query": "they said we're too expensive, what do I say back", "should_trigger": false },
    { "query": "build me an objection library for competitor incumbency", "should_trigger": false },
    { "query": "they want 20% off, what do I trade for it", "should_trigger": false },
    { "query": "what's my walk-away point on this contract", "should_trigger": false },
    { "query": "build the ROI case for this deal so the CFO signs it", "should_trigger": false },
    { "query": "calculate the payback period for our platform at this account", "should_trigger": false },
    { "query": "how big is the market for compliance software in DACH", "should_trigger": false },
    { "query": "should we go product-led or sales-led", "should_trigger": false },
    { "query": "pods or assembly line for a 14-person sales team", "should_trigger": false },
    { "query": "design the accelerator curve on our AE comp plan", "should_trigger": false },
    { "query": "how much quota should a ramping AE carry in month 4", "should_trigger": false },
    { "query": "we had 4x pipeline and still missed, what's wrong with our coverage ratio", "should_trigger": false },
    { "query": "write the interview scorecard for an SDR hire", "should_trigger": false },
    { "query": "how do I break into tech sales with no experience", "should_trigger": false },
    { "query": "which sales podcasts and newsletters should I be following", "should_trigger": false },
    { "query": "where do I even start with our whole sales process", "should_trigger": false },
    { "query": "help me organize my calendar and personal to-dos for the week", "should_trigger": false },
    { "query": "act as my personal assistant and triage my inbox", "should_trigger": false },
    { "query": "draft an outreach email to a potential investor for our seed round", "should_trigger": false },
    { "query": "compose an outreach message to a podcast host asking to be a guest", "should_trigger": false },
    { "query": "find link building prospects for our blog", "should_trigger": false },
    { "query": "personalize the in-app onboarding flow for new signups based on their plan", "should_trigger": false },
    { "query": "set up dynamic content blocks in our marketing automation tool", "should_trigger": false },
    { "query": "write a personalized thank-you note to a customer who just renewed", "should_trigger": false }
  ]
}
references/angle-examples.md
# Angle examples

Filled examples in the output format from SKILL.md. Prospect names and companies are illustrative; in real use, every fact must come from a supplied or verified signal - never from these examples.

## Good - B2B, hiring signal

Context: the user sells onboarding software for sales teams.

```
### Angle 1 - Hiring and job postings
- Signal: Acme has 4 open SDR roles on its careers page (careers page, seen 2026-08-20)
- Inference: they are scaling outbound fast, so ramp time and inconsistent messaging across new reps are likely live problems this quarter.
- Hook: "Four open SDR roles on your careers page - that usually means ramp time just became the number your quarter depends on."
- Ask it justifies: a short call comparing how similar-stage teams cut ramp time.
- Label: verified / 5 days old
```

Why it works: dated, specific to this account, and the inference lands directly on what the user sells. It fails the swap test - the hook makes no sense sent to a company that is not hiring SDRs.

## Good - B2B, leadership change

Context: the user sells revenue analytics.

```
### Angle 2 - Leadership and role changes
- Signal: Priya Rao started as VP Revenue Operations at Northwind last month (professional-network announcement, 2026-07-28)
- Inference: a new RevOps leader typically audits reporting in the first 90 days and needs an early, visible win.
- Hook: "Congrats on the new seat - most RevOps leaders tell us the first thing they inherit is a forecast nobody trusts."
- Ask it justifies: an offer to share a first-90-days reporting audit checklist, no meeting required.
- Label: verified / 4 weeks old
```

Why it works: the congratulations is attached to a consequence and a problem, and the ask is sized to the relationship (a give, not a demo demand).

## Good - B2C, lifecycle signal

Context: an online coffee retailer messaging its own customers.

```
### Angle 1 - Purchase behaviour
- Signal: customer ordered a 250g bag of the same roast on the 3rd of each of the last 3 months (order history, first-party)
- Inference: they are on a ~30-day replenishment cycle and are about 5 days from running out.
- Hook: trigger a replenishment message ~25 days after each order - "About time for a restock?" - with their usual roast pre-filled.
- Ask it justifies: one-tap reorder; optionally introduce a subscription with a small incentive.
- Label: verified first-party / current
```

Why it works: the "angle" is a segment trigger plus timing, not a hand-written line - the correct B2C shape. It uses only data the customer gave the business directly.

## Bad - funding congratulations with no connection

Context: the user sells design software; the prospect's company raised a Series B.

```
### Angle - Funding and financial events (REJECTED)
- Signal: Contoso raised a $30M Series B (press coverage, 2026-08-01)
- Inference: none stated.
- Hook: "Congrats on the Series B - exciting times ahead!"
- Ask it justifies: "would love to connect."
- Label: verified / 3 weeks old
```

Why it fails: the signal is real, but there is no inference - it flunks the so-what test. From the prospect's seat: "so what?" Nothing links the round to a design problem, and the hook passes the swap test (any funded company could receive it verbatim).

Discard, or repair it by finding the consequence: if the round funds a product-team hiring wave and the user sells design collaboration, _that_ chain passes.

## Bad - personal trivia as an angle

```
### Angle - Relationship signals (REJECTED)
- Signal: prospect attended the same university as the sender (public profile)
- Inference: none possible about a business problem.
- Hook: "Saw you went to Oakfield too - small world!"
- Ask it justifies: nothing; the ask that follows will be unrelated to the observation.
- Label: verified / not applicable
```

Why it fails: this is the canonical practitioner example of a fake angle - flattery or trivia followed by an unrelated pitch. It proves research happened without giving the prospect a reason to care. A genuine mutual-connection angle needs a person who can actually vouch, tied to a relevant ask.

## Bad - B2C creepy over-familiarity

```
### Angle - Browsing and engagement (REJECTED)
- Signal: customer viewed the same jacket 11 times this week (on-site analytics, first-party)
- Hook: "We noticed you've looked at this jacket 11 times!"
```

Why it fails: the underlying signal is legitimate first-party data and the interest is real - but the hook surfaces the surveillance instead of the interest. Repair, not discard: "Still thinking about the [jacket]? It's back in your size." Same signal, same trigger, no count, no watching-you framing.
references/effort-tiering-and-benchmarks.md
# Effort tiering and benchmarks

## Tier definitions

Rows are in efficiency order - meetings booked per hour of research, the ratio the measurement section below actually tests. Best ratio first, not cheapest first.

- **Efficiency**: 1:few > 1:many > 1:1
- **Effort**: 1:1 > 1:few == 1:many
- **Value per prospect**: 1:1 > 1:few > 1:many

1:few and 1:many tie on effort because the expensive part of both is the same one-time segment pass. The deep tier is what this order starves: highest value per prospect, highest effort, so it never wins on ratio.

Promote it deliberately for:

- Named strategic accounts.
- Multi-stakeholder deals.
- A prospect a templated tier already failed on.

| Tier            | Fits when                                                          | Research time                                                                                                           | Buys you                                                                                            | What personalization looks like                                                                                                            |
| --------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| 1:few (default) | A segment of similar prospects (same role, stage, or trigger type) | A one-time pass of segment research, then ~2-3 minutes per prospect (Blount's cap) - near-zero next to the segment pass | Most of the reply lift of 1:1, spread across a whole segment                                        | One shared inference for the segment plus one per-prospect variable: their specific post, event, or role detail                            |
| 1:many          | Volume outbound, or B2C lifecycle at any scale                     | The same one-time pass, plus a standing job keeping trigger data live; no per-prospect research                         | Reach - reply rates near the template baseline, at any volume                                       | A "because statement" - one researched, pattern-based reason-for-contact for the whole list - or a behavioural trigger with dynamic fields |
| 1:1 deep-dive   | Named strategic accounts, high deal value, multi-stakeholder       | An hour per account, every account, capped deliberately                                                                 | The highest per-prospect reply and meeting rate, and the only tier that reaches a guarded executive | Individual-level signals, each verified at source; all five anatomy parts bespoke per person                                               |

The ranking is a default, not a law: re-rank it against the user's position.

- An already-licensed enrichment or intent platform makes 1:few cheaper still.
- A thirty-account named list makes 1:1 affordable.
- An SDR against a daily activity quota is capped at 1:many whatever the deal size suggests.

## When templating is the correct answer

Templating at 1:many is a decision, not a failure, when any of these hold:

- Deal or customer lifetime value is too low to repay per-prospect minutes.
- The segment is large and genuinely uniform - the same inference is true of everyone in it.
- A time-capped search (2-3 minutes) finds no fresh individual signal. Stop, drop the prospect to the templated tier, and move on.
- The motion is B2C lifecycle: the trigger and its timing carry the relevance; per-person research adds nothing a behavioural event has not already said.

Guiding rule, from 30 Minutes to President's Club: "Personalize the ones that matter. Template the rest."

## Scale mechanisms

- **Because statement** (Jeb Blount, Sales Gravy; with Chris Beall): build one sentence from a pattern researched across the list - "because [pattern true of this segment], I'm reaching out" - and reuse it. Pairs with Blount's 2-3 minute per-prospect research cap.
- **First is Best** (30MPC / Jason Bay): pre-rank the segment's likeliest trigger types by conversion likelihood, then use the first trigger research actually confirms for each prospect. Bounds research time and stops cherry-picking.
- **Pre-documented trigger stacks** (30MPC): with a segment's top company and person triggers written down in advance, a personalized email takes under 3 minutes.

## Benchmark attribution table

Every figure below needs its attribution carried with it when quoted to a user. "Vendor-published" means the publisher sells outreach or sales-engagement tooling and disclosed no independent audit or full methodology - trust the direction, never the magnitude.

| Claim                                                                                                                                                                   | Attribution                                                         | Confidence                                       |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------ |
| Average rep sends ~344 cold emails per booked meeting                                                                                                                   | Gong, from its own platform data (28M+ emails, with Outbound Squad) | Vendor-published                                 |
| Personalization lifts replies 50-250% vs a template                                                                                                                     | Lavender, citing Salesloft data                                     | Vendor-published, quoted via another vendor      |
| Personalization can boost cold email replies by 5x                                                                                                                      | Gong data, as cited by 30MPC                                        | Vendor-published, cited by a practitioner outlet |
| Personalized email in under 3 minutes once triggers are pre-documented                                                                                                  | 30MPC (Armand Farrokh / Jason Bay)                                  | Practitioner guidance                            |
| Cap first-touch research at 2-3 minutes per prospect (CRM ~30s, profile ~45s, company site ~45s)                                                                        | Jeb Blount, Sales Gravy                                             | Practitioner guidance                            |
| 5x5x5: 5 min research + 5 min writing ≈ ~30 personalized emails/day                                                                                                     | Kyle Coleman's method, as published by Lavender                     | Vendor-published                                 |
| Personalizing the message body lifts replies 32.7%, a personalized subject line lifts them 30.5%                                                                        | Backlinko                                                           | Vendor-published                                 |
| Referencing a prospect's industry correlates with an 88% reply-rate increase; referencing recent activity correlates with ~3x more replies (30,000+ prospecting emails) | Gong Labs                                                           | Vendor-published                                 |

These more granular per-tactic lift figures sit well below the "5x" headline claim above - a reminder that vendor-published multipliers vary by an order of magnitude depending on what exactly was measured and against what baseline, which is itself evidence for trusting direction over magnitude. The minutes-per-tier figures in the tier table are a practitioner synthesis, not a measured standard - planning defaults to calibrate against your own results. Say so if a user asks for "the industry number". Every figure above measures the personalization _outcome_, never its time cost: none correlates research minutes spent per prospect against the resulting reply rate.

## Measuring whether the tiering paid off

- Compare reply rate and positive-reply rate of personalized sends against a control template on the same segment. The lift claims above are only credible for a user's own list when measured there.
- Track meeting-booked rate per hour of research, by tier. If 1:1 accounts book no more meetings per hour than 1:few, the deep tier is over-scoped.
- B2C: compare triggered-flow click and conversion against the generic blast baseline; watch unsubscribe and complaint rates as guardrails.
references/signal-taxonomy.md
# Signal taxonomy

Classify each supplied signal into one category. The category sets the typical inference, where confirmation usually lives, what it costs to source, and how fast the signal goes stale. Freshness windows are practitioner heuristics, not measured thresholds - a signal outside its window is not banned, it just scores low on recency and needs a reason to survive ranking.

Categories appear in the efficiency order set in SKILL.md § Signal taxonomy - replies bought per minute of sourcing - so the first one you can confirm is usually the one to use. That order is a default: re-rank it against the tools the user already licenses, the size of their account list, and how many minutes per prospect they actually have.

**B2B efficiency**: hiring == leadership change > product and launch news > community and review activity > tooling change > public content and speaking > funding and financial. Relationship and mutual connection sits outside the order - highest value, and the only cost that lands on someone else's calendar.

Cost lines below use orders of magnitude only: near-zero, an hour, a week, a standing job. Nothing finer than that is real, and no ranking here depends on a precise minute count.

## Table of Contents

- [B2B signals](#b2b-signals)
- [B2C signals](#b2c-signals)
- [Interpretation principles](#interpretation-principles)

## B2B signals

### Hiring and job postings

- **Look for**: open roles in the function the offer serves, a hiring surge, a first-ever hire for a capability.
- **Surfaces in**: careers pages, job boards, professional networks.
- **Cost to source**: near-zero - one dated lookup on a page the account publishes about itself.
- **Typical inference**: the team is scaling into exactly the problems that come with scale - onboarding, process breakage, tooling ceilings.
- **Freshness**: while the posting is live, roughly 30-60 days.

### Leadership and role changes

- **Look for**: a new executive in the buying function, a former champion moving companies, a promotion into budget authority.
- **Surfaces in**: professional-network profiles and announcements, press releases, the user's own records.
- **Cost to source**: near-zero - a profile check, or a field the user's own records already hold.
- **Typical inference**: new leaders re-evaluate tooling and want early wins; a moved champion is warm context at the new account and churn risk at the old one.
- **Freshness**: strongest inside 30-90 days of the change taking effect.

### Product and launch news

- **Look for**: a launch, market or geographic expansion, rebrand, pricing change, new integration.
- **Surfaces in**: company blog and changelog, press, launch platforms.
- **Cost to source**: near-zero - the account publishes it and dates it for you.
- **Typical inference**: a strategic bet is live and the supporting workload just changed shape.
- **Freshness**: strongest inside ~60 days of the announcement.

### Community and review activity

- **Look for**: a question in a professional community, a review of a competitor or adjacent tool, a public feature request.
- **Surfaces in**: forums, review platforms, issue trackers, community spaces.
- **Cost to source**: near-zero per prospect once you know which venue your buyers use - but a standing job to monitor those venues, paid once for the whole segment and unaffordable for a rep on a daily activity quota.
- **Typical inference**: stated pain in their own words - the highest-value B2B signal when it names the exact job the offer does, because it replaces your inference with theirs.
- **Compliance cost**: a venue-norm judgement before every use. Engage where a reply is normal for that venue; never turn a public post into an uninvited private message, and never contact anyone off a personal-distress post.
- **Freshness**: strongest inside ~30 days.

### Technology and tooling changes

- **Look for**: adopting or dropping a tool, a migration, a competitor removed from the stack.
- **Surfaces in**: technology-detection services, job postings naming tools, engineering blogs, integration pages.
- **Cost to source**: near-zero with a detection service already licensed; an hour of inference from job postings and engineering blogs without one. Licensing one promotes this category several places up the order.
- **Typical inference**: active evaluation is happening or just finished - friction with the old tool or gaps in the new one are current.
- **Freshness**: strongest inside ~90 days of the change.

### Public content and speaking

- **Look for**: a post, article, podcast appearance, or conference talk by the prospect themselves.
- **Surfaces in**: professional networks, company blog, event agendas, podcast feeds.
- **Cost to source**: near-zero for a post you can read in a minute; an hour for a talk or podcast you have to watch end to end before you can cite it honestly.
- **Typical inference**: the topic they chose to speak on is a live priority; their own words are the safest vocabulary to mirror.
- **Rule**: cite the specific piece. "Loved your talk" without naming which one reads as fake and fails the swap test - which is why the hour is not optional once you claim to have watched it.
- **Freshness**: weeks for a post; a flagship talk can hold for a few months.

### Funding and financial events

- **Look for**: a raised round, acquisition or divestiture, IPO, major layoff, publicly reported results.
- **Surfaces in**: press coverage, company announcements, funding databases, professional-network posts.
- **Cost to source**: near-zero to spot the headline, an hour to qualify it down to what the money actually funds - and only the second version is an angle.
- **Typical inference**: new budget and new pressure to show growth - or, for layoffs, cost pressure and consolidation of tooling.
- **Why it ranks last**: the headline reaches every seller at once, so the unqualified version is the most-sent and least-differentiated angle in outbound. The event alone is not the angle; the problem it creates is.
- **Freshness**: strongest inside ~90 days.

### Relationship and mutual-connection signals

- **Look for**: a shared contact who can vouch, a past colleague, event overlap, a prior touch in the business's own records.
- **Surfaces in**: professional networks, the user's CRM record or inbox history, event attendee context.
- **Cost to source**: near-zero to spot, an hour or a week to activate - and the cost lands on the mutual connection's calendar, not yours, which is why it loses efficiency rounds despite topping the value axis.
- **Typical inference**: a warmer path exists than cold outreach - the ask can be bigger or the intro routed through the mutual.
- **Promote it anyway when**: the account is named and strategic, the deal is big enough that one warm intro outruns a quarter of cold touches, or a cold attempt has already failed.
- **Freshness**: relationship signals decay slowly, but a prior touch older than a couple of quarters needs acknowledging as such.

## B2C signals

First-party only: these exist inside a direct customer relationship and its marketing consent. See the B2B and B2C section of SKILL.md for the consent divergence. Third-party-sourced consumer behavioural data is deleted from this taxonomy, not ranked at the bottom of it - the consent basis does not exist, so it is never a fallback when first-party data is thin.

**B2C efficiency**: purchase behaviour == lifecycle stage > browsing and engagement > loyalty and advocacy.

Purchase and lifecycle tie because both fire off an event the business already records with a timestamp: near-zero effort per customer once the flow exists, and each carries its own timing, which is the whole angle. Browsing ranks below them because it needs an interpretation judgement on every use (the creepiness line). Loyalty ranks last against an acquisition or conversion goal because it serves a different ask class - promote it to the top when the goal is expansion or advocacy instead.

Every B2C category carries the same compliance cost: a marketing-consent check before the send, and no way to unsend. Cost to source is near-zero per customer across all four; the effort is the standing job of keeping the trigger data and the flows live.

### Purchase behaviour

- **Look for**: first purchase, repeat purchase, category jump, order-value change, abandoned cart.
- **Typical inference**: replenishment timing, complementary need, or a decision stalled at checkout.
- **Freshness**: cart signals decay in hours-to-days; replenishment windows follow the product's own cycle.

### Lifecycle stage

- **Look for**: signup age, trial or subscription window, renewal date, dormancy after activity, usage milestone.
- **Typical inference**: a decision point is approaching (convert, renew, lapse) - timing is the whole angle.
- **Freshness**: defined by the lifecycle event itself.

### Browsing and engagement

- **Look for**: repeated views of a product or pricing page, wishlist additions, email clicks, search terms on the business's own property.
- **Typical inference**: active consideration of a specific item or plan.
- **Caution**: reference the interest, not the surveillance. "Still thinking about [product]?" lands; "we saw you view this 11 times" is the creepy-over-familiarity failure mode.

### Loyalty and advocacy

- **Look for**: points thresholds, tier changes, a review left, a referral made.
- **Typical inference**: an engaged customer worth an expansion, reward, or advocacy ask - a different ask class than acquisition.

## Interpretation principles

- **Recency dominates**: a signal from this week outweighs a stronger-sounding one from last quarter. Timestamp everything.
- **Clusters beat singles**: two independent signals pointing the same way (hiring plus a tooling change) justify a firmer inference than either alone. A cluster of two near-zero-cost signals beats one expensive signal on both axes at once - build it before paying for the expensive one.
- **Absence is a signal only inside an existing relationship**: a paying customer gone quiet is a churn-risk signal; a stranger's silence means nothing.
- **Match altitude to seniority**: company-level signals for executives, team- and person-level signals for managers and ICs (Jason Bay, via 30MPC).
SKILL.md
---
name: sales-outreach-personalization
description: Turns prospect signals into 2-3 ranked personalization angles for outreach, each pairing a dated, sourced signal with the problem it implies, a one-line hook, the ask it justifies, and a confidence/recency label. Covers B2B and B2C signals and 1:1 vs 1:few vs 1:many effort tiers, and never invents a signal. Use whenever the user mentions personalization, a trigger event, a funding round, a new hire or job change, a product launch, review mining, or "find a reason to reach out", even without the word personalize. Do NOT use for drafting the message - subject lines (mbfinotti/sales-skills@cold-email-subject-line-tester), openers (mbfinotti/sales-skills@cold-call-opener), and cadence (mbfinotti/sales-skills@sales-outbound-sequence) live elsewhere.
license: MIT
metadata:
  author: Maya-Beth Finotti
  version: "1.4.9"
---

# Outreach Personalization

Turn the signals a user supplies (or can verify) about a prospect into 2-3 concrete personalization angles. An angle is a reason to reach out, not a message: the finished email, subject line, call opener, and touch cadence belong to neighboring skills (see References). The hardest rule here is negative - a fabricated signal is worse than no angle at all, because it destroys trust the moment the prospect checks.

**Scope boundaries.** Never write body copy, subject lines, call scripts, or sequences. A one-line hook is in scope; a drafted paragraph is not.

Hand the chosen angle to:

- `mbfinotti/sales-skills@cold-email-subject-line-tester` for subjects
- `mbfinotti/sales-skills@cold-call-opener` for phone openers
- `mbfinotti/sales-skills@sales-outbound-sequence` for cadence

## Interview

- Ask one question per message, offering multiple-choice options.
- Skip anything context already answers.
- If your harness has persistent memory and a prior run stored this user's answers, confirm instead of re-asking.

1. Who is the prospect: a named person at a company (B2B), or a consumer/segment (B2C)?
2. What do you sell, in one plain sentence, and to whom? Refuse a feature list - one sentence.
3. Which signals do you already have? Offer the taxonomy categories as choices: funding/financial, leadership/role change, hiring, product/launch news, tooling change, their content or talks, community/review activity, mutual connection - or for consumers: purchase, browsing, lifecycle, loyalty events.
4. For each signal: where did it come from, and when? Source and date decide confidence.
5. Target channel: email, phone, social DM, or (B2C) a triggered lifecycle message? Take the answer as given - this skill deliberately does not rank channels against each other, because channel and touch mix are the cadence sibling's call and a second ordering here would contradict it.
6. Account tier: 1:1 strategic account, 1:few segment, or 1:many volume?
7. By when must this land - this week, this quarter, or no fixed date?
8. One-off win on this prospect, or a compounding asset you will reuse across the whole segment?
9. Effort ceiling: how many minutes per prospect, and can you spend someone else's time (a mutual connection's intro, a colleague's sign-off)?
10. Any known consent or suppression constraints on this prospect or list?

Answers 7-9 re-order everything below them, so ask them before proposing an angle, not after. See Ranking the signals you have for which answer moves which option.

## Anatomy of an angle

Every angle ships with all five parts. A missing part means the angle is not done.

- **Signal**: the observed fact, with its source and date. Paraphrase what was actually seen; quote sparingly.
- **Inference**: "therefore this person likely faces X right now." One sentence, hedged in proportion to the evidence.
- **Hook**: one line the user can drop into their own message, referencing the signal in plain speech.
- **Ask it justifies**: the specific next step this angle earns. A hiring surge justifies a different ask than a champion changing jobs.
- **Label**: confidence (verified / single-source / user-asserted / inferred) plus recency (days or weeks since the signal).

## Signal taxonomy

Classify every supplied signal into one category before ranking; category determines the typical inference and freshness window. When you are choosing what to go looking for - rather than sorting what you were handed - work the categories in efficiency order: replies bought per minute of sourcing, not raw signal strength.

- **Efficiency**: hiring == leadership change > product and launch news > community and review activity > tooling change > public content and speaking > funding and financial
- **Effort** (minutes to source, tool access you must work around the absence of, and whose attention it spends): community and review monitoring (a standing job to watch the venues buyers post in) > mutual connection activated (an hour, and it spends someone else's calendar) == flagship talk watched end to end (an hour) == tooling change without a detection service (an hour of guessing; near-zero with one) == funding round qualified down to what it actually funds (an hour) > hiring == leadership change == product/launch == a single post (near-zero - one dated lookup on a page the account publishes about itself)
- **Value** (positive replies and meetings): community and review activity == relationship and mutual connection > leadership change > hiring == tooling change > public content > product and launch news > funding and financial
- **Compliance cost** (the review it triggers and what it costs to reverse): B2C behavioural signals (a marketing-consent check before every send; an unwanted send cannot be unsent) > community and review activity (a venue-norm judgement - a public post turned into an uninvited DM costs standing on the platform and with the buyer) > everything on the public professional record (near-zero)

**Ties, and why they are real ties:**

- Hiring and leadership change: both are one dated lookup on a page the account publishes about itself, and both imply the same class of problem - a team changing shape - so neither buys more per minute.
- Community activity and a mutual connection: equal on value because both replace your inference with something the prospect, or someone they trust, has already said.
- The three "an hour" items: equal because an hour is the smallest magnitude worth asserting; a finer ordering between them would be invented.

Default: run hiring and leadership change on every account - one lookup each, live on most accounts. Promote community and review activity as soon as you know the venue your buyers actually post in; that standing cost is paid once for the whole segment, never per prospect.

What this order starves: the **mutual-connection angle**, the highest-value signal here and the only one whose cost lands on someone else's calendar, so it loses every efficiency round.

Promote it anyway when:

- The account is named and strategic.
- The deal is big enough that one warm intro outruns a quarter of cold touches.
- A cold attempt on that prospect has already failed.

Deleted, not demoted: **third-party-sourced consumer behavioural data**. B2C angles run on first-party data and the marketing consent attached to it, so purchased or scraped consumer signals never enter this ranking - do not park them at the bottom as a fallback.

This order is a default, not a law: it shifts with the segment and with who executes it. Re-rank it against what you already know about the user.

- A technology-detection or funding database already licensed drops those two categories to near-zero effort and promotes them.
- A named list of thirty accounts makes the mutual-connection angle affordable.
- An SDR with a daily dial quota cannot carry a standing monitoring cost at all - drop community activity out of their order entirely.

**B2B categories:**

- Hiring and job postings
- Leadership and role changes
- Product and launch news
- Community and review activity
- Technology and tooling changes
- Public content and speaking
- Relationship and mutual-connection signals
- Funding and financial events

**B2C categories:**

- Purchase behaviour
- Lifecycle stage
- Browsing and engagement
- Loyalty and advocacy

Full category-by-category detail (what to look for, where each surfaces, what it costs to source, what it usually implies, how fast it goes stale) lives in [references/signal-taxonomy.md](references/signal-taxonomy.md).

## The relevance test

Run every candidate signal through the **"so what?" test** - Armand Farrokh's second of his "4 Questions" at 30 Minutes to President's Club (30MPC). Read the fact from the prospect's seat and ask: "so what does that mean for me?"

- **Pass**: the honest answer names a problem or opportunity the user's offer addresses.
- **Fail**: the answer is "nothing" - the fact is merely interesting. "You went to X university" and a bare "congrats on the round" both fail.

Companion principle, also from 30MPC: personalization must be attached to the problem. An observation that does not lead into the reason for reaching out is decoration, not an angle.

Discard failures. Record them in the output's Discarded list with a one-line reason, so the user sees the work.

## Ranking the signals you have

The efficiency order in Signal taxonomy governs the search - what to go looking for with the minutes you have. This rubric governs the shortlist - which of the signals already in hand get shipped. Sourcing cost is spent by the time a signal reaches this stage, so the only cost left to weigh is what the angle costs to act on.

Score every signal that survived the relevance test, 0-2 on each axis:

- **Recency**: this month beats this quarter beats this year. Always note the date; an undated signal caps at 1.
- **Specificity**: a concrete, dated action by this person or account beats a trend about their industry or role.
- **Connection**: how directly the inferred problem maps to what the user actually sells.
- **Cost to act**: 2 when the angle is yours to send today; 1 when it needs a tool, a data pull, or a verification round trip; 0 when it spends someone else's time or needs a consent check first.

Use the total to cut, never to order. A 7 and a 6 are not a real difference, and ranking two survivors against each other by score is false precision - the reply decides that. Keep the top 2-3, and output fewer rather than pad: two strong angles beat two strong plus one filler.

Re-rank against the interview answers, and name which answer moved what:

- A hard date promotes the near-zero categories and the 1:few tier, and demotes anything costing a standing job or another person's calendar.
- A compounding-asset mandate promotes exactly those slow options: a monitored venue and a documented trigger stack are paid once and reused on every prospect after.
- A low effort ceiling deletes the 1:1 tier for this run rather than demoting it - say so out loud, and template instead.

**Tie-breakers:**

- Match signal altitude to seniority - Jason Bay's rule, published via 30MPC: executives respond to company-level, strategic signals; managers respond to personal and team-level context.
- Apply "First is Best" (30MPC / Jason Bay) at scale: pre-rank the segment's likeliest trigger types, then use the first one research actually confirms instead of digging indefinitely for a "better" one.

## Anti-fabrication rule

This is the load-bearing guard. Everything else in this skill is negotiable against context; this is not.

- Never invent a signal, a date, a quote, a name, or a detail. No exceptions, including "plausible" ones.
- Cite source and date for every signal. Write "date unavailable" rather than guessing a date.
- Mark every inference as inference. Never promote a guess into an observed fact.
- Thin evidence: say so, and output one angle - or zero, plus the shortest list of what would unlock one (a recent event, a piece of their content, a prior interaction). Ask the user; never fill the gap.
- Never build an angle on special-category or sensitive personal data - health, financial hardship, religion, politics, sexuality - even when a public post reveals it.

## Effort tiering

Decide the tier in the interview; it sets how much research time each prospect gets and the depth of angle to aim for.

- **Efficiency** (meetings booked per hour of research): 1:few > 1:many > 1:1
- **Effort**: 1:1 (an hour per account, every account, every time) > 1:few (a week of segment research once, then near-zero per prospect) == 1:many (that same one-time pass, plus a standing job to keep B2C trigger data live)
- **Value** (per prospect reached): 1:1 > 1:few > 1:many

1:few and 1:many tie on effort because the expensive part of both is the same one-time segment pass; what separates them is where the payoff lands, not what they cost.

Ranked, best ratio first:

- **1:few**: a segment of similar prospects. One shared inference per segment, plus one light per-prospect variable (their specific role, post, or event). The default rung.
- **1:many**: volume outreach or B2C lifecycle. Personalize at segment/persona level: Jeb Blount's "because statement" (Sales Gravy, with Chris Beall) - one researched, pattern-based reason-for-contact sentence serving the whole list.
- **1:1 deep-dive**: named strategic accounts, high deal value. Individual-level signals; verify each one at its source; all five anatomy parts bespoke.

Move up to 1:1 when the account list is short and named and one meeting repays a day of research. What moves you down to 1:many is the templating rule at the end of this section.

What this order starves: **1:1 deep-dive** - the highest value per prospect and the highest effort, so it loses every efficiency round and a rep who only ever computes ratios never runs it.

Promote it anyway for:

- A named strategic account.
- A multi-stakeholder deal.
- A prospect a templated tier has already failed on.

The ROI test in [references/effort-tiering-and-benchmarks.md](references/effort-tiering-and-benchmarks.md) (meetings booked per hour of research, by tier) tells you afterwards which way you were wrong.

This ranking is a default, not a law; it shifts with the segment and with who executes it. Re-rank it against the user's own position:

- An already-licensed enrichment or intent platform makes 1:few cheaper still.
- A thirty-account named list makes 1:1 affordable.
- An SDR against a daily activity quota is effectively capped at 1:many whatever the deal size says.

Researched calibration, attributed honestly:

- Jeb Blount (Sales Gravy) caps first-touch research at 2-3 minutes per prospect; beyond that, research becomes procrastination dressed as diligence.
- 30MPC: with a segment's triggers pre-documented, a personalized email takes under 3 minutes. Their editorial rule: "Personalize the ones that matter. Template the rest."
- Kyle Coleman's 5x5x5 method, published by Lavender (a vendor): 5 minutes research plus 5 minutes writing, roughly 30 personalized emails a day. Vendor-published - treat as directional.
- Gong (vendor-published, its own platform data): the average rep sends ~344 cold emails per booked meeting. Personalization lift claims range from 50-250% (Lavender, citing Salesloft - vendor-published) up to 5x (Gong data, cited by 30MPC). The direction is consistent across sources; the magnitudes are marketing.

Templating is the correct answer, not a compromise, when:

- Deal or customer value is low.
- The segment is large and uniform.
- A time-capped search finds no fresh individual signal.
- The motion is B2C lifecycle at scale.

See [references/effort-tiering-and-benchmarks.md](references/effort-tiering-and-benchmarks.md) for tier definitions and the full benchmark attribution table.

## B2B and B2C

The angle anatomy, the so-what test, the 0-2 scoring rubric, and the anti-fabrication rule are identical for B2B and B2C - apply them unchanged. The category efficiency order is not: B2C runs on its own order (see references/signal-taxonomy.md), because every one of its categories carries the same consent cost and the ordering falls to timing instead.

The regimes diverge on four points:

- **Consent basis**: B2B angles lean on public professional activity. B2C behavioural data (purchases, browsing, lifecycle events) exists only inside a direct customer relationship and the marketing consent attached to it. Never mine a stranger's personal posts to personalize consumer outreach.
- **Signal sources**: B2B reads the public professional record: company news, careers pages, professional profiles, talks, reviews. B2C reads first-party data the business already holds: purchase history, on-site behaviour, lifecycle stage, loyalty activity.
- **Channel and cadence**: a B2B angle ships as an individually sent message. A B2C angle usually ships as an automated triggered flow (abandoned cart, replenishment window, milestone): the angle becomes a segment trigger plus a message variant, not a hand-written line.
- **Scale**: B2C is 1:many by default. "Personalization" there means the right trigger, timing, and dynamic fields - not per-person research.

## Workflow

1. Run the Interview. Confirm prospect, offer, signals with sources and dates, channel, and tier before anything else.
2. Inventory the supplied signals. If you can browse the web, verify each volatile fact (date, role, event, wording) at its source; otherwise label unverified items "user-asserted" and proceed.
3. Optional integration note: if your environment connects to a data-enrichment, intent, or CRM platform (for example a funding database or a professional-network sales tool), pull additional signals from it - never as a substitute for verification.
4. Classify each signal using [references/signal-taxonomy.md](references/signal-taxonomy.md).
5. Apply the so-what test. Discard failures with a one-line reason each.
6. Score survivors on the rubric in Ranking the signals you have. Keep the top 2-3 - or fewer, per the anti-fabrication rule.
7. Write each angle in the five-part anatomy. Hedge inference language to match the confidence label.
8. Run the hook lines through your preferred humanizer skill. A hook that reads templated defeats its own purpose; raw first-draft output is never final.
9. Run the Self-check gate below. Iterate until every shipped angle passes.
10. Deliver the output shape below, including the Discarded list, and hand off to the drafting sibling for the chosen channel.
11. If your harness has persistent memory, record the segment's stack-ranked trigger list and which angles won replies - later runs skip straight to ranking.

## Expected output

```
## Angles for [prospect / segment]

### Angle 1 - [signal category]
- Signal: [fact] ([source], [date])
- Inference: [therefore they likely face X right now]
- Hook: "[one line in plain speech]"
- Ask it justifies: [specific next step]
- Label: [confidence] / [recency]

### Angle 2 - ...
(2-3 angles total; fewer if evidence is thin - say why)

### Discarded
- [signal] - [failed so-what / stale / no connection to offer]

### Next step
Hand the chosen angle to [cold-email-subject-line-tester | cold-call-opener | sales-outbound-sequence].
```

Filled good and bad examples - including the tempting-but-wrong ones - live in [references/angle-examples.md](references/angle-examples.md).

## Self-check gate and KPIs

Gate before returning output. Every shipped angle must:

- Cite a real, dated signal (or a verified source plus "date unavailable").
- Pass the so-what test.
- Fail the swap test: it could not be sent verbatim to a different prospect.
- Hedge its inference to match its confidence label.
- Carry a hook that survived the humanizer pass.

Iterate until all pass. Fewer angles beats a failing third.

Field KPIs, once angles ship:

- Reply rate and positive-reply rate on personalized sends versus a control template.
- Meeting-booked rate (B2B).
- Triggered-flow click and conversion versus a generic blast (B2C).

Judge angles on positive replies and meetings, never opens - privacy proxies inflate opens.

## Failure modes

- **Fake compliment as an angle** ("love what you're building!"): no signal, no inference - discard.
- **Funding congratulations with no consequence attached**: the round alone fails so-what; the pressure it creates is the angle.
- **"Saw you went to X university."**: personal trivia disconnected from the problem; practitioners flag it as the canonical bad opener.
- **Stale signal presented as fresh**: a 9-month-old post reads as scraped; date every signal and let recency scoring demote it.
- **Over-researching low-value accounts**: Jeb Blount's warning, research past the 2-3 minute cap is procrastination - drop the account to a templated tier instead.
- **Obviously AI-generated pseudo-personalization**: templated phrasing around a merge field. The humanizer pass and swap test exist for this.
- **Creepy over-familiarity**: quoting deep personal detail or non-public data. Reference only what they made public or gave the business directly.
- **Padding to three**: two real angles plus one filler reads weaker than two real angles.
- **Signal dump**: ranked shortlist of 2-3, never an inventory of everything found.

## Compliance note

General practice, not legal advice - this skill asserts no legal conclusions; verify against primary sources with your own counsel.

- Honor opt-outs, do-not-contact requests, and suppression lists before any send; keep a working unsubscribe path on email.
- Reference only data the prospect made public or gave the business directly - never data they would be surprised you hold.
- Never use special-category or sensitive personal data as an angle (see Anti-fabrication rule).
- Regimes to check for your jurisdictions and channels: GDPR/ePrivacy (EU/UK), CAN-SPAM (US), CASL (Canada), CCPA/CPRA (California). Their consent and opt-out rules differ materially.

This list is unranked on purpose - which one binds is decided by where the prospect sits, not by which is cheapest to satisfy, so ordering them would be false precision.

## References

- `mbfinotti/sales-skills@sales-discovery-questions` - what to ask once an angle earns the meeting.
- [references/signal-taxonomy.md](references/signal-taxonomy.md) - B2B and B2C signal categories: sources, typical inferences, freshness windows, interpretation principles.
- [references/angle-examples.md](references/angle-examples.md) - filled good and bad angle examples in the output format.
- [references/effort-tiering-and-benchmarks.md](references/effort-tiering-and-benchmarks.md) - tier definitions, when templating wins, benchmark table with attributions.