All builds

Signal Check

Finds and verifies one dated buying signal per company so your first line proves something.

SYSTEM
enrichmentcold-emaillinkedin

What this is

A five-step check that turns one real, dated event into the reason you reach out this week.

  • Writes one sentence about the signal, backed by a public page you can point to
  • Builds the company list from the signal source instead of an industry filter
  • Kills any row you cannot verify yourself in three minutes

The problem

  • → 217 emails sent. Every one opens with a merge tag, the auto-filled "[First Name]" that does not make it personal.
  • → Four opens. Zero replies.
  • → The list came from an industry filter, not a dated event.
  • → Line one proves nothing, so nobody reads line two.

Cost: divide what the send cost you by the replies it earned.

Diagram
Drawing diagram…

How it works

Diagram
Drawing diagram…

Not software. Nothing to install. Five steps you run once per segment and reuse for every list built against it.

  • Step 1 names one public, dated, causal event in a single sentence.
  • Step 2 starts at the source where the event lives (job board, funding page, licence board), never a bought list.
  • Step 3 is the only step that cannot be handed to a tool. You open the page yourself.
  • Step 4 keeps one signal on its own list so a reply traces back to the event that earned it.
  • Step 5 is a two minute gate that catches a stale date or a first line that never mentions the signal.

What you need first

ToolWhat it does hereFree or paidLink
Claude or ChatGPT with web search onRuns the list-building prompt against your signalFree tier works; paid plans start at $20/monthhttps://claude.ai
Google NewsFinds and confirms the dated public eventFreehttps://news.google.com
Greenhouse, Lever, Ashby job boardsFinds hiring signals for one exact roleFree to browsehttps://www.greenhouse.io
CrunchbaseFinds funding rounds and their datesFree tier; paid from $29/monthhttps://www.crunchbase.com
Google SheetsHolds Company, Signal, Date, SourceFreehttps://sheets.google.com
Your sending tool (Instantly, Smartlead, or similar)Receives one campaign per signalPaid, from $37/monthhttps://instantly.ai

Note

Before you start, be able to log into: your AI tool, Google Sheets, and whatever tool actually sends your email or DMs. If you cannot log into the sending tool today, do phases 1 to 3 anyway. Phase 4 can wait.

Get the files

Everything for this build sits in one folder on GitHub. GitHub is just a website that holds files.

Direct folder link: https://github.com/gary-chakraborty/gap-build-vault/tree/main/builds/signal-prospecting-system

To get them onto your own computer without any software: open the link, click the green Code button near the top right, then click Download ZIP. That downloads the whole vault. Unzip it, then open the folder builds/signal-prospecting-system. You can also click any single file on GitHub and read it right there in the browser.

FileWhat it isWhat you do with it
five-step-system.mdThe full method, step by step, with how long each step takesRead once in Phase 1, then keep open while you work
signal-picker.mdSix signal categories with free sources, freshness windows, and what each impliesPick exactly one category in Phase 1
list-building-prompt.mdThe research prompt that returns a table and refuses rows with no source linkPaste into your AI tool in Phase 2
send-gate-checklist.mdFive checks to run before a campaign goes outRun in Phase 4, every campaign, every time

Build it

Phase 1: Pick one signal and write the sentence

  1. Open signal-picker.md. Read the six rows in the table.
  2. Pick the one category you can already find a source for today. Stop at one.
  3. Open five-step-system.md and scroll to Step 1. Copy the sentence shape into a blank note.
  4. Fill it in for your own market: company type, the dated public event, the plain reason it creates a need, and where you will look.
  5. Run the trap check in that same section: if the sentence is true of every company in your market, it is a description, not a signal. Rewrite it.

Watch out

"They are growing" and "they use HubSpot" are not signals. A signal is something that was not true six months ago and is true now.

You know this phase worked when: you can read one sentence out loud that names an event, a reason, and a public place to find it, and you can name the exact page type that proves it.

Phase 2: Set up the sheet and run the list prompt

  1. Go to sheets.google.com and click Blank spreadsheet.
  2. In row 1, type five headers across: Company, Signal, Date, Source, Best contact title.
  3. Rename the sheet after your signal, not after the month. One sheet per signal.
  4. Open a new tab, go to claude.ai, and turn web search on in the chat box before you send anything.
  5. Paste this prompt, filling in the bracketed fields from your Phase 1 sentence:
text
I'm building a list of [NICHE / INDUSTRY] companies that match one specific signal.

Signal definition: [PASTE YOUR ONE-SENTENCE SIGNAL DEFINITION FROM PHASE 1]

Find [TARGET COUNT x 3] companies where this signal happened in the last
[90 days / 12 months]. For each one, give me:

1. Company name
2. What the signal is, in one sentence, specific to this company (not a copy of the
   general definition, the actual event, e.g. "hired a VP of Sales on [date]", not
   "recently hired someone")
3. The exact date the event happened
4. A direct link to the public page where you found it (job post, press release,
   filing, news article, the actual page, not a search results page)
5. The best contact title to reach at this company for this signal

Rules:
- If you cannot find a direct source link for a company, do not include that company.
  A row with no link is worse than a shorter list.
- Do not include a company because it "fits the industry" if you can't point to the
  specific dated event. General industry fit is not the signal.
- If two companies have the exact same signal wording, check both again. A signal that
  reads identically across companies is usually the industry, not the event. Rewrite the
  wording to be specific to each company, or drop the weaker one.
- Give me the list as a table: Company | Signal | Date | Source link | Best contact title
  1. Paste the returned table into your sheet.

Tip

Ask for three times the number of companies you actually want. Most rows die in Phase 3, and that is the point.

You know this phase worked when: your sheet holds three times your target number of rows, and every row has something in the Source column.

Phase 3: Verify the signals yourself

  1. Start at row 2. Click the source link.
  2. Confirm three things on the page itself: the event happened, it happened to that company, and the date sits inside your window.
  3. If all three hold, paste the real page URL into the Source cell, replacing whatever was there.
  4. If you cannot confirm it in about three minutes, delete the whole row. Do not soften the wording to keep it.
  5. Repeat to the bottom of the sheet.
  6. Count what survived. Fewer than a third surviving means your niche or your date window is too loose. Tighten one of them and rerun Phase 2.

Watch out

AI tools return pages that no longer exist and pages about a different company with a similar name. A signal you did not personally open is a guess wearing a signal's clothes.

You know this phase worked when: every remaining row has a URL you personally clicked, and you can say the date of each event without looking it up again.

Phase 4: Route one signal to one campaign

  1. In your sending tool, create a new campaign, not a new variant inside an existing one.
  2. Name it after the signal and the month, so a reply traces back to the event.
  3. Upload only the verified rows from this one sheet. Nothing else goes in this campaign.
  4. Write line one so it states the event, with the company's own detail in it. Write line two as what that event means for them.
  5. Open send-gate-checklist.md and walk the five boxes. Every one has to be a real yes.
  6. Send.

Watch out

Never load two different signals into one campaign as Variant A and Variant B. Sending tools rotate variants at random across the whole list, so the funding message lands on the company whose signal was a new hire. A true A/B test compares two phrasings of the same signal on the same list.

You know this phase worked when: your sending tool shows one campaign holding one signal type, and every lead in it has a source link sitting in your sheet.

Run it the first time

Made-up example, invented to show the shape. Do not treat any figure below as a result.

Input to the prompt:

Niche: B2B software companies. Signal: closed a seed or Series A round in the last 90 days. Target count: 8, so ask for 24.

What comes back:

text
Company              | Signal                          | Date       | Source
Fielder Labs         | Closed $6.4M seed               | 2026-05-14 | company press page
Northrail Systems    | Closed Series A, amount undisclosed | 2026-04-02 | trade news article
Quillbank            | "Recently raised"               | unknown    | no link given

Row 1 survives: the press page loads, the date matches, the round is real. Row 2 survives if the article names the company and the date. Row 3 dies on the spot. No date, no link, no row.

Watch out

The mistake almost everyone makes on the first run is stopping at the table. Pull five links at random from your own output and open them. If fewer than half hold up, the problem is your niche or your window, not the prompt. Fix that before you build the full list.

When it breaks

What you seeWhat it meansWhat to do
Every row reads almost the same, like "expanding operations"The model matched your industry, not your event. That is a market condition, not a signalRewrite the Phase 1 sentence to name a specific event type with a date attached, then rerun. Reject any row whose signal sentence would fit a competitor unchanged
Source links 404, redirect to a homepage, or point at a search results pageThe page moved, or the model produced a plausible looking URL it never openedSearch the company name plus the event in Google News yourself. Found within three minutes, keep the row with the real URL. Not found, delete it
Dates are older than your window, or the model writes "recently" instead of a dateThe signal is stale, or was never datedDelete the row. A stale signal read out loud to a prospect is worse than a generic opener, because it proves you did not check
The same company appears twice under different names, like "Northrail" and "Northrail Systems Inc"Duplicate entries from two different sourcesSort the sheet by the Company column and read down it before Phase 4. Keep the row with the stronger source, delete the other. A prospect who gets two of your emails will not read either
The prompt returns 6 companies when you asked for 24The signal genuinely is rare in that market, or your window is too tightWiden the window one step (90 days to 12 months for leadership changes only), or pick a second signal category from signal-picker.md and run it as its own separate campaign
Replies come back confused, saying "that is not us"The signal belonged to a similarly named company, or a parent companyCheck the domain on the source page against the domain you emailed. If they differ, the row was never verified properly. Rerun Phase 3 on the whole list

Tell me how it went

I am not asking for your email. There is no list, no sequence, nothing to unsubscribe from.

Two minutes, three things: how you found this, whether it was useful, and what you want me to build next. https://form.jotform.com/262194392563059

The next build comes from those answers.