🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Sheets + Slack: testimonials ready to post

Lisa Granqvist Partner Workflow Automation Expert

Chasing testimonials across emails, DMs, and forms is messy. Then you still have to clean up the quote, design a graphic, save it somewhere sensible, and get someone to approve it before it goes live.

This Sheets Slack testimonials automation hits marketing managers first, honestly. But agency owners and customer success leads feel it too, because they’re the ones stuck turning “nice feedback” into publishable social proof. The outcome is simple: testimonials arrive organized, polished, and ready for approval without the constant follow-ups.

Below you’ll see how the workflow moves a raw submission into a branded card, logs everything in Google Sheets, and pings Slack at the exact moments your team needs to take action.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Sheets + Slack: testimonials ready to post

The Problem: Testimonials Get Collected, Then Stuck

Getting a great testimonial is only the first hurdle. The real grind starts after: cleaning up grammar without making the customer sound like a robot, resizing headshots, building a consistent graphic, and figuring out where the “final” version lives. Someone posts from an old Google Doc. Someone else pastes a slightly different quote into a carousel. Now your social proof looks inconsistent, and worse, you can’t tell what’s already been approved or published. That back-and-forth steals hours, and it quietly kills momentum when you should be shipping content.

The friction compounds. Here’s where it usually breaks down.

  • Quotes arrive in different formats, so you spend about 10 minutes just normalizing each one.
  • Design gets recreated from scratch, which turns every testimonial into a mini project.
  • Approvals live in Slack threads or DMs, and nobody can reliably find the final “yes.”
  • Without a simple “pending / approved / posted” trail, you risk reposting the same proof or missing the best ones.

The Solution: Google Sheets → Slack Approval, With Branded Cards

This workflow turns testimonial handling into a repeatable pipeline. A testimonial comes in through a webhook (an API submission), then n8n validates the fields and cleans them up so name, role, email, and testimonial text are consistently formatted. Next, GPT‑4 Turbo polishes the writing while keeping the customer’s voice intact, so it reads professional without sounding fake. From there, the workflow builds an HTML card layout with the customer details, converts it into an 800×600 image, and stores it in Google Drive using organized naming. Finally, it records everything in Google Sheets with a clear status and notifies your team in Slack to review.

A scheduled checker runs every 5 minutes, scans the sheet for testimonials marked approved, and posts a “ready-to-publish” Slack message with the formatted text. Once it’s sent, the workflow flags that testimonial as processed so you don’t get duplicates.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you collect 15 testimonials in a month. Manually, you might spend about 20 minutes polishing each quote, 20 minutes making a graphic, and another 10 minutes chasing approval in Slack or email. That’s roughly 12 hours monthly. With this workflow, the “human” part becomes reviewing in Slack and marking a row approved, maybe 2 minutes each. Even if you round up, you get about 10 hours back a month, and you stop losing track of what’s ready to publish.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets to store statuses, links, and history.
  • Slack to route approvals and ready-to-post notices.
  • OpenAI API key (get it from the OpenAI platform dashboard)

Skill level: Intermediate. You’ll connect a few credentials, paste IDs for your Sheet and Drive folder, and test a webhook submission.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A testimonial submission hits your webhook. A customer (or your form tool) sends a POST request with name, role/designation, email, photo URL, and the testimonial text. The workflow accepts a few field-name variations, so you’re not stuck on one strict format.

The data gets cleaned and shaped. n8n validates required fields, trims junk, and prepares a consistent structure for the AI prompt and the final database row in Google Sheets.

AI refines the quote, then a branded image gets generated. GPT‑4 Turbo improves grammar and readability. After that, the workflow builds an HTML card and renders it to a PNG at 800×600, which keeps your social proof visually consistent across channels.

Everything is stored, tracked, and routed for approval. The PNG uploads to Google Drive, the row is written to Google Sheets with “Pending Approval,” and Slack gets a notification for review. A scheduled run checks for approved rows every 5 minutes, sends a “ready” Slack message, then marks the item processed to prevent repeats.

You can easily modify the card design to match your brand colors and fonts based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Webhook Trigger

Set up the two triggers that start the workflow: the incoming testimonial webhook and the scheduled approval check.

  1. Add and open Incoming Webhook Intake, then set HTTP Method to POST and Path to testimonial-webhook.
  2. Set Response Mode to lastNode so the webhook returns the final node output.
  3. Add and open Scheduled Approval Check, then configure the interval rule to run every minutes as shown in the node.
  4. Keep Flowpast Branding as a reference note (no configuration required).

⚠️ Common Pitfall: Make sure your external form or service sends data to the exact webhook path testimonial-webhook and uses POST, otherwise Incoming Webhook Intake will not fire.

Step 2: Connect Google Sheets

Link your testimonial database and ensure the workflow can read and update rows.

  1. Open Read Spreadsheet Rows and select the Google Sheets document Feedback Log and sheet Testimonial Database.
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials in Read Spreadsheet Rows.
  3. Open Record in Spreadsheet and keep Operation set to appendOrUpdate, matching columns by Drive ID.
  4. Credential Required: Connect your googleSheetsOAuth2Api credentials in Record in Spreadsheet.
  5. Open Flag as Processed and set Operation to update, with Drive ID mapped to {{ $('Filter Approved Unposted').item.json["Drive ID"] }}.
  6. Credential Required: Connect your googleSheetsOAuth2Api credentials in Flag as Processed.

⚠️ Common Pitfall: Replace all [YOUR_ID] placeholders in the Google Sheets document and sheet selectors before testing, or the read/write steps will fail.

Step 3: Set Up AI Processing and Data Validation

Validate incoming data, craft a prompt, and refine the testimonial with AI.

  1. In Validate Submission Data, keep the provided JavaScript to clean fields like name, designation, testimonial, and photoUrl.
  2. Configure Compose AI Prompt to set prompt using the provided text, including the expression {{ $json.testimonial }}.
  3. Open AI Text Refinement and set Model to gpt-4-turbo-preview, Temperature to 0.3, and Max Tokens to 300.
  4. Credential Required: Connect your openAiApi credentials in AI Text Refinement.
  5. In Parse AI Output, keep the extraction logic so it maps the AI response to testimonial and preserves originalTestimonial.

⚠️ Common Pitfall: If AI Text Refinement returns a different response format, update the parsing logic in Parse AI Output to avoid empty testimonials.

Step 4: Configure Image Generation and Storage

Build the HTML testimonial card, render it to an image, and store the file in Drive.

  1. In Build HTML Card, keep the HTML template code and filename logic for fileName.
  2. Open Render HTML to Image and set HTML Content to {{ $json.html }}.
  3. Credential Required: Connect your htmlcsstoimgApi credentials in Render HTML to Image.
  4. In Fetch Image File, set URL to {{ $json.image_url }} and keep Response Format as file.
  5. In Store in Drive, set Name to {{ $('Build HTML Card').item.json.fileName }} and choose the target folder.
  6. Credential Required: Connect your googleDriveOAuth2Api credentials in Store in Drive.

⚠️ Common Pitfall: Ensure the Google Drive folder ID in Store in Drive is valid, or the file upload will fail silently.

Step 5: Configure Approval Filtering and Processing

Check which testimonials are approved and unposted before notifying the team.

  1. Open Filter Approved Unposted and keep the first condition: Status equals Approved using {{ $json.Status }}.
  2. Keep the second condition that checks Posted to Social is empty using {{ $json['Posted to Social'] }}.
  3. In Flag as Processed, set Posted At to {{ $now.toISO() }} and Posted to Social to Ready - Manual Post Required.

Step 6: Configure Notifications and Logging

Log results to Google Sheets and notify Slack channels for review and posting.

  1. In Record in Spreadsheet, verify column mappings like Name, Designation, Testimonial, Image Link, and Status to Pending Approval.
  2. Open Post Slack Alert and confirm the message template uses expressions such as {{ $('Build HTML Card').item.json.name }} and {{ $('Store in Drive').item.json.webViewLink }}.
  3. Credential Required: Connect your slackApi credentials in Post Slack Alert.
  4. Open Slack Ready Notice and verify the template uses spreadsheet fields like {{ $json.Name }} and {{ $json['Image Link'] }}.
  5. Credential Required: Connect your slackApi credentials in Slack Ready Notice.

⚠️ Common Pitfall: If Slack messages appear without formatted values, confirm the node connections follow the flow Record in SpreadsheetPost Slack Alert and Filter Approved UnpostedSlack Ready Notice.

Step 7: Test and Activate Your Workflow

Run a full test to confirm image generation, logging, and Slack alerts work end-to-end.

  1. Click Execute Workflow and send a sample payload to Incoming Webhook Intake with fields like name, testimonial, and photo_url.
  2. Confirm the flow proceeds through Validate Submission DataCompose AI PromptAI Text RefinementParse AI OutputBuild HTML Card.
  3. Verify the image is generated and stored by checking Store in Drive and the Image Link written by Record in Spreadsheet.
  4. Ensure Slack receives the new testimonial alert from Post Slack Alert and the readiness notice from Slack Ready Notice when a row is marked Approved.
  5. Once testing is successful, toggle the workflow to Active to enable production processing.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets credentials can expire or need specific permissions. If things break, check the connected Google account access and the Sheet sharing settings first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this Sheets Slack testimonials automation?

About an hour if your Google and Slack credentials are ready.

Do I need coding skills to automate testimonial approvals?

No. You’ll mostly connect accounts and paste a few IDs for your Sheet, Drive folder, and Slack channel.

Is n8n free to use for this Sheets Slack testimonials workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage and your HTML-to-image rendering API costs.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Sheets Slack testimonials workflow for a different brand card design?

Yes. You’ll update the HTML card builder portion (the step that generates the template) to change colors, fonts, layout, or add things like star ratings. If you want a different image size, adjust the render settings in the HTML-to-image step so it outputs the dimensions you need. Common tweaks include adding a logo, swapping background colors per product line, and changing how the customer photo is displayed.

Why is my Google Sheets connection failing in this workflow?

Usually it’s expired Google OAuth permission or the connected account lost access to the spreadsheet. Reconnect the Google Sheets credential in n8n, then confirm the Sheet ID matches the file you’re editing. Also check that the worksheet/tab name is correct, because it’s easy to rename a tab and break writes. If you’re processing a lot at once, Google APIs can throttle briefly, so retries help.

How many testimonials can this Sheets Slack testimonials automation handle?

For most small teams, hundreds per month is fine, and self-hosting removes execution caps entirely.

Is this Sheets Slack testimonials automation better than using Zapier or Make?

Often, yes, because this isn’t just moving data between apps. You’re doing validation, AI text refinement, image rendering, Drive storage, and a scheduled approval checker, which is where simpler builders start getting awkward or pricey. n8n handles branching and “if this, then that” logic cleanly, and you can self-host for high volume without paying per step. Zapier or Make can still be a good fit if you want a super simple intake-to-Slack ping and nothing else. But if branded assets and a reliable audit trail matter, n8n is the steadier choice. Talk to an automation expert if you want help choosing.

Once this is in place, testimonials stop being “nice to have someday” content. They become a dependable stream of approved, on-brand assets your team can publish on demand.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal