b2blead-generationreviews

B2B Targeting by Review Ratings, Not Websites

Companies with declining review scores are 3-5x more likely to respond to outreach. Review-based lead scoring finds high-intent prospects that firmographics miss.

5 min read

Companies with declining review scores are 3-5x more likely to respond to outreach than companies with stable ratings. A business dropping from 4.5 to 3.2 stars on Google is actively losing customers and looking for solutions. Traditional B2B targeting focuses on company size and industry; review-based targeting focuses on pain signals.

Why Reviews Beat Firmographics

Apollo and ZoomInfo tell you a company has 50-200 employees in the SaaS vertical. That narrows the list but says nothing about whether they need your product right now. Review data tells you their customers are complaining about specific problems. If your product solves those problems, the outreach practically writes itself.

Extracting Review Signals

Python
import requests, os, re

API_KEY = os.environ["SCAVIO_API_KEY"]

PAIN_WORDS = ["terrible", "worst", "switching", "alternative",
              "frustrated", "broken", "overpriced", "slow"]

def review_signals(company):
    resp = requests.post("https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": API_KEY},
        json={"platform": "google",
              "query": f'"{company}" reviews complaints 2026'})
    results = resp.json().get("organic", [])[:5]
    signals = {"company": company, "pain_score": 0, "evidence": []}
    for r in results:
        snippet = (r.get("snippet", "") or "").lower()
        for word in PAIN_WORDS:
            if word in snippet:
                signals["pain_score"] += 10
                signals["evidence"].append(
                    f"{word}: {r.get('title', '')[:60]}")
        # Check for star ratings in snippets
        rating = re.search(r'(\d\.\d)\s*/\s*5', snippet)
        if rating and float(rating.group(1)) < 3.5:
            signals["pain_score"] += 20
            signals["evidence"].append(
                f"Low rating: {rating.group(1)}/5")
    return signals

company = review_signals("Zendesk")
print(f"{company['company']}: pain score {company['pain_score']}")
for e in company["evidence"][:3]:
    print(f"  {e}")

Building the Lead List

Start with a list of companies in your ICP. Run each through the review signal pipeline. Sort by pain score. The top 20% are your highest-intent leads. At $0.005 per search, scoring 500 companies costs $2.50.

Combining with Firmographic Data

The best targeting stack uses firmographics for segmentation and reviews for prioritization. Apollo ($49/month Basic) gives you the company list filtered by size, industry, and location. Search API gives you the pain score. The firmographic filter narrows 10,000 companies to 500 in your ICP. The review score ranks those 500 by buying intent.

When This Approach Fails

B2B companies with few public reviews (enterprise infrastructure, niche industrial tools) lack enough data for review-based scoring. Consumer-facing companies with thousands of reviews work best. Also, some companies have low review scores but no budget for your solution. Combine the pain score with firmographic signals like recent funding or headcount growth to filter out companies that are struggling too much to buy.