From 8f69363add89f3fddfd45a8463815b95ee942b14 Mon Sep 17 00:00:00 2001 From: Tony Balascio Date: Fri, 14 Aug 2026 17:11:51 +0000 Subject: [PATCH] =?UTF-8?q?data(validation):=20first=20external=20end-to-e?= =?UTF-8?q?nd=20audit=20run=20=E2=80=94=20Crystal=20Blue=20Plumbing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VALIDATION.md | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 docs/validation/2026-08-14-crystal-blue-plumbing/VALIDATION.md diff --git a/docs/validation/2026-08-14-crystal-blue-plumbing/VALIDATION.md b/docs/validation/2026-08-14-crystal-blue-plumbing/VALIDATION.md new file mode 100644 index 0000000..dd16a21 --- /dev/null +++ b/docs/validation/2026-08-14-crystal-blue-plumbing/VALIDATION.md @@ -0,0 +1,61 @@ +# Validation Run: Crystal Blue Plumbing Heating & Air + +**Date:** 2026-08-14 +**Business:** Crystal Blue Plumbing Heating & Air +**Location:** Placerville, CA (actual: Loomis, CA — same metro area) +**Why chosen:** Plumbing/HVAC (GTM vertical), Placerville/Cameron Park area, never audited before, multi-location chain (tests GBP disambiguation) + +## Pipeline Execution + +``` +multi_scraper.py → audit_engine.py → findings.json + findings.md +``` + +## Surface Results + +| Surface | Status | Notes | +|---------|--------|-------| +| Google Business Profile | ⚠️ Degraded | Returned `name: "Hours"`, null address, null phone. GBP matched wrong entity. | +| Apple Maps | ✅ Good | Full NAP, 4.2★/65 reviews, hours, website URL, phone | +| Bing Places | ❌ Failed | Returned no data | +| Website | ❌ Failed | HTTP 403 Forbidden (crystalblueplumbing.com) | + +## Key Findings (5 total) + +| # | Severity | Finding | Verdict | +|---|----------|---------|---------| +| 1 | 🟥 Immediate | Hours mismatch (GBP vs Apple) | **FALSE POSITIVE** — GBP from wrong entity | +| 2 | 🟧 High | No website found | PARTIALLY FALSE — URL exists but 403 | +| 3 | 🟨 Medium | Review dates unavailable | VALID | +| 4 | 🟨 Medium | No description | VALID | +| 5 | 🟩 Enhancement | No price level | VALID | + +## Issues Observed + +### 1. GBP Entity Disambiguation (CRITICAL) +GBP scraper returned `name: "Hours"` with null address. Matched wrong GBP listing. Fallback to Apple Maps saved the audit. + +### 2. Apple Maps Hours Parsing +`12:00 AM-12:00 PM` for all days — likely parsing "Open 24 hours" as midnight-to-noon. + +### 3. Website 403 Not Distinguished From "No Website" +Should be separate findings: "no_website" vs "website_unreachable". + +### 4. Hours Mismatch With Degraded Source +Engine flagged hours mismatch but GBP data was garbage. Mismatch detection should skip degraded sources. + +## Verdict + +Pipeline works end-to-end but findings not yet trustworthy without human review. GBP scraper is the biggest risk. + +**Before production:** +1. GBP entity validation (name match + address present) +2. Hours comparison skip degraded sources +3. Website 403 → distinct finding +4. Apple Maps hours parsing audit + +## Artifacts +- `multi_surface_2026-08-14.json` — raw scraped data (4KB) +- `findings.json` — engine output (3KB) +- `findings.md` — markdown report (2.5KB) +- `VALIDATION.md` — this file