Google Business Profile connection

Google Business Profile connection

Connect your Google account with one-click OAuth (Business Profile API scope). Tokens are stored encrypted and refreshed automatically.

Settings → Google shows connection status, linked email/name, token health (cached), and connection errors. Revalidate token on demand. List all locations linked to the account with quick navigation. If the connection is revoked or invalid, the UI prompts to reconnect; on reconnection, previously inactive locations that still exist in Google can be auto-reactivated. Connection is required before adding locations or syncing reviews/insights.

Dashboard

Dashboard

Global dashboard with aggregated metrics (account- or project-scoped when context is set). Key metrics: total locations, new reviews in last 24 hours, pending responses, need reply (no reply and no draft), drafts ready. Recent reviews (e.g. 5 most recent with location name). Review trend (monthly counts, last 6 months). Rating distribution (1–5 stars). Profile views (e.g. last 30 days from insights). Last location sync and last review sync. Plan/upgrade widget (current plan, usage vs limits, link to upgrade). Link to latest weekly digest. When project context is in use: daily actions (e.g. reply to reviews, review drafts). For admins (Horizon): queue sizes and Horizon status; recent failed jobs list and count. Dashboard can be cached (configurable TTL).

Locations

Locations

Location discovery page lists all GBP locations available to the connected Google account; already-connected locations are marked. Add one or more locations from discovery; the app creates records and dispatches background jobs to fetch full details from the Google API. Location count is limited by plan (Starter 3, Growth 25, Pro 100). List locations in Settings → Google (and elsewhere) with business name, sync status, project assignment. Edit display name and/or assign to a project. Refresh triggers full re-sync (background job). Delete (soft or hard) or bulk delete. Fetch GBP categories for filters/display. Bulk assign multiple locations to a project. Locations can be assigned to at most one project. All Google API calls for locations run via background jobs.

Reviews

Reviews

Paginated reviews list with filters: location, star rating, date range (from/to), reply status (replied / unreplied / has draft), search (comment or reviewer name), project. Default excludes locations in archived projects. Sort by create time, update time, star rating, or reviewer name. Review detail page: full comment, rating, reviewer name, date, location; existing reply or draft; actions: generate AI draft, improve reply, approve, reject, post, edit reply, delete reply. Sync and force sync per location (background job). Export filtered reviews to CSV (throttled); optional project-scoped export with report footer. Batch mark reviewed. Generate AI draft (usage counts against plan). Improve reply (AI for existing Google reply). Delete draft. Approve/reject draft; post approved reply to Google via API (status tracked, pollable). Update or delete reply (app and Google). Authenticated API to poll reply status. All reply posts/updates run in background jobs and are audit-logged.

Reply templates

Reply templates

Reusable text templates for replying to reviews; used manually or by auto-reply rules. List all templates with name, body preview, category, usage count (sorted by usage and name). Create template: name, body (max length), optional category; plan limit applies (Starter 5, Growth 25, Pro 100). Edit name, body, category. Delete template (not allowed if in use by an auto-reply rule). JSON endpoint for templates (e.g. dropdowns in review or auto-reply UI). Usage count tracks how often a template has been applied. Templates are account-scoped.

Auto-reply rules
Pro

Auto-reply rules

Pro plan and higher. Rules automatically apply a reply template to new reviews that match rating criteria. List all rules with order, rating range, linked template, active state. Create rule: set min and max rating (e.g. 4–5), choose reply template, optional order. Only reviews with no existing reply and no draft are considered. Edit rating range, template, order, active. Delete rule. When new reviews are synced (SyncLocationReviews job or webhook), AutoReplyService finds the first matching rule and dispatches a job to generate and optionally post the reply (or store as draft). Only one rule applies per review (first match wins). Rating is the only condition.

GBP posts (local posts)
Pro

GBP posts (local posts)

Pro plan and higher. Create and schedule Google Business Profile local posts (offers, updates, events). Paginated list with filters: location, status (scheduled / published / failed). Create post: choose location(s), content (title, body, optional media), schedule for date/time or publish now. Edit scheduled post content or time before publish. Delete post (scheduled or published); can trigger deletion on Google via job. Retry publish for failed posts. ProcessScheduledPosts runs periodically to publish due posts. Publishing and updates call Google Post API via background jobs. Feature gated by tier.

Insights & analytics

Insights & analytics

Select project and location; choose date range (preset e.g. last 7/30/90 days or custom start/end; default end date a few days ago for finalized data). KPI cards: profile views (Search + Maps), searches, calls, directions, website clicks—each with period-over-period comparison and percentage change. Trend charts over the range; recent days can be marked as processing. Interaction breakdown (calls, directions, website, searches). Search performance: desktop vs mobile, Search vs Maps; optional daily breakdown for last 14 days. Keyword metrics per location: top keywords by impressions, selectable month, month-over-month change (GbpKeywordMetric synced via job). Export insights to CSV for selected location(s) and date range (Growth/Pro); optional report footer when project-scoped.

Projects

Projects

Projects group locations and optional reporting/sharing. Paginated list with search and optional 'include archived' filter. Create project (name; slug auto-generated). Project detail: name, slug, status, location count, last sync times, timezone list, members with project-level role. Edit name, slug, status (active/archived). Archive project (locations can remain linked). Assign project-level role (e.g. viewer, manager) to team members. Generate shareable link (URL + token) for read-only project dashboard; revoke to invalidate. Optional report footer (e.g. company disclaimer) on exported reports and shared dashboard. Configure weekly or monthly scheduled email reports (recipients, frequency); last sent time shown. Report preview (same content as sent). Upload/remove logo for white-label on shared dashboard and reports. Bulk assign locations to a project. Locations assigned to at most one project.

Project dashboard & sharing

Project dashboard & sharing

Per-project dashboard at /projects/{slug}/dashboard: project-scoped KPIs (location count, new reviews 24h, pending responses, need reply, drafts ready), review trend, rating distribution, recent reviews, last sync times, daily actions. Access by project view permission and role. Public share link: anyone with the link can open read-only project dashboard at /share/projects/{slug}?token=... without logging in; same KPIs and recent reviews; share link validity (e.g. expiry) respected. Shared dashboard can show project logo and report footer for white-label.

Team management
Pro

Team management

List all members: email, name, role (Owner / Manager / Viewer), status (active/suspended). Add member by email with role Manager or Viewer (Owner is typically the first/primary). Update account-level role. Suspend or reactivate member. Remove member (delete membership). Roles enforced via policies and RoleCapabilities. Project-level roles configured on project detail page. Team roles are Pro (tier-gated).

Billing & subscriptions

Billing & subscriptions

Razorpay-backed subscriptions. Plans: Starter (free), Growth, Pro. Billing settings: current plan, subscription status, cancel or upgrade. Checkout: select Growth or Pro; app creates Razorpay subscription and redirects to embedded payment (Checkout.js). Duplicate subscriptions for same plan prevented. Success callback updates account tier and subscription ID; cancel redirects to checkout-cancelled. Cancel subscription (end of period or immediately per config). Tier sync: on load, if account is Starter but has Razorpay customer ID, app can sync tier from Razorpay (cached); sync.razorpay.tier middleware can run per request. Razorpay webhook API receives subscription events (activated, cancelled, etc.), verifies signature, updates account tier and subscription state.

Notifications, audit log, profile & more

Notifications, audit log, profile & more

Notifications: per-account preferences (new review email, reply ready email, sync failure email); update saved to account settings and audit-logged; EmailThrottleService throttles outgoing emails.

Audit log: tenant-scoped list of entries (action type, user, target, timestamp, metadata); paginated; only users with viewAudit permission can see it.

User profile: edit name, email; optional profile photo (public disk); change email can reset verification; delete account (with optional account data) and confirmation.

Context & navigation: ResolveCurrentContext middleware sets current account (and optionally project); project switcher in header/sidebar; authenticated API to search projects for dropdown.

Webhooks: Google Pub/Sub endpoint for GBP review create/update (payload validated; SyncLocationReviews dispatched on webhooks queue); Razorpay webhook for subscription events. Endpoints return 200 OK on validation failure to avoid provider retries; errors logged.

Health: GET /health returns JSON (status, timestamp, services: database, Redis, Horizon); 200 if healthy, 503 if any critical service down.

Ready to manage your Google Business Profile in one place?

Join teams that use BizProfile Manager for reviews, insights, posts, and multi-location control.

No credit card required. 14-day free trial.