Competitive Local Strategy — Analysis, Benchmarking, and Displacement
Purpose
SYNTHEX tracks competitors across social platforms and local search to
identify gaps, benchmark performance, and execute displacement strategies.
This skill documents how to use the competitive intelligence infrastructure
to win in local markets.
Infrastructure Map
| Layer |
File |
Exports / Purpose |
| Service (class) |
lib/services/competitive-intel.ts |
CompetitiveIntelligence class, singleton competitiveIntel |
|
|
Key methods: addCompetitor, getCompetitors, getCompetitorProfile, analyzeCompetitorContent, generateBenchmarkReport, analyzeHashtags, identifyContentGaps, compareSentiment, getStrategicInsights |
| Fetcher |
lib/social/competitor-fetcher.ts |
Public profile lookup: Twitter (Bearer token), Instagram (Business Discovery API), YouTube (Channels API), Facebook (Page token), Reddit (public, no auth) |
| Dashboard |
app/dashboard/competitors/page.tsx |
Competitor tracking UI |
| Types |
In competitive-intel.ts |
Competitor, CompetitorProfile, ContentAnalysis, BenchmarkReport, HashtagAnalysis, ContentGap, SentimentComparison |
| Alert types |
CompetitorAlert (5 types) |
viral_post, follower_spike, new_campaign, strategy_change, new_competitor |
Competitor Gap Analysis Workflow
Step 1: Identify Local Competitors
- Search Google for "[service] [suburb]" to find who ranks in local pack
- Check Google Maps for businesses in the same category and service area
- Track 3-5 direct competitors (same service + same geography)
await competitiveIntel.addCompetitor(userId, {
name: 'Competitor Name',
handles: { instagram: '@handle', facebook: 'page-name' },
website: 'https://competitor.com.au',
industry: 'plumbing', // or relevant vertical
notes: 'Main competitor in northern suburbs',
});
Step 2: Run Benchmark Report
const report = await competitiveIntel.generateBenchmarkReport(userId, {
platforms: ['instagram', 'facebook'],
period: { start: thirtyDaysAgo, end: now },
});
The report returns:
metrics.your vs metrics.industryAvg vs metrics.topPerformer
rankings — your rank and percentile for each metric
gaps — where you trail, by how much, with priority (high/medium/low) and recommendations
Step 3: Identify Content Gaps
const gaps = await competitiveIntel.identifyContentGaps(userId, 'instagram');
High opportunity = topic covered by 3+ competitors with >5% engagement rate that you have not covered.
Step 4: Analyse Hashtag Strategy
const hashtags = await competitiveIntel.analyzeHashtags(userId, 'instagram');
Each hashtag gets a recommendation: adopt (high engagement, multiple competitors use it), monitor (moderate performance), or avoid (low engagement or declining).
Market Positioning Framework
Positioning Matrix
Specialised
|
Premium | Niche Expert
Full-Service | Deep Expertise
|
High Price ---------+--------- Low Price
|
Established | Value Player
Brand | Budget-Friendly
|
Generalised
Content Positioning Options
| Position |
Voice |
Content Focus |
| Authority |
Expert, data-driven |
Industry insights, research, case studies |
| Local expertise |
Community-focused, personal |
Suburb guides, local events, neighbourhood tips |
| Community |
Inclusive, conversational |
Customer stories, behind-the-scenes, team culture |
| Premium |
Refined, confident |
Quality craftsmanship, attention to detail, outcomes |
| Value |
Transparent, practical |
Clear pricing, comparison guides, ROI demonstrations |
Integrate with business-dna skill for messaging consistency. GBP description and categories should reflect chosen positioning.
Content Differentiation Strategy
For each high-opportunity content gap identified:
- Create superior content — 10x the depth of competitor content, with a local angle and genuine E-E-A-T signals
- Cross-post strategically — use
content-pipeline skill and platform-content-adaptor for multi-platform distribution
- Monitor sentiment response —
compareSentiment reveals what resonates positively vs generates negative reactions
Differentiation Principles
- Competitors post generic advice? You post suburb-specific case studies.
- Competitors use stock photos? You use genuine before/after photos.
- Competitors ignore comments? You respond to every one within 24 hours.
- Competitors post weekly? You post 3-4 times per week with higher quality.
Review Strategy vs Competitors
Benchmarking Reviews
Compare your GBP review data against competitor profiles:
GBPSnapshot contains your review count and average rating
CompetitorSnapshot (via getCompetitorProfile) contains theirs
Decision Matrix
| Your Position |
Action |
| Trailing review count by 20%+ |
Priority 1: intensify review generation (see local-seo-agent skill) |
| Trailing average rating by 0.3+ stars |
Focus on service quality improvements + rapid response to negative reviews |
| Leading count but trailing rating |
Respond faster to negatives; address service gaps |
| Leading both |
Maintain velocity; focus on quality of replies |
Response Rate Advantage
- Industry average response rate: <50%
- Target: 100% response rate within 24-72 hours
- Use
useGBPReviews({ unreplied: true }) to find unreplied reviews
- AI-assisted replies via
gbp-monitor cron, but always human-reviewed before sending
Local Pack Displacement Checklist
To displace a competitor from the local 3-pack:
Citation Gap Analysis
Process
- Research where each competitor is listed (top 20 directories)
- Compare against your own citation profile
- Prioritise directories where 2+ competitors are listed but you are not
Australian Priority Directories
| Priority |
Directory |
Notes |
| 1 |
Google Business Profile |
Primary — already managed via Synthex |
| 1 |
Apple Maps / Apple Business Connect |
Second-largest maps platform |
| 1 |
Bing Places for Business |
Bing local results |
| 1 |
Yellow Pages Australia |
High domain authority |
| 2 |
True Local |
Australian-specific directory |
| 2 |
Hotfrog |
Business directory |
| 2 |
StartLocal |
Australian local business directory |
| 2 |
Yelp Australia |
Review-focused directory |
| 2 |
Localsearch |
Regional Australian directory |
| 2 |
Word of Mouth |
Australian recommendation platform |
| 3 |
Industry-specific directories |
Varies by vertical (see below) |
Industry-Specific Directories
| Vertical |
Directories |
| Tradies |
HiPages, ServiceSeeking, Oneflare, Airtasker |
| Medical |
HealthEngine, HotDoc, RateMDs |
| Legal |
Law Society (state), FindLaw Australia |
| Hospitality |
TripAdvisor, Zomato, OpenTable |
| Beauty |
Fresha, StyleSeat, Bookwell |
Citation Submission Rules
- NAP must match
GBPLocation exactly (see google-business-profile skill NAP protocol)
- First 250 characters of description should be consistent across all citations
- Use the same logo/profile photo across all directories
- Include UTM-tracked URL for attribution
Monitoring Cadence
| Frequency |
Action |
Source |
| Daily (automated) |
CompetitorAlert monitoring |
viral_post, follower_spike, new_campaign, strategy_change alerts |
| Weekly |
Review competitor social activity |
Dashboard at app/dashboard/competitors/page.tsx |
| Monthly |
Full benchmark report |
generateBenchmarkReport with 30-day period |
| Quarterly |
SWOT update + strategy review |
getStrategicInsights (strengths, weaknesses, opportunities, threats, action items) |
Quarterly Strategy Review Template
Agenda
- Performance review — GSC + GBP snapshot trends (28-day and 90-day)
- Fresh SWOT analysis —
getStrategicInsights(userId, { platforms }) returns structured SWOT + prioritised action items
- Landscape changes — new competitors entered? Existing ones pivoted?
- Content gap evolution —
identifyContentGaps — which gaps closed, which remain, any new ones?
- Set next quarter's top 3 priorities
Priority Decision Tree
Review count behind top competitor?
YES --> Priority: review generation campaign
NO -->
Content authority behind?
YES --> Priority: content creation on high-opportunity gaps
NO -->
Citations behind?
YES --> Priority: citation building sprint
NO -->
All covered?
YES --> Priority: differentiation and innovation
Find new angles competitors haven't explored
SWOT Output Structure
{
strengths: string[]; // Where you outperform (75th+ percentile)
weaknesses: string[]; // Where you lag (25th- percentile)
opportunities: string[]; // Untapped topics with high engagement
threats: string[]; // Competitors growing rapidly
actionItems: {
priority: 'high' | 'medium' | 'low';
action: string;
}[];
}
Reference skill: This is a read-only architecture guide — it documents existing systems and does not generate creative or code output. No capability uplift block is needed.
Foundation & Gate Wiring (SYN-1049)
Adopted from the senior-skill standard so every artefact this connector produces is checked against the locked foundation before it lands.
Reads at every invocation (never cached — re-read each run):
.claude/memory/ceo-foundation.md — verification gates for category/competitor claims, universal taboos.
.claude/memory/verification-gates.md — gate state for any claim referenced.
Output gate: every client-facing artefact this connector produces routes through brand-voice-enforce before the CEO batched-review queue. A REJECT blocks the artefact until the quoted offending string is fixed.
Evidence standard: every quantitative or factual claim carries exactly one tag — [VERIFIED] / [INFERENCE] / [UNCONFIRMED]. Untagged = defect (.claude/rules/fabel-evidence-standard.md). Never state a projected result as fact.
Spec: see spec.md in this skill directory.
1---2name: competitive-local-strategy3description: Competitor gap analysis, displacement tactics, benchmarking, citation gaps, and quarterly strategy reviews for local businesses. Use when analysing competitors, planning market positioning, or building competitive advantage in local search.4---56# Competitive Local Strategy — Analysis, Benchmarking, and Displacement78## Purpose910SYNTHEX tracks competitors across social platforms and local search to11identify gaps, benchmark performance, and execute displacement strategies.12This skill documents how to use the competitive intelligence infrastructure13to win in local markets.1415## Infrastructure Map1617| Layer | File | Exports / Purpose |18| --------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |19| Service (class) | `lib/services/competitive-intel.ts` | `CompetitiveIntelligence` class, singleton `competitiveIntel` |20| | | Key methods: `addCompetitor`, `getCompetitors`, `getCompetitorProfile`, `analyzeCompetitorContent`, `generateBenchmarkReport`, `analyzeHashtags`, `identifyContentGaps`, `compareSentiment`, `getStrategicInsights` |21| Fetcher | `lib/social/competitor-fetcher.ts` | Public profile lookup: Twitter (Bearer token), Instagram (Business Discovery API), YouTube (Channels API), Facebook (Page token), Reddit (public, no auth) |22| Dashboard | `app/dashboard/competitors/page.tsx` | Competitor tracking UI |23| Types | In `competitive-intel.ts` | `Competitor`, `CompetitorProfile`, `ContentAnalysis`, `BenchmarkReport`, `HashtagAnalysis`, `ContentGap`, `SentimentComparison` |24| Alert types | `CompetitorAlert` (5 types) | `viral_post`, `follower_spike`, `new_campaign`, `strategy_change`, `new_competitor` |2526## Competitor Gap Analysis Workflow2728### Step 1: Identify Local Competitors2930- Search Google for "[service] [suburb]" to find who ranks in local pack31- Check Google Maps for businesses in the same category and service area32- Track 3-5 direct competitors (same service + same geography)3334```35await competitiveIntel.addCompetitor(userId, {36 name: 'Competitor Name',37 handles: { instagram: '@handle', facebook: 'page-name' },38 website: 'https://competitor.com.au',39 industry: 'plumbing', // or relevant vertical40 notes: 'Main competitor in northern suburbs',41});42```4344### Step 2: Run Benchmark Report4546```47const report = await competitiveIntel.generateBenchmarkReport(userId, {48 platforms: ['instagram', 'facebook'],49 period: { start: thirtyDaysAgo, end: now },50});51```5253The report returns:5455- `metrics.your` vs `metrics.industryAvg` vs `metrics.topPerformer`56- `rankings` — your rank and percentile for each metric57- `gaps` — where you trail, by how much, with priority (high/medium/low) and recommendations5859### Step 3: Identify Content Gaps6061```62const gaps = await competitiveIntel.identifyContentGaps(userId, 'instagram');63```6465High opportunity = topic covered by 3+ competitors with >5% engagement rate that you have not covered.6667### Step 4: Analyse Hashtag Strategy6869```70const hashtags = await competitiveIntel.analyzeHashtags(userId, 'instagram');71```7273Each hashtag gets a recommendation: `adopt` (high engagement, multiple competitors use it), `monitor` (moderate performance), or `avoid` (low engagement or declining).7475## Market Positioning Framework7677### Positioning Matrix7879```80 Specialised81 |82 Premium | Niche Expert83 Full-Service | Deep Expertise84 |85 High Price ---------+--------- Low Price86 |87 Established | Value Player88 Brand | Budget-Friendly89 |90 Generalised91```9293### Content Positioning Options9495| Position | Voice | Content Focus |96| --------------- | --------------------------- | ---------------------------------------------------- |97| Authority | Expert, data-driven | Industry insights, research, case studies |98| Local expertise | Community-focused, personal | Suburb guides, local events, neighbourhood tips |99| Community | Inclusive, conversational | Customer stories, behind-the-scenes, team culture |100| Premium | Refined, confident | Quality craftsmanship, attention to detail, outcomes |101| Value | Transparent, practical | Clear pricing, comparison guides, ROI demonstrations |102103Integrate with `business-dna` skill for messaging consistency. GBP description and categories should reflect chosen positioning.104105## Content Differentiation Strategy106107For each high-opportunity content gap identified:1081091. **Create superior content** — 10x the depth of competitor content, with a local angle and genuine E-E-A-T signals1102. **Cross-post strategically** — use `content-pipeline` skill and `platform-content-adaptor` for multi-platform distribution1113. **Monitor sentiment response** — `compareSentiment` reveals what resonates positively vs generates negative reactions112113### Differentiation Principles114115- Competitors post generic advice? You post suburb-specific case studies.116- Competitors use stock photos? You use genuine before/after photos.117- Competitors ignore comments? You respond to every one within 24 hours.118- Competitors post weekly? You post 3-4 times per week with higher quality.119120## Review Strategy vs Competitors121122### Benchmarking Reviews123124Compare your GBP review data against competitor profiles:125126- `GBPSnapshot` contains your review count and average rating127- `CompetitorSnapshot` (via `getCompetitorProfile`) contains theirs128129### Decision Matrix130131| Your Position | Action |132| ------------------------------------- | -------------------------------------------------------------------------- |133| Trailing review count by 20%+ | Priority 1: intensify review generation (see `local-seo-agent` skill) |134| Trailing average rating by 0.3+ stars | Focus on service quality improvements + rapid response to negative reviews |135| Leading count but trailing rating | Respond faster to negatives; address service gaps |136| Leading both | Maintain velocity; focus on quality of replies |137138### Response Rate Advantage139140- Industry average response rate: <50%141- Target: 100% response rate within 24-72 hours142- Use `useGBPReviews({ unreplied: true })` to find unreplied reviews143- AI-assisted replies via `gbp-monitor` cron, but always human-reviewed before sending144145## Local Pack Displacement Checklist146147To displace a competitor from the local 3-pack:148149- [ ] **Review count** — match or exceed their total review count150- [ ] **Average rating** — maintain higher rating (minimum 4.5 stars)151- [ ] **Listing completeness** — every field populated; exceed competitor's detail level152- [ ] **Citations** — listed on all directories where competitor appears (see Citation Gap Analysis)153- [ ] **Local content** — more suburb-specific service pages than competitor154- [ ] **Local backlinks** — higher-quality local links (chambers of commerce, community groups)155- [ ] **Google Posts frequency** — more frequent and higher-quality posts (1-2/week minimum)156- [ ] **Response time** — faster response to reviews (24h target vs their average)157- [ ] **Photo freshness** — more recent and more diverse photos158159## Citation Gap Analysis160161### Process1621631. Research where each competitor is listed (top 20 directories)1642. Compare against your own citation profile1653. Prioritise directories where 2+ competitors are listed but you are not166167### Australian Priority Directories168169| Priority | Directory | Notes |170| -------- | ----------------------------------- | ------------------------------------- |171| 1 | Google Business Profile | Primary — already managed via Synthex |172| 1 | Apple Maps / Apple Business Connect | Second-largest maps platform |173| 1 | Bing Places for Business | Bing local results |174| 1 | Yellow Pages Australia | High domain authority |175| 2 | True Local | Australian-specific directory |176| 2 | Hotfrog | Business directory |177| 2 | StartLocal | Australian local business directory |178| 2 | Yelp Australia | Review-focused directory |179| 2 | Localsearch | Regional Australian directory |180| 2 | Word of Mouth | Australian recommendation platform |181| 3 | Industry-specific directories | Varies by vertical (see below) |182183### Industry-Specific Directories184185| Vertical | Directories |186| ----------- | -------------------------------------------- |187| Tradies | HiPages, ServiceSeeking, Oneflare, Airtasker |188| Medical | HealthEngine, HotDoc, RateMDs |189| Legal | Law Society (state), FindLaw Australia |190| Hospitality | TripAdvisor, Zomato, OpenTable |191| Beauty | Fresha, StyleSeat, Bookwell |192193### Citation Submission Rules194195- NAP must match `GBPLocation` exactly (see `google-business-profile` skill NAP protocol)196- First 250 characters of description should be consistent across all citations197- Use the same logo/profile photo across all directories198- Include UTM-tracked URL for attribution199200## Monitoring Cadence201202| Frequency | Action | Source |203| ----------------- | --------------------------------- | ------------------------------------------------------------------------------------ |204| Daily (automated) | `CompetitorAlert` monitoring | `viral_post`, `follower_spike`, `new_campaign`, `strategy_change` alerts |205| Weekly | Review competitor social activity | Dashboard at `app/dashboard/competitors/page.tsx` |206| Monthly | Full benchmark report | `generateBenchmarkReport` with 30-day period |207| Quarterly | SWOT update + strategy review | `getStrategicInsights` (strengths, weaknesses, opportunities, threats, action items) |208209## Quarterly Strategy Review Template210211### Agenda2122131. **Performance review** — GSC + GBP snapshot trends (28-day and 90-day)2142. **Fresh SWOT analysis** — `getStrategicInsights(userId, { platforms })` returns structured SWOT + prioritised action items2153. **Landscape changes** — new competitors entered? Existing ones pivoted?2164. **Content gap evolution** — `identifyContentGaps` — which gaps closed, which remain, any new ones?2175. **Set next quarter's top 3 priorities**218219### Priority Decision Tree220221```222Review count behind top competitor?223 YES --> Priority: review generation campaign224 NO -->225 Content authority behind?226 YES --> Priority: content creation on high-opportunity gaps227 NO -->228 Citations behind?229 YES --> Priority: citation building sprint230 NO -->231 All covered?232 YES --> Priority: differentiation and innovation233 Find new angles competitors haven't explored234```235236### SWOT Output Structure237238```typescript239{240 strengths: string[]; // Where you outperform (75th+ percentile)241 weaknesses: string[]; // Where you lag (25th- percentile)242 opportunities: string[]; // Untapped topics with high engagement243 threats: string[]; // Competitors growing rapidly244 actionItems: {245 priority: 'high' | 'medium' | 'low';246 action: string;247 }[];248}249```250251> **Reference skill:** This is a read-only architecture guide — it documents existing systems and does not generate creative or code output. No capability uplift block is needed.252253---254255## Foundation & Gate Wiring (SYN-1049)256257> Adopted from the senior-skill standard so every artefact this connector produces is checked against the locked foundation before it lands.258259**Reads at every invocation (never cached — re-read each run):**260261- `.claude/memory/ceo-foundation.md` — verification gates for category/competitor claims, universal taboos.262- `.claude/memory/verification-gates.md` — gate state for any claim referenced.263264**Output gate:** every client-facing artefact this connector produces routes through `brand-voice-enforce` before the CEO batched-review queue. A REJECT blocks the artefact until the quoted offending string is fixed.265266**Evidence standard:** every quantitative or factual claim carries exactly one tag — `[VERIFIED]` / `[INFERENCE]` / `[UNCONFIRMED]`. Untagged = defect (`.claude/rules/fabel-evidence-standard.md`). Never state a projected result as fact.267268**Spec:** see `spec.md` in this skill directory.