Turn a plain-English outbound campaign request into a campaign plan a person approves in Outreach Hub: who to reach and why they would say yes, the source, channels, test size, and kill and scale rules, plus the search brief for prospecting-search. Use when someone asks to launch, size, test or plan an outbound campaign, in the hub or in Claude Code. Plans only: never pulls, enriches, spends or sends.
campaign-planner/SKILL.md11.0 KB147 lines
When asked which version of this skill is active, report metadata.version exactly.
What this skill does
request -> campaign plan (this skill) -> questions? (a person answers) -> campaign plan again -> search (prospecting-search) -> market count (the hub) -> a person approves
You are given a JSON object: request, the person's words, and answers, the questions you asked before and what the person answered (empty the first time). You return one plan as JSON matching schemas/campaign-plan.schema.json. Nothing else in the reply. When the plan has questions, the hub shows only those, and runs you again with the answers. When it has none, the hub has prospecting-search write the query from your search_brief, counts the market, and shows the whole plan for approval. Nothing is pulled, enriched, spent or sent until a person approves it, so never promise or imply that anything has happened.
Reading the request
- Intent.
"size"when the person only wants to know how many people exist ("just tell me how many", "size it", "don't pull yet"). Otherwise"test": a test batch is pulled once they approve. - Audience. One sentence naming who, in terms a search can use: role or title, the kind of company, size, geography. "Certified EOS Implementers who run their own practice", not "coaches".
- Name and slug. A short name for the audience ("EOS Implementers", "HVAC & Plumbing Operators"). The slug is the name in lowercase words joined by hyphens, ASCII only ("eos-implementers").
- Geography. Use what the request or an answer says, written as a person would ("US + Canada", "Texas"). Never assume one. If neither names one, ask.
- Channels.
email,callor both, as asked. If the request says nothing, ask, suggesting "Email and calls", and fill in both meanwhile. Calls depend on mobile numbers, which are found for fewer people than work emails; say so innoteswhen a campaign is calls only. - Test size. What the request asks for. If it says nothing, ask, suggesting 200 whatever the channels, and fill that in meanwhile. Never more than the market, which you do not know yet, so the hub caps it after counting.
- Source.
"auto"unless the request names Crustdata or Blitz. prospecting-search chooses when it is"auto". - Hypothesis. Why this audience would say yes to this offer, in one or two sentences. It is what the test proves or disproves, so make it falsifiable ("Implementers hold years of L10 notes across many client companies"), not a slogan.
- Who they are. Direct sellers or partners: see the section below. It goes in
search_brief.audience_kind. - Offer. The offer as the request states it. When the request names
data-partnership-copy(or "the data-partnership skill") but not the offer, the offer is the data partnership: AI labs pay for real operational datasets, and we broker the introduction and handle the export. For partners it is offered to their clients, through an introduction. Otherwise, if neither the request nor an answer states one, setofferto null and ask. Suggest the house offer for the kind of audience (below), never one of your own. - Rules. The house kill and scale rules below, unless the request names others. Copy any number the request gives exactly.
- Questions. Anything you would otherwise have to guess: a missing geography, an ambiguous audience ("1 man shows": a company of one, or anyone self-employed?), a missing offer, unstated channels or test size. At most six, each answerable in a line. Give each the answer you would have guessed as
suggestion, or null when you have no basis for one. Fill in the rest of the plan with those guesses meanwhile. Never ask which skill to use: the list below decides. An empty list means the plan is ready to size. - Size only. When the intent is
"size", ask only what changes the count: who and where. Channels, test size and the offer matter once a test is pulled, so fill them in and say so innotes. - Answers. Each answer settles its question: use it, and never ask it again. "Decide later" leaves that part open: the offer stays null, and a geography decided later means no location filter, which you say in
notes. Ask again only when an answer raises something new that would make the search wrong.
Direct sellers and partners
Sam's list notes (27 Sep 2026) split every list in two. Every plan says which, in search_brief.audience_kind.
direct_seller: the people work at companies that would sell their own internal data: Slack, Jira, GitHub, tickets, CRM. We contact an owner or executive of that company.partner: the people introduce many sellers. They are advisers, coaches, implementers, attorneys, brokers, lenders, fractional executives and the like. We ask them for introductions and never pitch them a data sale.
Decide from who would sell the data. If it is the company the person runs or works for, they are direct sellers. If it is the companies they serve, they are partners. "Owners of HVAC companies" are direct sellers. "EOS Implementers", "fractional CFOs" and "bankruptcy attorneys" are partners. When the request does not make it plain, ask: "Do they sell their own company's data, or introduce us to companies that do?" Fill in your guess meanwhile.
The house offer is the same for everyone, so suggest it when the offer is missing:
- Direct sellers: "Cash for data you already own, with no dilution and no debt."
- Partners: "An introduction: their clients get cash for data they already own, with no dilution and no debt."
House targeting rules for direct sellers
When audience_kind is direct_seller, write these into the search brief. prospecting-search turns them into exact filters and adds the regulated industries itself, so do not list those industries.
- Company.
companysays "30 to 750 employees, headquartered in the United States", plus the kind of company asked for. Sam's range is 20 to 750 with 30+ worked first. The test starts at 30, so say innotesthat it can widen to 20 later. - Industry. As the request gives it. If it names none, ask which, suggesting "Software and IT services". Sam's best fits, in order: software and IT services, agencies, architecture and engineering, consulting, staffing, media, construction, logistics, e-commerce.
- Never regulated. Legal, health care, pharma, banking, financial services, investing, VC and PE, insurance, accounting, education, government, defense, utilities, telecom and gambling are always left out, as are nonprofits, government agencies and schools.
- A request for one of these as a direct-seller list is a mistake to raise: ask whether these people are really partners.
- Titles. When the request names none,
rolesare, in Sam's order: Owner, Founder, CEO, President, then COO, CTO, then CFO, VP Finance, Controller.seniorityis "Owner or executive". - Not applied yet. Say these in
noteswhen they matter:- Sam wants two contacts per company, in that title order. The desk pulls people, not companies, so it can't hold a pull to two.
- Sam wants one record per company.
- Sam's name screen is for public-record names, which the desk doesn't import.
None of this applies to partners. They are often regulated themselves, and that is fine.
House kill and scale rules
Claude checks these every morning; a person makes the call.
| Rule | Value |
|---|---|
| Sends before email can be judged | 400 |
| Dials before calling can be judged | 150 |
| Kill: positive reply rate under | 0.5% (0.005) |
| Scale: positive reply rate over | 1.5% (0.015) |
| Kill: connect rate under | 5% (0.05) |
| Scale: connect rate over | 10% (0.1) |
| Kill: bounce rate over | 4% (0.04) |
| Scale: meetings from the test batch | 2 |
Rates are fractions in the JSON.
Skills the campaign runs on
List them in skills, so the hub can say when one is missing:
- always
prospecting-searchandcampaign-qa; cold-email-copywhen email is a channel. It writes the copy for any offer, the data partnership included, so a request that namesdata-partnership-copyor "the data-partnership skill" still getscold-email-copy;cold-call-scriptwhen calls are a channel.
Search brief
search_brief is what prospecting-search needs and nothing it does not: whether they are direct sellers or partners, the audience, titles or roles to include and exclude, seniority, company kind and size, industry, and geography, each as the request gives it. Keep the person's words; do not translate them into a provider's vocabulary. That is prospecting-search's job.
Writing
Plain English, sentence case, no em dashes. notes holds anything a reviewer should know that is not a question: a trade-off you made, a reason the test may be slow.
Example
Request: "Use Crustdata to find EOS implementers in the US and Canada. Tell me how many there are, then pull 200, enrich work email and mobile, write copy with the data-partnership skill and push to Smartlead and a HubSpot call list."
{
"intent": "test",
"name": "EOS Implementers",
"slug": "eos-implementers",
"audience": "Certified EOS Implementers who run their own practice",
"hypothesis": "Each implementer coaches a roster of owner-run companies in our size range, and owners act on their advice, so one implementer can introduce many sellers.",
"offer": "An introduction: AI labs pay their clients for real operational datasets, and we broker it and handle the export.",
"geo": "US + Canada",
"channels": ["email", "call"],
"test_size": 200,
"source": "crustdata",
"rules": {
"minSends": 400,
"minDials": 150,
"positiveRate": { "kill": 0.005, "scale": 0.015 },
"connectRate": { "kill": 0.05, "scale": 0.1 },
"maxBounceRate": 0.04,
"scaleMeetings": 2
},
"skills": ["prospecting-search", "cold-email-copy", "cold-call-script", "campaign-qa"],
"search_brief": {
"audience_kind": "partner",
"roles": ["EOS Implementer", "Certified EOS Implementer", "Professional EOS Implementer"],
"exclude_roles": ["Assistant", "Coordinator"],
"seniority": "Owner, founder or partner of their own practice",
"company": "Their own coaching or consulting practice, usually 1 to 12 people",
"industry": null,
"geo": "United States and Canada"
},
"questions": [],
"notes": "The request does not write out the offer, but it asks for the data-partnership skill, so the offer is the data partnership, offered to their clients. Implementers coach many owner-run companies, so they are partners: the copy asks them for introductions."
}