this is the core of my outreach system. before sending a single email, i scan the prospect's website and find actual issues. here's how to build one yourself in about 50 lines of python.
what we're checking:
the code (simplified but functional):
import requests
from bs4 import BeautifulSoup
def scan_site(url):
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.text, "html.parser")
issues = []
score = 100
title = soup.find("title")
title_text = title.string.strip() if title and title.string else ""
if not title_text:
issues.append("missing title tag")
score -= 15
elif len(title_text) > 60:
issues.append(f"title too long ({len(title_text)} chars)")
score -= 5
images = soup.find_all("img")
no_alt = [img for img in images if not img.get("alt")]
if no_alt:
issues.append(f"{len(no_alt)} images missing alt text")
score -= min(len(no_alt), 15)
h1s = soup.find_all("h1")
if len(h1s) == 0:
issues.append("no H1 heading found")
score -= 10
return {"url": url, "score": max(score, 0), "issues": issues}
how i use it for outreach:
scan the site, check the results, pick the most interesting finding for the email subject line. "your site has 47 images google can't see" hits different than "i can help with your SEO."
the key insight: the scanner doesn't need to be perfect. it needs to find ONE thing that's verifiably true. when the recipient checks and confirms "yeah, we do have 47 images without alt text" — you're instantly credible.
the business angle:
i wrapped this scanner into a cold outreach service. scan 500 sites, send personalized emails referencing findings, follow up automatically. charging agencies $297/mo for the full done-for-you package.
the scanner is the competitive advantage. without it, you're just another "i hope this email finds you well" sender. with it, every email proves you actually looked at their business.
grab the full scanner free on gumroad: https://vemtraclabs.gumroad.com/l/seo-analyzer
or see the done-for-you service: https://vemtrac-outreach.pages.dev
fork it, improve it, use it. if you build something cool with it, let me know.
The outreach angle is smart.
One recommendation though: check if GPTBot and PerplexityBot are blocked in robots.txt
We audit this for every client and the number of sites accidentally blocking AI crawlers is surprisingly high. It's a 30s fix but most site owners have no idea it's happening and it directly kills their visibility in both ChatGPT and Perplexity.