Surround Sound SEO Strategy: How We Built a SERP Domination System with Real Data
A deep dive into building a complete Surround Sound strategy — the system architecture, tooling, database design, and real visibility data from tracking 2,800+ keywords across 6 languages.
In 2019, Alex Birkett and Irina Nica at HubSpot pioneered something that changed how we think about SEO. Instead of obsessing over a single #1 ranking, they asked: what if your brand appeared on every page in the top 10 results?
They called it the Surround Sound Strategy — and within 6 months of tracking 600+ keywords, they achieved 50% program-influenced mentions. We took their framework, built a full-stack automation system around it, and applied it to our own brand across 2,800+ keywords in 6 languages.
This post is a complete technical breakdown of the architecture, tooling, database design, and the real data we’re seeing. Below, you’ll find interactive 3D visualizations built with Three.js showing our actual visibility scores, keyword landscape, and outreach pipeline.
The Core Insight: Be Everywhere, Not Just #1
Think about how you actually discover products. You search “best email marketing software,” and you see 10 results. You click 3-4 of them. If one brand appears in every single article you read, that brand wins — even if it never ranked #1 itself.
“The more frequently someone hears about your product from multiple sources, the more likely they are to buy your product.”
This is the surround sound effect. Like a cocktail party where everyone recommends the same book.
The Math Behind It
Visibility Score — the simplest metric:
Visibility Score % = (mentions in top 20 ÷ 20) × 100If your brand appears on 8 of the top 20 results for “best CRM software,” your visibility score is 40%.
Position-Weighted Visibility — because position 1 matters more than position 20:
Weighted Score = Σ(Position Weight where mentioned) / Σ(All Position Weights) × 100
Position Weights: #1 = 10pts, #2 = 9pts, ... #10 = 1ptOpportunity Score — where to focus your effort:
Opportunity = (100% - Visibility Score) × Monthly Search VolumeA keyword with 35,000 monthly searches and 5% visibility = opportunity score of 33,250. That’s where you pitch first.
System Architecture
Here’s the full stack we built to automate the surround sound workflow:
Technology Stack
| Layer | Technology | Purpose |
|---|---|---|
| Database | PostgreSQL | 13 tables, 19,000+ records |
| Scripts | Python 3.12 | 4 core automation scripts (~2,000 LOC) |
| SERP Data | Ahrefs API + BrightData | Keyword metrics + live SERP scraping |
| Content Scraping | BrightData MCP | Page content extraction for mention detection |
| Visibility Engine | Custom Python | 3 scoring methods with position weighting |
| Orchestration | Claude Code + MCP | AI-assisted analysis and execution |
The Pipeline
┌─────────────────┐ ┌──────────────────┐ ┌───────────────────┐│ Keyword │────▶│ SERP Analyzer │────▶│ Mention Checker ││ Research │ │ (Top 20 per KW) │ │ (Scrape + Match) ││ keyword_ │ │ serp_ │ │ mention_ ││ research.py │ │ analyzer.py │ │ checker.py │└─────────────────┘ └──────────────────┘ └───────────────────┘ │ ▼┌─────────────────┐ ┌──────────────────┐ ┌───────────────────┐│ Outreach │◀────│ Opportunity │◀────│ Visibility ││ Pipeline │ │ Scoring │ │ Calculator ││ (7,322 targets) │ │ (Gap Analysis) │ │ visibility_ ││ │ │ │ │ calculator.py │└─────────────────┘ └──────────────────┘ └───────────────────┘Database Design
Our PostgreSQL database has 13 tables tracking everything from raw keywords to outreach prospect status. Here’s the data we’re working with:
Core Tables
| Table | Records | Purpose |
|---|---|---|
keywords | 2,804 | Target keywords with volume, difficulty, silo |
serp_results | 6,900 | SERP positions and ranking URLs |
brand_mentions | 739 | Brand mention tracking per URL |
visibility_scores | 684 | Calculated visibility over time |
outreach_prospects | 7,322 | Link building opportunities |
seo_content_plan | 535 | Content planning with status |
google_ads_keywords | 1,593 | Imported Google Ads data |
keyword_volume_history | 238 | Volume trend tracking |
Schema Highlights
The keywords table supports multi-country, multi-language tracking:
CREATE TABLE keywords ( id SERIAL PRIMARY KEY, keyword VARCHAR(500) NOT NULL, silo VARCHAR(100), -- Content silo grouping volume_ahrefs INTEGER, -- Monthly search volume difficulty INTEGER, -- Keyword difficulty (0-100) cpc NUMERIC(10,2), -- Cost per click search_intent VARCHAR(50), -- informational, commercial, transactional country VARCHAR(5), -- us, de, fr, etc. language VARCHAR(5), -- en, de, fr, etc. UNIQUE(keyword, country, language));The visibility_scores table tracks brand visibility per keyword over time:
CREATE TABLE visibility_scores ( id SERIAL PRIMARY KEY, keyword_id INTEGER REFERENCES keywords(id), brand_name VARCHAR(100), visibility_score NUMERIC(5,2), -- 0-100% mention_count INTEGER, pages_with_mentions INTEGER, total_pages_checked INTEGER, calculated_at TIMESTAMP DEFAULT NOW());Keyword Landscape: 7.4M Monthly Searches
We’re tracking 2,804 keywords across 58 content silos, representing over 7.4 million monthly searches. Here’s the distribution:
Top Silos by Search Volume
| Silo | Keywords | Avg Volume | Total Volume |
|---|---|---|---|
| Email Marketing | 498 | 2,400 | 1,160K |
| CRM | 395 | 2,370 | 1,100K |
| Business Strategy | 4 | 168,750 | 675K |
| Marketing Strategy | 12 | 36,275 | 435K |
| Customer Engagement | 162 | 2,329 | 377K |
| 8 | 30,375 | 243K | |
| Automation | 55 | 3,025 | 166K |
| Messaging | 105 | 1,410 | 148K |
| Analytics | 10 | 14,090 | 141K |
| SMS Marketing | 103 | 1,070 | 110K |
Average Keyword Difficulty: 38.7/100
Most of our target keywords sit in the medium difficulty range — achievable with quality content and strategic third-party mentions. The sweet spot for surround sound is keywords with difficulty 20-50 and volume above 1,000.
Real Visibility Data
This is where the strategy gets real. Our current overall visibility score is 0.1% — we’re early in execution. But look at the keywords where we already have traction:
Where We’re Already Visible
| Keyword | Volume | Visibility | Pages Found On |
|---|---|---|---|
| best email marketing software | 1,900 | 100% | 2 of 2 checked |
| email campaign | 2,800 | 100% | 1 of 1 checked |
| flash sale | 6,800 | 100% | 1 of 1 checked |
| software for small business | 1,700 | 100% | 1 of 1 checked |
| shopify community | 1,300 | 100% | 1 of 1 checked |
| welcome email | 1,400 | 100% | 1 of 1 checked |
| smtp service | 400 | 98.2% | 9 of 10 checked |
| top email marketing | 60 | 100% | 9 of 9 checked |
Where the Biggest Opportunities Are
These high-volume keywords have zero visibility — massive opportunity:
| Keyword | Monthly Volume | Current Visibility | Opportunity Score |
|---|---|---|---|
| CRM | 44,000 | 0% | 44,000 |
| newsletter | 42,000 | 0% | 42,000 |
| email marketing | 35,000 | 0% | 35,000 |
| live chat | 34,000 | 0% | 34,000 |
| SMTP | 30,000 | 0% | 30,000 |
| landing page | 23,000 | 0% | 23,000 |
| marketing plan | 20,000 | 0% | 20,000 |
| wordpress plugins | 20,000 | 0% | 20,000 |
Brand Mention Detection
Our mention checker has scanned 739 pages so far, finding 17,285 brand mentions across 590 pages (79.8% mention rate). Only 37 pages include an actual backlink.
The mention checker works by:
- Fetching page content via BrightData’s scraping API (handles bot detection and CAPTCHAs)
- Regex matching for brand names and aliases (case-insensitive, with context extraction)
- Link detection to determine if mentions include backlinks
- Context extraction to capture the sentence around each mention
# Simplified mention detection logicdef find_brand_mentions(content, brand_names): mentions = [] for brand in brand_names: pattern = re.compile( rf'\b{re.escape(brand)}\b', re.IGNORECASE ) for match in pattern.finditer(content): # Extract surrounding context (200 chars) start = max(0, match.start() - 100) end = min(len(content), match.end() + 100) context = content[start:end] mentions.append({ 'brand': brand, 'position': match.start(), 'context': context, 'has_link': check_for_link(content, match) }) return mentionsOutreach Pipeline: 7,322 Prospects
The outreach system identifies pages ranking for our target keywords that don’t mention us yet. Each becomes a prospect.
Pipeline Breakdown
| Status | Count | % |
|---|---|---|
| Go (qualified, ready to pitch) | 2,363 | 32.3% |
| Pending (needs qualification) | 3,632 | 49.6% |
| No-Go (not a fit) | 1,327 | 18.1% |
Prospect Types (Qualified “Go” Prospects)
| Type | Count | Strategy |
|---|---|---|
| Other SaaS companies | 288 | Cross-promotion, guest posts |
| Marketing blogs | 209 | Content contribution, expert quotes |
| Big publishers | 14 | PR pitches, data studies |
| Review sites | 19 | Product listing, review requests |
| Untyped (needs triage) | 1,833 | Bulk qualification needed |
Content Plan Status
| Status | Count |
|---|---|
| Incomplete | 512 |
| Complete | 23 |
We have 535 content pieces planned. 23 are complete. 512 are in various stages of production — this is the content engine that feeds the surround sound machine.
The Tooling: MCP-Powered Automation
The entire system is orchestrated through Model Context Protocol (MCP) servers, allowing AI-assisted execution of every workflow step.
Ahrefs MCP Integration
keywords-explorer-overview → Keyword metrics (volume, difficulty, CPC)keywords-explorer-matching → Related keyword discoveryserp-overview → SERP position data for any keywordsite-explorer-organic-keywords → Competitor keyword analysisbatch-analysis → Bulk domain metricsBrightData MCP Integration
search_engine → Live SERP scraping (Google, Bing, Yandex)search_engine_batch → Batch SERP scrapingscrape_as_markdown → Full page content extractionscrape_batch → Batch content scrapingWorkflow: From Keyword to Outreach
Here’s a real workflow we run regularly:
Step 1: Keyword Research
python3 keyword_research.py --stats# Returns: 2,804 keywords, 58 silos, 7.4M total volumeStep 2: SERP Analysis
python3 serp_analyzer.py --keyword-id 1 --summary# Returns: top 15 results, avg DR 90.2, 13 unique domainsStep 3: Mention Checking
python3 mention_checker.py --stats# Returns: 739 pages checked, 590 with mentions, 17,285 totalStep 4: Visibility Calculation
python3 visibility_calculator.py --overall --report# Returns: 0.1% overall visibility, silo breakdown, opportunitiesLessons Learned (So Far)
1. Start with Competitor Keywords
The “Competitor” silo has the highest average visibility (11%) because competitor comparison pages naturally mention multiple brands. Keywords like “mailchimp alternatives” or “hubspot vs brevo” are low-hanging fruit.
2. Review Sites Are Gold
Sites like G2, Capterra, and PCMag rank for almost everything and will list you if you meet their criteria. Our SERP data shows avg DR 90.2 for top results — you can’t outrank them, but you can be on them.
3. Volume ≠ Opportunity
“CRM” has 44,000 monthly searches but ranking pages are dominated by enterprise brands. “ecommerce email marketing” at 500 searches has more actionable outreach targets. Use the opportunity score formula, not raw volume.
4. Mention ≠ Link
Of 590 pages mentioning us, only 37 include a link. That’s a 6.3% link rate. Every unlinked mention is an easy outreach win — you can ask nicely for a link since they already endorse you.
5. Multi-Language Multiplies Everything
Tracking across 6 languages (EN, FR, DE, IT, PT, ES) multiplies your opportunity surface. A keyword with 1,000 searches in English might have 500 in French and 300 in German — that’s 1,800 from one concept.
What’s Next: 90-Day Targets
| Metric | Current | Target |
|---|---|---|
| Keywords with full audit | ~50 | 200+ |
| Overall visibility | 0.1% | 20%+ |
| Active outreach contacts | 0 | 50+ |
| New third-party mentions | 0 | 12+ |
| Content pieces published | 23 | 50+ |
| Backlinks from mentions | 37 | 100+ |
Try It Yourself
The surround sound methodology works for any brand. Here’s how to start:
- Pick 20 keywords — focus on “best X”, “X alternatives”, “X vs Y” formats
- Audit the SERPs — for each keyword, check who ranks in positions 1-20
- Check for mentions — does your brand appear on those pages?
- Calculate visibility — use the formulas above
- Prioritize by opportunity — (100% - visibility) × volume = where to focus
- Pitch the gaps — reach out to pages that rank but don’t mention you
The beauty of surround sound is that it compounds. Every new mention improves your visibility score, and every visibility improvement makes the next mention easier to earn.
This post was generated from live database queries running against our production surround sound tracking system. The Three.js visualizations below render real data from 2,804 keywords, 6,900 SERP results, and 7,322 outreach prospects.
Related Articles
- Email Marketing Campaigns: The Complete Guide to Planning, Executing, and Optimizing
- Email Marketing Strategy: Complete Planning & Execution Guide [2025]
- Email Marketing for Small Business: The Complete Guide (2026)
- Email Marketing ROI: How to Calculate, Track & Improve Returns [2025]
- Email Marketing for Beginners: The Complete Getting Started Guide (2026)