Buying Signal Monitor
The best time to reach a prospect is the moment they say out loud that they have the problem you solve. This skill watches the public X/Twitter and LinkedIn surface for intent — asking for a tool, venting about a vendor, posting a relevant job req — and returns a ranked warm-lead list with the proving post and a tailored outreach angle. Read-only: the operator sends from their own account.
Agent-native
Run it in Claude, ChatGPT custom MCP apps, OpenClaw, Hermes, Codex, Claude Code, Cursor, VS Code, or another MCP-capable client. No dedicated GUI flow and no separate LLM API key.
Backed by live public data
Every step is grounded in live public-data records UnifAPI returns, so the output cites what is actually ranking, posting, or being said — not a generic best-practice list.
Composable & open source
Skills cross-reference each other and live in a public, MIT-style repo. Read the full SKILL.md on GitHub, fork it, or run it as-is inside your agent.
Paste this into Codex or Claude Code
The prompt is intentionally editable. Replace the handles, market, budget, and campaign goal, then let the agent call UnifAPI MCP when it needs live public data.
Watch X and LinkedIn this week for people asking for a YouTube data API or complaining about scraping rate limits, and return a warm-lead list with the proving post and a one-line outreach angle for each.
The full skill, rendered from its SKILL.md
You are a social-selling researcher who catches public buying intent the moment it appears.
The best time to reach a prospect is the moment they say out loud that they have the problem you solve. People announce intent in public all the time — asking for a tool recommendation, venting about the vendor they're stuck with, or posting a job req that only exists because of a gap. This skill watches the public X/Twitter and LinkedIn surface for those moments and returns a ranked warm-lead list where every lead is anchored to the post that proves intent, plus a tailored outreach angle. Read-only: it finds the signal and preps the opener; the operator sends from their own account.
This is an enhanced skill: it reads live public data through UnifAPI.
Use UnifAPI for live evidence
A "warm lead" is only as good as the public post that proves it. Live search is what separates a verbatim, dated intent signal from a guess about who might be in-market. Use the unifapi skill to connect (OAuth MCP), then call:
- X/Twitter intent search —
x/tweets/search/recent— pull recent public posts matching the intent phrases for each signal type ("anyone recommend a…", "alternative to [competitor]", "migrating off…"); this is the raw demand stream. - Qualify the poster —
x/users/by/username/{username}— resolve each match's author to followers, bio, verified status, and created_at for role/company/reach context, so an off-ICP or throwaway account drops out before scoring. - LinkedIn intent posts —
linkedin/search/posts— find public posts from buyers and their teams that signal a project, reorg, or stated pain in the B2B surface X misses. - Hiring triggers —
linkedin/companies/{slug}/jobsandlinkedin/companies/{slug}/job-count— an open role that owns your category (or a backfill that reveals the gap) is a budgeted, dated buying signal; the count trend shows a function ramping. - Account fit —
linkedin/companies/{slug}— pull industry, headcount band, HQ, and specialties so a signal is weighted by how well the account matches the segment. - Corroborate the trigger —
news/search— funding, leadership, or expansion items that confirm an account is in motion and sharpen timing; for a full news-driven hook list on one account, hand toaccount-news-signals.
UnifAPI reads public data only — it reads LinkedIn's public surface via URL slug, never private or logged-in data, and never the operator's own X/LinkedIn accounts. Keep any billing metadata UnifAPI returns so the report can state actual record cost. The X route map lives in ../../unifapi/references/twitter-x.md.
Workflow
- Define the signal set — required. From what the operator sells, write the watch phrases for each signal type and name the target segment (industry, size, geography). (Read
.agents/product-marketing.md/.claude/product-marketing.mdfirst if it exists.) Don't run on a bare product name; without phrases and a segment, matches are noise. The full phrase library and classification rules live in references/signal-taxonomy.md. - Pull recent public activity. Run
x/tweets/search/recentper phrase (last ~14 days) andlinkedin/search/postsfor the same intent; for any named target accounts pulllinkedin/companies/{slug}/jobs+linkedin/companies/{slug}/job-count(hiring triggers) andnews/search(corroborating triggers). - Qualify each match. Resolve X authors with
x/users/by/username/{username}and pull account fit withlinkedin/companies/{slug}; discard anything off-segment or from a non-buyer (job-seeker, vendor, competitor employee) before it reaches scoring. - Classify by signal type using the taxonomy — active demand, vendor switch, hiring trigger, expansion/funding, or pain vent.
- Score warmth with the rubric below. Drop anything stale or off-ICP; keep and rank the rest.
- Draft the angle. For each kept lead, write a one-line outreach angle that quotes or references the proving post, so the opener reads as a relevant reply rather than a cold pitch.
Lead-scoring rubric
Warmth = signal strength × fit × recency. Score each factor, multiply, then band. See references/signal-taxonomy.md for the per-signal-type strength anchors.
| Factor | 3 | 2 | 1 |
|---|---|---|---|
| Signal strength | Explicit ask for a tool like yours, or "leaving [competitor]" | Naming the pain you solve, or hiring the role that owns it | Adjacent topic interest; pain implied, not stated |
| Fit (ICP) | Segment, size, and geo all match | Two of three match | Loosely adjacent |
| Recency | ≤ 3 days | 4–14 days | 15–30 days |
- Multiply the three (1–27). Hot ≥ 18, Warm 9–17, Watch < 9. Drop anything > 30 days old or below segment regardless of score.
- A confirmed signal (verbatim ask) outranks an inferred one (hiring/topic) at the same product score — never let an inferred signal sit in Hot.
- Tie-break by author reach and decision authority (title seniority where public), then by whether a corroborating second signal exists (e.g. a job post from
linkedin/companies/{slug}/jobsplus a complaint post, or anews/searchfunding item).
Output: ranked warm-lead list
A ranked warm-lead table, then per-lead detail. Lead with the table:
# Warm Leads — [segment / phrases] (generated YYYY-MM-DD, window: last 14d)
| Rank | Name / handle | Company | Role (public?) | Signal type | Strength×Fit×Recency | Warmth |
| ---- | ------------- | ------- | -------------- | -------------- | -------------------- | ------ |
| 1 | @jdoe | Acme | VP Eng (conf.) | vendor switch | 3×3×3 = 27 | Hot |
| 2 | @rkim | Beta Co | (inferred) | hiring trigger | 2×2×3 = 12 | Warm |
Then for each lead:
- Proving post — verbatim quote or link + date that demonstrates intent.
- Outreach angle — one line, tied to that post, that reads as a relevant reply.
- Confidence flag —
confirmed(role/company/intent all public) orinferred(any guessed); inferred leads need human verification before outreach.
Close with record cost (UnifAPI billing metadata or best estimate) and the watch phrases used, so the run is re-runnable.
Worked example
Watch phrase "alternative to Calendly" surfaces a 2-day-old X post via x/tweets/search/recent: "anyone got a Calendly alternative that does round-robin without the enterprise upsell?" x/users/by/username/{username} shows bio "Head of RevOps @Acme," 4k followers. Operator sells a scheduling tool with round-robin on the mid tier. Score: strength 3 (explicit ask + competitor named), fit 3 (RevOps at an ICP-size SaaS), recency 3 (2 days) → 27, Hot, confirmed. Angle: "Saw your note on round-robin without the enterprise jump — that's exactly the tier line we drew; happy to show how it's set up."
Guardrails
- Read-only research. It surfaces public signals and drafts openers; it never sends connection requests, DMs, replies, or any message — the operator sends from their own accounts.
- Public data only. Reads LinkedIn's public surface via URL slug, never private, logged-in, or connection-gated data; never scrapes behind auth and never touches the operator's own accounts.
- Confirmed vs inferred: intent inferred from a public post is a hypothesis, not a confirmed need. Quote the source verbatim, cite date and link, and flag inferred (vs. explicit) signals so they are verified before any outreach.
- A public post is not consent to be contacted. The operator owns compliance with each platform's rules and applicable outreach law.
- Dated snapshots: reaction counts and follower numbers vary by session and region — treat reach figures as dated, directional estimates, not precise audience sizing. The watch phrases make the run re-runnable.
Related Skills
- linkedin-account-research (Lead Company Research Agent): build the full account brief once a signal names a worthwhile account.
- account-news-signals (Lead Company Research Agent): turn news/funding/leadership events into timely hooks for a flagged account.
- unifapi: the shared data skill — connect MCP and discover the X/LinkedIn/news operations above.
Source: buying-signal-monitor/SKILL.md on GitHub — open a PR there to improve it.
The live APIs this skill calls
Every operation the skill names is one of these UnifAPI platforms — still visible and callable for product code, debugging, and custom agent flows.
- Ranked warm-lead list: name/handle, company, role, signal type, warmth
- The proving post (quote or link + date) for each lead
- A tailored one-line outreach angle per lead
- Flags on leads needing human verification before outreach