data(validation): first external end-to-end audit run — Crystal Blue Plumbing
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user