GBP — Feature Gap Analysis & Roadmap
Compared SEMrush Local’s feature set against Leadmetrics’ existing GBP implementation. Leadmetrics already has the core foundation; there are 8 meaningful features to build and 2 that require third-party API partnerships.
What Leadmetrics Already Has
| Feature | Location |
|---|---|
| GBP Post AI Writer | packages/agents/src/workers/gbp-post-writer.worker.ts |
| Review Response AI with HITL (draft + approve) | packages/agents/src/workers/review-response-writer.worker.ts |
| GBP Performance Insights AI (views, calls, directions, bookings) | packages/agents/src/workers/insights/gbp-insights.worker.ts |
| GBP Channel Detail UI (Overview, Profile Views, Search Terms, Reviews tabs) | apps/dashboard/src/app/(dashboard)/channels/[id]/GoogleBusinessProfileChannelDetail.tsx |
| GBP OAuth connection + multi-location picker | apps/api/src/routers/channel-connect.ts |
| GBP posts in Calendar and Deliverables | apps/dashboard/src/app/(dashboard)/calendar/CalendarClient.tsx |
Feature Gaps
Tier 1 — Build on existing infrastructure (high ROI)
1. New Review Notifications (Low-star Alerts) — [To Build — Pub/Sub deferred]
SEMrush does: Instant notification when a 1–3 star review arrives, before responding.
Leadmetrics gap: No real-time alert; reviews appear in the Reviews tab but nothing proactively surfaces negative ones.
Chosen approach: Google Cloud Pub/Sub (not polling).
Google Business Profile does not have native webhooks. The correct mechanism is the mybusinessnotifications.googleapis.com API, which publishes review events to a Google Cloud Pub/Sub topic in real time.
Why Pub/Sub over polling:
- True push — no lag, no wasted API quota checking for changes
- Google’s official recommended approach for real-time review monitoring
- Covers all review events (new review, updated review, deleted review) in one subscription
Implementation plan (deferred):
- GCP setup — Create a Pub/Sub topic and subscription in the Leadmetrics GCP project; grant the GBP service account
pubsub.publisheron the topic - Register notification settings — After a GBP channel is connected, call
POST https://mybusinessnotifications.googleapis.com/v1/{name}/notificationSettingto register the Pub/Sub topic forNEW_REVIEWandUPDATED_REVIEWnotification types - Pub/Sub consumer endpoint — Add a new Fastify route (
POST /webhooks/v1/gbp-reviews) that verifies the Pub/Sub push message signature and parses the review payload - Notification dispatch — Call
enqueueNotification()with a new"gbp_new_review"slug; for 1–3 star reviews add urgency flag; use existing in-app + email provider - Unregister on disconnect — When a GBP channel is disconnected, call the notificationSetting API to clear the subscription
Files to create/touch:
apps/api/src/routers/webhooks.ts— new Pub/Sub push handlerpackages/providers/google/src/google-business-profile.ts— addregisterNotifications(),unregisterNotifications()apps/api/src/routers/channel-connect.ts— call register/unregister on connect/disconnectapps/servers/notifications/— addgbp_new_reviewnotification slug + email template
2. Review Auto-Reply Toggle
SEMrush does: Configurable per-tenant setting: AI auto-replies to all reviews, or only specific star ratings, with chosen language and tone. No human approval needed.
Leadmetrics gap: HITL is always required for 1–3 star reviews; 4–5 star bulk-approve exists in docs but may not be fully wired.
How to build: Add a reviewAutoReply setting to tenant config (star rating threshold, tone). When enabled, the review-response-writer publishes the response directly to GBP API rather than creating an approval task.
Files to touch: packages/agents/src/workers/review-response-writer.worker.ts, tenant settings schema, packages/providers/google/src/google-business-profile.ts (add replyToReview() method).
3. Review Generation Campaigns
SEMrush does: Upload customer contacts → automated email/SMS drip campaigns using Google-guideline-compliant templates asking for a review. High response-rate templates.
Leadmetrics gap: Not built at all. This is a strong retention feature and a key differentiator for local business clients.
How to build:
- New DB model:
ReviewCampaign(tenant, name, status, channel) +ReviewCampaignContact(email, phone, status, sent_at, review_link) - New API router:
apps/api/src/routers/review-campaigns.ts - New BullMQ worker:
packages/agents/src/workers/review-campaign.worker.ts— handles drip scheduling, sends via existing email provider, tracks open/click/review - Dashboard UI: new section under the GBP channel detail or standalone Campaigns page
- Templates must comply with Google’s review solicitation guidelines (no incentives, no filtering)
4. Competitor Review Analytics
SEMrush does: Set up competitor businesses to track. See their average rating, total review count, reply rate, and trend over time. Read their actual reviews.
Leadmetrics gap: No competitor tracking at all.
How to build: GBP API exposes public location data. Store competitor location IDs per tenant. Schedule periodic sync of their public review stats. Add a Competitors tab to the GBP channel detail page.
Files to touch: New CompetitorLocation DB model; packages/providers/google/src/google-business-profile.ts (public location lookup); new insights worker competitor-review-analyst.worker.ts.
5. GBP Edit / Suggestion Monitoring
SEMrush does: Show a log of all changes Google or users have applied to the profile. Let the business owner accept or reject each change with one click.
Leadmetrics gap: No monitoring; Google can silently alter business info (hours, category, photos) without the business knowing.
How to build: Poll the GBP location data on a schedule, diff against the stored snapshot, surface changes in a new “Profile Changes” tab. Wire accept/reject to the GBP API’s updateLocation() endpoint.
Files to touch: packages/providers/google/src/google-business-profile.ts (add getLocation(), updateLocation()); new DB model GBPProfileSnapshot; dashboard UI change log tab.
Tier 2 — Significant new capabilities
6. GBP Autopilot / AI Agent Mode
SEMrush does: Single toggle — connect GBP, AI handles posts + review replies + description optimization fully automatically. Claims +40% visibility.
Leadmetrics angle: Leadmetrics already has all three agents (post writer, review response writer, insights analyst). This is a product packaging decision: expose a tenant-level “Autopilot” toggle that removes all HITL gates for GBP actions and sets post frequency to maximum.
How to build: New tenant setting gbpAutopilot: boolean. When enabled: post-writer auto-publishes, review-response-writer auto-replies, description optimizer runs on a schedule. Add onboarding prompt to set this up.
Value proposition: “Set it and forget it” — positions Leadmetrics directly against SEMrush’s GBP AI Agent as an AI-first product.
7. Multi-Platform Review Monitoring
SEMrush does: Monitor reviews from 44+ platforms in a single dashboard: Google, Facebook, Yelp, Tripadvisor, etc.
Leadmetrics gap: Reviews tab only shows GBP reviews. Facebook is already a connected channel.
How to build: Extend the review sync job and the Reviews tab UI to pull from Facebook Reviews API (already have OAuth). Yelp and Tripadvisor would require separate OAuth setups or scraping (out of scope initially).
Priority: Facebook first (already connected), then evaluate others.
8. 24-Month GBP Analytics + Year-over-Year Comparison
SEMrush does: 24+ months of historical performance data — 4× more than GBP’s own tools. YoY comparison overlaid on charts.
Leadmetrics gap: GBP insights are fetched live from the API on demand and not persisted. GBP API itself only returns a limited window.
How to build: Schedule a nightly job to snapshot GBP metrics into a GBPMetricsSnapshot DB table. The insights analyst and dashboard charts read from stored snapshots. Add YoY toggle to the Profile Views chart.
Files to touch: New DB model GBPMetricsSnapshot; new scheduled job gbp-metrics-snapshot.job.ts; update GoogleBusinessProfileChannelDetail.tsx chart query.
Tier 3 — Third-party API partnerships required
9. Listings Management (NAP across 150+ directories)
SEMrush does: Sync business name, address, phone to 150+ directories including Apple Maps, Waze, Alexa, Siri, Yelp, healthcare directories, etc.
Why skip for now: Requires integration with an aggregator like Yext, Neustar/Localeze, or Uberall. These are expensive API partnerships with per-location pricing. Not feasible to build in-house.
Future option: Evaluate a white-label partnership with Yext or Uberall.
10. Map Rank Tracker (Geo-grid Heatmap)
SEMrush does: Shows Google Maps ranking position for a given keyword at every point on a configurable area grid — like a heat map of local visibility.
Why skip for now: Requires making Google Places API requests from distributed geo-locations (proxies or a geo-distributed service) or paying for a third-party rank API (e.g., Local Falcon, BrightLocal). Significant infrastructure cost.
Future option: Evaluate an API integration with Local Falcon or SERP API that provides geo-grid rank data.
Implementation Roadmap
Phase 1 — Quick Wins
- Low-star review alerts
- Review auto-reply toggle (wire up 4–5 star auto-approve; add on/off setting)
Phase 2 — Core Review Management
- Review generation campaigns (email first, SMS second)
- Competitor review analytics
- GBP edit / suggestion monitoring
Phase 3 — Advanced Local SEO
- GBP Autopilot / AI Agent mode
- Multi-platform review monitoring (Facebook first)
- 24-month GBP analytics + YoY comparison
Phase 4 — Evaluate Third-Party Partnerships
- Map Rank Tracker — evaluate Local Falcon / SERP API
- Listings Management — evaluate Yext / Uberall white-label
Key Files Reference
| File | Change Needed |
|---|---|
packages/providers/google/src/google-business-profile.ts | Add replyToReview(), getLocation(), updateLocation(), competitor public lookup |
packages/agents/src/workers/review-response-writer.worker.ts | Add auto-reply mode, respect gbpAutopilot tenant setting |
apps/dashboard/src/app/(dashboard)/channels/[id]/GoogleBusinessProfileChannelDetail.tsx | Add Profile Changes tab, Competitors tab; extend Review tab with multi-platform |
apps/api/src/routers/review-campaigns.ts | New — review generation campaign CRUD + trigger endpoints |
packages/agents/src/workers/review-campaign.worker.ts | New — BullMQ drip worker for review generation campaigns |
packages/agents/src/workers/competitor-review-analyst.worker.ts | New — periodic competitor review stats sync |
| DB schema | New models: ReviewCampaign, ReviewCampaignContact, CompetitorLocation, GBPProfileSnapshot, GBPMetricsSnapshot |