icp-onboarding
Skill759 starsChanged 28 days agoMITView on GitHub
Conversational intake for cold email campaigns. Interviews the user about their business, ICP (Ideal Customer Profile), offer, lead magnets, and hard vs soft filters. Outputs a structured `client-profile.yaml` that every other skill in the repo reads from. Use at the very start of a new campaign or when onboarding a new business. Triggers on "onboard me", "set up my ICP", "new client", "new business intake", "help me define my ICP".
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 6 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 30
Before any interview questions, ask:
- Distinctive: line 34
If the user provides a URL:
- Distinctive: line 52
If the user has no website:
- Distinctive: line 57
Ask these questions in order.
- Distinctive: line 147
Don't accept "SMBs" as an answer: Ask for headcount numbers.
- Distinctive: line 151
Triggers are NEVER hard filters: If you make "must have raised in last 6 months" a hard filter, your list shrinks 20x and most of those …
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ICP Onboarding
Conversational intake. The user arrives with a business; this skill produces a client-profile.yaml every other skill in the repo consumes. Without it, downstream skills guess at targeting and write generic copy.
Why this exists
Most cold email fails because the sender didn't define the ICP tightly enough. "B2B SaaS founders" is not an ICP. "VP of RevOps at 50-500 person B2B SaaS companies in the US that raised Series B in the last 12 months" is an ICP — you can put it into Prospeo and get a list.
This skill forces that precision up front. It also separates hard filters (must match) from soft preferences (nice-to-have), because the #1 mistake beginners make is treating every ICP criterion as required, ending up with a list of 200 leads instead of 5,000.
Inputs
Either:
- Website URL of the user's business (skill will scrape + infer a lot)
- Plain description ("I sell X to Y") if no website
Outputs
A single file: ~/cold-email-ai-skills/profiles/<business-slug>/client-profile.yaml
Steps
1. Ask for the website URL FIRST (required)
Before any interview questions, ask:
"What's the website of the business you're running cold email for?"
If the user provides a URL:
npx tsx scripts/scrape-website.ts --url=https://example.com --out=/tmp/scrape.jsonThen READ the scraped JSON and immediately produce a one-paragraph summary for the user:
"Based on your website, here's what I understand about your business:
<Company name>sells <product/service in one sentence> to <who they sell to, based on case studies + homepage>. Their core value proposition appears to be<summary>. Notable social proof: <logos, metrics, awards>. Pricing signal: <free tier / self-serve / enterprise / unclear>.Proposed ICP starting point: <titles + industries + size inferred from case studies>.
Does that sound right? Any corrections before I start the interview?"
This summary is NOT the final ICP — it's the anchor. The user's corrections here save 5+ minutes in the interview.
If the user has no website:
"OK, no website. Give me a two-sentence description of what you sell and to whom. I'll use that as the anchor for the rest of the interview."
2. Interview the user (using scraped context)
Ask these questions in order. Do NOT batch them — wait for each answer before asking the next. Keep answers short. Use the scraped content to PRE-FILL proposed answers where possible, and ask the user to confirm or correct.
- What do you sell in one sentence? Pre-fill: "Based on your site, you sell
<X>. Confirm or correct?" - Who is your single best customer — name them. (Helps anchor everything else. If they hesitate, ask for the last 3 customers by revenue or fit. If case studies on the website name customers, propose those.)
- What job title buys this? (Push back if they say "CEO" for anything >50 employees. Probably not true.)
- Headcount range — hard minimum and hard maximum? (E.g. 20-500. Not "enterprise" — actual numbers.)
- Industries — in or out? (Use the Prospeo industry taxonomy: see
references/prospeo-industries.md. Mark IN or OUT — no fuzzy.) - Geography — countries only, or specific states/regions?
- Any triggers that matter? (Recent fundraise, new hires in a role, tech on website, recent product launch, specific Google Ads spend.)
- Any disqualifiers? (Competitors, existing customers, partners — domains to exclude.)
- Your offer / hook — what are you asking them to do? (E.g. "book a 15-min call", "try our free audit", "reply with a Y and I'll send details".)
- Lead magnet — what can you legally give away for free? (If they don't have one, invoke
/lead-magnet-brainstormskill.) - Tone — casual or formal? Peer-to-peer or vendor-to-buyer?
- Banned words / legal constraints (any industries that restrict language, e.g. healthcare, finance, crypto).
3. Translate into Prospeo filters
Take the answers and draft Prospeo-compatible filters:
- Job titles → exact titles + common synonyms (VP of Sales = VP Sales = Head of Sales = SVP Sales)
- Industries → match the 256 valid Prospeo industry names. See
references/prospeo-industries.md. - Headcount → map to Prospeo buckets (1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+)
- Geography → country codes or state lists
4. Split hard vs soft
For each criterion, explicitly ask: "If you find someone who matches everything except this, do you reach out anyway — yes or no?"
- YES → soft preference (log it, but don't filter on it)
- NO → hard filter (must match)
Common answers:
- Job title: usually HARD
- Industry: usually HARD (if targeting a vertical)
- Headcount: usually SOFT on the edges (one person above the cap is often fine)
- Trigger (funded, hired, etc): ALMOST ALWAYS SOFT — it's a personalization signal, not a filter
5. Write client-profile.yaml
Use this schema:
business:
name: <business name>
website: <url>
one_liner: <what they sell>
tone: <casual|formal|peer-to-peer>
offer:
primary_cta: <what you ask the lead to do>
lead_magnet: <free thing you can give>
value_prop: <why they should care, one sentence>
icp_hard_filters:
job_titles:
- <exact title>
- <synonym>
industries_in:
- <prospeo industry>
industries_out:
- <prospeo industry>
headcount_min: <int>
headcount_max: <int>
countries:
- <country code>
states: [] # US only, optional
excluded_domains:
- <competitor.com>
- <existing-customer.com>
icp_soft_preferences:
triggers:
- recent_fundraise
- new_hire_in_role
- tech_installed: <tech>
personas_to_prioritize:
- <e.g. "Director-level over VP-level at <200 headcount">
legal:
banned_words: []
regulated_industry: false
created_at: <YYYY-MM-DD>6. Save + confirm
Save to ~/cold-email-ai-skills/profiles/<business-slug>/client-profile.yaml.
Print the yaml back to the user and ask "look right?" before ending the conversation.
Common gotchas
- Don't accept "SMBs" as an answer. Ask for headcount numbers.
- "Our ICP is anyone who needs X" = they don't have an ICP. Push for a named-customer example.
- Titles: always include synonyms. "VP of Talent" without "VP of People", "Head of Talent", "Chief People Officer" will miss 60% of matches.
- Prospeo industries: exact match required. "Manufacturing" is not a valid Prospeo industry. "General Manufacturing" is. See
references/prospeo-industries.md. - Triggers are NEVER hard filters. If you make "must have raised in last 6 months" a hard filter, your list shrinks 20x and most of those companies are already getting pitched by everyone.
What to do next
With client-profile.yaml in hand, the user's next skill is /cold-email-starter-kit (manual first campaign) or /auto-research-public (automated daily campaigns).
Files
references/prospeo-industries.md— full list of 256 valid Prospeo industry namesreferences/example-profiles/— 3 example client-profile.yaml files (B2B SaaS, local SMB, agency)scripts/scrape-website.ts— minimal website scraper (homepage + linked pages)
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- automatewithuday/GTM-Skills★ 191% same
Wrote their own version · 1
- automatewithuday/linkedin-competitor-icp-scorer★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository51 other files it gives its agents.
- auto-research-publicSkill
- blitz-list-builderSkill
- campaign-copywritingSkill
- campaign-strategySkill
- cold-email-kickoffSkill
- cold-email-starter-kitSkill
- cold-email-weekly-rhythmSkill
- competitor-engagersSkill
- deliverability-incident-responseSkill
- deliverability-test-publicSkill
- disco-likeSkill
- email-deliverability-auditSkill
- experiment-designSkill
- google-maps-list-builderSkill
- icp-prompt-builderSkill
- inbox-lifecycle-managerSkill
- lead-magnet-brainstormSkill
- list-builderSkill
- list-expanderSkill
- list-quality-scorecardSkill
- perfect-company-listSkill
- personalization-subagent-patternSkill
- clay-playbooksSkill
- playbook-ad-librarySkill
- playbook-ai-specificitySkill
- playbook-case-study-pageSkill
- playbook-company-name-cleaningSkill
- playbook-creative-ideasSkill
- playbook-first-name-cleaningSkill
- playbook-fundraisingSkill
- playbook-google-site-searchSkill
- playbook-hiring-surgeSkill
- playbook-job-posting-languageSkill
- playbook-linkedin-engagementSkill
- playbook-lookalikesSkill
- playbook-name-to-other-prospectsSkill
- playbook-new-in-roleSkill
- playbook-pricing-pageSkill
- playbook-social-link-findingSkill
- playbook-social-postsSkill
- playbook-tech-on-websiteSkill
- playbook-warm-introsSkill
- positive-reply-scoringSkill
- prospeo-full-exportSkill
- prospeo-search-apiSkill
- smartlead-apiSkill
- smartlead-campaign-upload-publicSkill
- smartlead-inbox-managerSkill
- smartlead-spintaxSkill
- spam-word-checkerSkill
- zapmail-domain-setup-publicSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

