← Back to blogmedical spa

Triage Inbound Texts With AI by Zapier and Android Texter

October 22, 2026 · Android Texter

Triage Inbound Texts With AI by Zapier and Android Texter

A med spa front desk takes forty texts between nine and six. Six are new leads asking what a treatment costs. A dozen are reschedules. Four are cancellations, and those slots need to be back on the calendar inside the hour or they stay empty. The rest are confirmations, a wrong number, and one person asking whether you validate parking.

All of it lands in the same thread list, and whoever is standing closest reads it. That holds up until it does not, usually on the day two people call in sick.

AI by Zapier is good at one part of this job: look at a message, decide which of five things it is, and pull the stated details out of it. Android Texter is what puts the message in front of it and sends the answer back out from your own phone number. Both are listed Zapier apps, so this is an ordinary Zap rather than a webhook script you maintain yourself. Here is how to build it, what the AI step genuinely cannot see, and the one path you should leave to a person.

What each app brings to the Zap

Android Texter's Zapier app has one trigger and five operations.

New Inbound Message is the trigger, and it is instant. It is built on Zapier's REST hooks, so when a text arrives at your paired Android phone the Zap starts within seconds. It does not sit on a 5 or 15 minute polling schedule, which is the difference that matters when the message is a lead.

The trigger hands the next step eleven fields. In practice you use five: From Phone, Message Body, Received At, Device Name, and Media URL (MMS) when somebody sends a photo.

One naming trap worth knowing before you start. The sender's number comes through as From Phone. If you type a field reference by hand instead of picking it out of Zapier's list, that is where you end up with an empty recipient and a send that fails for no visible reason.

The actions on the Android Texter side:

  • Send SMS: one recipient, up to 1,600 characters, optional MMS media URL, optional device to send from, optional later send time.
  • Send Broadcast: the same body to up to 500 numbers, with per recipient tokens such as {{first_name|there}}.
  • Create or Update Contact: keyed on the phone number, so running it twice is safe.
  • Find Devices and Find Conversation History: searches, for checking which phone is online and for pulling the recent messages in a thread.

AI by Zapier has four actions and only one of them belongs in this Zap.

Analyze and Return Data is the one you want. You give it a prompt, pick a model, and define the fields you want back.

Extract Content From URL and Search Content Across URLs exist because the Analyze action cannot browse. Zapier's help page states it directly: the step cannot search or extract information from websites or URLs. If an inbound text contains a link and you need what is behind it, that is a separate step.

There is also a second Analyze and Return Data entry in the action list, marked as agentic. Do not add it. Zapier's own listing says it does nothing and exists only so an account admin can restrict tools, knowledge sources and web browsing inside the real action. A Zap with that entry in the middle will error.

Zap 1: classify every inbound text

An Android phone held beside an open laptop while setting up an SMS automation Trigger: Android Texter, New Inbound Message.

Action: AI by Zapier, Analyze and Return Data. Map Message Body into the prompt, and define output fields instead of asking for prose. Prose comes back shaped differently on every run and breaks whatever you wired downstream.

The prompt can be short:

You are reading one inbound SMS sent to a med spa. Classify it and extract only what the message actually states. Do not infer. Leave a field blank if the message does not say.

The output fields do the real work:

  • intent, text, one of: new_lead, reschedule, cancel, pricing, confirmation, opt_out, other
  • urgency, text, set to high if the message names a date inside 48 hours
  • first_name, text
  • service, text, the treatment named, blank if none
  • requested_date, text, as written
  • needs_human, true or false

Then branch on intent with Paths or a Filter. Six narrow paths beat one clever prompt trying to do the whole job in a single step, because when a path misfires you can see which one it was.

A word on cost, because it is easy to miss. The model tier changes what the step bills. Zapier documents Standard at 1 task per run, Advanced at 3, Premium at 5, and Bring Your Own Key at 1 including tool calls. Premium is the default on a new step. On a mailbox taking forty texts a day that default is the difference between roughly 1,200 and 6,000 tasks a month. Sorting a text into one of seven buckets is not the hard end of what these models do, so start on Standard and move up only once you can point at a label it got wrong.

Zap 2: answer the three easy cases automatically

Empty med spa treatment room with fresh linens, the open slot a cancellation leaves behind Three of the paths can close themselves. Keep the copy short enough that it reads like a person typed it on a phone, because it is going out from a phone.

Pricing. Android Texter, Send SMS, with To Phone Number mapped from From Phone.

Hi {{first_name|there}}, thanks for texting. Our {{service}} starts at $X and the first visit includes a 15 minute consult so we can quote you properly. Want me to hold a time this week?

Confirmation. Someone replying "yes" or "see you then" needs nothing back. End the path. An auto-reply to a confirmation is the single clearest signal to a customer that nobody is reading.

Cancellation. The slot is the asset, so put the next two openings in the same message:

Got it, you are cancelled for {{requested_date}} and there is no fee. The next two openings are Tuesday 2pm and Wednesday 10am. Reply with either and it is yours.

Reschedule is the one to leave half manual. Acknowledge, then notify whoever owns the book:

Thanks, I have your request to move {{requested_date}}. Checking the book now and I will text you options within the hour.

That last line is a promise, so only send it during hours when somebody is there to keep it. Add a Filter by Zapier step on the trigger's Received At field if texts land on your phone overnight.

Zap 3: log the lead without creating a duplicate

On the new_lead path, put Android Texter's Create or Update Contact in front of the reply. Phone Number is the key, so the action is an upsert: a number already on file gets the new fields merged onto the existing row rather than a second contact, and tags are added to whatever tags are already there instead of replacing them.

That property matters more inside Zapier than almost anywhere else, because Zapier retries a step that errors. An action that is not idempotent turns one retry into two contacts and two threads with the same person.

Map Display Name from the AI step's first_name and put the treatment into Tags. Notes is the right home for the raw message body, so whoever picks the thread up later sees what the customer actually wrote rather than the label a model put on it.

Four things the AI step cannot do

Med spa manager talking with a colleague at a back office desk, laptop and Android phone in front of her It cannot read a link. The Analyze action does not browse. Chain Extract Content From URL ahead of it if the inbound text is a link you need to act on.

It does not remember the previous message. Each run starts cold and nothing carries over. When a reply only makes sense in the context of the thread, put Find Conversation History before the AI step and feed the recent messages in as part of the prompt. That search returns newest first, defaults to 100 messages and caps at 500.

It cannot see an image unless the image is publicly reachable. Zapier notes that images used for analysis have to be publicly accessible. Android Texter gives you Media URL (MMS) on the trigger, so check that the URL resolves without a login before you build a path that depends on it.

It will never tell you it was unsure. A classifier returns its best available label whether or not the message supported one, and a cheerful wrong label is worse than no label. That is what the needs_human field is for: tell the prompt to set it on anything ambiguous, and route that path to a person rather than to a reply.

Opt-outs are the one path to leave alone

Android Texter routes person to person SMS from a handset you own, so the A2P 10DLC carrier gate does not apply to the traffic. The TCPA applies in full, exactly as it would with any other provider. Collecting consent and honoring opt-outs is the operator's job and nothing about a Zap changes that. We have written about what ignoring STOP replies does to your delivery and whether texting a number on the Do Not Call list violates the TCPA.

Where the AI step earns its place here is the opt-out a keyword rule misses. "Take me off this list", "please stop texting me" and "wrong number, quit it" are all opt-outs and not one of them contains the word STOP. Keyword matching is the right tool for STOP and a poor one for those three sentences. Give the classifier an opt_out label, route it to a person and to whatever suppression list you keep, and do not route it to an automatic reply.

Frequently Asked Questions

Do I need my own OpenAI or Anthropic key?

No. Analyze and Return Data runs on Zapier provided models by default, on the Standard, Advanced or Premium tier. Bring Your Own Key is optional and connects an OpenAI, Anthropic, Google Gemini, Azure OpenAI or Amazon Bedrock account instead. It bills at 1 task per run including tool calls, and it is the only tier where Zapier's content moderation can be turned off.

How fast does the Zap actually fire?

The Android Texter trigger is a REST hook, so the message is pushed to Zapier when it arrives rather than found on the next poll. The reply goes out seconds after the inbound text. If anything in the chain is slow it is the model, not the trigger, which is another reason to run classification on a cheaper tier.

Can one Zap cover several paired phones?

Yes. The trigger fires for any device on the account and tells you which one in Device Name and Device Phone. On the way out, leave Send From Device blank to use the first online phone, or map the trigger's Device ID so the answer leaves from the same number that took the text. For an inbox, replying from the same number is almost always what you want.

What happens when a step fails?

Zapier retries, which is why the order matters. Put Create or Update Contact ahead of the send and the lead is captured even on a run where the reply never goes out, because the upsert merges on retry instead of duplicating. A failed Send SMS shows up in your Zap history with the error the API returned.

The classification is the cheap part of this. What makes it worth building is that the answer leaves from a real ten digit line on a phone you own, so the customer sees a text from the same number they have been texting all along, not a short code. Pair a phone and connect the Zapier app, and the first version of this, trigger plus classify plus three paths, is an afternoon of work.