SIGNAL · AI LEAD RADAR
A lead score you can argue with
- TYPE
- PERSONAL PROJECT
- ROLE
- Solo: product, pipeline, interface
- TIMELINE
- Jun – Jul 2026
- PLATFORM
- Web
- STACK
- Next.js 14 · Node.js · Express · Python · FastAPI · Groq · Llama 3.3 70B · Supabase · Vercel · Render
The problem
Founders doing their own outbound lose hours on leads that were never a fit, then write each first email from scratch.
Lead tools hand over a list and a confidence percentage nobody can question. You either trust the number or throw the list away.
What I had to learn
- Python and FastAPI, to run scraping, enrichment and scoring as a service separate from the web app.
- Where a language model belongs in a pipeline and where it doesn’t: Llama 3.3 on Groq writes the pain-point analysis and the drafts, and plain rules do the scoring.
- Contact enrichment without spamming: finding a decision-maker through LinkedIn search results and the company’s own site, and checking an email address before trusting it.
What I built
A Python signal engine that pulls companies from five sources (LinkedIn, job boards, Crunchbase, remote job boards and Google Maps), merges duplicates, finds a decision-maker, and scores each lead 0–100.
A Next.js dashboard and an Express API on top: leads, an outreach queue, scrape logs and a cron history, with each lead moving through seven stages from new to client. Scrapes, analysis and draft generation run on a daily schedule and can be triggered by hand.
- 01
Rules score, the model writes
The 0–100 score comes from plain rules across company size, hiring urgency, operational complexity and growth signals, with a written rationale naming what matched. The same lead always gets the same score, and a wrong one can be traced to the rule that produced it. The language model is kept to writing.
- 02
Agreement between sources counts
A company that turns up on two or three independent sources gets a bonus. One job post can be noise; the same company hiring on LinkedIn and listed on Crunchbase is a pattern.
- 03
An unverified email is never used
Pattern-guessed addresses like first.last@ are only returned once a verification service confirms them. Without verification, a guess is a spam risk, so it is dropped rather than shown.
- 04
It drafts, a person sends
Cold emails, LinkedIn notes and follow-ups are generated for leads above a score threshold and wait in a queue. Sending, and marking a lead contacted, is done by a person.
- 05
Failures stay visible
Scrapers break. Every scrape and scheduled run is logged with its outcome, and a history view shows the ones that failed, instead of a pipeline that loses data quietly.

Where it stands
Signal has not been used for live outreach yet, so there are no reply rates or pipeline numbers to report.
What it does today: every lead carries a score and the rationale behind it, and every draft waits for a person to review it.
What it taught me
It is slower per lead than tools that don’t explain themselves. That trade was made on purpose.
Thinking about an AI system like this for your business?
Talk to ANTA →