Press enter or click to view image in full size
Photo by DS stories: https://www.pexels.com/photo/photo-of-a-red-meeple-near-blue-meeple-pieces-6990039/
A Technical Guide to Building Custom Signal Detection That Standard Tools Can’t Provide
9 min read6 hours ago
–
About This Deep-Dive
This is a technical walkthrough on custom lead enrichment — a challenge I’ve seen sales teams face when standard tools don’t track their specific buying signals.
This is one approach that works for teams with clear signal-to-pipeline correlation data. It’s not the only approach, and it’s not right for everyone. I’ll show you when it makes sense and when it doesn’t.
This article is purely based on my per…
Press enter or click to view image in full size
Photo by DS stories: https://www.pexels.com/photo/photo-of-a-red-meeple-near-blue-meeple-pieces-6990039/
A Technical Guide to Building Custom Signal Detection That Standard Tools Can’t Provide
9 min read6 hours ago
–
About This Deep-Dive
This is a technical walkthrough on custom lead enrichment — a challenge I’ve seen sales teams face when standard tools don’t track their specific buying signals.
This is one approach that works for teams with clear signal-to-pipeline correlation data. It’s not the only approach, and it’s not right for everyone. I’ll show you when it makes sense and when it doesn’t.
This article is purely based on my personal research and solution that I have built. Opinions are mine.
Generic Enrichment Misses Your Specific Signals
Your contact database tells you company size, funding history, industry classification, and verified emails. Essential baseline data that every sales team needs. **Contact databases are built for breadth, **they can’t customize for the specific signals
What it doesn’t tell you:
A prospect just posted 15 engineering jobs mentioning the exact tech stack you integrate with
A frustrated customer left a G2 review yesterday complaining about the problem you solve
They announced a partnership this morning that makes them a perfect fit
Their new CTO published a blog post about the strategic initiative you enable
These signals create urgency. And they’re invisible to standard enrichment platforms.
Your buying signals are unique to your product and market. Standard enrichment can’t predict what creates urgency for your deals.
Press enter or click to view image in full size
Standard tools vs custom tools for lead enrichment
Why SERP APIs vs. Building Your Own
You have four options for getting this data:
- Build custom scrapers for job boards, review sites, company blogs, and news sources. Full control, no per-query cost. But you’re looking at 3–6 months of development, ongoing maintenance as sites change their HTML, dealing with proxies and anti-bot measures, and potential legal risk. Only makes sense if you have dedicated engineering resources and long-term commitment.
- Use RSS feeds and public APIs where available. Free or low-cost. But coverage is spotty, updates are delayed, and data formats are inconsistent. Works for specific high-value sources like company blogs or press releases, not for comprehensive signal tracking.
- Manual research. Zero tooling cost. Doesn’t scale, quality is inconsistent, and your sales ops team has better things to do than Google every prospect. Fine if your entire TAM is under 100 accounts.
- SERP APIs (this approach). Search engines already index everything within hours. One API, one authentication. Bright Data handles the proxies, CAPTCHAs, and rate limiting. You get clean JSON responses and can add new signal types just by changing search queries. Fast to build, comprehensive coverage, real-time updates. The tradeoff: per-query cost and vendor dependency.
This tutorial focuses on **option 4 **because it’s the fastest path to value for most teams with clear signal definitions and more than 50 priority accounts per week.
What One Team Discovered
A sales ops leader at a mid-market data infrastructure company implemented custom signal tracking. Their ideal customers were companies migrating to modern data warehouses.
They defined one specific signal to track: job postings mentioning “data engineer,” “Snowflake,” “dbt,” or “modern data stack.”
What happened in Q2:
- Caught 73 companies posting these exact jobs
- Sales reached out within 48 hours with relevant case studies
- Result: Sales team stopped wasting time on cold accounts and focused on companies showing active buying signals
- Qualified meeting rate jumped from 12% to 34%
- Pipeline value from these signal-driven leads: $1.2M
Their standard enrichment tool would have shown these companies were “in the data/analytics industry” with “50–200 employees.”
True but useless. The timing signal — active hiring for their exact use case was invisible.
That’s the capability you’re about to build.
When This Approach Makes Sense
Alright, before we dive into implementation, let’s be clear about when custom signal tracking is worth the investment.
Custom signal tracking is worth it when you’re past guesswork: sizable ARR, clear ICP, 60+ day sales cycles, and proof that certain signals predict pipeline. It’s also useful when standard enrichment isn’t enough, you have technical bandwidth to maintain it, and your team will actually personalize outreach based on fresh signals.
It’s not worth it if you’re still defining your ICP, your sales cycle is under 30 days, you don’t have signal-to-conversion data, your team won’t personalize anyway, or you lack resources to maintain it.
If you’re not ready, fix the basics first.
What You’ll Build
A Python enrichment engine that complements your existing contact data with custom, real-time signals:
**Input: **Company domain and your custom signal definitions
**Output: **Intelligence your standard tools don’t provide
The engine tracks:
- Custom hiring signals — Job postings mentioning your use case, tech stack, or pain points
- Product/competitive intelligence — Announcements about tools you integrate with or compete against
- Customer sentiment signals — Recent reviews revealing pain points you solve
- Strategic direction signals — Blog posts, interviews, initiatives aligned with your value prop
- Partnership/integration signals — Announcements that create new opportunities
- **Industry-specific triggers **— Regulatory changes, compliance deadlines, technology migrations
Finally, it provides scoring based on what actually predicts deals in YOUR pipeline, and personalized conversation starters from fresh signals.
Architecture Overview:
This setup combines your existing CRM enrichment with a real-time signal layer, so reps get both context and timing. It helps sales outreach stay relevant by triggering action from fresh events like hiring spikes, news, and partnerships.
Lead Enrichment Agentic Workflow
Step 1: Define Your Custom Signals
Before writing any code, sit down and figure out which signals actually predict deals in your pipeline. This is the hardest part and the most important.
Get Sandipan Bhaumik (Sandi)’s stories in your inbox
Join Medium for free to get updates from this writer.
Here’s what the config looks like:
CUSTOM_SIGNALS = {"hiring_signals": {"keywords": ["data engineer", "Snowflake", "dbt"],"weight": 30,"query_template": "{company_name} hiring {keyword}"},"pain_point_signals": {"keywords": ["manual data processes", "data quality issues"],"weight": 35,"query_template": "{company_name} {keyword}"}}
The real work is picking the right keywords for YOUR product. A DevTools company cares about “Next.js migration” and “TypeScript adoption.” An HR tech vendor tracks “rapid hiring” and “onboarding challenges.” A security startup monitors “breach disclosure” and “compliance audit.”
TheGitHub repo has pre-built configs for 8 industries. Pick yours, test it on 20 accounts, tune the keywords, then scale.
Step 2: Build the Core Engine
Two pieces make this work: a SERP client that talks to Bright Data’s API, and a signal tracker that scores what it finds.
The SERP client searches and filters results:
def search_for_signals(self, query, result_count=3):response = self.query(query)# Filter for substantive descriptions (60–600 chars)# Return clean JSON with title, URL, description
The signal tracker loops through your signal definitions, builds queries, detects matches, and calculates a score:
def track_signals(self, company_name):for signal_type, config in CUSTOM_SIGNALS.items():for keyword in config['keywords']:query = config['query_template'].format(company_name=company_name,keyword=keyword)results = self.serp.search_for_signals(query)if self._signal_detected(results, [keyword]):total_score += config['weight']
Change the signal definitions in your config file, and the tracker adapts automatically. No code changes needed.
Why SERP APIs work for this: Search engines already index job boards, review sites, company blogs, and news within hours. You get real-time signal detection without building and maintaining scrapers for dozens of different sites. Bright Data handles the proxies, CAPTCHAs, and rate limiting. You just get clean JSON responses.
The complete implementation with error handling, conversation starters, and CRM export is in the GitHub repo.
What You Get: Real Output
Run this on a company and you get a scored analysis with conversation starters. Here’s what it looks like for Anthropic:
**ANTHROPIC - Custom Signal Analysis**Signal Score: 85/100 (High Intent)Signals Detected:- Hiring for ML Engineers with Snowflake experience- G2 reviews mentioning data infrastructure challenges- Recent blog post on AI data strategy**Conversation Starters:**1. "Saw you're hiring ML engineers with Snowflake experience…"2. "Read feedback about data infrastructure scaling challenges…"3. "Just saw your post on AI data systems - curious how this fits your roadmap?"
It also exports a CSV ready to import into Salesforce or HubSpot as custom fields. Your sales team sees these signals right alongside the standard firmographic data.
The Economics: Layering Intelligence
You’re not replacing your contact database. You’re adding a layer on top. Your existing tool gives you the basics: contact info, company size, tech stack, funding history. Keep paying for that. It’s essential for working at scale.
This custom signal layer costs about $0.30–0.50 per lead enriched (5–6 search queries). But you don’t run it on every lead. Just your top 50–100 priority accounts each week.
So the math looks like this: Marketing generates 500 leads monthly, your standard enrichment handles all of them. Sales picks 200 priority accounts. You run custom signals on those 200. Cost: $60–100 for signals that month, on top of whatever you’re already paying for baseline enrichment.
What you get for that $60–100: conversation starters based on what happened this week, not generic firmographics that everyone else has too.
Compare these two outreach messages:
Without custom signals:
"Hi [Name], I noticed you work in data infrastructure. We help companies modernize their data stack…"
With custom signals:
"Hi [Name], I saw you just posted for 3 data engineers with Snowflake experience.We helped [similar company] scale their Snowflake deployment from 50TB to 500PB.Relevant case study attached…"
You can decide which one works. The second one gets opened.. The first one gets ignored.
How Teams Actually Use This
Most teams run this one of four ways:
- Priority account enrichment: Pull your top 50–100 accounts from CRM each week, enrich them, push the results back as custom fields. Sales sees fresh signals right next to standard data.
- Trigger-based: When a new lead enters the pipeline and matches your ICP criteria, run the enrichment automatically. High-score accounts get routed to your best reps.
- Weekly monitoring: Track your existing pipeline for signal changes. When a low-intent account from last month suddenly posts relevant jobs, move them to priority.
- Account research automation: AE requests research on a target account, system pulls latest signals and generates a brief with conversation starters. They walk into the call with the current context.
TheGitHub repo has example configs for DevTools, HR Tech, Security, Data/Analytics, Fintech, SaaS, MarTech, and Infrastructure companies. Pick the one closest to your market, customize the keywords to match what actually predicts YOUR deals, test on 20 accounts, then scale.
Get Started
TheGitHub repo has pre-built signal configs for 8 industries: DevTools, HR Tech, Security, Data/Analytics, Fintech, SaaS, MarTech, and Infrastructure. Each includes 5–6 signals proven to predict deals, example companies to test with, and customization guidance.
Quick start:
- Sign up for Bright Data SERP API (aff, free trial included)
- Clone the repo and add your API credentials
- Pick your industry config or customize your own
- Run: python cli.py enrich — domain example.com
Start with 20 test accounts to validate signal quality, tune your keywords, then scale to your weekly priority account list.
Common Mistakes to Avoid
- Over-engineering from day one. Don’t start with 15 signal types. Pick 3–4 you know correlate with deals. Test them. Then add more.
- Skipping validation. Run this on 20 known-good accounts first. Check if the signals are actually present and relevant. Tune your keywords before scaling. Garbage in, garbage out.
- No feedback loop. Track which signals led to meetings and deals. Double down on what works. Kill what doesn’t. Signals that don’t predict pipeline are just noise.
- Enrich everything. Don’t run this on every single lead. Focus on priority accounts. Set query budgets. Cache results for 7–14 days to balance freshness against cost.
- Building it but not using it. Train your sales team on how to reference signals in outreach naturally. Provide templates. Without execution, perfect data is worthless.
When Things Go Wrong
- Getting irrelevant results? Your keywords are probably too broad. “Engineer” matches everything. Try “Senior Data Engineer” instead. Add site filters like site:linkedin.com/jobs to your query template. Test queries manually in Google first to see what you’ll get.
- Too slow? You’ve enabled too many signals or set result_count too high. Disable low-value signals, reduce result count to 3–5, and implement caching for signals that don’t need real-time updates.
- Costs higher than expected? You’re enriching every lead instead of just priority accounts. Implement query deduplication, cache results, and kill any signals with less than 10% conversion correlation. Only enrich accounts that score above your ICP threshold.
- CRM integration failing? Start with CSV export and manual import to test your field mapping. Check the CRM API docs for field type limits. Implement batch uploads with delays to avoid rate limiting.
Implementation Resources
I’ve put together templates: complete code explanation, industry-specific configs for all 8 verticals, CRM integration templates for Salesforce and HubSpot, a cost calculator spreadsheet, and a troubleshooting decision tree.
Download the Implementation Kit
Questions? Reach out on LinkedIn.
About the Author
Sandipan Bhaumik has spent 18 years building production data and AI systems for enterprises across finance, healthcare, retail, and software. He helps organizations move from AI demos to production systems that deliver measurable business value.
**Connect: **LinkedIn | Newsletter