Google Reviews Sync releasesself-updates
Syncs Google Business Profile reviews into WordPress as a CPT with ACF fields. Build your display in any page builder — no widget constraints, no SaaS subscription.
by Valerian · github.com/getvalerian/google-reviews-sync · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/getvalerian/google-reviews-sync/releases/download/v2.6.5/google-reviews-sync.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
Readme
Google Reviews Sync
A WordPress plugin by Valerian that syncs Google Business Profile reviews into a Custom Post Type with ACF fields. Build your display with full design control using any page builder — no widget styling constraints, no SaaS subscription for display-only use cases.
Originally built for Elementor, but compatible with any page builder that supports ACF dynamic fields — including Bricks Builder, Divi, Beaver Builder, Oxygen, and GeneratePress. Since reviews are stored as a standard WordPress CPT with ACF fields, any tool that can query posts and display custom fields can display them.
Why this plugin
Most Google Reviews plugins lock you into their widget styles, charge a recurring SaaS fee, or cap how many reviews you can display. This plugin pulls all your reviews into WordPress as structured data so you build exactly the layout you want using your own design system.
Requirements
- WordPress 6.0+
- PHP 8.0+
- ACF Free or Pro
- A page builder that supports ACF dynamic fields (Elementor Pro recommended; Bricks, Divi, Beaver Builder, and others also work)
- Google Cloud project with GBP APIs enabled and access approved
Installation
Download the latest release zip from the Releases page and install via WP Admin → Plugins → Add New → Upload Plugin.
Setup
Step 1 — Create OAuth credentials in Google Cloud
- Go to console.cloud.google.com/apis/credentials
- Create Credentials → OAuth 2.0 Client ID
- Application type: Web application
- Add the redirect URI shown in the plugin's Settings page as an Authorized redirect URI
- Copy the Client ID and Client Secret
Step 2 — Enable the required APIs
In Google Cloud → Library, enable all four of these (they are separate APIs):
| API | Purpose |
|---|---|
| My Business Account Management API | Lists your GBP accounts |
| My Business Business Information API | Lists your locations |
| Google My Business API | Handles reviews and all other GBP data. This is the one most people miss — do NOT look for a separate "My Business Reviews API", it doesn't exist as a standalone entry in Cloud Console |
⚠️ GBP API access requires manual approval from Google. Submit the request form at developers.google.com/my-business/content/prereqs as soon as you create the Cloud project — approval takes 7–10 business days and Google will email the Cloud project owner when approved. Do not wait until the rest of the setup is done to submit this. Complete Steps 3–5 while you wait.
How to read the Step 3 error in the plugin settings:
Quota exceeded for quota metric 'Requests'...→ ✅ Everything is configured correctly. New projects start with 0 QPM until approval. Just wait for the email.No accounts found→ ⚠️ The OAuth-connected Google account may not have Manager or Owner access to the Business Profile, or the Account Management API isn't enabled.403 Forbidden/401 Unauthorized→ OAuth credential issue. Double-check Client ID, Client Secret, and redirect URI match exactly what's in Google Cloud Console.
Step 3 — Enter credentials in plugin settings
WP Admin → Google Reviews → Settings → Step 1. Enter Client ID and Client Secret, save.
Step 4 — Connect Google account
Click Connect Google Account. Sign in with the account that has access to the client's Business Profile. You'll be redirected back to settings automatically.
Step 5 — Select business location
After OAuth, the plugin lists all GBP accounts and locations your Google account can access. Select the right account, then the right location and save.
Step 6 — Sync
Click Sync Reviews Now. The plugin paginates through all reviews (50 at a time, up to ~1,000). Set the minimum star rating to import (default: 4+). After the first sync, a daily WP-Cron job handles updates automatically.
ACF fields
All fields are available as dynamic tags in any ACF-compatible page builder.
| Field name | Type | Notes |
|---|---|---|
reviewer_name |
Text | Reviewer's Google display name |
reviewer_photo |
URL | Small circular profile avatar from Google |
rating |
Number (1–5) | Star rating as an integer |
review_text |
Textarea | Full review text |
review_date |
Date | Returns "January 1, 2025" by default |
featured_review |
True/False | Manually pin reviews to surface first |
google_review_id |
Text | Internal dedup key — do not edit |
Note on review photos: The GBP Reviews API does not return customer-attached in-review photos. The
reviewer_photofield is the reviewer's small circular profile avatar only.
Featuring reviews: Toggle the Featured switch on any review entry in WP Admin → Google Reviews. Featured reviews show in the
google_reviews_featuredandgoogle_reviews_featured_5starquery presets.
Elementor query presets
The plugin registers named WP_Query presets for Elementor's Loop Grid and Posts widget. Go to the widget → Content → Query → Source: Custom Query, then enter the Query ID.
| Query ID | Returns | Use case |
|---|---|---|
google_reviews_all |
All reviews, highest rated first | Full reviews wall |
google_reviews_featured |
Featured toggle only | Curated homepage carousel |
google_reviews_recent |
All reviews, newest first | Latest reviews feed |
google_reviews_5star |
5-star only, newest first | Hero social proof section |
google_reviews_4plus |
4+ stars, highest rated first | Wall with quality filter |
google_reviews_3plus |
3+ stars, highest rated first | Broad display |
google_reviews_featured_5star |
Featured AND 5-star | Tight handpicked carousel |
google_reviews_with_text |
Has written text, highest rated first | Excludes star-only reviews |
google_reviews_4plus_with_text |
4+ stars AND written text | Most common wall use case |
google_reviews_featured_with_text |
Featured AND written text | Carousels where every card needs a quote |
Pagination: Query presets intentionally do not set
posts_per_page. Elementor's Loop Grid widget fully controls the count and pagination. Set Posts Per Page in the widget's Layout tab and configure Pagination in the Pagination tab.
Adding custom presets: Add a new action at the bottom of the plugin file for any filter combination you need. The Query ID becomes whatever you name the action hook.
Shortcodes
All shortcodes are bundled in the plugin — no functions.php additions needed. CSS is also output automatically via wp_head.
[vgr_social_proof_bar] — Full proof bar (recommended for hero sections)
Outputs the complete social proof element: stacked avatars + stars + average rating + review count in one shortcode. Drop into an Elementor Shortcode widget.
[vgr_social_proof_bar count="5" stars="5" label="from %d Google reviews" show_avg="yes" query="featured"]
| Attribute | Default | Notes |
|---|---|---|
count |
5 | Number of avatars to show |
stars |
5 | Filled stars to display |
label |
from %d Google reviews |
%d replaced with live count |
show_avg |
yes |
Show computed average (e.g. 4.8) next to stars |
query |
featured |
Avatar source: all, featured, or 5star |
Other shortcodes
| Shortcode | Description |
|---|---|
[vgr_avatar_stack count="5" query="featured"] |
Stacked circular reviewer avatars only |
[vgr_star_rating stars="5"] |
Static filled star row |
[vgr_aggregate_rating] |
Live computed average as a number (e.g. 4.8) |
[vgr_review_count label="from %d Google reviews"] |
Live review count string |
[vgr_loop_stars rating="5"] |
Star display for inside Loop Builder templates |
[vgr_schema] |
AggregateRating JSON-LD schema output |
Building common layouts
Layout 1 — Star highlight bar with avatars
Used in hero sections. Shows stacked reviewer avatars, star rating, and review count.
Simplest approach — one shortcode widget:
[vgr_social_proof_bar count="5" stars="5" label="from %d Google reviews"]
Style via .vgr-social-proof-bar in your page builder's custom CSS panel.
Manual build — separate widgets in a Flexbox container:
[vgr_avatar_stack count="5" query="featured"] → Shortcode widget
[vgr_star_rating stars="5"] → Shortcode widget
[vgr_aggregate_rating] → Shortcode widget
[vgr_review_count label="from %d Google reviews"] → Shortcode widget
Arrange in a Flexbox row, align items center, gap ~12px. Star + count can be nested in a column if you want them stacked vertically.
Layout 2 — Masonry review grid (the wall)
Built with Elementor's Loop Builder. Compatible with Bricks Builder's Query Loop and similar tools in other builders.
Step 1 — Create a Loop Item template
In Elementor: Templates → Add New → Loop Item. Build the card:
[ Flexbox Column — card ]
├── [ Image widget ] → Dynamic: ACF → reviewer_photo (Circle, 48px)
├── [ Flexbox Row ]
│ ├── [ Text ] → Dynamic: ACF → reviewer_name (bold)
│ └── [ Shortcode ] → [vgr_loop_stars rating="5"] (set rating to Dynamic → ACF → rating)
├── [ Text ] → Dynamic: ACF → review_text
└── [ Text ] → Dynamic: ACF → review_date (small, muted)
Card styling: white background, border-radius ~12px, box-shadow: 0 2px 12px rgba(0,0,0,0.08), 24px padding.
Step 2 — Add a Loop Grid widget
- Template: your Review Card loop item
- Query → Source: Custom Query → Query ID:
google_reviews_4plus_with_text - Layout: 3 columns / Masonry on
- Pagination: Load More or Infinite Scroll
The masonry layout handles variable-height cards automatically — longer reviews create the staggered look without any extra work.
Rich snippet SEO
The plugin outputs LocalBusiness + AggregateRating JSON-LD schema, enabling star ratings in Google Search results.
Configure in Settings → Step 5:
| Setting | Notes |
|---|---|
| Business Name | Defaults to site name |
| Business Type | Choose from Schema.org types — use CafeOrCoffeeShop, Restaurant, LocalBusiness, etc. |
| Business URL | The business website |
| Output scope | Sitewide (recommended), specific page IDs (comma-separated), or disabled |
The aggregate rating and review count are computed dynamically from stored reviews — always accurate as new reviews sync in.
Use [vgr_schema] as a shortcode if you prefer to control output manually per page.
Security
- Token encryption — OAuth tokens encrypted at rest with
sodium_crypto_secretbox. Key derived fromwp-config.phpsalts + a DB-stored salt — database dump alone is not enough to decrypt. - No SQL injection — all DB writes use
wp_insert_post,update_field,update_post_meta(prepared statements internally). - No XSS — all output uses
esc_html,esc_attr,esc_url_raw. Review content sanitized on import. - CSRF protected — all admin form submissions use
check_admin_referer. OAuth uses a state parameter validated via WP transient. - No public URLs — CPT has
public: false. No single post pages are generated. - Token revocation — if a token leaks, revoke at myaccount.google.com/permissions. The Disconnect button in settings clears all stored tokens.
Updates
This plugin uses Plugin Update Checker. When a new release is published here, the standard WordPress "Update Available" notification appears in WP Admin → Plugins.
License
GPL v2 or later. See LICENSE.
Changelog
See CHANGELOG.md.
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v2.6.5 | Sep 1, 2026 | google-reviews-sync.zip | 2 |
| v2.6.4 | Jul 21, 2026 | google-reviews-sync.zip | 1 |
| v2.6.3 | Jul 21, 2026 | google-reviews-sync.zip | 1 |
| v2.6.2 | Jul 21, 2026 | google-reviews-sync.zip | 0 |
| v2.6.1 | Jul 21, 2026 | google-reviews-sync.zip | 0 |
| v2.6.0 | Jul 21, 2026 | google-reviews-sync.zip | 0 |