# n8n Automations

> Behind-the-scenes workflows that connect your apps and AI models so work moves on its own, no manual steps.

Page: https://showcase.growlyze.cloud/tag/n8n

14 case studies in full below.

# PeakNIL Athlete Content Automation

> Two n8n workflows that find athlete news, draft the post, and publish it to Instagram once a person approves.

Section: n8n Automations

Page: https://showcase.growlyze.cloud/case/peaknil-athlete-content-automation

## Purpose

PeakNIL connects college athletes with brands for NIL deals. To stay visible and attract brands, it needs a steady stream of social media posts celebrating athlete achievements. These two workflows automate that process, from finding the news to publishing on Instagram, with a human approving every post.

## The Problem

- PeakNIL has hundreds of athletes across 28 sports, and someone has to check news about each of them.
- Staff must decide which stories are worth posting, write captions, find usable photos, design graphics and publish.
- Doing this by hand is slow and expensive, and it can’t keep up with fast-moving sports news.
- Posting is inconsistent, so some athletes get covered and others are missed.
- Athlete records are often incomplete, which makes tracking harder.
- Posts must stay positive and brand-safe, with no injuries, losses or controversies.

## The Solution

Two connected automations handle the work, and a person approves the result.

### Workflow 1: Athlete Monitor (finds and drafts)

- Runs every weekday and picks athletes from the roster sheet. It skips anyone with missing data or scanned in the last 3 days.
- Searches for recent news (last 3 days) from trusted sports sources.
- Claude decides whether the story is worth posting, assigns a content category, and writes the caption and a short headline.
- Finds a clean photo of the athlete and emails the draft to the content manager for review.

Image: Workflow 1, Athlete Monitor: a schedule trigger reads the roster from Google Sheets, searches for news, has Claude draft the post, and emails it to the content manager through Gmail. (https://showcase.growlyze.cloud/case-content/peaknil-athlete-content/image1.png)

### Workflow 2: Reply Detection (approves and publishes)

- The manager replies to the email with an image number or “approve”.
- The workflow reads the reply, builds a branded graphic with the chosen photo and headline, and sends it back for a final check.
- Once approved, it publishes the post to Instagram and updates the tracking sheet.

Image: Workflow 2, Reply Detection: a Gmail trigger reads the manager’s reply, then one branch builds the graphic with Placid and another publishes to Instagram after approval. (https://showcase.growlyze.cloud/case-content/peaknil-athlete-content/image2.png)

## The Result

- Content creation drops from hours of manual work to a quick reply by email.
- Posting is consistent across the whole roster.
- Only positive, relevant stories go out, and nothing publishes without human approval.
- Incomplete athlete records are flagged automatically so the team can fix them.

---

# AI Post Rewrites and CTA Rotation for a Content Team

> Two n8n workflows that rewrite a social post when a reviewer ticks Redo, and add the best call-to-action to each thread from a rotating library.

Section: n8n Automations

Page: https://showcase.growlyze.cloud/case/n8n-social-post-redo-and-cta-rotation

## Purpose

A content team keeps its social post drafts in Airtable, with a version for X, LinkedIn and Threads. A reviewer checks each draft there. These two n8n workflows handle two jobs inside that review loop: rewriting a draft when the reviewer asks for changes, and adding the right call-to-action (CTA) to each thread.

## The Solution

Both workflows read and write the same Airtable base, and both send their writing tasks to Claude through one shared sub-workflow.

### Workflow 1: Redo (rewrites a draft from reviewer feedback)

- The reviewer ticks the Redo checkbox on a card and writes what to change in the Feedback field.
- n8n finds every card with Redo ticked and source text filled in. A dispatcher workflow can start it, and an hourly run catches anything that was missed.
- It reads the current Post Rules and Craft Playbook from a settings record in Airtable. The team edits them there, and every new draft follows them first.
- Claude gets the original source, the previous draft and the feedback. It applies the feedback exactly, keeps everything the reviewer did not mention, and returns three versions: the X post, a LinkedIn post of 600 to 1,100 characters, and a Threads post of about 420 characters (500 at most) that ends on a complete sentence.
- A clean-up step removes hedging lines such as “the source does not establish…”. It also keeps the “shared by a publisher” credit line only on posts that carry an image, and moves it to the last line.
- n8n writes all three drafts back to the card, unticks Redo and sets the status to Pending Review. Because Redo is cleared, each request is handled once. The feedback stays on the card as a record.

### What the prompt enforces

- Use only facts that appear in the source text or the previous draft, and never invent numbers, dates, figures or view counts.
- Return the full revised post, not a list of changes.
- If the feedback asks for a quote, keep the publisher’s own words word for word in quotation marks, and write any analysis separately after it.
- Follow the account’s voice rules, with a list of banned words and AI-sounding phrases.

### Workflow 2: CTA Auto-Insert (picks the call-to-action for each thread)

- Every two minutes it looks for draft cards that have no CTA linked yet.
- It reads every active CTA from a CTA library in Airtable. Each entry has the CTA text, link, category, weight, times used, conversions, a weekly cap and a “use when” note.
- A code step drops CTAs that have reached their cap and scores the rest. Weight counts double, each conversion adds half a point, and each earlier use takes one point off. The list is sorted best first.
- Claude receives the post, its source and the ranked list. It picks one primary CTA that fits the topic and a different secondary CTA, using the “use when” notes. When two fit equally well, it takes the higher-ranked one so no CTA is overused. It writes the reply in the account’s voice and keeps each link exactly as stored.
- Another code step builds the thread. The lead post comes first, the primary CTA is the first reply, the rest of the thread follows, and the secondary CTA goes at the end. Each part is numbered 1/, 2/ and so on.
- n8n saves the thread on the card and links the primary CTA record to it. A linked CTA means the card no longer matches the search, so it is not processed twice.
- The Times Used counter goes up by one for the primary CTA, and for the secondary CTA when there is one, so the rotation stays fair.

Image: CTA Auto-Insert in n8n: a schedule trigger, an Airtable search, a read of the CTA library, a code step that ranks the CTAs, a prompt step, the Claude pick through a shared sub-workflow, a code step that builds the thread, and an Airtable update that links the CTA, followed by two branches that raise the Times Used counters. (https://showcase.growlyze.cloud/case-content/n8n-post-redo-cta-rotation/image1.png)

## Good to Know

- The Redo workflow is live. The CTA workflow is switched off in this version, because checking every two minutes would use about 21,600 executions a month.
- Both workflows have an exit rule that stops a card from being handled twice: Redo is unticked in the first, and a CTA is linked in the second.
- The rules, the playbook and the CTA library all live in Airtable, so the team can change how posts are written and which CTAs are used without opening n8n.

---

# Automatic Cleanup of Scheduled Posts When a Card Is Unapproved

> An n8n workflow that checks every 15 minutes for cards that are no longer approved and removes their still-scheduled posts from Metricool, without touching anything already published or about to go out.

Section: n8n Automations

Page: https://showcase.growlyze.cloud/case/n8n-unschedule-cleanup-metricool

## Purpose

A content team schedules social posts through Metricool from cards in Airtable. Each card stores the Metricool post ID for X, Facebook, LinkedIn and Threads. If a card is later denied, sent back to review, or its scheduling fails, the posts already scheduled for it would still go out. This workflow finds those cards and removes the leftover scheduled posts safely.

## The Solution

- Every 15 minutes n8n searches Airtable for cards whose status is Pending Review, Denied, Schedule Failed or blank, but that still hold a Metricool post ID.
- A code step turns each card into one item per post ID. IDs that were already handled and logged are skipped, so settled posts are not checked again on every run.
- For each ID, n8n asks Metricool for the post, one at a time with a short pause between calls. A failed call does not stop the workflow.
- A decision step applies the safety rules below and marks each post as delete, keep, clear or retry later.
- The Delete? branch sends the delete request to Metricool for posts marked delete. Every other post goes straight to the merge step, which joins both paths.
- A code step builds one update per card. It clears the IDs of posts that were deleted or were already gone, adds a timestamped line to the card’s Unschedule Log for each ID handled, and clears the Scheduled Time when a post was deleted, so approving the card again schedules it fresh.
- Airtable saves the update. A lookup or delete that failed is left untouched, so the next run tries it again.

Image: Unschedule cleanup in n8n: a 15-minute schedule trigger, an Airtable search, a code step that splits each card into one item per Metricool ID, a lookup of each post, a decision step, a Delete? branch that either calls Metricool’s delete or skips to the merge, and a code step and Airtable update that clear the IDs and write the log. (https://showcase.growlyze.cloud/case-content/n8n-metricool-unschedule-cleanup/image1.png)

## Safety Rules

- A post that is already published is never deleted.
- A post due within the next five minutes, or already past due but not marked as published, is left alone, and the log asks someone to check Metricool.
- Only a future, unpublished post is deleted. The same rules apply to every network, X included.
- A post that Metricool no longer has counts as already gone, so its ID is simply cleared from the card.

## Good to Know

- The workflow is live and runs on its own schedule.
- Every decision is written to the card’s log, so the team can see what was deleted, kept or cleared, and when.
- Metricool is called one post at a time, so a long list of cards does not flood it with requests.

---

# Telegram Thread Builder: From Dropped Screenshots to a Reviewed X Thread

> An n8n workflow that turns a source text and screenshots dropped in a Telegram chat into a ready-to-review X thread, with automatic image blurring, AI writing and a card created in Airtable.

Section: n8n Automations

Page: https://showcase.growlyze.cloud/case/n8n-telegram-thread-builder

## Purpose

A content team collects ideas in a Telegram group chat: a piece of source text, plus screenshots of results. This workflow lets them turn that material into an X thread, or a single post, without leaving Telegram. The finished draft lands in Airtable as a card for review.

## The Solution

The chat works like a conversation. A person opens a session, drops the material, answers a few short questions, and the workflow builds the thread. Every message in the chat is saved in Airtable against the session, so nothing is lost between steps.

### Step 1: Open a session

- Someone replies “Go” to a dropped text or image. They can add a format at the same time: thread, image, text or long.
- The bot answers with the steps. Drop the images in order, where a caption under an image becomes the text for that post. Send any extra text. Send “done” when finished, or “cancel” to stop.
- Telegram splits long texts into several messages. The workflow merges those parts back together in the right order.
- Each image and text is saved in Airtable as its own row, linked to the session. A session stays open for 12 hours.

### Step 2: Answer the setup questions

- When “done” arrives, the bot asks only what it does not know yet. These are numbered questions, so a reply is just a number: how many posts, which call-to-action and on which post, and whether to blur the images.
- Writing “go” at any point accepts the defaults for everything still open. Tags typed with the first “Go”, such as “no blur” or “cta newsletter”, skip those questions.
- The bot ends with a one-line summary, and a reply of 1 starts the build. If nobody answers for 10 minutes, the workflow carries on by itself with the defaults.

### Step 3: Prepare and blur the images

- The workflow collects the session’s images in order, up to 15, and downloads each one from Telegram.
- Each image goes to a blur service that hides page names, logos and faces.
- A check then confirms that every image came back blurred. If any image fails, no thread is created. The session is reopened, and the bot says which images failed and why, so the team can send “done” again.

### Step 4: Write the thread

- Claude receives the full source text, the team’s captions and notes, every blurred image, and the current Post Rules from Airtable. It reads the numbers and labels inside the screenshots as part of the source.
- The prompt fixes the number of posts, puts one image on each post in order, and asks Claude to use every fact from the material.
- It also sets the voice: a long opening hook, replies that each carry one step of the story, and an analysis near the end. The posts must not name any page, person or brand shown in the material.

### Step 5: Clean up, add CTAs and deliver

- A code step cleans the writer’s output. It removes links, handles, “via” credits, post numbering and stock phrases, and it keeps the thread to the agreed number of posts.
- It checks that every image is used exactly once, in order, and spreads them again if the writer got that wrong.
- Call-to-actions are added from the CTA library in Airtable, for example a newsletter reply at the end, or a consulting reply placed at post 4.
- n8n creates the card in Airtable with status Pending Review, the hook and the full thread, and attaches each blurred image. It marks the session done.
- The bot replies in Telegram with the post count, the number of images, the CTA used and a preview of the hook, plus a link to the card so the team can check the blur and approve.

Image: The Telegram thread session workflow in n8n: messages come in on the left and are routed by what they mean (start, image, note, cancel, done, ask, single post). The long middle row builds the thread, from blurring the images to the Claude writer, the Airtable card and the Telegram summary. The rows below handle the setup questions with the 10-minute timer, and single-post sessions. (https://showcase.growlyze.cloud/case-content/n8n-telegram-thread-builder/image1.png)

## Single Posts

The same chat also handles posts that are not threads. After “Go”, the bot asks the shorter set of questions. The workflow then merges the text, captions, first image and chosen CTA into one request and hands it to the team’s existing intake workflow, so single posts use the same writer, blur and card steps as everything else.

## Built-in Safeguards

- An unblurred image is never attached, unless the team asked for no blur.
- When the blur or the writer fails, the session is reopened and the team is told in Telegram, so they can retry with “done” instead of starting again.
- If the writer returns something unusable, no card is created.
- An image that fails to upload to the card is reported in the summary message.

## Good to Know

- This is a large workflow of about 65 nodes, which is why the diagram is wide. It is read from left to right, and each row has one job.
- The Post Rules, the CTA library and the session rows all live in Airtable, so the team can change how threads are written without opening n8n.

---

# Newsletter Performance Agent: Daily Scoring of Every Sent Issue

> An n8n workflow that finds each newsletter issue after it is sent, removes machine clicks from the numbers, scores it against the account’s own baseline, and posts an AI analysis to the team.

Section: n8n Automations

Page: https://showcase.growlyze.cloud/case/n8n-newsletter-performance-agent

## Purpose

A publisher sends a regular email newsletter through Kit. This n8n workflow scores every sent issue automatically. It pulls the issue’s stats from Kit, corrects the click numbers for machine traffic, compares the result with the account’s own history, asks Claude for an analysis, and shares it with the team.

## The Solution

- The workflow runs every day at 17:00 South African time, and it can also be started by hand.
- It reads the last 40 logged issues from Airtable and the list of broadcasts from Kit.
- It picks the newest completed send from the last 36 hours that has not been logged yet. If there is none, it stops with nothing to score.
- It pulls that issue’s stats and its link-level clicks from Kit. If the link report is missing, the run carries on and marks the clicks as raw and unverified.
- A code step calculates the metrics, as described below.
- It reads the active newsletter rules from Airtable, so the analysis does not suggest rules that already exist.
- Claude receives the numbers and the rules, and returns its analysis as structured data.
- A second code step cleans the text, keeps at most two proposed rules and labels each one “PROPOSAL, not active”.
- The result is saved as a new row in the Performance table in Airtable, with the stats, the score, the analysis and the recommendations.
- Two things then happen at the same time. A short summary is posted to the team’s Telegram feedback group and the run is logged. Any proposed rules are saved to the Newsletter Rules table as inactive.

Image: The Newsletter Performance Agent in n8n: a daily trigger or a manual run, a look-up of past issues and Kit broadcasts, a step that picks the sent issue, Kit stats and link clicks, the metrics code, the Claude analysis, and an Airtable row. The row then leads to the Telegram summary and run log on one branch, and to the proposed rules on the other. (https://showcase.growlyze.cloud/case-content/n8n-newsletter-performance-agent/image1.png)

## What the Code Calculates

- Machine clicks are removed. Mail security gateways often click every link in a message once. This shows up as a flat plateau across many links, while real readers produce a steep curve. The workflow detects the plateau and subtracts it, which gives an adjusted click rate. Against past sends, raw click rates of 7.73 and 6.64 percent came out at 2.63 and 2.54 percent, and a clean issue was left untouched.
- Each issue is scored against a baseline. The baseline is the median open rate and click rate of past issues. Segment sends, with fewer than half the usual recipients, are left out. A score of 1.00 means the issue was on the baseline.
- Clicks are attributed to products and positions. They are grouped by the campaign tag in each link, with the date suffix removed so that a trend can form over time, and by the slot tag that marks where the link sat in the issue.
- Anything doubtful is flagged. The flags cover missing link data, segment sends and links without a dated campaign tag, and they travel with the analysis.

## What the AI Is Told

- Adjusted click figures are the truth. A raw click number is never called a win, and if raw and adjusted disagree, it says so.
- Sales cannot be measured here, so clicks on a product link count as interest, never as revenue.
- Do not propose rules that are already in force. Propose a new rule only when the evidence supports it, zero is a good answer, and each one must state its evidence.
- Keep it short: an analysis of two paragraphs at most, no more than three recommendations, and a Telegram summary under 600 characters. Do not invent data.

## Good to Know

- The agent suggests but never decides. Proposed rules stay inactive until a person ticks Active in Airtable, and only then do they reach the writing prompts.
- Each issue is scored once, because it is logged by its Kit broadcast ID and send date.
- The summary lands in Telegram, the full write-up sits in Airtable, and every run is logged.

---

# WhatsApp Voice & Business Agent with n8n

> Turning customer voice notes, photos and text messages on WhatsApp into instant, database-backed answers through an n8n workflow.

Section: n8n Automations, AI Agents for WhatsApp

Page: https://showcase.growlyze.cloud/case/whatsapp-voice-business-agent

## Overview

This project is a WhatsApp business assistant for an online store. Customers write, speak or send a photo, and the workflow replies on WhatsApp with facts taken from the store’s Supabase product database, answering by voice when the customer used voice. It runs on n8n cloud with OpenAI models and replaces manual answering of repetitive product questions.

### The business problem

Store owners answer the same questions all day: is this in stock, what does it cost, how long is delivery. Customers send these as voice notes, typed messages or screenshots of a product, so a simple keyword bot cannot read them. Slow replies lose sales, and a bot that guesses prices or stock damages trust.

### The solution

An n8n workflow receives every WhatsApp message and routes it by type. Voice notes are transcribed, photos are described by a vision model, and text goes straight through. All three are normalized into one message and passed to an AI agent that must look up facts in Supabase before answering. The reply goes back as text, or as a voice note when the customer sent audio. Memory keyed on the customer’s phone number keeps the conversation connected.

### Project snapshot

| Item | Detail |
| --- | --- |
| Platform | n8n cloud |
| Channel | WhatsApp Business Cloud API |
| Input types | Voice note, text, photo |
| AI models | OpenAI transcription, GPT-4o-mini vision, GPT-4.1-mini agent, OpenAI speech |
| Knowledge base | Supabase vector store, products table |
| Workflow size | 21 nodes after cleanup (22 in the first export) |

## How the System Works

Every message passes through six stages, from the customer’s WhatsApp message to the reply, in a single n8n workflow.

| Step | Process |
| --- | --- |
| 1. WhatsApp input | The customer sends a voice note, a text or a photo. The WhatsApp Trigger node receives it. |
| 2. Routing | A Switch node checks the message type and sends it down the audio, text or image path. |
| 3. Media handling | Voice notes and photos are downloaded through the WhatsApp media API. A voice note is transcribed and a photo is described by a vision model. |
| 4. Normalizing | Edit Fields nodes turn each path into the same two fields: the message text and the customer’s phone number as session id. |
| 5. AI agent | The agent looks up facts in the Supabase products table, thinks again, and writes a short reply. It remembers the conversation by phone number. |
| 6. Reply | If the customer sent audio, the reply is converted to speech and sent as a voice note. Otherwise it is sent as text. |

**The workflow in n8n**

Image: The top branch handles voice notes, the middle branch handles text, and the bottom branch handles photos. All three meet at the AI Agent, which has its model, memory, a Think tool and the Supabase Vector Store attached. (https://showcase.growlyze.cloud/case-content/whatsapp-voice-business-agent/image1.jpg)

**Supporting integrations**

- WhatsApp Business Cloud API: receives customer messages, downloads media and sends replies.
- OpenAI: transcribes audio, describes images, runs the agent (GPT-4.1-mini) and creates the spoken reply.
- Supabase: vector store over the products table, queried by the agent as a tool.
- n8n Simple Memory: keeps recent messages per customer phone number.

## Core Workflow Configuration

The workflow is built from a handful of node groups. Each one has a single job and passes the same two fields forward, so the agent never needs to know how the message arrived.

| Node group | Configuration |
| --- | --- |
| WhatsApp Trigger | Listens for message updates from the WhatsApp Business Cloud API. |
| Switch | Three rules: audio (by mime type), text (by message type) and image (by mime type). |
| Download media + HTTP Request | Gets the media URL from WhatsApp, then downloads the file with the WhatsApp credential. Used for both audio and images. |
| Transcribe a recording | OpenAI audio transcription of the downloaded voice note. |
| Analyze image | OpenAI vision (GPT-4o-mini) on the downloaded photo, returned as a text description. |
| Edit Fields (three) | Set userMessage (the text, transcript or image description) and sessionId (the customer’s phone number). |
| AI Agent | GPT-4.1-mini with a system prompt: short WhatsApp-style replies under 80 words, one emoji at most, never guess, answer only from the database, hand complex issues to human support. |
| Simple Memory | Window memory keyed on the customer’s phone number. |
| Supabase Vector Store | Retrieve-as-tool on the products table, with OpenAI embeddings. |
| Think | A reasoning tool the agent can use before answering. |
| If | Checks whether the original message was audio. |
| Generate audio + Send voice reply | Turns the answer into speech and sends it back as an audio message. |
| Send message | Sends the answer as a WhatsApp text message. |

## Product Experience

These three mockups show how the assistant is meant to feel on the customer’s phone, one for each input type. They are illustrative designs, not screenshots of live conversations. The status messages (“Transcribing…”, “Searching our catalog…”) and the Shopify order lookup and replacement order shown in scenarios 1 and 3 are not in the current workflow and belong to a planned extension.

### Scenario 1: voice input

Image: The customer sends a voice note. The workflow transcribes it, the agent finds the answer, and the reply comes back as a voice note because the customer used voice. (https://showcase.growlyze.cloud/case-content/whatsapp-voice-business-agent/image2.jpg)

### Scenario 2: text input

Image: A typed question goes straight to the agent, which checks the product data and answers in two or three short lines, with a follow-up question to move the sale forward. (https://showcase.growlyze.cloud/case-content/whatsapp-voice-business-agent/image3.png)

### Scenario 3: image input

Image: A photo is described by the vision model, and that description is handled as the customer’s message. In the current workflow the agent matches it against the product table. Order lookup and replacement orders are future work. (https://showcase.growlyze.cloud/case-content/whatsapp-voice-business-agent/image4.jpg)

## Results & Metrics

The workflow is built and cleaned up, and no live customer data has been measured yet. The figures below describe what was delivered. Response time, accuracy and conversion numbers should be added after a pilot with real conversations.

| Metric | Result |
| --- | --- |
| Production workflows | 1 main agent workflow |
| n8n nodes | 21 after cleanup |
| Input types supported | 3: voice note, text, photo |
| Reply formats | 2: text and voice note |
| AI models used | 4: transcription, vision, agent, speech |
| Knowledge source | Supabase products table, searched by the agent as a tool |
| Workflow defects fixed | 2 (placeholder Code node, wrong message type) |
| Live response time and accuracy | Not measured yet |

## Technical Challenges & Solutions

Reviewing the exported workflow turned up problems that would have stopped it from working in production.

### Voice reply could not be sent

**Challenge**

The voice path ended in a Code node that still held the placeholder YOUR_BASE64_STRING_HERE, and the send node used the document message type.

**Solution**

Removed the Code node, connected “Generate audio” directly to the send node, renamed it “Send voice reply”, and set its message type to audio with the customer’s number as recipient.

**Outcome**

The voice path is complete from the audio message to the voice reply.

### Credentials missing after import

**Challenge**

After importing the workflow into a new n8n account, every WhatsApp, OpenAI and Supabase node showed a warning.

**Solution**

Reselect the credentials on each flagged node. For presentations, a demo copy with sample output pinned on the main-path nodes can be used.

**Outcome**

The nodes can be run green once credentials are set. A demo copy was prepared for the voice path.

### AI answers must stay factual

**Challenge**

A sales assistant that invents prices or stock levels loses customer trust.

**Solution**

The system prompt requires the agent to retrieve facts from Supabase before answering, to ask when data is missing, and to hand complex issues to human support. Replies are capped at 80 words.

**Outcome**

Answers stay short and grounded in the product table.

### Secrets inside workflow files

**Challenge**

A related Shopify workflow contains an access token written directly into its HTTP nodes.

**Solution**

Rotate the token and move it into an n8n credential before sharing or publishing that workflow.

**Outcome**

Open item, to be done by the store owner.

## Key Takeaways & Future Development

### Key takeaways

- One agent for three input types: routing by message type and normalizing to the same two fields keeps the agent simple.
- Grounded answers: forcing a database lookup before every reply is what keeps the assistant safe to put in front of customers.
- Voice in, voice out: answering in the customer’s own format makes the assistant feel natural on WhatsApp.

### Future development

- Connect Shopify so the agent can check order status and create replacement orders, as shown in the mockups.
- Add progress messages such as “Transcribing your voice message” while longer steps run.
- Hand over to a human on WhatsApp, with the conversation passed to the support team.
- Run a pilot with real customers and record response time, answer accuracy and sales conversion.
- Move secrets such as the Shopify token into n8n credentials.

---

# Support Email to ClickUp Ticket Automation

> Turning every email sent to a shared support inbox into a correctly routed, duplicate-free ClickUp ticket through one n8n workflow.

Section: n8n Automations, ClickUp Setups

Page: https://showcase.growlyze.cloud/case/support-email-clickup-automation

## Overview

This project is a support-intake automation for RefureTech. Customers email the shared support address, and the n8n workflow reads each message, works out which client it belongs to from the sender’s email domain, and files it in ClickUp. It becomes a new ticket in that client’s support list, a ticket in a triage list when the client is unknown, or a comment when a ticket for the conversation already exists. Attachments and earlier messages in the thread travel with it.

### The business problem

Support requests arrive as ordinary email. Copying them into a ticket system by hand is slow and easy to get wrong: the wrong client, a missed reply, an attachment left behind in the inbox. The work grows with every new client. Automating it is not simple either, because ClickUp has its own Email ClickApp that sends a confirmation to the customer and files later replies as comments. A naive automation creates duplicate tickets or, worse, turns its own confirmation emails into new tickets in an endless loop.

### The solution

A single n8n workflow polls the support inbox every minute. It looks up the client list stored in ClickUp, matches the sender by domain, checks four different ways whether the conversation already has a ticket or is already managed by ClickUp, and only then creates a ticket or comment. It uses plain, explainable rules in code nodes rather than an AI model, so every decision can be traced to a header, a subject line or a ClickUp field. Wherever a step could fail, the workflow prefers a duplicate ticket over a lost customer email.

### Project snapshot

Image: Project snapshot. (https://showcase.growlyze.cloud/case-content/support-email-clickup-automation/image1.png)

## How the System Works

Every email passes through six stages, from arrival in the inbox to a ticket in ClickUp, inside one workflow.

| Step | Process |
| --- | --- |
| 1. Email input | The Gmail Trigger polls the INBOX label every minute. The full message is fetched and its HTML body is converted to Markdown so it reads cleanly inside a ticket. |
| 2. Client matching | The workflow reads the client list from ClickUp, where each client has a Domain, a folder id and a support list id. A code node picks the customer contact from the To, Cc and From addresses and matches its domain (or a parent domain) to a client. Free-mail and internal domains are never mapped. |
| 3. Duplicate checks | Three lookups run: a ClickUp search by Gmail thread id, a ClickUp search by the thread ClickUp’s own confirmation email started, and a fetch of the full Gmail thread history. |
| 4. Decision | Route Decision labels the email new, default, comment or skip. Two guard nodes can still turn a write into a skip: one if ClickUp’s ticket id is at the end of the subject, one if the mail headers show a machine-generated reply. |
| 5. Ticket action | A Switch creates a ticket in the client’s list, creates a ticket in the triage list, or adds a comment to the existing ticket. The description holds the new message plus earlier messages in the conversation. |
| 6. Attachments, label, sync | Attachments are downloaded and uploaded to the ticket, and the Gmail message is labelled as processed. For new tickets the workflow waits two minutes, finds ClickUp’s confirmation email and stores its thread id on the ticket so later replies are recognised. |

**The workflow in n8n**

Image: The chain on the left reads the email, matches the client and checks for duplicates. The Switch in the middle sends each email to one of three ticket actions. Each action ends in its own attachment branch and a Gmail label step, and new tickets also pass through the wait and confirmation sync. (https://showcase.growlyze.cloud/case-content/support-email-clickup-automation/image2.jpg)

**Supporting integrations**

- Gmail: trigger, message fetch with attachments, thread history, and labelling processed messages.
- ClickUp: client routing data, ticket and comment creation, attachment upload, and custom fields that store the Gmail thread id and ClickUp’s email thread id.
- Error workflow: a separate n8n workflow is attached in the settings to handle failures of this one.

## Core Workflow Configuration

The workflow is built from a handful of node groups. Each has a single job, and the routing decision is carried forward as one item holding the same fields (contact, domain, folder, list, thread id, reason, action), so the ticket nodes never need to know how the decision was reached.

| Node group | Configuration |
| --- | --- |
| Gmail Trigger | Polls every minute, restricted to the INBOX label on purpose. ClickUp sends its confirmation as the support address, which leaves a copy in Sent. Polling Sent would turn that confirmation into a ticket and trigger another confirmation, forever. |
| Get HTML + Markdown | Fetches the full message and converts the HTML body to Markdown. Retries up to 3 times, 2 seconds apart. |
| Get Support ID | ClickUp node that lists the client tasks. Each carries the custom fields Domain, folder_id and support_list_id. |
| Find ID from Domain (code) | Builds a domain-to-client map, ignores free-mail and internal domains, records domain collisions, picks the customer contact (mapped client first, then any external address, then the sender), validates every address, fills up to 20 Cc fields and applies the one hard skip: the self-addressed ClickUp acknowledgment. |
| Find Existing Ticket / Find ClickUp Email Thread | Two ClickUp API searches by custom field: the Gmail thread id, and the thread id of ClickUp’s own confirmation. If either call fails the workflow continues with no result, so a ticket is still created. |
| Get Thread History | Gmail API call for every message in the conversation. Failure is non-fatal: the ticket is created with the newest email only. |
| Route Decision (code) | Decides clickup_synced, comment, new or default, and assembles the ticket description with the earlier messages, capped at 60,000 characters. |
| ClickUp Already Owns This? (code) | Skips when the subject ends with a ClickUp ticket id such as #RTS-1234, or the confirmation wording is found. Anchored to the end of the subject so a customer’s own mid-subject reference such as #PO-88231 still gets a ticket. |
| Machine Auto-Reply? (code) | Skips out-of-office and bounce mail by reading headers (Auto-Submitted, X-Auto-Response-Suppress, Precedence, empty Return-Path), never the subject wording. |
| Switch | Six rules: new, default, comment, loop guard (skip), ClickUp synced (skip), auto-reply (skip). The fallback output goes to the triage list so an unexpected value cannot drop an email. |
| Create a task / Create Default Task | ClickUp nodes that create the ticket with the Markdown description, customer contact, recipient, up to 20 Cc contacts and the Gmail thread id as custom fields. Tickets opened mid-chain are titled with an [Ongoing thread] prefix. |
| Add Comment to Existing Task | Posts the new email as a comment on the tracked ticket without notifying everyone. |
| Attachment branches (3 sets) | Re-fetch the message with attachments, split them out, keep only files with a real file extension, upload them to the ticket and add the Gmail label. Emails without attachments still reach the label step. |
| Wait + confirmation sync | Waits 2 minutes, re-reads the task for its custom id, searches Gmail for ClickUp’s confirmation and saves its thread id into the ticket so future replies are recognised. |

## Product Experience and Routing Scenarios

Every email the workflow has handled is marked with a Ticketed label in Gmail, so the team can see at a glance which messages already have a ticket or comment in ClickUp. Replies on the same conversation carry the label too.

### Routing scenarios

These scenarios show how the workflow treats the main kinds of email. They are illustrative, derived from the workflow logic, and are not recordings of real customer emails.

| Scenario | What arrives | What the workflow does | Result |
| --- | --- | --- | --- |
| 1. Mapped client, new request | A first email from someone at a client whose domain is in the ClickUp client list. | Matches the domain, finds no existing ticket, routes to the client’s folder and support list, uploads attachments, labels the email, then syncs ClickUp’s confirmation thread id after 2 minutes. | New ticket in the client’s support list. |
| 2. Unknown domain | An email from a domain that is not mapped, or with no usable contact address. | Falls to the default branch. The ticket is still created, in the default triage list, with the sender as contact. | New ticket in the triage list for a person to assign. |
| 3. Reply on a tracked conversation | A follow-up where a ticket already exists for the Gmail thread but ClickUp does not own the thread. | Finds the ticket by the Gmail thread id custom field and posts the email as a comment, then handles any attachments. | Comment and files added to the existing ticket. |
| 4a. ClickUp-owned reply | A customer reply whose subject ends with a ClickUp ticket id. | Stops without writing. ClickUp’s Email ClickApp is already filing replies as comments, so acting would duplicate the ticket. | Skipped, no duplicate. |
| 4b. Out-of-office or bounce | A vacation responder or delivery failure notice. | Detected from mail headers and skipped. A colleague’s real reply on the same thread is not skipped, because headers are checked instead of subject words. | Skipped, real replies kept. |
| 4c. Our own confirmation | The ClickUp acknowledgment, sent from the support address back to the support address. | Hard skip by the loop guard. | Skipped, loop prevented. |

## Results & Metrics

The workflow is live and has run on the real support inbox. Business figures such as hours saved, tickets per week and routing accuracy have not been measured yet.

| Metric | Result |
| --- | --- |
| Production workflows | 1 main workflow, plus an error workflow attached in settings |
| n8n nodes | 38 |
| Trigger | Gmail polling every minute, INBOX only |
| Routing outcomes | 6: new, default, comment, and three skip outcomes |
| Duplicate guards | 4 layers: Gmail thread id, ClickUp email thread id, ticket id in subject, confirmation wording |
| Failure handling | Retries up to 3 times, 2 seconds apart, on every network node. Lookups fail open, so an email becomes a ticket rather than being lost. |
| Reply channels covered | Mapped client, unknown domain, existing thread, attachments |

**Execution history (29 Sep to 12 Oct 2026)**

| Metric | Result |
| --- | --- |
| Executions retained in n8n | 11 |
| Successful | 11 (100%) |
| Failed or crashed | 0 |
| Run time | 9 runs took about 2 minutes (the path with the built-in 2-minute wait for ClickUp’s confirmation). 2 runs took about 4 seconds (paths without that wait). |
| Hours saved, accuracy, duplicate rate | Not measured yet |

The execution count reflects only the executions n8n still retains and is not a full volume figure. The link between run time and path is inferred from the workflow design.

## Technical Challenges & Solutions

Most of the engineering effort went into edge cases around ClickUp’s own email feature and around real-world email, where a simple “new email creates ticket” flow breaks quickly.

### The workflow could answer itself forever

**Challenge**

ClickUp sends its confirmation email from the support address, so a copy lands in Sent. If the workflow read Sent, that confirmation would become a ticket, which triggers another confirmation, and so on.

**Solution**

The trigger watches INBOX only, and a loop guard in code skips any email sent from the support address with the support address in To or Cc. It is the only unconditional skip.

**Outcome**

The loop is closed twice, at the trigger and in the logic.

### Duplicate tickets next to ClickUp’s Email ClickApp

**Challenge**

Once a ticket exists, ClickUp already files replies as comments and sends its own acknowledgment. Creating another ticket from the same reply duplicates work and makes ClickUp send the customer a second acknowledgment.

**Solution**

Four independent checks decide whether ClickUp owns the conversation: a stored ClickUp email thread id, the ticket id at the end of the subject, the confirmation wording in the thread, and the Gmail thread id on an existing ticket. The subject check is the most dependable, because older tickets lack the stored thread id and the confirmation wording can change.

**Outcome**

Replies on ClickUp-managed conversations are skipped and n8n stays out of the way.

### Out-of-office mail versus a colleague covering for someone

**Challenge**

An auto-reply sets the subject to “Out of Office Re: …”. A colleague who replies on the same thread keeps that subject, so matching subject words would silently drop a genuine customer email.

**Solution**

The check reads mail headers that no human mail client sets (Auto-Submitted, X-Auto-Response-Suppress, Precedence, empty Return-Path). If the headers cannot be matched confidently to the right message, nothing is skipped.

**Outcome**

Machine mail is filtered out, and real replies with the same subject still become tickets.

### A duplicate is acceptable, a lost email is not

**Challenge**

Lookups against ClickUp and Gmail can fail, and an email that stops the workflow is a customer who never gets answered.

**Solution**

The ticket-search and thread-history calls retry three times and then continue with no result. Missing results default to creating a ticket, the Switch fallback sends unknown outcomes to the triage list, and the split-out steps continue on error so every email still reaches the labelling step.

**Outcome**

Failures become an extra ticket or less context, never a dropped message.

### Tickets opened in the middle of a conversation

**Challenge**

When the first email the workflow sees is already a reply, a ticket with only the latest message has no background.

**Solution**

The full Gmail thread is fetched, earlier messages are sorted by date and appended to the ticket description (with sender, recipient, date and subject), capped at 60,000 characters, and the title gets an [Ongoing thread] prefix.

**Outcome**

A person opening the ticket sees the whole conversation.

### Malformed addresses breaking ticket creation

**Challenge**

ClickUp rejects the whole task when an email-typed field receives something that is not an address, such as a group name or undisclosed-recipients. Messy Cc lines and display names are common.

**Solution**

Header values are normalised, every address is validated, the support address is never mapped into contact fields, and Cc contacts are capped at 20 fields with the overflow count recorded.

**Outcome**

Odd headers no longer cause ticket creation to fail.

### Secrets inside the workflow (open item)

**Challenge**

The ClickUp API token is written directly into the Authorization header of 8 HTTP Request nodes instead of an n8n credential, so it is visible to anyone who can open or export the workflow.

**Solution**

Create a ClickUp credential in n8n, switch those nodes to it, and rotate the token.

**Outcome**

Not done yet. The token is deliberately not reproduced in this document.

## Key Takeaways & Future Development

### Key takeaways

- Design for the tool next door: the hardest part was coexisting with ClickUp’s own email automation, not creating tickets. Layered duplicate checks solved it.
- Headers over words: deciding on machine-readable signals, such as mail headers and a ticket id anchored to the end of the subject, keeps genuine emails from being filtered out.
- Fail open: choosing a duplicate over a lost email at every failure point makes the automation safe to leave running on a customer-facing inbox.
- Configuration in ClickUp, not in code: adding a client means filling in three fields on a ClickUp task, with no change to the workflow.

### Future development

- Move the ClickUp token into an n8n credential and rotate it.
- Log every skipped email (loop guard, ClickUp-owned, auto-reply) to a sheet or channel so skips can be audited.
- Surface the domain collisions the code already detects, for example with an alert, so two clients cannot silently share a domain.
- Replace the fixed 2-minute wait with a short retry loop that looks for ClickUp’s confirmation email.
- Merge the three near-identical attachment branches into one shared sub-workflow.
- Run a measured pilot and record tickets per week, time saved, routing accuracy and duplicate rate to complete the results section.

---

# HubSpot Industry Classifier with Gemini

> Automatically sorting a backlog of HubSpot companies into industry groups with Google Gemini, and flagging the ones that need a human.

Section: n8n Automations, AI Agents

Page: https://showcase.growlyze.cloud/case/hubspot-industry-classifier

## Overview

This project is an automation that fills in the Industry Group field on HubSpot company records. An n8n workflow runs every hour, takes companies from a HubSpot list, skips the ones that already have an industry group, asks Google Gemini to pick one group for each, and writes the answer back to HubSpot together with a confidence score and a one-line reason. Companies it cannot classify with confidence are marked Needs R&D for a person to review instead of being forced into a wrong category.

### The business problem

A CRM is only useful for segmentation and reporting when every company has an industry. Filling the field by hand for a long backlog of companies is slow, and different people choose different categories for the same kind of business. Letting an AI write straight into the CRM brings its own risks: an invented category, a low-confidence guess recorded as fact, or the same company processed over and over.

### The solution

The workflow reads the allowed Industry Group options directly from HubSpot, so the AI can only choose values that exist. Each company is handled one at a time. Gemini returns a single group, a confidence score and a reason in JSON, and a code node checks that the answer matches a real HubSpot option and clears a confidence threshold before anything is written. Anything that fails that check is labelled Needs R&D. A dry-run switch lets the team test the whole flow without changing any record.

### Project snapshot

| Item | Detail |
| --- | --- |
| Platform | n8n |
| Trigger | Schedule, every hour |
| CRM | HubSpot (companies, a list of companies to process, the hs_industry_group property) |
| AI model | Google Gemini Flash, temperature 0.2, no web search |
| Batch size | Up to 100 companies per run, one at a time |
| Confidence threshold | 0.6 |
| Safety switch | dryRun setting, off by default |
| Workflow size | 22 nodes |
| Status | Active |

## How the System Works

Each run follows the same six stages, from the schedule firing to a company updated in HubSpot.

| Step | Process |
| --- | --- |
| 1. Schedule and setup | The Schedule Trigger starts the run every hour. Two things happen in parallel: the workflow loads the allowed Industry Group options from HubSpot, and sets its configuration (companies per run, confidence threshold, dry-run flag and the HubSpot list id). |
| 2. Collect the backlog | The workflow pages through the HubSpot list, 250 members at a time, until it has the configured maximum of 100 companies, then splits them into single items. |
| 3. One company at a time | A loop takes each company and fetches its name, domain, website, additional domains and current industry group. Companies that already have an industry group are skipped. |
| 4. Prepare and check | A code node cleans the domains. If a company has neither a domain nor a name, it is skipped because there is nothing to classify. |
| 5. Gemini classification | Gemini receives the name and domain with the list of allowed groups and the classification rules, and returns JSON with the industry, a confidence score and a reason. |
| 6. Validate and write | A code node matches the answer to a real HubSpot option and applies the confidence gate. Unless dry run is on, the result is written to HubSpot, followed by a Wait node before the next company. |

**The workflow in n8n**

Image: The two chains on the left prepare the run: the top one loads the valid industries, and the bottom one pages through the HubSpot list. The loop in the middle processes one company at a time through the Gemini step. (https://showcase.growlyze.cloud/case-content/hubspot-industry-classifier/image1.jpg)

**Supporting integrations**

- HubSpot: the list of companies to process, the company records, the allowed Industry Group options and the update call.
- Google Gemini: the classification model, with web search switched off so it answers from its own knowledge.
- n8n workflow static data: holds the pages of list members while they are being collected.

## Core Workflow Configuration

The workflow is built from a handful of node groups. Settings that a person may want to change are kept together in one Init Search Config node.

| Node group | Configuration |
| --- | --- |
| Schedule Trigger | Runs every hour. |
| Get Industry Group Options / Extract Valid Industries | Reads the hs_industry_group property definition from HubSpot. Builds the list of allowed labels, leaving out hidden options and Needs R&D (which is added back in the prompt), and keeps the raw options for matching later. Retries up to 3 times, 5 seconds apart. |
| Init Search Config | Sets maxCompanies 100, confidenceThreshold 0.6, dryRun false and listId 638. |
| Get List Memberships / Accumulate List Members / Has More List Pages? | Pages through the HubSpot list 250 members at a time, stores them in workflow static data and stops at the company limit. |
| Collect List Members / Split Company IDs | Trims the collected members to the limit, clears the stored data and splits them into one item per company. |
| Loop Companies (1 at a time) | Processes one company per round. Its finished output goes to Backlog Run Complete, which records the completion time. |
| Get Company | Fetches name, domain, website, additional domains and current industry group from HubSpot. Retries up to 3 times. |
| IF Industry Group Missing | Continues only when the industry group is empty, so companies already classified are never touched again. |
| Clean Domain (code) | Strips protocol, www, paths and ports from the domain, website and additional domains, removes duplicates and builds a clean domain list. |
| IF Searchable | Continues only if the company has at least one domain or a name. |
| Gemini Classify Industry | Gemini Flash at temperature 0.2 with a detailed prompt: allowed groups, group definitions, classification rules and a JSON output format. Web search is off. Retries up to 5 times. |
| Match Industry Value (code) | Reads the JSON from the model, caps the confidence at 0.65 when there is no domain, and matches the chosen group to a real HubSpot option by label, value or a normalized form. |
| Prepare Company Update (code) | Applies the confidence gate and builds the HubSpot properties: the group (or Needs R&D), confidence, a reasoning text cleaned of stray characters and limited to 500 characters, a status and the check date. |
| IF Dry Run? / Dry Run - Skip Update | In dry run mode the update is skipped and the loop continues. |
| Update Company Industry Group | PATCH request to the HubSpot company record. Retries up to 3 times. |
| Wait1 | Pauses before the next company to stay within HubSpot rate limits. |

## Classification Rules and Scenarios

**What the model is told**

Gemini must choose exactly one group from the list HubSpot provides. The prompt defines each group (for example Manufacturing, eCommerce, Retail, Wholesale Distribution, SaaS, Development shop, IT / MSP, Low Voltage, Consulting, Finance, 3PL, Transportation, Energy Rebates and Self Storage) and sets rules for the edge cases:

- Businesses that sell physical products to consumers are never excluded. They go to Retail (walk-in stores) or eCommerce (online-first and direct-to-consumer brands).
- Local consumer services, restaurants, medical and dental practices, schools, religious organizations and home services are marked Needs R&D with full confidence and an excluded flag.
- A company that cannot be identified, or fits none of the groups (such as a law firm or nonprofit), is marked Needs R&D instead of being forced into a group.
- Confidence is 0.80 to 1.0 when the company is clearly known, 0.40 to 0.65 for partial evidence or a name with no domain, and 0.0 when nothing can be verified.
- The answer must be a single JSON object with industry, confidence, excluded and reasoning.

**Scenarios**

These scenarios show how the workflow treats the main kinds of company. They are illustrative, derived from the prompt and code, and are not recordings of real HubSpot records.

| Scenario | What arrives | What the workflow does | Result in HubSpot |
| --- | --- | --- | --- |
| 1. Clearly known business | A company with a domain whose business model the model recognizes, for example a software platform. | Gemini returns the matching group with confidence 0.80 or higher. The code matches it to a HubSpot option and it passes the 0.6 gate. | Industry group set, status updated, confidence and reason saved. |
| 2. Consumer brand | A clothing or electronics brand selling to the public. | Rule 3 sends it to Retail or eCommerce, never to Needs R&D. | Retail or eCommerce group set. |
| 3. Local consumer service | A pizzeria, dental practice or salon. | Excluded under rule 4 with confidence 1.0. | Group set to Needs R&D for a human to see. |
| 4. Unknown company | A company the model cannot identify. | Returns Needs R&D with low confidence, so the gate fails. | Group set to Needs R&D, status low_confidence or unmatched. |
| 5. Name only | A company with a name but no domain. | Confidence is capped at 0.65 in code, so the model cannot be fully sure. | Written only if it still clears 0.6, otherwise Needs R&D with status no_domain. |
| 6. Already classified | A company that already has an industry group. | Stopped by IF Industry Group Missing, no model call. | Unchanged. |
| 7. Dry run | Any company, with dryRun set to true. | Everything runs except the HubSpot update. | Nothing written. |

## Results & Metrics

The workflow is built and marked active. No run results were provided, so classification accuracy, the share of companies sent to Needs R&D and the time saved have not been measured.

| Metric | Result |
| --- | --- |
| Production workflows | 1 |
| n8n nodes | 22 |
| Trigger | Schedule, every hour |
| Companies per run | Up to 100, processed one at a time |
| Industry groups | Read live from HubSpot, so the model cannot pick a value that does not exist |
| Confidence gate | 0.6, with a 0.65 cap when a company has no domain |
| Fields written per company | Industry group, confidence, reasoning, status and check date |
| Safety features | Dry-run switch, skip of already classified companies, Needs R&D fallback, retries on every network and model call |
| Accuracy, volume, time saved | Not measured yet |

## Technical Challenges & Solutions

### The model could invent a category

**Challenge**

A free-text answer such as “Software” or “Tech services” does not match any HubSpot option and would break the update or pollute the field.

**Solution**

The allowed groups are loaded from HubSpot on every run and given to the model to copy exactly. The answer is then matched to a real option by label, value or a normalized form that ignores case, punctuation and “&” versus “and”.

**Outcome**

Only values that exist in HubSpot can be written.

### A weak guess recorded as fact

**Challenge**

A model will always give an answer, even when it knows nothing about the company.

**Solution**

The model must return a confidence score, name-only companies are capped at 0.65, and a code node only writes a group when the answer matches an option and reaches 0.6. Everything else becomes Needs R&D, and the confidence, reason, status and check date are saved on the record.

**Outcome**

Doubtful cases are visible to a person instead of hidden among correct ones.

### Processing the same companies again

**Challenge**

An hourly schedule over the same list would classify the same companies on every run and waste model calls.

**Solution**

The workflow only continues when the industry group is empty, so each company is processed once.

**Outcome**

Each run moves on to the next unclassified companies.

### Reading a long list from HubSpot

**Challenge**

The HubSpot list API returns 250 members per page, and the run must stop at a fixed number of companies.

**Solution**

A loop collects pages in workflow static data until the next page is missing or the limit is reached, then clears the data and splits the members into single items.

**Outcome**

Runs are bounded and predictable.

### Testing without touching real data

**Challenge**

Changing the prompt or rules on live CRM records is risky.

**Solution**

A dryRun setting runs the whole flow, including the model call, but skips the HubSpot update.

**Outcome**

The prompt can be tuned and checked before records are changed.

### Open items found in the export

**Challenge**

Three details in the workflow need checking. The Wait node after each update has an amount of 10 but no unit stored, and n8n’s default unit for that node is hours. The prompt refers to a Seamless Data field that no earlier node fills, so it is always “N/A”. The collected list members sit in static data, so a run that fails halfway through paging could leave old members behind for the next run.

**Solution**

Open the Wait node and set the unit to seconds. Either feed the Seamless description into the prompt or remove the line. Clear the stored list at the start of each run.

**Outcome**

Not done yet. These are the first improvements to make.

## Key Takeaways & Future Development

### Key takeaways

- Let the CRM define the answers: loading the allowed groups from HubSpot keeps the model inside the structure the team already uses.
- Check the model’s output in code: a confidence gate and a strict match to real options decide what is written, not the model alone.
- Send doubt to a person: Needs R&D with a stored reason turns uncertain cases into a review list.
- Make it safe to test: the dry-run switch, retries and the skip of classified companies make the workflow safe to leave running.

### Future development

- Set the Wait node unit to seconds and check that the Gemini model id is available in your account.
- Fill the Seamless Data line in the prompt or remove it.
- Clear the stored list members at the start of every run.
- Create a HubSpot view of companies marked Needs R&D, sorted by confidence, so reviewers can work through them.
- Send a short summary after each run (companies processed, written, flagged) using the Backlog Run Complete step.
- Run a measured pilot, compare a sample of results with a person’s choices, and use it to complete the results section.

---

# AI-Powered Fashion Campaign Image Generation

> An n8n workflow that turns one product photo into AI-generated model images plus eCommerce and lifestyle campaign shots, saved to Google Drive.

Section: n8n Automations, AI Agents

Page: https://showcase.growlyze.cloud/case/ecom-agent-ai-powered-fashion-campaign-image-generation

### 1. The Problem: Manual Image Creation for Fashion Campaigns

Before automation, the creative team manually handled photo shoots and model image generation, resulting in:

- Time-consuming image conceptualization and generation processes
- Need for specialist prompt engineering for AI image generation
- Fragmented workflows managing product images
- Delays and inconsistency in campaign visuals

The goal was to integrate the entire creative photo shoot pipeline into one automated, AI-powered system to rapidly produce consistent, high-quality fashion campaign images.

### 2. The Goal: Fully Automated Photo Shoot Workflow in One System

By using n8n with AI models and image generation APIs, this workflow:

- Allows uploading a product item image via a simple form trigger
- Automatically analyzes the product to build a creative prompt
- Generates a photo-realistic product model image matching the style
- Further generates high-quality eCommerce and lifestyle product prompts referencing the model and product images
- Produces final photorealistic campaign images dynamically and uploads them to Google Drive
- Streamlines the entire creative direction and image generation process from one system

### 3. System Architecture (Simplified)

### Phase 1: Image Input & Model Creation

- Form Trigger initiates with a clothing image upload
- Convert uploaded image to base64 for API usage
- Build creative prompt with internal logic for garment analysis and ideal model persona
- Call AI image generation API (Google Gemini model) to create a unique fashion model images
- Save and upload model images to Google Drive

### Phase 2: Prompt Generation & Result Image Creation

- Use the generated model image and the original clothing image as references
- Build multiple detailed image prompts for eCommerce studio shots and lifestyle scenarios
- Generate corresponding photorealistic images via AI API calls
- Validate generation success and upload final images to Google Drive

### 4. RealWorld Impact

Here is how the automation changes creative production:

**🟦 Zero manual promptwriting**

All creative direction and prompt engineering is baked into the workflow.

**🟦 Consistent, onbrand visuals**

Every product gets a full set of standardized eCommerce shots plus lifestyle scenes.

**🟦 Massive time savings**

What used to take hours of backandforth between creative, photography, and AI tools now runs in minutes.

**🟦 Scalable for any catalog**

You can run this for 1 product or 1,000 products with the same quality bar.

**🟦 Organized assets**

All outputs go straight into the right Google Drive folder, named in a predictable way.

### 5. Expected Impact

**Here are the KPIs this automation improves**

**Time Savings**

Manual creative + prompt time reduced by 70–90%.

A brand manager or designer saves several hours per campaign.

**Error & Inconsistency Reduction**

No more forgotten angles, missing lifestyle shots, or halfbaked prompts.

Every product gets the same full coverage: front, angle, back, detail, plus lifestyle.

**Content Production Speed**

Campaignready visuals can be generated the same day products arrive.

Faster gotomarket for new drops and collections.

**Asset Organization**

100% of generated images land in the correct Google Drive folder.

Standard naming like “AI Model” and “Result #X” keeps sets easy to browse.

**Creative ROI**

You reuse the same expert logic and creative direction across unlimited products.

More content, more speed, and less dependency on external shoots for every variation.

Image (https://showcase.growlyze.cloud/case-content/ai-agents-ecommerce/image3.png)

---

# AI-Powered 24/7 Voice Support Agent for eCommerce Stores

> A 24/7 AI voice agent that answers store calls using your product and policy data, escalating only complex calls to humans.

Section: n8n Automations, AI Agents

Page: https://showcase.growlyze.cloud/case/ecom-agent-ai-powered-24-7-voice-support

### 1. The Problem: Support Calls Don’t Scale

Before automation, customer support teams manually handled calls:

- Repeating the same answers about products, sizes, shipping, returns, and order status
- Switching between CRM, store backend, and knowledge documents mid-call
- Missing calls during peak hours or off-hours
- Providing inconsistent answers depending on which agent handled the call

**Impact per team**

- Long wait times and dropped calls
- Frustrated customers with basic questions
- No standardized knowledge usage
- High dependency on human agents for repetitive FAQs

Core challenge: Teams needed a 24/7 system to handle most customer queries automatically, using the store’s own data as a trusted knowledge base.

### 2. Results After Automation

**Once the AI voice agent was implemented**

- Calls are answered instantly, any time of day or night
- FAQs are resolved automatically without human intervention
- Escalation happens only for complex or high-risk issues
- Responses are fully aligned with the store’s product and policy data
- Human agents focus on complex, high-value calls

**Time & Effort Savings**

**Before**

- 100–200 repetitive calls/week
- ~2–3 hours/day of agent time spent on FAQs

**After**

- Fully automated
- Humantime required = 10–15 minutes

**Monthly impact**

- ~40–60 hours saved per month per support team
- Equivalent to freeing up 1–1.5 full-time support agents

**Accuracy & Consistency Gains**

- 100% of FAQs answered correctly
- Calls aligned with latest store policies
- Reduced human error and improvisation

### 3. The Solution: AI-Powered Voice Agent

This system acts as a virtual support agent, capable of handling most customer queries autonomously:

- 24/7 natural, human-like voice answers
- Uses the eCommerce store’s knowledge base (products, pricing, inventory, policies, FAQs)
- Resolves common queries end-to-end without human intervention
- Escalates only complex or edge-case calls to human agents

### 4. How the System Works

### Phase 1: Knowledge Base & Store Data

- Collect product, pricing, inventory, policy, and FAQ information
- Structure it as a real-time queryable knowledge base
- Keep it synchronized to avoid outdated information

### Phase 2: Voice Agent Flow

**Incoming Call**

- Customer dials the support number
- VAPI answers with a natural greeting

**Intent & Query Understanding**

- Converts speech to text
- Analyzes intent (product info, order help, policy clarification)

**Knowledge Base Lookup**

**Searches store data for relevant answers**

- Product details (sizes, colors, availability)
- Shipping fees and delivery times
- Return/refund/exchange policies
- Promotions and bundles
- Can query order details for authenticated users (order ID/email)

**Voice Response Generation**

- Crafts a natural, friendly answer
- Converts text to speech and plays it in real-time

**Multi-Turn Conversation**

- Maintains context across follow-up questions
- Handles dynamic conversations about products, orders, or policies

**Escalation to Human (Optional)**

- Complex or high-risk calls forwarded
- Callback requests or ticket created with full transcript

### 5. Business Value

- 24/7 Instant Responses: Customers get accurate answers anytime
- Lower Load on Support Team: AI handles repetitive FAQs automatically
- Consistent, On-Brand Answers: Responses aligned with store knowledge
- Faster Resolution: FAQs resolved in seconds instead of minutes
- Better Data Utilization: Product and policy data powers voice interactions

### 6. Expected Impact

**Time Savings**

- Human agents spend fewer hours on repetitive calls
- Focus shifts to complex, high-value issues

**Error Reduction**

- Fewer incorrect or improvised answers
- Fully aligned with latest product and policy data

**Call Handling Speed**

- FAQs resolved in 1–2 exchanges
- Reduced call transfers and hold times

**Knowledge Utilization**

- Centralized product and policy data reused automatically
- Store knowledge drives consistent voice support

### 7. How You Can Duplicate This System

Built using VAPI + n8n + Slack + Google Sheets.

**Create the VAPI Call Agent**

- Configure greeting & voice tone
- Connect to store knowledge base

**Ensure it can**

**Answer FAQs**

Handle product & policy questions

**Add Webhook to VAPI**

- Add a call-end webhook
- Point to an n8n Webhook node
- Import the n8n Workflow
- Create a new workflow

**Import JSON**

**ShopTalk AI – Call Summary & Lead Capture (1).json**

- Connect Tools in n8n
- Webhook → paste URL into VAPI
- Slack → select summary channel
- Sheets → select spreadsheet & columns

**Test the Flow**

- Make a test call
- Ask questions and express scheduling intent
- End call

**Verify**

- Slack summary appears
- Sheet row is added (if applicable)

**Enable the Workflow**

- Activate the workflow
- The AI voice agent now handles customer calls automatically, 24/7, with minimal human input

### 8. Final Outcome

**With this automation**

- Customer queries are answered instantly, any time
- Human agents are freed from repetitive calls (~40–60 hours/month saved)
- Answers are accurate, consistent, and on-brand
- Complex issues are escalated only when necessary
- Support operations scale without adding headcount

This system turns manual, error-prone customer support into a fast, reliable, and fully automated 24/7 voice operation.

---

# AI-Powered Social Media Content Creation

> An automation that generates LinkedIn captions and images, sends them for approval, and publishes only approved posts.

Section: n8n Automations, AI Agents

Page: https://showcase.growlyze.cloud/case/ecom-agent-ai-powered-social-media-content-creation

### 1. The Problem: Social Media Management Is Inconsistent

Before automation, creating and publishing social media content required juggling multiple tools and manual steps:

- Writing captions repeatedly for each platform
- Designing post images manually
- Maintaining content variety without duplication
- Tracking approvals via email or chat
- Posting manually on LinkedIn
- Losing visibility into what was drafted, approved, or published

**Impact per team**

- 2–4 hours/day spent manually creating, approving, and publishing posts
- Risk of duplicate, missed, or unapproved posts
- Inconsistent brand messaging across channels

Core challenge: Teams needed a single system to reliably create, review, approve, and publish content at scale, without operational chaos.

### 2. Results After Automation

**Once the automation was implemented**

- Captions and images are generated automatically
- Posts are published only after approval
- One centralized control panel tracks all content
- Manual effort in content creation and publishing is nearly eliminated

**Time & Effort Savings**

**Before**

3 hours/day × 20 workdays ≈ 60 hours/month

**After**

- Fully automated
- Humantime required = 5–10 minutes for approvals

**Monthly impact**

- ~50–55 hours saved per team per month
- Equivalent to freeing more than 1 full-time resource for other tasks

**Accuracy & Consistency Gains**

- 100% approved posts follow brand tone and guidelines
- No accidental or duplicate publishing
- Content is tracked and auditable in one system

### 3. The Solution: AI-Powered Social Media Automation

This automation acts as a virtual social media manager:

- Generates LinkedIn captions using AI based on topic, brand tone, and content goals
- Creates post images automatically aligned with captions
- Uses Google Sheets as a centralized control panel
- Sends posts for approval and publishes automatically once approved
- Logs all content and live URLs for tracking and reporting

### 4. How the System Works

### Phase 1: AI Caption Generation

Triggered automatically when a new row is added to Google Sheets

**AI generates captions based on**

- Topic
- Brand context
- Content objective
- Captions are structured, formatted, and optimized for LinkedIn
- Stored in Google Sheets for visibility and approvals

### Phase 2: Image & Post Creation

Caption is used to generate an AI-powered post image

**Image uploaded to Google Drive**

**Google Sheets logs**

**Image URL**

- Caption
- Status (pending/approved/published)
- Eliminates manual image design while keeping visuals aligned with content

### Phase 3: Approval & Publishing

- Approval emails are sent automatically
- Posts are blocked until approval is received
- Only approved posts are published on LinkedIn

**Google Sheets is updated with**

- Publishing status
- Live post URL
- Ensures no missed or duplicate posts

### 5. Business Value

- End-to-End Automation: From caption generation to publishing in one workflow
- Centralized Control Panel: Full visibility of drafts, approvals, and published posts
- Consistent Brand Voice: AI ensures tone and style are consistent
- Approval-Safe Publishing: No post goes live without explicit approval
- Full Tracking & Reporting: All posts logged with status and live URLs
- Time & Cost Savings: ~50+ hours/month saved per team, reduced reliance on designers

### 6. How You Can Duplicate This System

Open the JSON workflow

**Click the attached file**

**Social Media Automation Workflow.json**

- Copy all content from the JSON file
- Open n8n (cloud or self-hosted)
- Log in to your n8n instance
- ➕ Create a new workflow
- Paste the JSON into the editor
- Save the workflow

**Rename to: Social Media Content Automation**

- Update credentials & connections
- Google Sheets: Connect OAuth credentials, ensure columns for Topic, Caption, Image URL, Status, Post URL
- AI Caption Generation: Add AI credentials, verify brand context and prompt setup
- Image Generation: Confirm image prompts are derived from captions and saved to Drive
- Approval & Publishing: Configure email/LinkedIn credentials, ensure workflow updates Google Sheets correctly
- Run a full workflow test
- Execute workflow manually

**Verify end-to-end**

- Captions & images appear in control panel
- Approval logic blocks unapproved posts
- Approved posts publish correctly
- Statuses and URLs update accurately
- Enable the workflow

**Toggle to Active**

Content creation, approval, and publishing now run automatically with minimal manual input

### 7. Final Outcome

**With this automation**

- Social media content creation becomes fast, consistent, and repeatable
- Posting is approval-safe and error-free
- Teams operate from one centralized control panel
- Social media operations scale without increasing workload
- Manual effort is reduced by ~50 hours/month, freeing time for strategic work

This system turns manual, error-prone social media management into a predictable, auditable, and fully automated workflow.

---

# AI-Powered E-Commerce Product Price Monitoring

> A scheduled workflow that tracks product prices, logs history to Google Sheets, and alerts you only on meaningful price drops.

Section: n8n Automations, AI Agents

Page: https://showcase.growlyze.cloud/case/ecom-agent-ai-powered-e-commerce-product-price

### 1. The Problem: Manual Price Checking Wastes Time

Before automation, tracking product prices across online stores was slow, repetitive, and error-prone:

**Users had to manually**

- Open multiple product pages
- Check prices repeatedly
- Record or remember previous prices

**Often missed opportunities**

- Price drops
- Limited-time deals
- No historical visibility into price trends
- Buying decisions were based on guesswork rather than data

**Impact per user**

- 30–60 minutes per day spent manually checking prices
- Missed savings on deals and discounts
- Decisions based on incomplete information

Core challenge: People want to buy at the right time but don’t want to constantly monitor prices themselves.

### 2. Results After Automation

**Once the automation was implemented**

- Price monitoring happens automatically every day
- Alerts are sent only when meaningful changes occur
- Users make data-driven purchasing decisions
- Historical price trends are logged and accessible
- No human involvement is needed for routine checks

**Time & Effort Savings**

**Before**

45 minutes/day × 30 days ≈ 22.5 hours/month

**After**

- Fully automated
- Humantime required = near zero

**Monthly impact**

- ~20–25 hours saved per user per month
- Equivalent to freeing 0.5 full-time workdays per user

**Accuracy & Opportunity Gains**

- 100% of monitored prices captured accurately
- Never miss a price drop or limited-time deal
- Improved buying decisions based on AI analysis

### 3. The Solution: AI-Powered Price Monitoring System

This automation acts as a virtual price tracker and analyst:

- Scheduled scraping collects product prices automatically
- Google Sheets logs historical prices
- AI evaluates trends and identifies best-value opportunities
- Notifications sent via Slack, email, or preferred channels
- Only meaningful changes trigger alerts, reducing noise

### 4. How the System Works

### Phase 1: Scheduled Price Collection

Workflow runs automatically (daily, or custom schedule)

**Visits product pages and extracts**

- Product name
- Current price
- Skips incomplete or erroneous entries

### Phase 2: Price Comparison & History Logging

- Prices for multiple products are compared
- Each run adds a new row to Google Sheets
- Builds a complete price history over time

### Phase 3: AI-Driven Analysis

**AI evaluates**

- Current price vs historical prices
- Which product offers the best value today
- Significant changes worthy of notification

### Phase 4: Smart Notifications

**Sends alerts only when**

- Price drops significantly
- A better deal appears
- Stays silent if no meaningful change occurs
- Notifications sent via Slack, email, or other channels
- Notification

### 5. Business Value

- Zero Manual Monitoring: No human effort required for routine checks
- Never Miss a Deal: Immediate alerts for better prices
- Data-Driven Decisions: AI identifies the optimal product choice
- Historical Visibility: Full record of price trends for smarter buying
- Reduced Noise: Only meaningful alerts, no unnecessary notifications
- Time & Cost Savings: ~20–25 hours/month saved per user

### 6. How You Can Duplicate This System

Open the JSON workflow

**Click the attached file**

**E-Commerce Price Monitoring Automation.json**

- Copy all content from the JSON file
- Open n8n (cloud or self-hosted)
- Log in to your n8n instance
- ➕ Create a new workflow

**Click New → Workflow**

Name it temporarily; rename later

**Import / Paste the JSON**

- Paste the copied JSON into the workflow editor
- n8n rebuilds all nodes and connections automatically
- Update credentials & connections
- Scheduler / Cron Node: Set frequency (daily, weekly, or custom)
- HTTP / Scraping Nodes: Update product URLs, test extraction
- Google Sheets: Add credentials, select spreadsheet and columns (Product, Price, Date, Comparison Result)

**AI Analysis Node: Add API credentials (OpenAI / Gemini)**

- Notification Node: Slack or email credentials, configure messages
- Run a full workflow test
- Manually execute the workflow

**Verify end-to-end**

- Data collection → analysis → notification
- Ensure no alerts if prices haven’t changed
- Enable the workflow
- Toggle workflow to Active
- System now monitors prices automatically, analyzes trends, and sends alerts only when necessary

### 7. Final Outcome

**With this automation**

- Price monitoring is fully automated
- Buying decisions are data-driven and timely
- Users save 20–25 hours per month
- Deals are never missed
- Alerts are meaningful and non-intrusive

This system turns slow, error-prone manual price tracking into a fast, reliable, and fully automated workflow.

Image (https://showcase.growlyze.cloud/case-content/ai-agents-ecommerce/image4.png)

---

# AI-Powered Shopify Abandoned Cart Recovery System

> An always-on automation that detects abandoned Shopify carts and sends personalized, AI-written recovery emails.

Section: n8n Automations, Make Automations, AI Agents

Page: https://showcase.growlyze.cloud/case/ecom-agent-ai-powered-shopify-abandoned-cart-recovery

### 1. The Problem: Abandoned Carts Were Leaving Revenue on the Table

Before automation, abandoned carts were handled manually or not followed up at all:

- Teams had to manually check Shopify for abandoned checkouts
- Writing reminder emails took time and effort
- Most carts were never followed up consistently
- Emails were generic, not personalized
- Delays caused customers to lose purchase intent

**On average**

- Each abandoned cart follow-up took 5–7 minutes
- Most stores only followed up once per day or skipped entirely
- Many potential sales were lost simply due to no timely reminder

For stores with 40–60 abandoned carts per day, this resulted in:

- 3–5 hours of manual work daily, or
- No follow-up at all, leading to permanent revenue loss

### 2. Results After Automation

After implementing the abandoned cart recovery automation:

- Follow-up emails are sent automatically within the right time window
- 100% of abandoned carts receive a recovery attempt
- Email personalization happens instantly using AI
- Manual work is reduced by 90–95%
- Recovery emails are sent within minutes, not hours

**Time & Revenue Impact**

**Before**

- ~6 minutes per cart
- 50 carts/day = ~5 hours/day

**After**

- Fully automated
- Human effort = near zero

**Monthly time savings**

~100–120 hours saved per month

**Revenue uplift (conservative example)**

- If only 5–8% of abandoned carts convert
- And average cart value is $50
- That’s $100–$200+ recovered per day
- $3,000–$6,000+ per month in recovered revenue

### 3. The Solution: AI-Powered Abandoned Cart Recovery

This system works like an always-on sales assistant:

- Detects abandoned carts automatically
- Waits before sending reminders to avoid spamming
- Confirms the cart is still abandoned
- Generates a personalized recovery email using AI
- Sends the email instantly without manual input

The entire process runs silently in the background.

### 4. How the Automation Works

- Shopify provides abandoned checkout data
- n8n controls timing and logic
- AI writes friendly, personalized recovery emails
- Gmail delivers messages directly to customers

No dashboards to monitor. No buttons to click.

### 5. Business Value

- Captures revenue that would otherwise be lost
- Removes repetitive manual follow-up work
- Improves customer experience with timely reminders
- Ensures every cart gets equal attention
- Scales automatically as store traffic grows

### 6. How You Can Duplicate This System

Open the JSON file preview

**Open the attached file**

- Shopify Abandoned Checkout Recovery with Order Verification (1).json
- Select all text (Ctrl/Cmd + A) and copy (Ctrl/Cmd + C)

**Open Make.com**

**Log in to Make.com**

**Go to Scenarios**

Click Create a new scenario

**Choose Import Blueprint**

- Paste the copied JSON and click Save
- Save & name the scenario

**Click Save**

**Rename it to**

**Shopify Abandoned Checkout Recovery with Order Verification**

- Update connections (important)
- Shopify
- Reconnect your Shopify account
- Ensure checkout status is set to abandoned
- Delay module
- Review delay timing (used to confirm the cart is still abandoned)
- Filter / verification
- Confirms checkout is not duplicated or already completed
- OpenAI
- Add your OpenAI API key
- Verify the email body is generated correctly (no subject, no emojis)

**Email (Gmail / SMTP)**

- Reconnect email account
- Map customer email dynamically
- Subject: You left something behind
- Test the scenario
- Click Run once

**Confirm flow**

- Abandoned checkout detected
- Cart rechecked
- AI email generated
- Recovery email sent
- Enable the scenario
- Turn the scenario ON
- Set a schedule (e.g. every 15–60 minutes)

The system now automatically sends AI-written recovery emails for verified abandoned checkouts.

### 7. Final Outcome

**With this automation in place**

- Abandoned cart recovery becomes reliable and consistent
- Sales teams no longer chase carts manually
- Customers receive timely, personalized reminders
- Revenue increases without increasing workload

This workflow transforms abandoned carts from a missed opportunity into an automated revenue recovery system.

---

# AI-Powered Whatsapp message Assistant

> An AI assistant inside WhatsApp that understands text, voice and images and answers from your business knowledge, 24/7.

Section: n8n Automations, AI Agents, AI Agents for WhatsApp

Page: https://showcase.growlyze.cloud/case/ecom-agent-ai-powered-whatsapp-message-assistant

### 1. The Problem: WhatsApp Customer Support Didn’t Scale

Before this automation, customer support over WhatsApp was fully manual and increasingly difficult to manage:

Staff had to reply to every WhatsApp message manually

**Repetitive questions about**

- Products
- Prices
- Availability
- Store policies
- Voice messages required listening and interpretation
- Image-based questions (e.g. product photos) needed human review
- Responses depended on who was replying, causing inconsistency
- Support was unavailable outside business hours

For a small business receiving 80–120 WhatsApp messages per day, this meant:

- 4–6 hours/day spent answering routine questions
- Delayed replies during peak hours
- Missed inquiries outside working hours
- High dependency on trained staff with product knowledge

**Core challenge**

WhatsApp was the main customer channel, but human-only support could not keep up without increasing headcount.

### 2. Results After Automation

Once the WhatsApp AI Business Assistant was deployed:

- 70–85% of incoming queries were handled automatically
- Customers received instant replies, even outside business hours
- Voice messages were transcribed and answered automatically
- Image-based queries (products, issues) were understood by AI
- Answers were consistent, accurate, and policy-aligned
- Human agents only handled complex or edge-case conversations

**Time & Workload Impact**

**Before automation**

- ~3–4 minutes per WhatsApp message
- 100 messages/day = ~5–6 hours/day

**After automation**

- Human involvement only for ~15–30 messages/day
- Manual time reduced to ~1–1.5 hours/day

**Net savings**

- 3–4 hours saved per day
- 90–120 hours saved per month

This allowed the business to scale WhatsApp support without hiring additional staff.

### 3. The Solution: An AI Assistant Inside WhatsApp

The system acts as a virtual support agent that lives directly inside WhatsApp:

- Understands text, voice, and images
- Remembers conversation context
- Searches business knowledge instantly
- Responds naturally like a human agent
- Chooses whether to reply with text or voice

Customers never feel like they’re talking to a bot, just fast, helpful support.

### 4. How the System Works

- Customers message the business on WhatsApp
- AI understands the message type and intent
- Business knowledge is retrieved using semantic search
- A context-aware response is generated
- Reply is sent instantly via WhatsApp

All of this happens automatically in seconds.

### 5. Business Value

- Major reduction in repetitive support workload
- Faster response times improve customer satisfaction
- Consistent answers across all customers
- Supports multilingual conversations naturally
- Operates 24/7 without staff availability
- No changes required to customer behavior

### 6. Reliability & Safety

- Uses verified business knowledge only
- Falls back gracefully when information is unclear
- Never processes payments or sensitive data
- Human escalation can be added anytime

This ensures trust, safety, and accuracy at scale.

### 7. How to Replicate This System

Built using WhatsApp Cloud API + n8n + OpenAI + Supabase Vector Store.

**Set Up WhatsApp Cloud API**

**Configure**

- WhatsApp Business account
- Phone number ID
- Webhook events for incoming messages

**Ensure it can**

- Receive text, voice, and image messages
- Send text and audio replies

**Create WhatsApp Webhook in n8n**

- Create a Webhook Trigger node in n8n
- Copy the webhook URL

**Paste this URL into**

Meta → WhatsApp → Webhooks configuration

This connects WhatsApp messages to the automation.

- Import the n8n Workflow
- Create a new workflow in n8n

**Import the JSON file**

**AI-Powered WhatsApp Assistant.json**

**Connect AI & Data Services**

**Configure the following nodes**

- OpenAI
- Add your OpenAI API key

**Enable**

- Chat model
- Audio transcription
- Image analysis
- Text-to-speech

**Supabase Vector Store**

Add Supabase project URL & API key

**Confirm vector table contains**

- Products
- FAQs
- Policies
- Business information

This enables accurate AI responses (RAG).

**Configure Message Routing**

Open the Switch node

**Verify routing rules**

**Text → AI Agent**

**Voice → Transcription → AI Agent**

**Image → Image analysis → AI Agent**

This keeps processing efficient and cost-effective.

**Test the Flow**

**Send test messages on WhatsApp**

- Text question (e.g., product inquiry)
- Voice message
- Image (product photo)

**Verify**

- Correct intent detection
- Accurate answers from business knowledge
- Responses returned via WhatsApp
- Voice replies work when triggered

**Enable the Workflow**

**Toggle the workflow to Active**

The assistant is now live

Customers can now chat with your AI assistant 24/7 on WhatsApp.

### 8. Final Outcome

With the WhatsApp AI Business Assistant in production:

- Customer support became faster and more reliable
- Staff focused on higher-value conversations
- Customers received instant, accurate help
- Support scaled naturally with business growth

The system transformed WhatsApp from a manual support burden into an always-on AI-powered customer assistant.
