Automation guides for small businesses. Real prices, no hype.

How to Automate Customer Support with Make and AI

Jhonatan Alves
How to Automate Customer Support with Make and AI

You can automate customer support emails with Make and an AI model without letting the AI talk to your customers on its own. In the setup below, every email that lands in a Gmail label gets read, classified and logged. If your approved FAQ answers the question, you get a draft reply in Gmail, ready to check and send. Everything else (complaints, refunds, urgent problems and questions the FAQ doesn't cover) goes to a person with a one-line summary. Spam is logged and ignored.

I built and tested it for a fictional small business, Brightside Cleaning Co., with seven real test emails. Two became drafts, four went to a human, and one was marked as spam. That is exactly the split I expected, but it took six fixes to get there. They are all in the "What I learned" section, so you can skip them.

What you'll build

Make scenario Customer Support Triage after a test run: Gmail, Google Docs, DeepSeek AI, Parse JSON and a router with three routes
The finished scenario after a test run with 7 emails: 2 drafts, 1 spam, 4 sent to a human.
#ModuleWhat it does
1Gmail: Watch emailsPicks up new emails with the "Support" label
2Google Docs: Get content of a documentReads your approved FAQ
3DeepSeek AI: Create a chat completionClassifies the email, picks the FAQ entry that answers it (or none) and writes a draft
4JSON: Parse JSONSplits the AI answer into fields you can map
5RouterSends each email down one of three routes: draft reply, spam or needs a human
6Gmail: Create a draft / Send an emailCreates the draft for FAQ questions, or alerts you about everything else
7Google Sheets: Add a rowLogs every email in a Tickets sheet

Why drafts, not automatic replies

Most support tools sell the fully automatic answer. For a small business, that is the risky part. One invented price or a promise you can't keep costs more than the time you save.

So this scenario follows three rules. The AI only answers from an FAQ you wrote and approved. Some categories always go to a person, no matter what the AI thinks: complaints, billing, refunds, account changes and anything urgent. And nothing reaches the customer until you press Send.

Once the drafts are consistently right for a few weeks, you can decide whether some FAQ answers are safe to send automatically. Start with drafts.

Before you start

  • A Make account. The free plan is enough to build and test this. Create one here (affiliate link). If you are still choosing a platform, see Zapier vs Make vs n8n.
  • An AI API key. I used DeepSeek because it is cheap and Make has a native module for it. The same setup works with OpenAI or Anthropic modules; only step 3 changes.
  • A Gmail label and filter. Create a label called Support and a filter that applies it to emails sent to your support address. For testing, an alias like yourname+support@gmail.com works well.
  • A Google Doc with your FAQ. One entry per line, in the format ID | question | answer.
  • A Google Sheet called "Support Desk" with a tab named Tickets and these headers in row 1: received_at, message_id, from_email, subject, category, faq_id, route, summary.
Gmail filter that applies the Support label to emails sent to the +support address
The Gmail filter: everything sent to the +support alias gets the Support label.
Google Doc called Support FAQ with seven approved questions and answers
The approved FAQ. The AI can only answer with what is in this document.

Here is the FAQ I used, if you want to copy it for a test:

FAQ-01 | What are your opening hours? | We're open Monday to Friday, 8 am to 6 pm, and Saturday, 9 am to 1 pm. We're closed on Sundays and public holidays.
FAQ-02 | How much does a standard home cleaning cost? | A standard cleaning starts at $120 for homes up to 2 bedrooms. Larger homes get a quote after a short call. You can see all prices at brightsideclean.example/pricing.
FAQ-03 | Which areas do you serve? | We serve Austin and the surrounding area within 25 miles, including Round Rock, Cedar Park and Pflugerville.
FAQ-04 | How do I book or reschedule a cleaning? | You can book or reschedule online at brightsideclean.example/book. Changes are free up to 24 hours before your appointment.
FAQ-05 | Do I need to be home during the cleaning? | No. Many clients leave a key or a door code. Just let us know in your booking notes how we'll get in.
FAQ-06 | Do you bring your own cleaning supplies? | Yes. We bring all supplies and equipment. If you prefer specific or eco-friendly products, add a note to your booking.
FAQ-07 | Which payment methods do you accept? | We accept credit and debit cards. Payment is charged after the cleaning is complete.
Tip: Keep the FAQ in a single Google Doc, not in a spreadsheet. I started with a Sheets tab plus a Text Aggregator, and it merged all incoming emails into one bundle. One "Get content" module is simpler and costs one credit per email.

Step by step in Make

  1. Watch the Support label

    Create a new scenario and add Gmail → Watch emails. Pick your connection, choose the Support label and set the criteria to new emails only. When you test, right-click the module and use Choose where to start with a time just before your test emails, or the module will say there is nothing new.

  2. Read the FAQ

    Add Google Docs → Get content of a document and select your FAQ document. Its Text Content output is what the AI will read.

  3. Ask the AI to classify and draft

    Add DeepSeek AI → Create a chat completion. Add two messages: a System message with the prompt from the next section, and a User message with the email and the FAQ. Turn on Show advanced settings, set Response format to JSON object and Max tokens to 8000.

    DeepSeek AI module in Make with the System and User messages; the User message maps subject, full text body and the FAQ text
    The User message sends only the subject, the body and the FAQ. The customer's email address never goes to the AI.
  4. Parse the JSON

    Add JSON → Parse JSON. Create a data structure with five text fields: category, faq_id, urgency, summary and draft_reply. In JSON string, map the AI answer through a small cleaner that removes code fences if the model adds them:

    {{trim(replace(replace(3.choices[].message.content; ```json; emptystring); ```; emptystring))}}
    Parse JSON module with the support_triage data structure and the JSON string mapped from the DeepSeek answer
    The JSON string must be mapped from the AI answer, never typed by hand.
  5. Split the work with a router

    Add a Router with three routes:

    • Draft reply: category equal to faq AND faq_id not equal to none AND urgency not equal to high.
    • Spam: category equal to spam (case insensitive).
    • Needs a human: no condition. Mark it as the fallback route, so it gets everything the other two routes didn't take.
    Make router filter for the Spam route: Category equal to spam, case insensitive
    The Spam filter. The fallback route catches everything else.
  6. Create the draft

    On the Draft reply route, add Gmail → Create a draft. Map To to the sender's email from module 1, Subject to the original subject (add Re: in front if you prefer), Body type to Raw HTML and Content to draft_reply.

    Gmail Create a draft module with To, Subject and Content mapped
    The draft goes back to the sender, but stays in your Drafts folder until you send it.
  7. Alert a person

    On the Needs a human route, add Gmail → Send an email to your own address. In Subject, type [Needs a human], then map the category and the original subject. In Content (Raw HTML):

    Category: {{8.category}}<br>
    Urgency: {{8.urgency}}<br>
    Summary: {{8.summary}}<br><br>
    Original message:<br>
    {{1.fullTextBody}}

    Use the full text body, not the snippet. The snippet is cut after a couple of lines.

    Gmail Send an email module for the Needs a human alert, with category, urgency, summary and original message
    The alert email: you see what the customer wants before you open the thread.
  8. Log every email

    At the end of each of the three routes, add Google Sheets → Add a row for the Tickets tab. Map the fields below and type the route name by hand: draft, spam or human. Build it once, then right-click and Duplicate it for the other routes.

    Google Sheets Add a row module mapping received_at, message_id, from_email, subject, category, faq_id, route and summary
    The same log row on every route. Only the route value changes.

    For received_at, {{formatDate(now; "YYYY-MM-DD HH:mm")}} records when Make processed the email. To record when the email arrived, use the Date field from the Gmail module instead.

The prompt that classifies and drafts

This is the System message I used, with the final fixes. Copy it and change the company details:

You are a customer support triage assistant for Brightside Cleaning Co., a home cleaning business in Austin.

Read the customer email and the approved FAQ. Return ONLY a JSON object with these keys:
- "category": one of "faq", "complaint", "billing", "refund", "account", "urgent", "spam", "other"
- "faq_id": the ID of the FAQ entry that fully answers the email, or "none"
- "urgency": "low", "normal" or "high"
- "summary": one sentence, max 25 words, describing what the customer wants
- "draft_reply": a reply to the customer, or "" (empty)

Rules:
1. Write a draft_reply ONLY when category is "faq" and one FAQ entry fully answers the question. Use only the facts in that FAQ answer. Never invent prices, policies, dates or promises.
2. If the question is not fully answered by the FAQ, set faq_id to "none" and draft_reply to "".
3. Complaints, billing questions, refunds, account changes, legal issues and anything urgent never get a draft_reply.
4. In draft_reply: greet the customer by first name if the email shows it, answer in 2 to 4 short sentences, and sign as "Thanks,<br>The Brightside team". Separate the greeting, the answer and the sign-off with HTML line breaks, like this: "Hi Anna,<br><br>Yes, we're open...<br><br>Thanks,<br>The Brightside team". Do not use \n in draft_reply.

Respond with a valid json object only, with no extra text.

And the User message, with the fields mapped from Gmail and Google Docs:

Customer email
Subject: {{1.subject}}
Body:
{{1.fullTextBody}}

Approved FAQ:
{{13.text}}

Rules 1 and 2 do most of the work. They tell the AI that "I don't know" is a valid answer, and that it should hand the email over instead of guessing.

Testing it with seven emails

I sent seven emails to the +support alias, each one testing a different route. Then I ran the scenario once and checked the Tickets sheet.

EmailCategoryFAQRoute
Are you open on Saturday? (Anna)faqFAQ-01draft
Price for a 2-bedroom apartment (Mark)faqFAQ-02draft
Oven cleaning? (Julia)faqnonehuman
Not happy with yesterday's cleaningcomplaintnonehuman
Refund request (duplicate charge)refundnonehuman
URGENT: cleaner didn't show upurgentnonehuman
Rank #1 on Google in 7 daysspamnonespam
Tickets sheet with seven rows: two draft, four human and one spam, each with category, FAQ ID and summary
The log after the test. Each row has its own category and summary.

The most important result is Julia's email. Asking whether the team cleans inside the oven sounds like a simple FAQ question, and the AI labeled it faq. But no FAQ entry answers it, so it set faq_id to none, wrote no draft, and the router sent it to a person. That is the behavior you want: no invented answer, no invented price.

Gmail draft created by the scenario answering Anna's question about Saturday opening hours, signed by The Brightside team
The draft for Anna uses only the opening hours from FAQ-01.
Alert email with subject [Needs a human] urgent, showing category, urgency, summary and the original message
The urgent email arrives as an alert with a summary and the original text.

What it costs

Make. Make charges one credit per module action. Each email uses about five: Google Docs, DeepSeek, Parse JSON, the Gmail draft or alert, and the Sheets row. Spam uses four, because it has no Gmail module. The router doesn't use credits. The whole seven-email test used about 35 credits.

Watch the trigger, though. Each scheduled check of the Gmail module costs a credit, even when there is no new email. Checking every 15 minutes, all day, is close to 2,900 checks a month. The free plan has 1,000 credits and two active scenarios, so on the free plan schedule it every hour, only during business hours. The Core plan starts at $9 a month, billed yearly, for 10,000 credits a month, with unlimited active scenarios and scheduling down to the minute (Make pricing page, checked October 2026).

DeepSeek. I used deepseek-v4-pro, which costs $1.32 per million input tokens and $3.96 per million output tokens at peak hours, and half that off-peak (DeepSeek pricing page, checked October 2026). Each email sent about 770 input tokens. Because v4-pro reasons before answering, the output can run to a thousand tokens or more. That puts each email well under one cent. My whole test day, with several full runs of the seven emails plus the failed attempts described below, cost $0.03 in DeepSeek usage.

For triage, you don't need a reasoning model. The cheaper deepseek-flash model, in non-thinking mode, costs $0.30 per million input tokens and $1.20 per million output tokens at peak, which brings 1,000 emails to well under a dollar of AI cost.

To see whether that pays off, put your own email volume and hourly rate into the automation ROI calculator.

What not to automate

Even with good drafts, some emails should always reach a person first:

  • Refunds, chargebacks and billing disputes
  • Complaints, especially the angry ones
  • Anything urgent or about safety
  • Account changes, cancellations and personal data requests
  • Legal threats or anything that mentions a lawyer

The prompt already blocks drafts for these, and the router sends them to the fallback route. Don't remove that safety net to save a few minutes. For more on picking what to automate first, see which processes to automate first.

How to know it's working

The Tickets sheet gives you three numbers to watch each week:

  • First response time. FAQ questions should now get an answer as soon as you review the drafts, not when you get to the inbox.
  • Share sent to a person. If almost everything goes to "human", your FAQ is missing common questions. Add them.
  • Drafts you had to edit. Keep a quick count. If you edit most drafts, fix the FAQ answer or the prompt before you think about sending anything automatically.

When a dedicated help desk is better than Make + Gmail

This setup fits one or two people answering email. Once you need shared inboxes, assignments, a knowledge base or live chat, a help desk makes more sense.

Two common options for small teams: Freshdesk starts at $19 per agent a month, and Help Scout at $25 per user a month, both billed yearly. Help Scout also sells AI answers as an add-on at $0.75 per resolution (official pricing pages, checked October 2026). For a team of two, that is $38 to $50 a month before any AI, compared with a few dollars for the Make setup. Platforms like Gladly or Salesforce make sense for large support teams, not for a business answering a few dozen emails a day.

What I learned building it

I have built AI support automation before, on WhatsApp for accounting offices, and the lesson there was the same as here: the AI part is easy, and the small plumbing details break things. These six problems all showed up in testing, and none of them produced an obvious error message.

  1. DeepSeek's JSON mode needs the word "json" in the prompt. With Response format set to JSON object, the API rejected the request until the prompt contained the word in lowercase. That is why the last line of the prompt says "valid json object".
  2. The Text Aggregator merged all emails into one. My first version read the FAQ from a spreadsheet and joined the rows with a Text Aggregator. The aggregator also collapsed the seven emails into a single bundle, and the email bodies came through blank. Replacing it with one Google Docs module fixed it.
  3. Every email got the same answer. When you create the Parse JSON data structure from an example, it is easy to leave that example text in the JSON string field. The scenario runs without errors, but every email is classified as the example: in my case, seven "opening hours" questions. Map the AI answer instead.
  4. A reasoning model can spend all its tokens thinking. With Max tokens at 800, deepseek-v4-pro used all of them on reasoning and returned an empty answer with finish_reason: length. Raising the limit to 8,000 solves it. You can also switch off Thinking in the DeepSeek module, since sorting emails doesn't need it.
  5. A router route with no modules is ignored. While the Spam route had only a filter, Make sent the spam email to the fallback route. Once I added the Sheets module to that route, the filter worked.
  6. Raw HTML ignores line breaks. The first drafts came out as one long line, because the prompt asked for plain text and Gmail's Raw HTML body ignores normal line breaks. Asking the AI to separate the parts with <br> fixed the layout.

Common errors

What you seeLikely causeFix
Gmail module finds no new emailsIt already processed them in an earlier runRight-click the module, Choose where to start, pick a time before your test emails
Parse JSON failsEmpty or cut answer from the AICheck finish_reason in the AI output; raise Max tokens
Rows in the sheet with empty columnsMappings point to a module you deletedOpen the Sheets module and map every field again
Alert email bouncesTypo in the To addressCheck the Gmail module; one wrong letter is enough
Alert subject shows "chat.completion"The wrong field (Object, from the AI module) is mappedMap the Subject field from the Gmail trigger

Download the blueprint

You can import the whole scenario into your Make account instead of building it by hand: download the blueprint (.json). In Make, create a new scenario, open the three-dot menu and choose Import blueprint. Then reconnect Gmail, Google Docs, Google Sheets and DeepSeek, pick your Support label, your FAQ document and your sheet, and replace you@example.com with your own address in the alert module. The Parse JSON module needs a new data structure in your account, with the five fields from step 4.

Already capturing leads with Make? The same triage idea works on contact forms; see how to automate lead capture with Make.

FAQ

Can the AI reply to customers automatically?

It can, but I don't recommend starting that way. Begin with drafts, track how many you have to edit, and only consider automatic replies for FAQ answers that have been right for weeks.

Does this work with Outlook instead of Gmail?

Yes. Make has Microsoft 365 Email modules for watching emails, creating drafts and sending messages. The router, the prompt and the log stay the same.

Can I use ChatGPT or Claude instead of DeepSeek?

Yes. Swap step 3 for the OpenAI or Anthropic module, keep the same prompt and update the mapping in the Parse JSON module to point to the new module's answer.

Does the customer's personal data go to the AI?

Only the subject and the body of the email. The sender's address stays in Make and goes straight to the draft and the log. If customers often include sensitive data in emails, check your AI provider's data policy before using this.

How many emails can the free Make plan handle?

With about five credits per email and an hourly check during business hours, the free plan covers roughly 150 emails a month. Above that, the Core plan is the next step.


Share this article:

Questions about this guide?

Tell me what you're trying to automate and I'll reply by email. Good questions often become the next guide. Get in touch →