b2blead-genfiltering

Negative Filtering: The Biggest Lift in B2B Search Pipelines

Expanding positive keywords adds volume. Negative filtering raises qualification rate. Reddit surfaces the negative signals Google hides.

6 min read

Reaching 60% qualified leads from a search layer is already solid. The fastest improvement usually comes from building a stronger negative model: explicitly filtering out companies that look like matches on surface keywords but are not actually ICP fits. The negative filtering step is where most of the lift comes from -- investing there pays more than expanding positive keywords.

Why Negative Filters Beat Positive Expansion

Expanding positive keywords adds more leads to the top of the funnel, but the qualification rate stays the same or drops. Adding negative filters keeps the funnel volume similar but pushes the qualification rate higher. A pipeline producing 100 leads at 60% qualified (60 good leads) improves more by filtering to 80 leads at 85% qualified (68 good leads) than by expanding to 150 leads at 55% qualified (82 good leads with 68 wasted hours of outreach).

Building the Negative Model

Your negative model is the inverse of your ICP: characteristics that make a company look like a match but disqualify them. Common negative signals for B2B SaaS: company is in an adjacent vertical (keywords match but industry is wrong), company size is too small or too large, company is a direct competitor (they would never buy from you), or company is in a market you do not serve.

Python
import requests, os, json

H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}

NEGATIVE_SIGNALS = [
    "acquired by", "shutting down", "pivot", "layoffs",
    "free alternative", "open source replacement"
]

def qualify_company(name):
    google = requests.post("https://api.scavio.dev/api/v1/search",
        headers=H, json={"platform": "google",
                         "query": f"{name} company"},
        timeout=10).json()
    reddit = requests.post("https://api.scavio.dev/api/v1/search",
        headers=H, json={"platform": "reddit",
                         "query": f"{name} review"},
        timeout=10).json()
    snippets = " ".join(
        s.get("snippet", "") for s in google.get("organic", [])[:5])
    reddit_titles = " ".join(
        r.get("title", "") for r in reddit.get("organic", []))
    all_text = (snippets + " " + reddit_titles).lower()
    negatives = [s for s in NEGATIVE_SIGNALS if s in all_text]
    return {
        "company": name,
        "qualified": len(negatives) == 0,
        "negative_signals": negatives,
        "reddit_threads": len(reddit.get("organic", [])),
    }

companies = ["Stripe", "WeWork", "Linear"]
for c in companies:
    result = qualify_company(c)
    status = "PASS" if result["qualified"] else "FAIL"
    print(f"[{status}] {c}: {result['negative_signals']}")

Reddit as a Negative Signal Source

Reddit is uniquely valuable for negative filtering. Google results are curated by the company (they control their PR and marketing pages). Reddit discussions are unfiltered: real users complaining, ex-employees sharing experiences, and competitors pointing out weaknesses. A company with 3+ Reddit threads mentioning "shutting down" or "pivot" is not a good lead regardless of how well their website matches your ICP keywords.

Combining Google and Reddit Signals

The multi-signal approach catches what single-source qualification misses. Google Knowledge Graph confirms the company exists and shows its basic profile (type, size, industry). Reddit surfaces the sentiment and recent news that Google's curated results hide. Scavio returns both through one API at $0.005/credit per platform query. For a 100-company qualification batch, that is $1.00 total for a dual-signal quality check.