All skills

Community radar

Monitors public community or social mentions of the brand, competitors, or relevant pain language. Classifies sentiment and drafts short, human replies for the right responder.

SKILL.md
name:
community-radar
description:
Monitors public community or social mentions of the brand, competitors, or relevant pain language. Classifies sentiment and drafts short, human replies for the right responder.

Instructions

Setup state. Not yet configured for this org. Load the Setup sub-page and walk the user through wiring the community-radar trigger (SCHEDULE + Apify search actors across LinkedIn / X / Reddit / Hacker News, or WEBHOOK from a social listening tool the user already pays for) with the org's brand-and-pain-language keyword list, the platforms to monitor, and the follow-up sequence before running this play. (After setup is performed, rewrite this paragraph via swan-update-skill to describe the current state — trigger type chosen, keywords / brand terms / pain-language phrases monitored, platforms covered, sequence wired, success metric, and last-refreshed date — so future runs see the current configuration without re-checking.)

When this fires

A SCHEDULE trigger running an Apify search actor (LinkedIn search, X / Twitter search, Reddit search, Hacker News scrape) surfaces new mentions of the configured keywords. Or a WEBHOOK from a social listening service the user already pays for (Brand24, Mention, Hootsuite, Triggify, custom Reddit / X monitoring) pushes mentions in. Payload includes: platform, author, mention text, post URL, engagement metrics on the parent post.

Note: LINKEDIN_ENGAGEMENT is not the right trigger here — that one follows specific LinkedIn profiles. For keyword-driven brand-mention sweeps across LinkedIn, use SCHEDULE + an Apify LinkedIn-search actor.

The window is short on public social — 24-48 hours feels reasonable; > 1 week and the reply looks bot-driven.

Step 1 — Classify the mention

Class Pattern Right move
Direct praise "We love [your product]" Like, optional thank-you reply. Resharable.
Customer Q / mild frustration "How do I do X in [your product]?" Helpful reply from support handle. Resolve the question.
Public complaint "[Your product] is broken / disappointing" Acknowledge, DM to take offline, don't argue publicly.
Comparison shopping "Looking at [you] vs [competitor]" Soft entry; offer to help with the eval. Don't trash competitor.
Competitor switch signal "Just switched off [competitor]" + same thread mentions you High-value lead; warm DM.
Pain mention (your wedge, no brand) "Why can't I find a tool for X" Soft helpful reply. Don't pitch — offer perspective.
Generic noise / spam / off-topic Ignore.

Step 2 — Identify the author

swan-fetch-scraped-url on the author's profile (LinkedIn, Twitter bio, Reddit profile). Capture: role, company, follower count, post pattern. Don't enrich if it's clearly noise.

For LinkedIn: swan-enrich-contact if they look ICP-fit. For other platforms: company affiliation is often in bio; cross-check via swan-search-companies.

Step 3 — ICP and CRM context

For mentions from ICP-fit authors:

  • swan-search-companies + (if new) swan-enrich-company
  • hubspot-search-objects for existing relationship

For non-ICP: still respond if it's a complaint or Q (support obligation), but don't pursue.

Step 4 — Choose the right responder

Public replies should come from the right account:

Class Right responder
Praise Founder / CEO (high-status reply)
Customer Q Support handle / CSM
Complaint Support handle, then CSM via DM
Comparison shopping AE, via DM not public comment
Switch signal AE, via DM, fast
Pain mention Founder / thought leader, public comment

If multiple senders are connected, pick the one whose voice fits the moment. Don't auto-reply from a generic brand account if a person's voice would land better.

Step 5 — Draft the reply

Templates:

Public complaint:

"Sorry to hear this. DMing now — want to get this sorted today." (Then DM with substance and a fix.)

Comparison shopping (DM):

"Saw your post — happy to help with the eval, no pitch. What matters most for you in [category]? I can be straight about where we win and where we don't."

Pain mention (no brand):

"Same — this is one of those problems that's worse than people say. Our take: [one-line perspective]. Happy to share more if useful."

Switch signal (DM):

"Just saw your post about leaving [competitor] — congrats on the cleanup. If [your product] is on the eval list, glad to give you the no-pitch tour."

Critical: short, human, no marketing. Public social rewards low-key over polished.

Step 6 — Channel: public reply vs DM

Default to DM for anything sales-adjacent. Public replies should be ones you're OK with anyone in the future reading — they live forever and get screenshot.

Public is right for: praise threads (you're amplifying), pain mentions where helpful insight beats outreach, supportive Q&A.

Step 7 — Route or send

For LOW-stakes (praise, generic Q): the system can auto-reply with the right account. Surface for approval if voice matters.

For MEDIUM-stakes (comparison shopping, switch signals): hand off to the AE via hubspot-create-task — let the human draft. Sales DMs need human nuance.

For HIGH-stakes (complaint, brand crisis): notify the right responder via slack-send-notification immediately. Don't let a slow CRM task be the bottleneck.

Step 8 — Log

swan-update-company to log the mention. If a complaint, log both the issue and the resolution path. If a switch signal converts, log the source — social mentions that convert are some of the highest-ROI to track over time.

Rules

  • MUST classify the mention before drafting. The reply for praise and the reply for complaint are different jobs.
  • MUST keep public replies human and low-key. Polished marketing in a Reddit thread is brand suicide.
  • MUST DM-not-public for anything sales-adjacent.
  • NEVER argue publicly with a complaint. Acknowledge, take it offline, fix it.
  • NEVER name a competitor pejoratively in a public reply. Even if the OP did.
  • NEVER auto-reply to high-stakes mentions. Humans only.
  • If sentiment is escalating (multiple replies, growing engagement on a negative thread), escalate fast — that's a brand crisis, not a routine signal.
  • If a tool result is truncated, read from files/tool-outputs/<toolName>_<callId>.json in swan-execute-code.

Tighten over time

After 10-20 fires, read the responder log via swan-search-sequences and review which mention classes actually converted (switch signals and comparison shopping usually outperform pain mentions). Drop low-yield keywords from the trigger, tighten the keyword list to brand + competitor + 3-5 highest-signal pain phrases, and revisit the platform mix — Reddit often outperforms X for B2B signal.

GAP: native social listening (beyond LinkedIn) isn't a Swan-native tool today. Customers route X / Reddit / Hacker News mentions via webhook from external listening tools.