2.3 KiB
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:
- GBP entity validation (name match + address present)
- Hours comparison skip degraded sources
- Website 403 → distinct finding
- 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