@if($redirectTo) @endif

🔍 Enter your business name & town to find your report

@if (!empty($searchResults))
    @foreach ($searchResults as $result)
  • {{ $result['description'] }}
  • @endforeach
@elseif(strlen($search) > 3)
No results found. Try a different search term.
@endif

@if ($insight) @if (config('top3-lead-labels.show_on_public_surfaces', true) && ($this->top3FunnelStage !== '' || $this->top3EngagementLabel !== ''))
@if ($this->top3FunnelStage !== '')
Funnel: {{ $this->top3FunnelStage }}
@endif @if ($this->top3EngagementLabel !== '')
Engagement: {{ $this->top3EngagementLabel }}
@endif
@endif @php $business = $insight; $keywordsWithSnapshot = $business->keywords->filter(fn($kw) => $kw->latestSnapshot); $premiumKeywords = (clone $keywordsWithSnapshot)->filter(fn($kw) => $kw->premium)->sortByDesc(fn($kw) => (float)($kw->latestSnapshot->traffic_value ?? 0))->values(); $topKeywords = (clone $keywordsWithSnapshot)->sortByDesc(fn($kw) => $kw->premium)->take(4)->values(); // Example premium keywords table: load all 4 premium keywords from DB so table always shows up to 4 rows $premium4 = \App\Models\Keyword::where('business_insight_id', $business->id) ->where('premium', true) ->with('latestSnapshot') ->orderBy('id') ->limit(4) ->get(); $townStr = (string)($business->town ?? ''); $regionStr = (string)($business->region ?? ''); $localKws = collect(); $regionalKws = collect(); foreach ($premium4 as $kw) { $tv = (float)($kw->latestSnapshot?->traffic_value ?? 0); $hasTown = $townStr !== '' && stripos((string)$kw->keyword, $townStr) !== false; $hasRegion = $regionStr !== '' && stripos((string)$kw->keyword, $regionStr) !== false; if ($hasTown && !$hasRegion) { $localKws->push((object)['kw' => $kw, 'tv' => $tv]); } elseif ($hasRegion) { $regionalKws->push((object)['kw' => $kw, 'tv' => $tv]); } elseif ($hasTown) { $localKws->push((object)['kw' => $kw, 'tv' => $tv]); } } $townValueFromKeywords = (int) round($localKws->sum(fn($o) => $o->tv)); $regionValueFromKeywords = (int) round($regionalKws->sum(fn($o) => $o->tv)); if ($townValueFromKeywords === 0 && $regionValueFromKeywords === 0) { $townValue = 690; $regionValue = (int) round(690 * 1.33); } else { $townValue = $townValueFromKeywords > 0 ? $townValueFromKeywords : 690; $regionValue = $regionValueFromKeywords > 0 ? $regionValueFromKeywords : (int) round(690 * 1.33); } $totalCardValue = $townValue + $regionValue; // Tone down surfaced values for this landing design. $displayScale = 0.4; $displayTotalCardValue = (int) round($totalCardValue * $displayScale); $localScale = $townValueFromKeywords > 0 ? $townValue / $townValueFromKeywords : 1.0; $regionScale = $regionValueFromKeywords > 0 ? $regionValue / $regionValueFromKeywords : 1.0; $localKeywordValues = $localKws->map(fn($o) => ['keyword' => $o->kw->keyword, 'value' => (int) round($o->tv * $localScale)])->values(); $regionalKeywordValues = $regionalKws->map(fn($o) => ['keyword' => $o->kw->keyword, 'value' => (int) round($o->tv * $regionScale)])->values(); $sum4TrafficValue = $premium4->sum(fn($kw) => (float)($kw->latestSnapshot?->traffic_value ?? 0)); $scaleFactor = $sum4TrafficValue > 0 ? $totalCardValue / $sum4TrafficValue : 1.0; $examplePremiumKeywords = $premium4->map(function ($keyword) use ($scaleFactor) { $snap = $keyword->latestSnapshot; $ms = $snap ? (int)($snap->monthly_searches ?? 0) : 0; $cpc = $snap ? (float)($snap->cpc ?? 0) : 0.0; $tv = $snap ? (float)($snap->traffic_value ?? 0) : 0.0; return [ 'keyword' => $keyword->keyword, 'searches' => (int) round($ms * $scaleFactor), 'cpc' => $cpc, 'value' => (int) round($tv * $scaleFactor), ]; })->values(); // Build top 3 from first keyword that has results; if fewer than 3, add from next keywords $top3 = collect(); $seenPlaceIds = []; foreach ($business->keywords as $kw) { if ($top3->count() >= 3) break; if (!$kw->results || $kw->results->isEmpty()) continue; foreach ($kw->results->take(3) as $r) { if ($top3->count() >= 3) break; $pid = $r->place_id ?? null; if ($pid && in_array($pid, $seenPlaceIds, true)) continue; if ($pid) $seenPlaceIds[] = $pid; $top3->push($r); } } $firstWithResults = $business->keywords->first(fn($k) => $k->results && $k->results->isNotEmpty()); // Position: from first premium keyword snapshot, or from competitors (top 3) if we're in the list $positionNumber = null; $firstPremiumPos = $premiumKeywords->first(); if ($firstPremiumPos && $firstPremiumPos->latestSnapshot && is_numeric($firstPremiumPos->latestSnapshot->position)) { $positionNumber = (int) $firstPremiumPos->latestSnapshot->position; } if ($positionNumber === null && $firstWithResults) { $ourResult = $firstWithResults->results->first(fn($r) => ($r->place_id ?? null) === $business->place_id); if ($ourResult && is_numeric($ourResult->position)) { $positionNumber = (int) $ourResult->position; } } $latestReview = $business->reviewSnapshots()->orderByDesc('snapshot_date')->first(); $rating = $latestReview !== null ? (float) $latestReview->average_rating : null; $unsubscribeEmail = $email ?? $business->email ?? ''; $unsubscribeUrl = url('unsubscribe?email=' . urlencode($unsubscribeEmail) . '&source=top3search'); // --- UI stats derived values (matches your reference layout) --- $top3Share = 0.7; $top3Percent = (int) round($top3Share * 100); // 70 $positionIsTop3 = $positionNumber !== null && $positionNumber <= 3; // Use the 4 premium keywords as the basis for "search volume" estimates; fall back to reference numbers. $sum4MonthlySearches = (int) round($premium4->sum(fn ($kw) => (int) ($kw->latestSnapshot?->monthly_searches ?? 0))); $totalSearches = $sum4MonthlySearches > 0 ? $sum4MonthlySearches : 3300; $top3Searches = (int) round($totalSearches * $top3Share); $restSearches = max(0, $totalSearches - $top3Searches); // When in Top 3, show "you are visible" share; otherwise show missed share. $yourSharePercent = $positionIsTop3 ? $top3Percent : (100 - $top3Percent); // Keep consistent with dashboard popup (static realistic Google pagination cap). $competitorsEstimate = 400; $highlightKeyword = $business->keywords->first()?->keyword ?? ($business->name ?? 'your business'); // Popup: count keywords where this business is currently in the Top 3. $placeIdStr = (string) ($business->place_id ?? ''); $keywordsInTop3 = $business->keywords ->filter(function ($kw) use ($placeIdStr) { if (!($kw->premium ?? false)) return false; $results = collect($kw->results ?? []); if ($results->isEmpty()) return false; return $results->contains(function ($r) use ($placeIdStr) { $pid = (string) ($r->place_id ?? ''); $pos = $r->position ?? null; return $pid === $placeIdStr && is_numeric($pos) && (int) $pos <= 3; }); }) ->count(); @endphp {{-- Business name, address; right: star rating + position on Google Maps --}}

{{ $business->name }}

{{ $business->address }}

{{ $rating !== null ? number_format($rating, 1) : '—' }} Position {{ $positionNumber !== null ? '#' . $positionNumber : '20+' }}
{{-- Post-search nudge (from reference lander) --}}
Fewer than 2% of businesses reach the Top 3 — but the rewards can be significant.
{{-- Estimated missed free value + where customers are going --}}
Where Your Customers Are Going
Top 3 (Google Map Pack)
~{{ $top3Percent }}%
~{{ number_format($top3Searches) }} of {{ number_format($totalSearches) }} searches go to the Top 3
Calls
Visits
Directions
Local competitors
{{ number_format($competitorsEstimate) }}
Very high competition
Your Position
#{{ $positionNumber !== null ? $positionNumber : '20+' }}
{{ $positionIsTop3 ? 'Visible to buyers' : 'Invisible to buyers' }}
~{{ number_format($top3Searches) }} {{ $positionIsTop3 ? 'see you' : 'never see you' }}
If a customer searches {{ $highlightKeyword }} and chooses from the Top 3... what’s that worth?
🔥 High-Value Searches You’re Missing
@forelse ($examplePremiumKeywords as $row) @empty @endforelse
Keyword Searches Est. CPC Est. Value
{{ $row['keyword'] }} High-value search {{ number_format($row['searches']) }} £{{ number_format($row['cpc'], 2) }} £{{ number_format((float)$row['value'] * $displayScale, 0) }}
No premium keywords yet.
{{-- Example Top-3 Rankings Carousel (design-only, no logic change) --}}
Example Google Maps Top 3 Ranking
Click any example to check the live Google search result.
200+ more examples available on request
{{-- Hidden trigger kept for deep-link flows (e.g. ?openPosition=1) --}}
{{-- CTA modal flow (matches provided HTML behavior) --}}
{{-- Bottom CTA block (copy/wording from reference lander) --}}

Exclusively one business per location

{{ number_format($competitorsEstimate) }} businesses competing in your area — including national brands and corporates.

No card required  ·  Takes 60 seconds  ·  Cancel anytime
1,200+ businesses ranked
Results within 3 days
1 business per area only
If you'd rather not receive the report, click here.
{{-- CTA: Qualification gate + Demo signup (keep existing flow for email capture) --}}
@else {{-- Skeleton: match new results layout --}}
⭐ — Position —
Estimated missed free value (equivalent paid ads traffic cost)
High-Value Searches You're Missing
@for ($i = 0; $i < 4; $i++) @endfor
@for ($i = 0; $i < 3; $i++)
@endfor
@endif
{{-- Same video modal as CTA (qualification-gate): Watch 50 sec --}} {{-- Free 3-Day Top 3 Maps Guarantee CTA removed per request --}}