Updated Oct 2026

How to Embed Google Reviews on Your Website: 3 Ways, With Code

There are three official ways to embed Google reviews on your website. The Maps Embed API iframe is free and unlimited, but it shows a map and place card, not a list of reviews. The Places API (New) returns up to 5 reviews per place, sorted by relevance, billed at $25 per 1,000 calls after 1,000 free calls a month. The Business Profile API returns every review with full text, but only for businesses you own or manage and only after Google approves your access. Pick by how many reviews you need and whose business it is.

Which method should you use?

1. Maps Embed API (iframe)2. Places API (New)3. Business Profile API
Reviews shownA map and place card; visitors click through to read reviewsUp to 5, sorted by relevanceAll, full text
Whose businessAny placeAny placeOnly ones you own or manage
CostFree, unlimited$25 per 1,000 after 1,000 free/monthNo per-call fee from Google
SetupAPI key, 5 minutesAPI key + billing, server codeAccess approval + OAuth
Can you store reviews?n/aNo (beyond allowed exceptions)They’re your own profile’s reviews
Best forContact pagesA small “what customers say” blockReview walls, multi-location sites

Before you start: find your place ID

Methods 1 and 2 need your business’s place ID, a string that often starts with ChIJ. Find it with Google’s Place ID Finder or a Places API Text Search. Place IDs are the one piece of Places data Google lets you store indefinitely.

Method 1 — Free iframe with the Maps Embed API

  1. In Google Cloud console, enable Maps Embed API and create an API key.
  2. Restrict the key to your website’s HTTP referrers.
  3. Paste the iframe:
html
<iframe
  width="600" height="400" style="border:0" loading="lazy" allowfullscreen
  referrerpolicy="no-referrer-when-downgrade"
  src="https://www.google.com/maps/embed/v1/place?key=YOUR_API_KEY&q=place_id:ChIJ_YOUR_PLACE_ID">
</iframe>

Google lists the Embed SKU as free with unlimited usage (pricing). The trade-off: visitors see your place on a map and click through to read reviews on Google. You don’t control the layout and there’s no review text on your page.

Method 2 — Show up to 5 reviews with the Places API (New)

Step 1 — Enable Places API (New) and billing

Enable Places API (New), attach a billing account and create a server-side API key restricted by IP. Requesting the reviews field bills the Place Details Enterprise + Atmosphere SKU: $25 per 1,000 events up to 100,000 a month, with 1,000 free events a month.

Step 2 — Request only the fields you need

The field mask is mandatory: omit it and the call errors.

cURL
curl "https://places.googleapis.com/v1/places/ChIJ_YOUR_PLACE_ID" \
  -H "X-Goog-Api-Key: YOUR_SERVER_KEY" \
  -H "X-Goog-FieldMask: displayName,rating,userRatingCount,googleMapsUri,reviews"

Each review in the Place resource has text, originalText, rating, authorAttribution (name, profile link, photo), publishTime, relativePublishTimeDescription, googleMapsUri and visitDate.

Step 3 — Fetch on the server, render on the page

api.prismareviews.com/v1
// Node 18+ (Express-style handler)
app.get("/reviews", async (req, res) => {
  const r = await fetch(`https://places.googleapis.com/v1/places/${process.env.PLACE_ID}`, {
    headers: {
      "X-Goog-Api-Key": process.env.PLACES_KEY,
      "X-Goog-FieldMask": "rating,userRatingCount,googleMapsUri,reviews",
    },
  });
  const place = await r.json();
  res.render("reviews", { place }); // don't write reviews to your database
});
html
<!-- reviews.html (Jinja) -->
<section>
  <p>{{ place.rating }} ★ from {{ place.userRatingCount }} reviews on Google Maps</p>
  <p><small>Showing up to 5 reviews, ordered by Google by relevance.</small></p>
  {% for rv in place.reviews %}
  <article>
    <img src="{{ rv.authorAttribution.photoUri }}" alt="{{ rv.authorAttribution.displayName }}" width="32" height="32">
    <a href="{{ rv.authorAttribution.uri }}">{{ rv.authorAttribution.displayName }}</a>
    <span>{{ rv.rating }} ★ · {{ rv.relativePublishTimeDescription }}</span>
    <p>{{ rv.text.text }}</p>
  </article>
  {% endfor %}
  <a href="{{ place.googleMapsUri }}">See all reviews on Google Maps</a>
</section>

Step 4 — Follow Google’s display rules

Google’s Places policies require you to:

Step 5 — Watch the bill

You can’t store Places reviews beyond the allowed exceptions, so if every page view fetches reviews, every page view is a billable event. At 30,000 monthly views, that’s (30,000 − 1,000) × $25 / 1,000 = $725 a month for 5 reviews. Load the block only where it matters, or use method 3 for your own business.

The Places API is also covered in our Google Maps reviews API guide.

Method 3 — Show all your reviews with the Business Profile API

If the business is yours (or a client’s you manage), the Business Profile API returns every review with full text (review data). You need Business Profile API access and an OAuth token with the business.manage scope.

cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \
  "https://mybusiness.googleapis.com/v4/accounts/ACCOUNT_ID/locations/LOCATION_ID/reviews?pageSize=50"

The response includes averageRating, totalReviewCount and up to 50 reviews per page with reviewer, starRating (ONE to FIVE), comment and createTime. Page with nextPageToken, render server-side and refresh when the Notifications API reports a NEW_REVIEW. Keep the same attribution habits: reviewer name, star rating and a link to your Google profile.

Common mistakes

MistakeWhat happensFix
No field mask on Place DetailsError responseSend X-Goog-FieldMask
Same unrestricted key in browser and serverKey abuse and surprise billsReferrer-restricted key for the iframe, IP-restricted key for the server
Storing Places reviews in your databaseBreaks Google’s caching policyFetch at render time, or use the Business Profile API for your own data
Removing author names or Google attributionPolicy violationFollow the display rules above
Adding Review schema to win stars in GoogleNo stars: self-serving reviews aren’t eligible for review rich resultsEmbed for people, not for snippets
Using a scraper to get past 5 reviewsBreaks when Google changes markup; terms riskSee why scrapers break

FAQ

Can I embed Google reviews on my website for free?

The Maps Embed API iframe is free and unlimited, but it doesn’t list review text. Review text via the Places API is free for the first 1,000 calls a month, then $25 per 1,000.

Why does the Places API only return 5 reviews?

Google documents a maximum of 5 reviews per place, sorted by relevance. To show more you need the Business Profile API, which only covers businesses you manage.

No. Google doesn’t show review rich results for reviews a business publishes about itself on its own site.

Can I save Google reviews to my database?

Not from the Places API: Google’s policies forbid caching or storing Places content beyond the listed exceptions, such as place IDs. For your own business, read them from the Business Profile API.

Does this work on WordPress, Webflow or Shopify?

Yes. The iframe pastes into any HTML block. Methods 2 and 3 need a small server function that calls the API and renders the reviews.

Render your reviews from Prisma

Prisma isn’t a widget: it’s an API. If you connect your Google locations (and Trustpilot, App Store or Google Play), GET /v1/reviews returns every review of those locations in one JSON format: author, rating, text, date, your reply and a link to the original. Fetch it on your server, cache the result and render your own HTML. Your API key never reaches the browser.

api.prismareviews.com/v1
// Node 18+ (Express-style handler). Keep PRISMA_API_KEY on the server.
app.get("/reviews", async (req, res) => {
  const r = await fetch(
    "https://api.prismareviews.com/v1/reviews?location_id=loc_123&platform=google&limit=20",
    { headers: { Authorization: `Bearer ${process.env.PRISMA_API_KEY}` } }
  );
  const { data } = await r.json(); // [{ id, platform, rating, text, author, created_at, reply, url }]
  res.render("reviews", { reviews: data.filter((rv) => rv.text) }); // skip rating-only reviews
});

Each item has a url to the original review, so you can keep a “Read on Google” link next to every card. To refresh the block when a new review arrives instead of on a timer, subscribe to the review.created webhook.

All your Google reviews on your site, not just 5

Prisma connects Google with its own Cloud project, so you don't file an access form or pay per page view: you connect your locations through OAuth and read every review with one key. Mix in Trustpilot, App Store and Google Play reviews with the same call. See the Google reviews API and Google Maps reviews API pages, or start with the Prisma quickstart.

Your first 2 locations are free, then plans from €49 a month (pricing).

Get API key

All your Google reviews on your site, not just 5. First 2 locations free.

Get your API key in a minute

Free Spark plan: 2 locations, no card. Test keys return sample data on all 11 platforms, so you can build before connecting a real one.