Systems Lab

Agent skill

signal-to-lead

Full pipeline from signal detection to scored lead in CRM.

dormantSelf-containedActs undeclared658 words

Filed under Prospecting and list building.

From ekatasingh1107/b2b-gtm-skills · 99 skills · 2 · pushed 2026-04-11

What it does when it runs

Full pipeline from signal detection to scored lead in CRM. Chains signal-scanner, lead-scorer, and crm-writer into one flow.

Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
network

Ask about signal-to-lead

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/ekatasingh1107/b2b-gtm-skills.git /tmp/b2b-gtm-skills
git -C /tmp/b2b-gtm-skills sparse-checkout set "skills/composites/signal-to-lead"
mkdir -p ~/.claude/skills/signal-to-lead
cp -R "/tmp/b2b-gtm-skills/skills/composites/signal-to-lead/." ~/.claude/skills/signal-to-lead/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from ekatasingh1107/b2b-gtm-skills/blob/eae8dd0bb98da1c8e84abd297066a87015dd860f/skills/composites/signal-to-lead/SKILL.md, which is licensed MIT (repository). 658 words, 11 headings.

Signal to Lead

Detects buying signals across the web and converts them into scored, deduplicated leads in your CRM. This is the primary lead generation composite.

Prerequisites

  • agency.config.json populated (ICP, services, scoring, CRM)
  • WebSearch tool available

Capabilities Used

  1. signal-scanner -- search for buying signals
  2. lead-scorer -- score and classify leads
  3. crm-writer -- write to CRM

Phase 0: Intake

Read agency.config.json and determine:

  • Which ICP segments to scan (default: all)
  • Which markets (from segment config)
  • Daily target: how many new leads to find (default: 20 companies)

Optional user overrides:

  • "Focus on [segment name] today"
  • "Only scan [platform]"
  • "Find leads in [market]"

Phase 1: Signal Detection

Execute signal-scanner with agency config:

For each ICP segment, generate search queries from services[].keywords + icp.segments[].markets:

Example queries for a Shopify agency targeting India D2C:

  • "looking for shopify developer India"
  • "need shopify agency d2c brand"
  • "shopify store redesign help"
  • "hiring shopify expert ecommerce"

Search platforms:

  1. Reddit -- r/shopify, r/ecommerce, r/smallbusiness, r/Entrepreneur, r/DTC
  2. Twitter/X -- keyword searches for service + intent keywords
  3. LinkedIn -- job postings, posts mentioning services
  4. Job boards -- Indeed, Wellfound for relevant hiring signals
  5. Funding news -- Crunchbase, TechCrunch for recently funded companies
  6. Freelance platforms -- Upwork, Freelancer for active gigs (if platform-scraper available)
  7. Community forums -- Shopify Community, HackerNews, IndieHackers

Run max 3 searches concurrently. Pause 2 seconds between batches to avoid rate limits.

For each signal found, capture:

{
  "company": "company name if visible",
  "website": "their website if mentioned",
  "person": "who posted/is hiring",
  "url": "link to the signal source",
  "platform": "where found",
  "signal_type": "funding|hiring|community_post|gig_listing|social_post|news",
  "signal_date": "when the signal appeared",
  "description": "what they're looking for",
  "budget": "if mentioned",
  "market": "country/region",
  "contact": "contact info if available",
  "contact_surfaces": {
    "has_email": false,
    "has_linkedin": true,
    "has_instagram": false,
    "has_phone": false,
    "has_website": true,
    "channel_count": 2,
    "discovery_notes": "LinkedIn from post URL. Website from company profile."
  }
}

Phase 2: Score & Classify

For each signal, execute lead-scorer:

  1. Apply platform base score from scoring.platform_weights
  2. Check keyword matches against icp.primary_keywords, icp.secondary_keywords, icp.intent_keywords
  3. Filter out matches against icp.negative_keywords (score = 0)
  4. Apply hiring signal bonus (+20 if detected)
  5. Apply budget tier bonus from scoring.budget_tiers
  6. Apply recency bonus from scoring.recency_bonuses
  7. Apply market boost from scoring.market_boosts
  8. Apply contact surface bonus from scoring.contact_surface_bonus (channels_3_plus: +15, channels_2: +5)

Classify:

  • HOT: score >= scoring.thresholds.hot (default 60)
  • WARM: score >= scoring.thresholds.warm (default 35)
  • COOL: score < warm threshold

Phase 3: Deduplicate

Before writing to CRM:

  1. Read existing leads from CRM pipeline tab
  2. Match by URL (exact) or company name + website (fuzzy)
  3. Remove duplicates
  4. Count: N new leads after dedup

Phase 4: Review

Present results:

SIGNAL SCAN RESULTS
---
Total signals found: N
After dedup: M new leads
Breakdown: X HOT, Y WARM, Z COOL

TOP HOT LEADS:
1. [Company] -- [Signal] -- Score: [N] -- Channels: EMAIL, LINKEDIN, WEBSITE (3) -- [URL]
2. ...
3. ...

WARM LEADS: [count]
COOL LEADS (not written to CRM): [count]

Only HOT and WARM leads are written to CRM. COOL leads are logged but not actioned.

Phase 5: Write to CRM

Execute crm-writer to append HOT and WARM leads:

Tab: crm.tabs.pipeline (or crm.tabs.hawk_leads for platform-scraped leads)

Columns:

  • Date, Company, Platform, URL, Budget, Description, Urgency, Score, Market, Contact, Status, Signal_Type, Signal_Date, Contact_Surfaces, Channel_Count

Set initial status: "NEW"

Phase 6: Summary

DAILY SIGNAL-TO-LEAD SUMMARY
---
Platforms scanned: [list]
Total signals: N
New leads added to CRM: M (X HOT, Y WARM)
Duplicates filtered: D
Next step: Run /lead-enrichment-pipeline to research and enrich these leads

Example Usage

Trigger phrases:

  • "Find new leads today"
  • "Run the signal scanner"
  • "Scan for buying signals"
  • "Find Shopify leads on Reddit"
  • "Run signal-to-lead for India D2C segment"

Daily automation: Run at 9 AM as part of /morning-pipeline

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what signal-to-lead does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.