---
name: "buying_signal_prospecting"
description: "Prospect from buying signals instead of static lists: read hiring posts, funding and leadership changes, tech stack shifts, and first party behavior, say what each signal actually means and when its window closes, score and stack signals against fit, and reference a signal in outreach without sounding like a stalker. Use when someone asks who to reach out to now, wants signal based or trigger based prospecting, needs to time outreach to a company event, or wants to turn intent data into a worked account list. For researching one named account in depth use account_planning, for scoring inbound leads use lead_scoring, for the message itself use cold_email_drafting."
---

# Buying Signal Prospecting

## Purpose

A static list answers who could ever buy. A signal answers who has a reason to care this month. This skill turns public company changes and your own first party behavior data into a short, timed work list: what happened, what it plausibly means, how long the window stays open, who owns the problem, and how to open a conversation that names the event without making the reader feel watched.

It covers nine signal families in one place: funding, leadership changes, expansion, earnings priorities, first hires, hiring surges, tech stack changes, champion moves, and first party research behavior. The full catalog with meaning, false readings, and verification steps per signal is in `references/signal-catalog.md`. Six worked outreach examples, each with a version that fails and why, are in `references/outreach-examples.md`.

Two limits shape everything below. A signal is a timing layer, not a targeting strategy: fit decides which companies you would ever sell to, signals only decide the order and the moment. And a signal is evidence of a change, not evidence of intent to buy your product. Every reading below is a hypothesis you verify before you act on it.

## Workflow

### 1. Set the fit boundary before you watch for anything

Write down the accounts in scope: segment, size band, region, and any hard disqualifier. Signals collected outside that boundary are noise you paid attention to. When a hot signal lands on a company that fails fit, the answer is no, not a bigger score. The scorer enforces this: fit is a gate, never points.

### 2. Collect signals with evidence or do not collect them

For each signal record six fields: company, signal type, date it happened, source URL, the exact public fact, and the contact role it points to. Acceptable sources are things the company published itself (press releases, its own careers page, filed reports, executive announcements), public records behind an announcement (for a US Regulation D raise, the Form D notice on EDGAR, filed within 15 days after the first sale), a public post by an identifiable person at the company, and your own first party logs.

Reject at intake: aggregator job posts you have not checked against the company's own careers page, technographic detections with a single trace, intent topics with no named event behind them, and anything sourced from a person's private life. No source URL means no signal. The scorer flags a row with a missing source or a bad date as missing evidence and caps it below the act band.

### 3. Read the signal before you score it

For each signal answer three questions from `references/signal-catalog.md`:

- What changed, in one plain sentence a stranger could verify from the source?
- What does it usually mean for the function you sell to, and what does it not mean?
- What second, independent signal would confirm the reading?

Independent matters. A press release and three articles repeating it are one signal. A press release plus open roles in the function the money is meant to build are two.

### 4. Score, stack, and band the list

Put the signals in a CSV and run the scorer:

```bash
python3 ~/workspace/skills/buying-signal-prospecting/bin/signal_score.py \
  --signals signals.csv --today 2026-10-13 --out scored.csv
```

A worked input file ships at `references/signals-example.csv`. It covers an ACT stack, a no fit rejection, a half weight signal past its window, and an expired one.

The scorer adds points for distinct signal types at one company, pays full points inside a signal's working window, half points up to twice the window, and zero after it. Bands: ACT at 50 or more with fit and evidence, INVESTIGATE at 30 to 49, NURTURE at 10 to 29, EXPIRED below 10 because the windows closed, REJECT_NO_FIT when fit fails.

Work the output in band order. ACT accounts get outreach this week while the window is open. INVESTIGATE accounts get the verification step from the catalog, not a message. NURTURE accounts go on a watch list and get re-scored when a new signal lands. EXPIRED accounts go back to the plain list with no special timing claim.

The point values and windows in the scorer are starting heuristics, not findings. After each cycle, compare reply and meeting rates per signal type inside and outside its window, and adjust the catalog. A window your own data contradicts is wrong no matter where you read it.

### 5. Pick the contact the signal points to, not the biggest title

Each signal names its own buyer. A funding round at seed stage points to a founder, at later stages to the head of the function the money builds. A first hire in a function points to the hiring manager who owns that hire, not to the future hire. A leadership change points to the new leader, after their first weeks, not during welcome week. A hiring surge points to the head of the surging function. Write the role next to the signal before anyone drafts a message.

### 6. Reference the signal with the public fact rule

An outreach opener may use a signal only if all four checks pass:

- The fact was published by the company or the person in a business context, and you could link the reader to it.
- The fact is about their work, never about their private life, family, location habits, health, or personal posts.
- You state the fact once, plainly, and move straight to the business problem it plausibly creates. No stacking three signals into one opener as proof you did your homework.
- You never describe covert tracking. No exact page visits, times, or scores. No "our system flagged you", no "I noticed you have been researching". First party behavior earns you a relevant, useful message to that account, phrased as a general offer, never a report on their browsing. Example 6 in `references/outreach-examples.md` shows both versions side by side.

Shape of a good opener: public fact, plausible problem, one short proof or a genuine question, low pressure close with a clean exit. Shape of a stalker opener: how you found them, what else you know about them, a deadline you invented.

### 7. Stop when the window or the welcome closes

One first message and one follow up that adds something new, then stop and return the account to nurture. Signals decay and so does goodwill. A reply of any kind moves the account out of this workflow and into normal reply handling. An opt out ends all contact, full stop, and gets recorded in suppression before any other list is touched.

## Output Contract

Deliver, for each run:

- A scored account table (CSV from the scorer) with company, score, band, signal types, freshest signal date, and contact role.
- For every ACT account, a one paragraph brief: the public fact with its source link, what it plausibly means, what it does not mean, the confirming second signal if one exists, the named contact role, and the window end date.
- For every INVESTIGATE account, the single verification step that would move it up or kill it.
- Draft openers for ACT accounts that pass the public fact rule, each traceable to one signal only.
- A short calibration note when a cycle closes: which signal types produced replies and meetings inside their windows, and any window or point change you are making as a result.

## Operating Rules

- Fit gates, signals time. Never let stacked signals promote a company you would not sell to on a quiet day.
- One signal, weak on its own, earns investigation, not outreach. The exceptions are the two that speak for themselves: an explicit request, and a public post asking for alternatives.
- Date every signal and work from the date it happened, not the date a vendor surfaced it. Third party intent feeds lag and resurface old events as new.
- Never invent a number to make outreach sound informed: no response rates, no replacement statistics, no headcount claims you did not count yourself on a dated check.
- Keep personal data handling inside the rules that apply where the recipient is. In the US, the FTC's CAN-SPAM guide requires accurate headers, no deceptive subject lines, identification as an ad, a valid physical postal address, a clear opt out, and honoring opt outs within 10 business days, with no exception for business to business mail. In the UK and EU, business contact details are still personal data: the ICO's legitimate interests route requires a documented three part assessment (purpose, necessity, balancing) done before you process. Canada's CASL generally requires consent first. When in doubt, apply the strictest rule in the recipient's jurisdiction and get a real legal view for a program, not a campaign.
- Respect platform terms and a company's stated contact preferences. A public profile is a source for a business fact, not permission for automated scraping or bulk messaging.
- Signals about a person come from your own records and public business facts only: a past champion's new role is fair game because the relationship is yours. Their private posts, family, and life events never are.
- If a signal turns out to be wrong (the role was filled months ago, the raise was last year's news recirculated), log it against the source that produced it. A source that keeps producing stale signals gets dropped, not worked around.
