ScreenshotNeo

BlogHow-to

How to Automatically Create Images from New Google Business Profile Reviews

Turn new Google Business Profile reviews into branded images with a review trigger, a design step, and an approval workflow.

By the ScreenshotNeo team29 September 202611 min read

How to Automatically Create Images from New Google Business Profile Reviews

A new Google Business Profile review can start an automated image workflow, but detecting a review does not create a graphic by itself. You need a trigger, a step that retrieves or maps review fields, a design or rendering step that puts those fields into a template, and usually a human approval step before publishing.

For a no-code start, Zapier lists Google Business Profile’s New Review trigger and Canva’s Upload Asset action. Those integrations do not, by themselves, document a complete review-to-image workflow or prove that review text will populate and render a Canva design. You must configure and verify the design step and the destination publishing step in the tools you choose. [Zapier’s Google Business Profile and Canva integration]

1. Choose the workflow that fits

Approach Good fit What you build
No-code integration A single business or a small workflow maintained by a marketer A review trigger, field mapping, a confirmed template/render action, and optional approval and publishing actions
Google API and Cloud Pub/Sub Developers, custom pipelines, or workflows serving multiple locations Notification setup, a subscriber, review retrieval, image rendering, storage, and optional publishing

Use no-code if the current integration actions can supply the review data to a design service that actually renders a finished image. Use the API route when you need control over event handling, retries, storage, privacy rules, or your own renderer. Both routes still need a design step: the review event is data, not an image.

2. Build a no-code workflow

  1. Connect the Business Profile account. In the workflow builder, choose Google Business Profile and its New Review trigger. Select the account and location if those fields are requested. Run the trigger’s test so you can inspect the fields actually returned.
  2. Decide which reviews qualify. Add a filter or review step for location, rating, review text, language, or other fields the trigger provides. Treat missing text as valid input: a reviewer may submit a rating without a written comment. Do not rely on a field that the trigger test does not return.
  3. Map the review to a design. Choose a design service and confirm it has an action that can create or populate a template with supplied fields and export or render the result. Zapier’s listing confirms a Canva Upload Asset action, which uploads an asset; that alone does not establish template population or image generation. Canva’s available actions and fields may change, so inspect the current action picker and test with sample data.
  4. Render and store the image. Use the chosen service’s confirmed design/export action, or an image-rendering service you control. Choose a fixed output size and format that fit the destination. Keep the output URL or asset identifier with the review identifier so retries do not create confusing duplicates.
  5. Review before publishing. Route the draft to a person or an approval queue. Check that the review is authentic, the quote is reproduced accurately, the name and rating are appropriate to show, and the design is legible. Customer quotations can reveal personal information; use only the identifying details your policy allows.
  6. Publish only after confirming the media action. Zapier lists a Google Business Profile Create Post action, but its listing does not establish that a generated image can be attached through that action. Check its current fields and media support before making it the final step. You can instead send the approved image to a social scheduler or a human publishing queue.

Zapier’s integration listing shows the New Review trigger, Canva’s Upload Asset action, and a separate Google Business Profile Create Post action. It does not confirm an end-to-end recipe that converts review text into an image and attaches that image to a post. [Integration and supported actions] [Google Business Profile integrations]

3. Build a developer workflow with Cloud Pub/Sub

Google’s Business Profile Notifications API publishes events through Cloud Pub/Sub. Its supported events include new and updated reviews. Google’s setup requires an application registration and OAuth 2.0 credentials, a Pub/Sub topic, permission for Google’s publisher identity to publish to that topic, a push or pull subscriber, and notification settings linking the Business Profile account to the topic. [Google: Manage real-time notifications]

A review event is only the starting signal; retrieval, rendering, and approval are separate workflow steps.
A review event is only the starting signal; retrieval, rendering, and approval are separate workflow steps.

Prerequisites

  • A Business Profile account and location your application is authorized to manage.
  • A Google Cloud project with Cloud Pub/Sub configured and a topic created.
  • OAuth 2.0 credentials and the necessary Business Profile API access for your application.
  • A subscriber that can process notifications and a service or function that can retrieve review details, render images, and store or route them.

Google describes these APIs as developer tools for managing profiles; this is not a dashboard toggle. Review-data access also requires app registration and OAuth credentials. Read the current setup and review-data guides before implementation because access requirements and API details are consequential and can change. [Google Business Profile API overview] [Google: Work with review data]

Configure notifications

  1. Register the application and configure OAuth credentials following Google’s current API setup instructions.
  2. Create a Cloud Pub/Sub topic. Grant pubsub.topics.publish to mybusiness-api-pubsub@system.gserviceaccount.com.
  3. Configure a push or pull subscriber. A push subscriber needs a reachable endpoint configured for the subscription; a pull subscriber must poll and acknowledge messages after successful processing.
  4. Call accounts.updateNotificationSetting for the account and set its pubsubTopic to the topic you created. Google documents the endpoint and update mask in the notification setup guide.
  5. When a message arrives, parse the notification’s account, location, and review resource names. Use the review API to retrieve the fields your card needs. Do not assume the event contains the complete review object.
  6. Apply your policy, render the design, persist the result, and acknowledge the message only when your processing strategy has safely handled it.

The notification settings endpoint is PATCH https://mybusinessnotifications.googleapis.com/v1/accounts/{accountId}/notificationSetting?updateMask=pubsubTopic. The request body sets pubsubTopic to the full topic name. A minimal request shape is below; it is not a substitute for obtaining a valid OAuth access token or configuring the Pub/Sub topic and permissions.

curl -X PATCH \
  'https://mybusinessnotifications.googleapis.com/v1/accounts/ACCOUNT_ID/notificationSetting?updateMask=pubsubTopic' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"pubsubTopic":"projects/PROJECT_ID/topics/TOPIC_ID"}'

For the review retrieval call, use the current Business Profile review API reference and the review resource name delivered in the notification. The exact request path depends on that resource name and the API version and access available to your application. Google documents review fields such as review text, star rating, reviewer information, and timestamps in its review reference. [Google review resource]

4. Parse an incoming Pub/Sub push message

A Pub/Sub push request commonly carries a base64-encoded message payload. The following small Python handler illustrates decoding the envelope and extracting the notification JSON. It deliberately leaves review retrieval and image rendering to your application: use the resource names and current API documentation to make the authorized API call. Deploy behind your chosen web framework and verify the actual notification schema before relying on field names.

import base64
import json
from http.server import BaseHTTPRequestHandler, HTTPServer

class Handler(BaseHTTPRequestHandler):
    def do_POST(self):
        length = int(self.headers.get("Content-Length", "0"))
        envelope = json.loads(self.rfile.read(length))
        message = envelope.get("message", {})
        encoded = message.get("data", "")
        notification = json.loads(base64.b64decode(encoded)) if encoded else {}

        # Inspect and validate the current notification schema.
        # Queue the review resource for retrieval and image rendering.
        print(json.dumps(notification))

        self.send_response(204)
        self.end_headers()

HTTPServer(("0.0.0.0", 8080), Handler).serve_forever()

This example is a parsing starting point, not production-ready authentication or a complete subscriber. In production, validate the push subscription request according to Google Cloud’s current guidance, limit access to the endpoint, log message identifiers without unnecessarily logging customer text, and define how failures are retried. For pull subscribers, acknowledge only after the message is safely handed to durable processing.

5. Design the image pipeline

Keep event handling separate from rendering. A useful pipeline is:

Keep review fields, template rendering, and approval distinct so the final image is accurate and ready to publish.
Keep review fields, template rendering, and approval distinct so the final image is accurate and ready to publish.
  1. Receive: accept the review event and record its message ID and resource name.
  2. Deduplicate: check whether that review has already been processed. Event delivery can be retried; make rendering and publishing idempotent.
  3. Retrieve: fetch review details using authorized API access. Treat notification content as a signal to look up current review data.
  4. Apply rules: skip, hold, or redact reviews according to your rating, text, location, language, and privacy policy. Decide how to handle edits and deleted or unavailable reviews.
  5. Render: insert approved fields into a branded template. Escape text for the rendering context, set maximum lengths, and provide a layout for reviews with no written comment or unusually long text.
  6. Approve and route: store the draft and review reference, request human approval, then send the approved image to the destination using a verified action.

A screenshot service can render a web-based review card when your template is an HTML page. The page should expose a stable URL, wait until fonts and content are ready, and avoid putting private review data in a publicly accessible URL. ScreenshotNeo offers a website screenshot API and MCP server; it can capture a URL as an image or PDF and supports HTML/CSS to image, custom CSS and JavaScript, selector waits, and image formats. See the ScreenshotNeo site for the service overview.

Or skip the browser setup

If your review card is a web page, use ScreenshotNeo to capture it as an image with one request. Replace the example page with a stable URL for your rendered card and use your API key. See the ScreenshotNeo API documentation for request options.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com/review-card -o shot.webp

ScreenshotNeo accepts cookie and consent banners like a visitor and removes 60+ known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers report the page verdict and billing status. Its MCP server offers take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots. Sign up for 1,000 free screenshots a month with no card.

6. Reliability, performance, and cost

Reliability

  • Expect duplicate delivery. Keep a durable record keyed by review resource or another stable identifier, and make downstream operations safe to repeat.
  • Separate receipt from work. Enqueue rendering and publishing work so slow design operations do not block event handling. Set explicit retry limits and a place to inspect messages that repeatedly fail.
  • Handle review changes. Google supports notifications for new or updated reviews. Decide whether an updated review should regenerate a draft, update a previously published image, or require a new approval.
  • Track each stage. Record receipt, review retrieval, render, approval, and publication status. Avoid storing unnecessary review text in logs.
  • Keep a manual path. Provide a way to retry a failed render or send a draft for human handling without losing the event.

Performance

For a low-volume workflow, a single subscriber and renderer may be enough. For multiple locations or bursts of reviews, queue render jobs and scale workers independently. Fetch the review only when needed, use a fixed template rather than rebuilding design assets each time, and set bounded timeouts for retrieval and rendering. Do not acknowledge or discard a message merely because an external design service is temporarily slow.

Cost and operational overhead

The API route involves more components to configure and maintain: application credentials, Pub/Sub, a subscriber, review retrieval, rendering, storage, and any destination integration. The no-code path reduces custom infrastructure but may rely on paid integration or design-service plans and the precise actions available to your account. The dossier does not establish prices for those third-party services, so check their current pricing and task limits directly. Estimate your own rendering and storage usage from expected review volume and whether you regenerate images after edits.

7. Troubleshooting

Symptom Likely cause Fix
No event arrives Topic is not linked to the account, publisher permission is missing, or the subscriber is misconfigured Check the topic name, grant pubsub.topics.publish to Google’s documented publisher identity, inspect subscription delivery, and verify notification settings.
OAuth returns unauthorized Credentials, authorization, or API access are incomplete or expired Revisit Google’s current app registration and OAuth setup, use credentials for the right project, and refresh or reauthorize as required.
Notification parses but review fields are absent The event is a notification containing resource names rather than the full review Use the review resource name to retrieve the review with the authorized review API; validate the current notification schema.
Image contains blank or stale fields Rendering began before data or fonts were ready, or a prior result was reused Wait for the specific content or render-complete condition, invalidate stale output as appropriate, and test with long and empty review text.
Same review creates multiple images Redelivery or a retry repeated a non-idempotent render/publish action Deduplicate on a stable review reference and persist render and publish status before retrying.
Canva upload succeeds but no graphic appears Upload Asset uploads an asset; it does not prove a template was populated and exported Add and test a supported design creation/population and export action, or use a renderer whose output behavior is verified.
Post action cannot attach the image The current Create Post action may not expose media fields needed by your workflow Inspect its current field list and documentation; use a verified publishing destination or human handoff if image attachment is unsupported.
Push endpoint errors or times out Endpoint is unreachable, slow, or returns a failure before work is safely queued Make the endpoint reachable as configured, enqueue quickly, return success only after durable handoff, and inspect subscription retry behavior.

8. Frequently asked questions

Can I create an image for every new review?

Yes, if your workflow receives the event, retrieves the needed fields, renders a design, and handles retries. Add filters and approval rules if not every review should be used.

Does Google automatically create the graphic?

No. Google’s notification route signals a review event. Image composition and publishing require your own design or rendering steps.

Can the image be published automatically to the Business Profile?

Only if the current publishing integration or API supports the media fields your implementation needs. Verify this in the current action documentation and test it; the cited Create Post listing alone does not prove image attachment.

What if a review has no written comment?

Design a rating-only variant or skip it according to your policy. Test both missing text and unusually long text in your template.

Sources and implementation references