← All case studies

n8n Automations

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

All 14 case studies in this section follow in full.

Contents

n8n Automations

Case studies in full

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

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

The Solution

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

Workflow 1: Athlete Monitor (finds and drafts)

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.

Workflow 2: Reply Detection (approves and publishes)

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.

The Result

Page · Plain text

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

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)

What the prompt enforces

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

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.

Good to Know

Page · Plain text

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

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

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.

Safety Rules

Good to Know

Page · Plain text

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

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

Step 2: Answer the setup questions

Step 3: Prepare and blur the images

Step 4: Write the thread

Step 5: Clean up, add CTAs and deliver

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.

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

Good to Know

Page · Plain text

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

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

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.

What the Code Calculates

What the AI Is Told

Good to Know

Page · Plain text

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

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

ItemDetail
Platformn8n cloud
ChannelWhatsApp Business Cloud API
Input typesVoice note, text, photo
AI modelsOpenAI transcription, GPT-4o-mini vision, GPT-4.1-mini agent, OpenAI speech
Knowledge baseSupabase vector store, products table
Workflow size21 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.

StepProcess
1. WhatsApp inputThe customer sends a voice note, a text or a photo. The WhatsApp Trigger node receives it.
2. RoutingA Switch node checks the message type and sends it down the audio, text or image path.
3. Media handlingVoice 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. NormalizingEdit Fields nodes turn each path into the same two fields: the message text and the customer’s phone number as session id.
5. AI agentThe agent looks up facts in the Supabase products table, thinks again, and writes a short reply. It remembers the conversation by phone number.
6. ReplyIf 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.

Supporting integrations

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 groupConfiguration
WhatsApp TriggerListens for message updates from the WhatsApp Business Cloud API.
SwitchThree rules: audio (by mime type), text (by message type) and image (by mime type).
Download media + HTTP RequestGets the media URL from WhatsApp, then downloads the file with the WhatsApp credential. Used for both audio and images.
Transcribe a recordingOpenAI audio transcription of the downloaded voice note.
Analyze imageOpenAI 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 AgentGPT-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 MemoryWindow memory keyed on the customer’s phone number.
Supabase Vector StoreRetrieve-as-tool on the products table, with OpenAI embeddings.
ThinkA reasoning tool the agent can use before answering.
IfChecks whether the original message was audio.
Generate audio + Send voice replyTurns the answer into speech and sends it back as an audio message.
Send messageSends 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.

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.

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.

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.

MetricResult
Production workflows1 main agent workflow
n8n nodes21 after cleanup
Input types supported3: voice note, text, photo
Reply formats2: text and voice note
AI models used4: transcription, vision, agent, speech
Knowledge sourceSupabase products table, searched by the agent as a tool
Workflow defects fixed2 (placeholder Code node, wrong message type)
Live response time and accuracyNot 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

Future development

Page · Plain text

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

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.

How the System Works

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

StepProcess
1. Email inputThe 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 matchingThe 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 checksThree 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. DecisionRoute 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 actionA 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, syncAttachments 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.

Supporting integrations

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 groupConfiguration
Gmail TriggerPolls 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 + MarkdownFetches the full message and converts the HTML body to Markdown. Retries up to 3 times, 2 seconds apart.
Get Support IDClickUp 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 ThreadTwo 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 HistoryGmail 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.
SwitchSix 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 TaskClickUp 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 TaskPosts 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 syncWaits 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.

ScenarioWhat arrivesWhat the workflow doesResult
1. Mapped client, new requestA 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 domainAn 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 conversationA 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 replyA 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 bounceA 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 confirmationThe 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.

MetricResult
Production workflows1 main workflow, plus an error workflow attached in settings
n8n nodes38
TriggerGmail polling every minute, INBOX only
Routing outcomes6: new, default, comment, and three skip outcomes
Duplicate guards4 layers: Gmail thread id, ClickUp email thread id, ticket id in subject, confirmation wording
Failure handlingRetries 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 coveredMapped client, unknown domain, existing thread, attachments

Execution history (29 Sep to 12 Oct 2026)

MetricResult
Executions retained in n8n11
Successful11 (100%)
Failed or crashed0
Run time9 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 rateNot 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

Future development

Page · Plain text

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

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

ItemDetail
Platformn8n
TriggerSchedule, every hour
CRMHubSpot (companies, a list of companies to process, the hs_industry_group property)
AI modelGoogle Gemini Flash, temperature 0.2, no web search
Batch sizeUp to 100 companies per run, one at a time
Confidence threshold0.6
Safety switchdryRun setting, off by default
Workflow size22 nodes
StatusActive

How the System Works

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

StepProcess
1. Schedule and setupThe 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 backlogThe 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 timeA 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 checkA 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 classificationGemini 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 writeA 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.

Supporting integrations

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 groupConfiguration
Schedule TriggerRuns every hour.
Get Industry Group Options / Extract Valid IndustriesReads 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 ConfigSets 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 IDsTrims 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 CompanyFetches name, domain, website, additional domains and current industry group from HubSpot. Retries up to 3 times.
IF Industry Group MissingContinues 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 SearchableContinues only if the company has at least one domain or a name.
Gemini Classify IndustryGemini 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 UpdateIn dry run mode the update is skipped and the loop continues.
Update Company Industry GroupPATCH request to the HubSpot company record. Retries up to 3 times.
Wait1Pauses 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:

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.

ScenarioWhat arrivesWhat the workflow doesResult in HubSpot
1. Clearly known businessA 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 brandA 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 serviceA 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 companyA 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 onlyA 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 classifiedA company that already has an industry group.Stopped by IF Industry Group Missing, no model call.Unchanged.
7. Dry runAny 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.

MetricResult
Production workflows1
n8n nodes22
TriggerSchedule, every hour
Companies per runUp to 100, processed one at a time
Industry groupsRead live from HubSpot, so the model cannot pick a value that does not exist
Confidence gate0.6, with a 0.65 cap when a company has no domain
Fields written per companyIndustry group, confidence, reasoning, status and check date
Safety featuresDry-run switch, skip of already classified companies, Needs R&D fallback, retries on every network and model call
Accuracy, volume, time savedNot 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

Future development

Page · Plain text

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

1. The Problem: Manual Image Creation for Fashion Campaigns

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

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:

3. System Architecture (Simplified)

Phase 1: Image Input & Model Creation

Phase 2: Prompt Generation & Result Image Creation

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.

Page · Plain text

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

1. The Problem: Support Calls Don’t Scale

Before automation, customer support teams manually handled calls:

Impact per team

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

Time & Effort Savings

Before

After

Monthly impact

Accuracy & Consistency Gains

3. The Solution: AI-Powered Voice Agent

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

4. How the System Works

Phase 1: Knowledge Base & Store Data

Phase 2: Voice Agent Flow

Incoming Call

Intent & Query Understanding

Knowledge Base Lookup

Searches store data for relevant answers

Voice Response Generation

Multi-Turn Conversation

Escalation to Human (Optional)

5. Business Value

6. Expected Impact

Time Savings

Error Reduction

Call Handling Speed

Knowledge Utilization

7. How You Can Duplicate This System

Built using VAPI + n8n + Slack + Google Sheets.

Create the VAPI Call Agent

Ensure it can

Answer FAQs

Handle product & policy questions

Add Webhook to VAPI

Import JSON

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

Test the Flow

Verify

Enable the Workflow

8. Final Outcome

With this automation

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

Page · Plain text

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

1. The Problem: Social Media Management Is Inconsistent

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

Impact per team

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

Time & Effort Savings

Before

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

After

Monthly impact

Accuracy & Consistency Gains

3. The Solution: AI-Powered Social Media Automation

This automation acts as a virtual social media manager:

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

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

Phase 3: Approval & Publishing

Google Sheets is updated with

5. Business Value

6. How You Can Duplicate This System

Open the JSON workflow

Click the attached file

Social Media Automation Workflow.json

Rename to: Social Media Content Automation

Verify end-to-end

Toggle to Active

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

7. Final Outcome

With this automation

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

Page · Plain text

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

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

Often missed opportunities

Impact per user

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

Time & Effort Savings

Before

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

After

Monthly impact

Accuracy & Opportunity Gains

3. The Solution: AI-Powered Price Monitoring System

This automation acts as a virtual price tracker and analyst:

4. How the System Works

Phase 1: Scheduled Price Collection

Workflow runs automatically (daily, or custom schedule)

Visits product pages and extracts

Phase 2: Price Comparison & History Logging

Phase 3: AI-Driven Analysis

AI evaluates

Phase 4: Smart Notifications

Sends alerts only when

5. Business Value

6. How You Can Duplicate This System

Open the JSON workflow

Click the attached file

E-Commerce Price Monitoring Automation.json

Click New → Workflow

Name it temporarily; rename later

Import / Paste the JSON

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

Verify end-to-end

7. Final Outcome

With this automation

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

Page · Plain text

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

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

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

On average

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

2. Results After Automation

After implementing the abandoned cart recovery automation:

Time & Revenue Impact

Before

After

Monthly time savings

~100–120 hours saved per month

Revenue uplift (conservative example)

3. The Solution: AI-Powered Abandoned Cart Recovery

This system works like an always-on sales assistant:

The entire process runs silently in the background.

4. How the Automation Works

No dashboards to monitor. No buttons to click.

5. Business Value

6. How You Can Duplicate This System

Open the JSON file preview

Open the attached file

Open Make.com

Log in to Make.com

Go to Scenarios

Click Create a new scenario

Choose Import Blueprint

Click Save

Rename it to

Shopify Abandoned Checkout Recovery with Order Verification

Email (Gmail / SMTP)

Confirm flow

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

7. Final Outcome

With this automation in place

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

Page · Plain text

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

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

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

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:

Time & Workload Impact

Before automation

After automation

Net savings

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:

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

4. How the System Works

All of this happens automatically in seconds.

5. Business Value

6. Reliability & Safety

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

Ensure it can

Create WhatsApp Webhook in n8n

Paste this URL into

Meta → WhatsApp → Webhooks configuration

This connects WhatsApp messages to the automation.

Import the JSON file

AI-Powered WhatsApp Assistant.json

Connect AI & Data Services

Configure the following nodes

Enable

Supabase Vector Store

Add Supabase project URL & API key

Confirm vector table contains

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

Verify

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:

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

Page · Plain text