DEV Community

Performance Dev
Performance Dev

Posted on • Originally published at outboundautonomy.com

We Sent a Prospect 4 Emails With Wrong Data (And Fixed Our Entire Audit Engine)

Two days ago, I sent an email to Ally, a founder at a 20-year digital agency in Colorado. She replied to our cold outreach — which almost never happens.
Then I sent her a link to audit results that contained the wrong data.
Here is what happened, what broke, and how we fixed our entire audit engine.

The Setup

Outbound Autonomy runs automated website audits. You drop in a URL, and our engine scans across four signals: design, conversion, technical performance, and competitive gap. It is a free tool that takes about 90 seconds.

We were doing cold outreach to digital agencies in Colorado — sending personalized audit results as a warm intro. The pitch was simple: "Here is your agency's real score, here is what is costing you leads, want to talk?"

Fifty of those emails went out. Zero replies.

Then we hit Big Orange Planet — a 20-year-old agency with a solid site. Ally, one of their team, replied. She wanted to see more.

What Went Wrong

I sent Ally a link to our audit report page instead of putting the data inline. That was the first mistake.

When she clicked through, the audit engine showed a score that was different from what I'd quoted in my email. The schema analysis flagged her site as having zero schema markup — but her site was running Yoast SEO, which injects valid JSON-LD.

1. Yoast's @graph array wasn't being traversed recursively. Most schema generators output their structured data as a @graph array. Our parser only checked top-level keys. False negative.

2. Page matching was brittle about trailing dashes. If the crawl found /contact/ but our regex expected /contact, pages got silently dropped.

3. WAF 406 responses were treated as successful pages. Her agency used a Web Application Firewall that returned 406. Our engine interpreted that as "page loaded."

The Four-Email Spiral

  • Email 1: Initial outreach with wrong score and gated link
  • Email 2: "Sorry, here's the fresh audit" — still wrong
  • Email 3: "Let me re-run this" — still broken
  • Email 4: "Engine is fixed. Here's the correct data."

What We Fixed

Three specific fixes to the audit engine:

Fix 1: Recursive JSON-LD @graph traversal — Started parsing nested @graph arrays. Now correctly identifies LocalBusiness, Service, and Review schema on WordPress sites.

Fix 2: Dash-normalized page matching — Every URL gets normalized before comparison: strip trailing slash, strip index.html, lowercase. Recovered 2-3 missing pages per audit.

Fix 3: WAF 406 detection and retry — Flag blocked pages instead of reporting them as loaded. Retry with different User-Agent, then mark as "blocked by security."

The Hard Rules We Adopted

  1. One reply per lead. No follow-up sequence. Data inline, wait. If they reply, cool.
  2. Data inline, never gated. Key data points in the email body. The link is supplemental.
  3. Verify before send. Re-check the URL, re-parse the schema, confirm the score.
  4. Know what your tool cannot see. WAFs, Cloudflare, JS-rendered sites — document blind spots.

The Result

The engine is now deployed at outboundautonomy.com. The same site that showed "no schema" now correctly identifies valid JSON-LD.

Ally never replied to email four. That is fair. But every audit that runs now is more accurate because a warm lead forced us to look.


Running a website audit tool? Check your schema parser first. If you are not handling @graph arrays recursively, you are missing data on most WordPress sites.

Want to see if our engine finds the right data for your site? Run a free scan at outboundautonomy.com/audit — 90 seconds, no email required.

Top comments (0)