Agent skill
signal-scanner
Search the web for companies showing buying signals matching the agency ICP.
Filed under Prospecting and list building.
From ekatasingh1107/b2b-gtm-skills · 99 skills · 2 · pushed 2026-04-11
What it does when it runs
Search the web for companies showing buying signals matching the agency ICP. Enforces 75/25 geo split and 20 gig + 5 company daily targets.
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-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- network
Install it
View source on GitHub ↗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/capabilities/signal-scanner" mkdir -p ~/.claude/skills/signal-scanner cp -R "/tmp/b2b-gtm-skills/skills/capabilities/signal-scanner/." ~/.claude/skills/signal-scanner/
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.
The skill
Source on GitHub ↗Reproduced in full from ekatasingh1107/b2b-gtm-skills/blob/eae8dd0bb98da1c8e84abd297066a87015dd860f/skills/capabilities/signal-scanner/SKILL.md, which is licensed MIT (repository). 1,534 words, 17 headings.
Signal Scanner
Searches multiple platforms for companies and individuals showing real-time buying signals that match the agency's ICP. Uses WebSearch to find leads across Reddit, Twitter/X, LinkedIn, job boards, funding news, Shopify Community, HackerNews, and gig platforms.
Prerequisites
agency.config.jsonat repo root withservices,icp, andscoringsections- WebSearch tool available
- Optional:
crm-writerskill for dedup against existing CRM leads
Phase 0: Intake
-
Read
agency.config.jsonfrom the project root. -
Extract:
services[].keywords-- all service keyword arraysicp.segments[]-- each segment's markets, industries, titles, descriptionicp.primary_keywords,icp.secondary_keywords,icp.intent_keywordsicp.negative_keywords-- to filter out self-promotersscoring.platform_weights-- to know which platforms to searchscoring.hiring_signals-- phrases that indicate active buying
CRITICAL: All search queries MUST be derived from
agency.config.jsonkeywords. When Plasho's positioning changes week-to-week, queries change automatically. NEVER hardcode search queries. -
Accept optional parameters:
platforms-- list of platforms to search (default: all from platform_weights)max_results-- max leads to return (default: 25)time_window-- how far back to search (default: "past week")focus_segment-- specific ICP segment to target (default: all)daily_targets-- read fromagency.config.json outreach.daily_targets(default: 20 gig + 5 company = 25 total)geo_split-- read fromagency.config.json outreach.geo_split(default: 75% international, 25% India)
Phase 1: Query Generation
Build search queries by combining service keywords with intent signals and platform-specific syntax.
Lead Type Targeting
Queries are split into two categories:
GIG LEAD QUERIES (target: 20 leads) Platforms: Freelancer, Upwork, PeoplePerHour, Guru, Fiverr Must show clear buying signal and budget.
COMPANY LEAD QUERIES (target: 5 leads) Platforms: LinkedIn, Reddit, Twitter/X, Funding News, Product Hunt, Shopify Community, Instagram Brands, Google Maps, Shopify Store Discovery Must show very strong signal + ICP fit.
Geo Split Enforcement
75% of queries target international markets (US, UK, AU, EU):
- Add geo modifiers: "United States", "UK", "Australia", "Europe"
- Filter by .com, .co.uk, .com.au domains where applicable
25% of queries target India:
- Add geo modifiers: "India", "Mumbai", "Delhi", "Bangalore"
- Include Indian platforms and directories
Query templates per platform:
Reddit:
site:reddit.com "{service_keyword}" "{intent_keyword}" after:{date}- Subreddits to target: r/shopify, r/ecommerce, r/smallbusiness, r/startups, r/Entrepreneur, r/DTC
- Example:
site:reddit.com "shopify developer" "need help" after:2024-01-01
Twitter/X:
site:twitter.com OR site:x.com "{service_keyword}" "{intent_keyword}"- Example:
site:x.com "looking for shopify expert" "hire"
LinkedIn:
site:linkedin.com/posts "{service_keyword}" "{intent_keyword}"site:linkedin.com/jobs "{service_keyword}"- Example:
site:linkedin.com/posts "shopify developer" "hiring"
Job Boards:
site:indeed.com OR site:glassdoor.com "{service_keyword}" "{market}"site:angel.co OR site:wellfound.com "{service_keyword}"
Funding News:
"{industry} startup" "raises" OR "funding" OR "seed round" OR "series A" {time_window}- Filter to companies in ICP industries
Shopify Community:
site:community.shopify.com "{intent_keyword}" "{service_keyword}"
HackerNews:
site:news.ycombinator.com "{service_keyword}" "{intent_keyword}"
Gig Platforms (Freelancer, Upwork, PeoplePerHour, Guru, Fiverr):
site:freelancer.com/projects "{service_keyword}"site:peopleperhour.com "{service_keyword}"
Upwork:
site:upwork.com/jobs "{service_keyword}"- Example:
site:upwork.com/jobs "shopify developer"
Twitter/X (Brand Discovery):
site:twitter.com OR site:x.com "{d2c_keyword}" "shopify" OR "ecommerce" OR "d2c"- Also:
site:x.com "{industry}" "just launched" OR "coming soon" OR "new store" - Focus on brand accounts, not agencies
Instagram Brands:
site:instagram.com "{d2c_keyword}" "shop" OR "store" OR "link in bio"- Target hashtags: #shopifystore, #d2cbrand, #ecommerce, #shopifyseller
- Extract: profile name, handle, website link from bio
Product Hunt:
site:producthunt.com "{d2c_keyword}" OR "ecommerce" OR "shopify"- Focus on recently launched D2C products
Google Maps / Business Directories:
site:google.com/maps "{industry}" "{market}"+ justdial.com (India), yelp.com (US/UK)- Extract: business name, phone, website
Shopify Store Discovery:
site:myshopify.com "{industry_keyword}"+site:builtwith.com "shopify" "{industry}"- Look for stores with basic themes (Dawn, Debut) indicating redesign need
Query generation rules:
- Generate queries to hit daily targets: 20 gig leads + 5 company leads.
- Prioritize platforms with higher
platform_weightsscores. - Include market/country filters for geo-targeted segments.
- Allocate queries based on daily targets. Gig platforms need more queries (20 leads vs 5).
- Enforce geo split: 75% of queries must target US/UK/AU/EU markets, 25% India.
Phase 2: Search Execution
Execute searches using WebSearch with rate limiting:
- Max 3 concurrent searches at any time.
- 2-second pause between batches of 3.
- Process results as they return; do not wait for all to complete.
For each search result, extract:
url-- the source URLtitle-- page title or post titlesnippet-- the text excerpt from the search resultplatform-- which platform (inferred from URL domain)posted_date-- if visible in the search result
Phase 3: Signal Validation
For each raw result, validate it is a genuine buying signal:
-
Negative keyword filter: Check title + snippet against
icp.negative_keywords. Discard if any match (these are self-promoters, not buyers). -
Relevance check: The result must contain at least one
primary_keywordOR onesecondary_keywordAND at least oneintent_keyword. If it has only keywords but no intent, mark as LOW confidence. -
Recency check: Prefer results from the last 7 days. Flag anything older than 30 days as STALE.
-
Duplicate check: Compare URLs against previously returned results in this session. Skip exact URL duplicates. Also skip if the same company/person appears from a different URL (same underlying signal).
-
Lead type classification: Classify each result as either "gig" or "company" based on the source platform. Gig platforms (Freelancer, Upwork, PPH, Guru, Fiverr) = gig lead. Everything else = company lead.
-
Geo classification: Determine the lead's geography. Classify as "international" (US/UK/AU/EU) or "india" based on content, URL, currency, or explicit location mentions.
Phase 4: Entity Extraction
For each validated signal, extract structured data:
{
"company": "Company name (if identifiable)",
"website": "Company website (if findable from context)",
"person": "Name of the person posting/mentioned",
"title": "Their job title (if available)",
"url": "Source URL where signal was found",
"platform": "Reddit | Twitter | LinkedIn | Freelancer | Upwork | etc.",
"signal_type": "hiring | funding | job_posting | community_question | gig_request | tech_migration | product_launch | brand_discovery | store_discovery",
"urgency": "HIGH | MEDIUM | LOW",
"reason": "1-line summary of why this is a signal",
"country": "Country (if determinable)",
"posted_date": "ISO date or relative",
"raw_snippet": "The relevant text excerpt",
"confidence": "HIGH | MEDIUM | LOW",
"lead_type": "gig | company",
"geo_bucket": "international | india",
"contact_surfaces": {
"has_email": true,
"has_linkedin": false,
"has_instagram": false,
"has_phone": false,
"has_website": true,
"channel_count": 2,
"discovery_notes": "Email from gig platform. Website from company field."
}
}
Contact surface defaults by platform:
| Platform | phone | website | |||
|---|---|---|---|---|---|
| Freelancer/Upwork/PPH/Guru/Fiverr | YES | NO | NO | NO | MAYBE |
| LinkedIn Posts/Jobs | MAYBE | YES | MAYBE | MAYBE | MAYBE/YES |
| NO | MAYBE | MAYBE | NO | MAYBE | |
| Twitter/X | NO | MAYBE | MAYBE | NO | MAYBE |
| Instagram Brands | NO | MAYBE | YES | NO | YES |
| Shopify Community | NO | MAYBE | MAYBE | NO | YES |
| Funding News | MAYBE | YES | MAYBE | MAYBE | YES |
| Product Hunt | MAYBE | YES | MAYBE | NO | YES |
| Google Maps | MAYBE | NO | MAYBE | YES | YES |
| Shopify Store Discovery | NO | MAYBE | MAYBE | NO | YES |
Use these defaults when extracting contact surfaces. Override with actual data when found in the signal content. channel_count = number of YES/MAYBE channels confirmed as available.
Urgency rules:
- HIGH: Explicit hiring/buying language + budget mentioned + recent (< 48h)
- MEDIUM: Intent keywords present + relevant service match + recent (< 7 days)
- LOW: Relevant topic but weak intent signal or older than 7 days
Phase 5: Dedup Against CRM
If crm-writer skill is available and CRM is configured:
- Read existing leads from the relevant CRM tab (e.g., "Hawk Leads", "Researched Leads").
- Compare by: company name (fuzzy), URL (exact), person name + company combo.
- Mark duplicates as
"is_duplicate": truebut still include them in output with a note.
Phase 6: Review
Present the results to the user, separated by lead type:
Found {N} signals across {M} platforms:
COMPANY LEADS ({count}/5 target):
1. [Platform] Company - "reason" (urgency: HIGH, confidence: HIGH, geo: US)
2. ...
GIG LEADS ({count}/20 target):
1. [Platform] "gig title" - "reason" (urgency: HIGH, budget: $X, geo: UK)
2. ...
GEO SPLIT: {X}% international, {Y}% India (target: 75/25)
Duplicates skipped: {count}
Rejected (self-promoters): {count}
Write directly to CRM (no approval gate).
Phase 7: Log to CRM
Use crm-writer to append new signals to the configured CRM tab. Write one row per signal with columns: Date, Platform, Company, Person, URL, Signal Type, Urgency, Reason, Country, Lead Type, Geo Bucket, Score.
Example Usage
Trigger phrases:
- "Scan for signals"
- "Find buying signals"
- "Run a signal scan"
- "Search for leads showing intent"
- "Find companies looking for Shopify help"
User: Scan for buying signals this week
Assistant: [reads config, generates queries across Reddit/LinkedIn/Freelancer/Upwork/etc., executes with rate limiting, validates and structures results, presents sorted by lead type with geo split]
User: Find signals on Reddit and Shopify Community only
Assistant: [same flow but limited to those 2 platforms]
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.
- signal-scanner by Othmane-Khadri · 55
- signal-scanner by edupegoretti · 0
- newsletter-signal-scanner by edupegoretti · 0
- personal-strategic-signal-intelligence by ericosiu · 3,483
- gh-issue-to-demand-signal by Varnan-Tech · 626
- signal-monitor by janskuba · 200
- buying-signal-amplification by louisblythe · 143
- niche-signal-discovery by getaero-io · 55
Need help setting it up?
This page tells you what signal-scanner 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.