Zenoti logoThe AI Receptionist for Zenoti
Trusted by 100+ service businesses

An AI Receptionist that books, reschedules & cancels appointments — 24/7 — and writes them straight into Zenoti logoZenoti.

Plugs into your website and phone line. Voice in 30+ languages. Live by tonight, booking customers by tomorrow. No Zapier, no n8n, no code.

Intentionally cheap so you can prove it works before spending more.
SalonsHair stylistsBarbershopsMed spasNail studiosLash barsDental clinicsChiropractorsPhysiotherapyMassage therapistsWellness clinicsDermatologyVeterinary clinicsPet groomingHome servicesPlumbersElectriciansHVACCleaning servicesLawn careTutorsPersonal trainersYoga studiosPilates studiosLaw firmsAccountantsReal-estate agentsPhotographers SalonsHair stylistsBarbershopsMed spasNail studiosLash barsDental clinicsChiropractorsPhysiotherapyMassage therapistsWellness clinicsDermatologyVeterinary clinicsPet groomingHome servicesPlumbersElectriciansHVACCleaning servicesLawn careTutorsPersonal trainersYoga studiosPilates studiosLaw firmsAccountantsReal-estate agentsPhotographers
§ 01 — See it in action

Talk to the agent on the left. Watch the booking appear on the right.

This is the same agent shape you'll deploy. Ask it about a haircut on Tuesday, a reschedule, or a cancel — it'll write the appointment straight into the calendar.

Live AI chat → connected to Zenoti
Bookings land here in real time
Zenoti logoWorks with Zenoti
§ 02 — Questions you'd ask before buying

FAQ — Zenoti integration.

Does this actually work with my Zenoti account?
Yes. AnyCRM uses Zenoti's official API via an organization-level API key. Every captured caller lands as a Zenoti guest at the right center with an intake note from the call, the right preferred-therapist / preferred-center settings respected, and the source attributed. Services land as native Zenoti appointments on the right specialist's schedule, walked through Zenoti's required four-step reserve-then-confirm flow so the room, the specialist, and the service are all locked together.
Will it create duplicate guests in Zenoti?
No. AnyCRM resolves the existing guest first (normalising mobile to E.164 and email) across every active center before writing. A returning caller becomes a new intake note on the existing record at that center, never as a second guest, and the existing preferred-therapist / preferred-center settings are preserved. Cross-center matches are surfaced so the booking attaches to the right location.
Can it route different services to different specialists on my team?
Yes. AnyCRM reads your Zenoti team roster and the per-center service catalog once at setup. Every active specialist, with their certified services, languages, gender (where surfaced), timezone, and Zenoti identifier. Lip filler routes only to specialists with the injectables certification; a balayage routes only to certified colorists; preferred-therapist settings on the guest record are honoured first.
Where do the appointments actually live, the front-desk schedule or Zenoti?
Both. AnyCRM walks Zenoti's full four-step booking flow so the appointment lands as a native Zenoti appointment on the chosen specialist's schedule at the chosen center, with the room, the specialist, and the service locked together. You see one clean appointment on the front-desk schedule, one guest record with an intake note, one center-scoped audit attribution. Same as a manually-booked guest.
Can it cancel or reschedule a service from a phone call?
Yes. The caller gives their mobile or email, AnyCRM finds the soonest upcoming Zenoti appointment, the AI Receptionist reads it back, and AnyCRM either reschedules atomically (reserve the new slot, confirm, release the old) or cancels with the right cancellation reason mapped from the center's configured list. So your late-cancel / no-show fee policy fires correctly and the verbatim reason is preserved on the appointment note. Never a deletion that would strip the audit trail.
What if a caller has two upcoming appointments in Zenoti?
AnyCRM returns every upcoming appointment for that guest (service, specialist, center, date, time) and the AI Receptionist asks which one to change before doing anything. Multi-center guests get a clean cross-center list, sorted by start time. It never assumes.
Does it handle timezones correctly across centers?
Yes. The AI Receptionist confirms the caller's country/timezone, AnyCRM converts the appointment time into the chosen center's local time and the format the Zenoti booking flow requires, and the AI Receptionist reads the time back to the caller in their local timezone. No customer-facing UTC strings, no off-by-an-hour confirmations, no cross-center timezone smearing.
Does it handle memberships, deposits, or intake forms?
Not directly. AnyCRM stays focused on the conversation surface: capturing the guest, matching the right specialist, booking the service. Membership upgrades, deposit collection, intake form delivery, loyalty enrolment — those are YOUR business policy, and that policy lives inside your CRM in the receiving flow we wire up for you at onboarding. Every guest-create and every booking in AnyCRM sends a lead event straight into that flow (tagged with source AI Receptionist Call or AI Receptionist Web). Your flow decides which membership offer, which deposit, which intake form, which marketing tag. AnyCRM doesn't try to encode policy that will drift out of date the moment your business changes.
How does the conversion tracking work?
Every lead event AnyCRM produces (from a phone call, a chat conversation, OR a website form / Webstore booking) flows through a single conversion pipe. It lands in your CRM for business logic. AND it fires server-side into Google Ads, Facebook Ads, and your analytics platform, using the origin of the domain you registered with AnyCRM. Server-side means the conversion can't be blocked by ad-blockers and doesn't degrade under iOS / Safari tracking restrictions. The result: higher ROAS, lower ad costs, enriched analytics, and attribution that doesn't fragment between web and voice. As far as we can tell, none of our competitors — not even Zenoti's own AI Receptionist — have built this yet.
What about my existing website forms and Webstore? Do they go through the same pipe?
Yes — that's the whole point. Web forms / Webstore bookings AND the AI Receptionist produce the same lead-event shape with the same source taxonomy. They land in the same place in your CRM, and they fire the same server-side conversion event into your ad platforms. So your bid strategy optimises against unified, real bookings instead of fragmenting across web-only and voice-only stacks.
Will customers know it's an AI?
Not on voice. The bundled humaniser prompts add natural pacing, filler words, and warmth. On chat, we recommend a small "AI assistant" badge so trust stays intact. Either way, the Zenoti guest record and the front-desk appointment look identical to a manually-booked one.
How long until it's actually booking guests into Zenoti?
Most spas are live the same afternoon. The Zenoti API key takes a minute. The per-center roster, service catalog, and cancellation-reason import is automatic. We wire up the lead-receiving flow inside your CRM during onboarding. The phone integration is usually under an hour. Web chat is faster.
Zenoti logoWorks with Zenoti
§ 03 — Availability & Booking

Captures the caller as a Zenoti guest, books the service on the right specialist's schedule, and feeds one unified conversion pipe for your website forms AND your AI Receptionist.

Every caller who asks about a facial, a massage, a botox consult, or a haircut lands as a Zenoti guest with the right center, the right service, the right specialist, and a confirmed appointment on that specialist's schedule. AnyCRM walks Zenoti's four-step booking flow in one server-side transaction. AND the same lead event flows through one unified pipe (with the same shape, same source attribution, and same server-side conversion path used by your website forms) so your Zenoti workflow and your Google / Facebook / LinkedIn Ads both stay in sync.

A.01

Every caller becomes a Zenoti guest, not a missed booking

The AI Receptionist captures name, mobile, email, the service the caller asked about, and any preferences (gender of specialist, room preference, allergies). Then AnyCRM writes the guest into Zenoti at the right center with the matched specialist and a clean intake note, DURING the call.

A.02

Books appointments as native Zenoti appointments on the right specialist's schedule

The appointment lands as a native Zenoti appointment with the matched specialist, the right service, the right room, and the right center — walked through Zenoti's required four-step reserve-then-confirm flow. So it shows on the front desk's schedule, in the specialist's day view, and on the guest record exactly the way Zenoti expects.

A.03

Sends the lead event straight to your business workflow. You decide what happens next.

AnyCRM does not pretend to know your guest-nurture rules. Every guest-create and every booking sends a lead event straight to your CRM workflow (with source: "AI Receptionist Call" or source: "AI Receptionist Web") where YOUR business logic takes over. Membership upgrade flow, intake form send, loyalty enrolment, deposit collection, marketing tag. We set up the receiving end inside your CRM for you during onboarding, tuned to your vertical and your center configuration. AnyCRM doesn't get in the way of policy you've already encoded.

One conversion pipe for your website forms AND your AI Receptionist.

Most spa and salon groups run two completely separate conversion-tracking stacks: one for the website (forms, Webstore, page-load pixels) and a totally absent one for the phone and the AI Receptionist. So Google Ads and Facebook Ads only learn from web bookings, the bidding optimises for the wrong audience, attribution is broken, and analytics double-count or miss real bookings entirely. AnyCRM closes that gap by running BOTH surfaces through a single conversion pipe.

1. Capture

A lead arrives either through your website form / Webstore OR through the AI Receptionist on phone / chat. Either way, AnyCRM produces the same clean lead-event shape, tagged at source with either AI Receptionist Call, AI Receptionist Web, or your website's form identifier. One vocabulary across both surfaces.

2. Deliver to your CRM

AnyCRM sends the lead event straight to your CRM, into the receiving flow we wired up for you at onboarding. Your business logic decides what happens next: which membership offer, which intake form, which marketing tag, which deposit policy, which loyalty enrolment. You don't have to maintain two sets of rules. Web bookings and AI Receptionist bookings both arrive through the same door.

3. Fire server-side conversion to your ad platforms

The same lead event fires server-side into Google Ads, Facebook Ads, and your analytics platform, using the origin of the domain you registered with AnyCRM. Server-side means the conversion can't be blocked by ad-blockers, doesn't degrade under iOS / Safari tracking restrictions, and lands with full attribution context.

4. Optimise, attribute, report

Because website conversions AND AI Receptionist conversions flow through the same pipe with the same source taxonomy, your Google Ads bid strategy now optimises against real revenue (not just Webstore noise), your Facebook Ads campaigns see the high-intent traffic that picks up the phone, your analytics platform sees a single unified funnel, and attribution stops fragmenting between web and voice.

Most competitor AI Receptionists try to maintain rules for which Zenoti membership to offer, which deposit to take, which intake form to send. That approach breaks the moment your center changes a service or rolls out a new promotion, and it ignores the conversion-tracking surface entirely. AnyCRM inverts the responsibility. AnyCRM stays focused on the conversation (capture, dedup, route, book, cancel) and delivers a clean lead event to the two destinations that matter: your CRM (for business logic) and your ad platforms server-side (for conversion optimisation, attribution, and ROAS). This is a custom service baked into the AI Receptionist package. We configure the lead-receiving flow inside your CRM AND the server-side conversion tracking at onboarding, matched to your vertical, ad mix, and analytics setup.

We'll be candid: as far as we can tell, none of our competitors have thought of this yet. Zenoti's own AI Receptionist books and confirms beautifully inside Zenoti, but it doesn't push your phone bookings into Google Ads or Facebook Ads as server-side conversions. The third-party AI Receptionists sell themselves as phone-answering products. AnyCRM treats the AI Receptionist as one of two equally weighted entries into a unified lead-event pipe, and that's where the real compounding value sits.

For your developer: how this wires into Zenoti

The AI Receptionist asks AnyCRM for availability against the qualified specialists at the chosen center and gets back open slots in the guest's timezone. No double bookings. Room and equipment locks are always respected. Every AnyCRM call prevents duplicate guests across centers, walks Zenoti's four-step booking flow atomically, honours existing preferred-therapist and preferred-center settings, and sends the lead event straight into your CRM tagged with <code>AI Receptionist Call</code> or <code>AI Receptionist Web</code>. The same lead also feeds the AnyCRM Conversion Lift pipeline (covered in the next capability) so your Google, Facebook, and LinkedIn Ads start optimising against the call and chat leads that actually pick up the phone.

getZenotiAvailability()createZenotiContactAppointment()
POST/mcp/tools/getZenotiAvailability
{
  "invitee_timezone": "America/New_York",
  "start_time": "2026-05-15",
  "end_time":   "2026-05-17",
  "event_type_uuid": ["b050bcf6-b5b0-42a8-9359-aba11e711311"],
  "multi_day": true,
  "include_scheduling_url": false
}
200response
{
  "date_range_label": "Friday, May 15, 2026 – Sunday, May 17, 2026",
  "event_types": [{
    "event_type_uuid": "b050bcf6-b5b0-42a8-9359-aba11e711311",
    "total_slots": 15,
    "available_times_by_date": {
      "Friday, May 15, 2026": [
        { "start_time": "2026-05-15T10:00:00-04:00", "status": "available" },
        { "start_time": "2026-05-15T10:30:00-04:00", "status": "available" },
        { "start_time": "2026-05-15T11:00:00-04:00", "status": "available" }
      ]
    }
  }]
}
POST/mcp/tools/createZenotiContactAppointment
{
  "name": "Jane Doe",
  "email": "jane@example.com",
  "phone": "+14155551234",
  "scheduled_datetime": "2026-05-15T11:00:00",
  "invitee_timezone": "America/New_York",
  "event_type_uuid": "b050bcf6-b5b0-42a8-9359-aba11e711311",
  "questions_and_answers": []
}
200response
{
  "event_uuid": "a7c1f4e9-...",
  "start_time": "2026-05-15T11:00:00-04:00",
  "start_time_utc": "2026-05-15T15:00:00Z",
  "invitee_timezone": "America/New_York",
  "reschedule_url": "https://...",
  "cancel_url": "https://..."
}
Zenoti logoWorks with Zenoti
§ 04 — Ads Conversion Lift

Turns every call and chat into a real conversion event your Google, Facebook, and LinkedIn Ads can actually optimise against. So Cost per Lead drops, ROAS goes up, and CAC stops being a guess.

If your spa, salon, or medspa runs paid Ads on Google, Facebook, or LinkedIn, here is the uncomfortable truth: those platforms only get smarter when they see real conversions. Today, a Webstore booking counts. A real phone call from a high-intent guest who picked up the phone at 7pm does NOT count. So Google bids harder on the audience that finishes the Webstore flow (often the cheaper, lower-intent one) and ignores the audience that actually calls. Cost per Lead looks fine. CAC quietly creeps up. ROAS looks misleading. AnyCRM fixes this. Every call and chat the AI Receptionist handles is sent as a real conversion event to Google Ads, Facebook Ads, AND LinkedIn Ads. The bidding algorithm finally sees what's actually working.

1b.01

Every phone call and every chat becomes a tracked conversion. Not just Webstore bookings.

Today, Google Ads and Facebook Ads probably think your only conversions are Webstore bookings. That's why your Cost per Lead looks low but your locations complain the bookings are weak. The high-intent traffic is calling you instead of finishing a Webstore checkout, and the Ad platforms have no idea. AnyCRM sends every call and every chat the AI Receptionist handles into your Ad platforms as a real conversion event. Suddenly Google, Facebook, and LinkedIn can see the FULL picture of who is converting from your Ads.

1b.02

Lower Cost per Lead. Better ROAS. Smaller CAC.

Once your Ad platforms can see the phone calls and chats as real conversions, they re-train on a better signal. Bidding shifts toward audiences that actually pick up the phone, not just the audience that loves the Webstore. In practice this means: Cost per Lead drops because you stop overpaying for low-intent web browsers; Return on Ad Spend goes up because the Ads now find guests closer to ready-to-book; and Customer Acquisition Cost shrinks because more of your Ad budget reaches buyers who will actually walk in for a service.

1b.03

The same pipe carries your website forms too. One source of truth across Ads, CRM, and Analytics.

AnyCRM doesn't just track AI Receptionist conversions. It also runs your existing website forms and Webstore conversions through the same pipeline. So a guest from a Google Ad who finishes a Webstore booking AND a guest from a Facebook Ad who called the AI Receptionist three days later both end up tagged, attributed, and counted in exactly the same way. Your Ads platform stops double-counting, your analytics stop fragmenting, and your CRM stops being half-blind to where your bookings actually came from.

Imagine your three-center medspa spends $5,000/month on Google Ads. Today, you see 80 Webstore bookings and assume that's the full picture. With AnyCRM running, you'll also see (say) 70 phone calls and 50 web chats the AI Receptionist handled, all flowing into Google Ads as real conversions. Suddenly Google sees 200 conversions a month instead of 80. It re-trains on that bigger, better signal. Within weeks, the bidding finds you more of the right kind of guest. Same $5,000 spend, more booked chairs, lower Cost per Lead, higher revenue per location. That is what "AI Receptionist with AnyCRM" actually means for the bottom line. Not just "it answers the phone."

For your developer: how the Conversion Lift pipeline works with Zenoti

Every guest-create and appointment-book fires through AnyCRM's Conversion Lift pipeline. The lead event lands inside your CRM for business logic, AND fires a real conversion event server-side into Google Ads, Facebook Ads, and LinkedIn Ads using the verified origin of your registered domain. Server-side means the conversion can't be blocked by ad-blockers, doesn't degrade on iOS or Safari, and arrives with full attribution context so the Ad platforms' bidding algorithms can re-train on it. Your existing website forms and Webstore conversions run through the same pipeline, so Web and Voice bookings feed the SAME training signal.

createOrUpdatesZenotiContact()createZenotiContactAppointment()
Zenoti logoWorks with Zenoti
§ 05 — Search, Reschedule & Cancel

Manages the full appointment lifecycle inside Zenoti for anyone calling or chatting.

Every "can we push my facial to Saturday?" or "I need to cancel my appointment with Maria" lands with the AI Receptionist instead of at the front desk. AnyCRM reschedules update the existing Zenoti appointment in place. Cancellations follow Zenoti's own best practice. The right cancellation reason is coded so your late-cancel / no-show fee policy fires correctly, and the verbatim reason is written onto the appointment notes so the specialist sees why.

B.01

Finds the appointment by mobile or email in a single step

Guests DO NOT quote Zenoti appointment IDs over the phone. AnyCRM gives the AI Receptionist an easy way to find the soonest upcoming appointment associated to the matching guest, by mobile (Zenoti's primary guest identifier) or email. And the AnyCRM response forces the AI Receptionist to be human. It reads back the service, the specialist, the date, the time, and the center before changing anything.

B.02

Reschedules in place and keeps the appointment audit trail clean

Rescheduling resolves the new slot, reserves it, confirms it, then releases the old one. In one server-side flow. No cancel-then-rebook round-trip means the appointment history, the guest record, and the front-desk schedule all stay intact. Failed reschedules leave the original appointment untouched.

B.03

Cancels with the right cancellation type so your fee policy fires correctly

Zenoti requires a cancellation reason from the center's configured list (Guest Request, Center Cancellation, No Show, etc.) — not a free-text reason. The AI Receptionist maps the guest's spoken reason to the right one, writes the verbatim reason as an appointment note, and applies the no-show / late-cancel fee policy the center configured. This lets you intuitively track changes for Zenoti appointments created or updated by your AI Receptionist.

For your developer: reschedule & cancel by email

AnyCRM's search, reschedule, and cancel all accept just a mobile or email. The matching guest and the soonest upcoming appointment are resolved inside AnyCRM. No appointment IDs at the AI Receptionist layer.

searchZenotiAppointments()rescheduleZenotiAppointment()cancelZenotiAppointment()
POST/mcp/tools/searchZenotiAppointments
{
  "email": "jane@example.com"
}
200response
{
  "meetings": [{
    "event_uuid": "a7c1f4e9-...",
    "event_type_name": "Haircut Only | $50",
    "start_time": "2026-05-15T11:00:00-04:00",
    "status": "active"
  }]
}
POST/mcp/tools/rescheduleZenotiAppointment
{
  "email": "jane@example.com",
  "scheduled_datetime": "2026-05-16T14:00:00",
  "invitee_timezone": "America/New_York",
  "reason": "Customer asked to move 1 day later"
}
200response
{
  "cancelled_event_uuid": "a7c1f4e9-...",
  "new_event_uuid": "f0e22c91-...",
  "new_start_time": "2026-05-16T14:00:00-04:00",
  "new_start_time_utc": "2026-05-16T18:00:00Z"
}
POST/mcp/tools/cancelZenotiAppointment
{
  "email": "jane@example.com",
  "reason": "Customer is unwell"
}
200response
{
  "cancelled_event_uuid": "a7c1f4e9-...",
  "status": "cancelled",
  "reason": "Customer is unwell"
}
Zenoti logoWorks with Zenoti
§ 06 — Match Specialists & Services

Routes every caller to the right specialist. And to the right center.

Zenoti accounts run on centers, therapists/providers, and a service catalog priced and rostered per center. At setup AnyCRM imports your Zenoti team roster across every active center into its database and enriches each specialist with expertise, languages, gender (where guests request it), bio, photo, and the specific services they're certified to perform. The AI Receptionist then routes each caller to a specialist who actually performs that service at that center. Existing preferred-therapist and preferred-center settings on the guest record are honoured as the source of truth.

C.01

Routes by service certification, not by guesswork

"I want lip filler" routes only to specialists with the injectables certification on file. "I'd prefer a female therapist for my prenatal massage" filters the pool before offering slots. The AI Receptionist never books a haircut on an esthetician's calendar or a botox consult on a junior stylist.

C.02

Honours existing preferred specialists in Zenoti

If a guest has a preferred therapist or preferred center on the Zenoti guest record, the AI Receptionist doesn't reassign them. A regular who books Maria for her balayage every six weeks gets offered Maria's calendar first, not a round-robin.

C.03

Matches fresh inbound callers and web chatters to the right specialist on the team

New guests with no preferred specialist on file get assigned across the qualified pool for that service at that center, honouring whatever new-guest distribution criteria the center already uses. The AI Receptionist doesn't fight the rules you already use.

For your developer: specialist roster & per-service routing

Team details live in AnyCRM's database, pulled once from Zenoti at setup, enriched with expertise, languages, gender, bio, photo, and a certified-services list per center (valuable context for the AI Receptionist that Zenoti's therapist object doesn't carry consistently). Each specialist's Zenoti identifier is kept on the record as the bridge for booking writes. At runtime, one read of the team roster matches caller → service → certified specialist → center. New guests get assigned to the right specialist. Returning guests keep theirs. AnyCRM does NOT cache your membership pricing, your packages, or your loyalty rules. That policy stays inside your CRM, where it belongs.

listZenotiTeamMembers()getZenotiSpecialistServices()
POST/mcp/tools/listZenotiTeamMembers
{}
200response
{
  "total_members": 3,
  "members": [
    { "user_uuid": "3d2ed2c0-...", "name": "Michelle Arcona", "role": "user",  "timezone": "America/New_York" },
    { "user_uuid": "2b00d6f3-...", "name": "Casey",           "role": "user",  "timezone": "America/New_York" },
    { "user_uuid": "1809c459-...", "name": "Cielona Boco",    "role": "owner", "timezone": "America/New_York" }
  ]
}
POST/mcp/tools/getZenotiSpecialistServices
{
  "user_uuid": "3d2ed2c0-a8fc-45d7-9f67-fc3e6b898bb2"
}
200response
{
  "user_name": "Michelle Arcona",
  "user_timezone": "America/New_York",
  "services": [
    { "event_type_uuid": "b050bcf6-...", "name": "Haircut Only | $50",                 "duration": 50  },
    { "event_type_uuid": "9a858539-...", "name": "Fine Density Haircut & Finish | $70",  "duration": 60  },
    { "event_type_uuid": "c1f70bb1-...", "name": "Full Head + Gloss + Finish | $335",    "duration": 210 },
    { "event_type_uuid": "3c01fa3d-...", "name": "All Over Keratin Treatment | $300",    "duration": 240 }
  ]
}
Zenoti logoWorks with Zenoti
§ 07 — Setup & why it's not just another Zenoti wrapper

Setup in 3 steps. Battle-tested on real Zenoti centers.

You connect Zenoti once. AnyCRM imports your centers, your service catalog, your specialists, and your cancellation-reason list. AnyCRM also wires up the receiving end inside your CRM so lead events from the AI Receptionist land where your business logic can act on them. Then the AI Receptionist starts capturing guests and booking services the same afternoon. No middleware. No prompt-engineering by you.

S.01

Connect Zenoti (API key from your admin, 60 seconds)

Generate a Zenoti API key from your Zenoti admin (Admin → Organization → API Keys, requires the organization-level API Access permission). Paste it in. Every request the AI Receptionist makes is attributed to AnyCRM in Zenoti's audit log, with the application identifier visible at the appointment level. The key is revocable from your Zenoti admin panel at any time.

S.02

Import centers, services, specialists & cancellation reasons. Wire up your CRM's lead-receiving flow.

AnyCRM imports every active Zenoti center, every service in each center's catalog (with duration, price, and tax rules), every specialist on each center's roster, and the cancellation-reason list each center configured. Specialist-to-service certification is read from each center's service-employee mapping — not guessed. AnyCRM also freezes the service catalog per center so the AI Receptionist can only book services and specialists that exist at that center, and locks inbound-call source attribution (always AI Receptionist Call or AI Receptionist Web) so reporting stays consistent. During onboarding we set up the receiving flow inside your CRM so the lead events from the AI Receptionist land where your business logic can act on them. AnyCRM does NOT replicate your membership tiers, package rules, or loyalty workflows. Your CRM decides what happens after a guest is captured. AnyCRM just delivers a clean event.

S.03

Drop the AI Receptionist on your phone line and your site

Forward your business number to the AI Receptionist's number and paste the chat widget into your site. The same AI Receptionist (same team roster, same Zenoti account, same lead-event pipe into your CRM and your ad platforms) answers both voice and web. Live the same afternoon.

Why not just use Zenoti's Online Booking widget or Zenoti's own AI Receptionist?

Zenoti's Online Booking widget and Webstore are excellent at the steps AFTER a guest decides to come to your website and complete a self-service flow on their own. They don't pick up the phone. A new caller at 9pm gets a missed call, not a guest record. Self-service flows also can't disambiguate "I want the deep-tissue, the long one, not the express" against a catalog of forty service variants. Guests bounce. Zenoti's own AI Receptionist closes that voice gap inside Zenoti and does the booking work well — but it stops at the Zenoti boundary. It doesn't run your phone bookings into Google Ads or Facebook Ads as server-side conversions, so your ad bidding never re-trains on the high-intent traffic the AI Receptionist captured. The AI Receptionist with AnyCRM is the layer BEFORE all of that AND the conversion pipe AFTER it. It picks up the call, asks the right intake questions, books the service on the right specialist's calendar at the right center, writes a clean intake-noted guest into Zenoti (with the source set to AI Receptionist Call or AI Receptionist Web), AND sends the same lead event straight into your CRM's downstream business logic plus your ad platforms server-side. So your Zenoti workflow, your analytics, and your Google / Facebook Ads bidding all start optimising on a real conversation, not a missed call or a Webstore page view.

For your developer: the enrichment layer (raw Zenoti API vs our MCP tools)

Every tool the AI Receptionist calls is an opinionated wrapper inside AnyCRM. AnyCRM does the messy work for you. Cross-center guest dedup by mobile then email, service-to-specialist certification check, Zenoti's four-step booking flow, cancellation-reason ID mapping, center-scoped catalog resolution, timezone math per center, pagination, error handling, lead-event delivery into your CRM, and server-side conversion tracking into your ad platforms. All of it happens before the LLM ever sees a response. So the AI Receptionist reasons over clean, AI-aligned payloads instead of raw Zenoti internals.

Capturing a new guest

Raw APIWriting a guest straight into Zenoti looks simple. But Zenoti dedups guests within a center only — cross-center, a guest who visits Lincoln Park and Logan Square ends up as two records by design. And there's no fuzzy dedup on slightly different mobile formats or email casing. Send the same caller with a +1 vs no country code, or a slightly different email casing, and you end up with two guests at the same center. Preferred-therapist and preferred-center settings are also easy to overwrite if you don't read them first. And nothing in raw Zenoti fires a server-side conversion event to your ad platforms, so call-driven and chat-driven bookings never get optimised for.
Our MCPcreateOrUpdatesZenotiContact accepts name, mobile, email, note, service_id, center_id, plus the matched specialist. AnyCRM handles cross-center dedup on canonical mobile (E.164-normalised) then email, picks the surviving record (or creates a new one with the right values in the right order), respects existing preferred-therapist / preferred-center settings, appends an intake note, sends the lead event straight into your CRM (with source AI Receptionist Call or AI Receptionist Web), AND fires a server-side conversion event into your ad platforms using the origin of your registered domain. All in one AnyCRM call.

Booking the service

Raw APICreating an appointment directly against Zenoti is not one call — it's a required four-step flow, and skipping any step either fails or leaves orphaned reservations in the center's calendar. Open a booking session, read available slots, reserve the chosen slot (which temporarily holds the room and the specialist but does not confirm — and the reservation expires in roughly five minutes), then confirm to lock the booking. Skip the confirm step and the slot quietly drops; reserve twice with different times and the previous reservation is invalidated without warning. Worse, the guest record has to exist before step one, so a vanilla integration also needs the guest search-then-create wired in front.
Our MCPcreateZenotiContactAppointment takes name, mobile, email, service_id, center_id, scheduled_datetime (a naive date and time, no offset needed), invitee_timezone, and optionally a specialist identifier. AnyCRM searches the guest by mobile then email (creating only if absent), opens the booking, reads slots, reserves the matching time, and confirms — atomically, with idempotent retry on the five-minute reservation expiry. The response carries the final Zenoti appointment, the specialist of record, the center timezone, and both local and UTC start times. The same lead event lands inside your CRM with the booking context, AND fires a server-side conversion event into your ad platforms.

Cancelling with a reason

Raw APICancelling a Zenoti appointment requires a cancellation reason from the center's configured list — not a free-text reason — and the valid reasons are per-center, configured in each center's admin. Send a reason from Center A against an appointment in Center B and Zenoti returns an error. The cancellation also has tax/fee implications: late-cancel and no-show policies are tied to specific reasons, so picking the wrong one can either skip a fee the center should have charged, or charge the guest for what was actually a center-side cancellation. There is no fallback "Other" reason guaranteed across orgs.
Our MCPcancelZenotiAppointment takes mobile or email and a free-text reason from the caller. AnyCRM resolves the soonest upcoming appointment, reads the cancellation-reason list for THAT appointment's center (cached at setup), maps the caller's spoken reason to the closest configured reason (with the center's preferred default for ambiguous cases), writes the verbatim text as an appointment note, and calls the cancel endpoint — atomically. The response carries the cancelled appointment, the matched reason, the verbatim reason text, and any fee that was applied so the AI Receptionist can read it back to the caller.

Every AnyCRM tool for Zenoti follows the same AI-alignment contract, so the AI Receptionist never has to think about transport:

  • Naive datetimes in, Zenoti-native shape out. The AI Receptionist passes 2026-05-15T11:00:00 and a timezone string. AnyCRM converts it into whatever shape the Zenoti booking flow requires, per-center.
  • Mobile is the identity. Zenoti's primary guest identifier is mobile, not email. AnyCRM honours that. Cancel and reschedule never need an appointment ID at the AI Receptionist layer. Mobile and soonest-upcoming resolves inside AnyCRM.
  • Service catalog, center, and cancellation reasons come from setup, not the LLM. The AI Receptionist can only book services that exist on that center's catalog, against specialists certified for them, and cancel with a reason that exists in that center's list.
  • Existing guest preferences are sacred. If a guest has a preferred therapist or preferred center on file, AnyCRM offers those first. Preferences only get overwritten when the guest explicitly asks.
  • Four-step booking is atomic. The reservation-then-confirm dance is hidden behind a single AnyCRM call. A failure mid-flight releases the reservation cleanly. No orphaned holds, no double-bookings.
  • Every lead event leaves AnyCRM in two places at once. Your CRM gets the lead event so your business logic can run. Your ad platforms get the server-side conversion event so bidding optimises against real bookings. Both happen on the same AnyCRM call. No race conditions, no missing events.
  • Flat, deterministic shapes. Every AnyCRM response has the same top-level keys across every tool, so the AI Receptionist's prompt never grows with edge-case branching.
  • Errors are messages, not codes. An error from Zenoti becomes a one-sentence reason the AI Receptionist can repeat to the caller without translation.
  • Idempotent reschedules. If a reschedule fails mid-flight, the original Zenoti appointment is preserved. The guest never ends up with no booking and the room never ends up double-held.

Multi-center setup. Team roster, services & system-prompt assembly

If you run more than one Zenoti center, AnyCRM imports each center's roster and catalog independently, links each specialist to the services they're certified to perform at each center, and bakes the result into the AI Receptionist's system prompt at setup time. Not at runtime. The AI Receptionist doesn't query your roster on every call. It already knows who works where and what they do.

  1. Team roster import per center. AnyCRM imports your Zenoti specialists from every active center once and writes each one into its database keyed by crm_user_id (with name, role, expertise, languages, gender if surfaced, timezone, Zenoti specialist identifier, and the center they belong to).
  2. Per-specialist service certification. For each specialist, AnyCRM resolves the services they're certified to perform at that center (with duration and price). One call per person per center, cached.
  3. Service & lane visibility. Each service is flagged Public, Private (members / VIPs only — not offered to net-new callers) or Ignored. The AI Receptionist only quotes and books Public services. You toggle this in the AnyCRM dashboard without re-deploying.
  4. Lead-event receiving flow inside your CRM. During onboarding we wire up the flow inside your CRM that receives lead events from AnyCRM. That's where your membership-offer, deposit, and intake-form policy lives. AnyCRM doesn't try to own it.
  5. System-prompt assembly. The cached roster, per-center catalog, and cancellation-reason list is prepended to the AI Receptionist's system prompt before the humaniser splits (personality, etiquettes, tone, speech style). So the AI Receptionist reads the centers and the catalog before it reads its own instructions.
  6. Runtime stays minimal. On a live call the AI Receptionist makes at most one availability call and one booking call. Never a roster or catalog lookup. Updates to specialists, certifications, or services re-run the cache. The AI Receptionist picks them up on its next deploy.

The end result: the AI Receptionist can match "I'd like a 90-minute deep-tissue with a female therapist at your Lincoln Park location" → that center's massage-certified female therapists → that specialist's 90-minute deep-tissue service → that specialist's slot availability → a confirmed Zenoti appointment on that specialist's schedule → a lead event delivered straight into your CRM → a server-side conversion event in your ad platforms. Without a single roster or catalog query during the call.

Currently running for day spas, medspas, hair salons, nail salons, lash studios, IV-therapy clinics, and multi-center wellness groups. Anyone whose front desk is on Zenoti but whose phone keeps ringing after the last guest has been checked out.

Zenoti logoWorks with Zenoti
§ 08 — How AI receptionists usually fail, and why ours can't

How most AI Receptionists built on Zenoti's native AI, My AI Front Desk, or Goodcall fail for day spas, medspas, hair salons, lash studios, and multi-center wellness groups that use Zenoti. And why AnyCRM can't.

Most AI Receptionists fail on Zenoti in the same handful of ways. Duplicate guests across centers, the four-step booking flow truncated to one step, services booked on uncertified specialists, cross-center catalog hallucination, free-text cancellation reasons that break fee policy, wrong-center attribution on multi-center reporting, hardcoded membership rules that drift away from your real policy, and conversion data that never reaches your ad platforms server-side. AnyCRM can't fail in any of these ways, because each failure was solved one layer down inside AnyCRM. And because AnyCRM delegates membership and deposit policy to your CRM's own flow rather than trying to encode it, AND runs web and AI Receptionist conversions through a single unified conversion pipe instead of two disconnected stacks.

Duplicate guest records across centers

Affects:My AI Front DeskGoodcall
Why it happensZenoti dedups guests within a center only. Cross-center, a guest who visits Lincoln Park and Logan Square ends up as two records by design. And there's no fuzzy dedup on slightly different mobile formats or email casing. My AI Front Desk runs on a Zapier-style "Create Guest" action — a single API call that hands the caller's mobile straight to Zenoti, with no cross-center search step. Same caller, second center? Duplicate. Slightly different mobile format? Duplicate. Goodcall writes through its Zenoti connector with the same single-step create. Zenoti's own AI Receptionist dedups inside Zenoti, but it doesn't enrich the guest with anything beyond Zenoti's native fields and doesn't push the lead anywhere outside Zenoti, so a chain running paid Ads can't see the dedup signal in their ad stack. None of the third-party competitors can do a true cross-center search-then-write because their architecture is one call in, one call out.
Why ours can'tAnyCRM does NOT do a one-shot create. AnyCRM first searches Zenoti across every active center on canonical mobile (E.164-normalised), then on email, then decides whether to update the existing guest or create a new one. A returning caller lands on the existing record with a new intake note, never as a duplicate at that center. AnyCRM also surfaces cross-center matches so the booking attaches to the right center's guest record. We do three checks where My AI Front Desk and Goodcall do one. That's the difference between a clean guest history and a fragmented one.

Skipping Zenoti's required four-step booking flow

Affects:My AI Front DeskGoodcall
Why it happensZenoti's booking is a required four-step sequence: open the booking session, read slots, reserve the chosen slot, then confirm. The reservation step holds the room and specialist for roughly five minutes, then silently drops if you don't confirm. My AI Front Desk's Zapier-style "Create Appointment" / "Book Appointment" action is a single API call. There's no way for a Zapier surface to walk a four-step API choreography. It either skips reserve (and silently drops the hold) or skips confirm (and tells the caller the appointment is booked while leaving nothing in Zenoti). Goodcall's connector goes through its own scheduler hop and then tries to mirror back into Zenoti — so the appointment either doesn't exist in Zenoti, or exists but never locked the room and specialist correctly. The guest shows up Saturday morning and there's no record. Zenoti's own AI Receptionist handles this correctly inside Zenoti (it owns the flow natively), but it lives inside the Zenoti boundary — it can't, for example, also deliver the booking event to your downstream marketing-automation tool the same way AnyCRM does.
Why ours can'tAnyCRM does multiple things in one call: opens the booking session, validates the time format Zenoti's calendar requires, reserves the slot, then confirms — with idempotent retry on the five-minute reservation expiry and clean release of any orphaned hold if confirm fails. The appointment lands in Zenoti AND on the specialist's schedule atomically. We do four checks where My AI Front Desk and Goodcall do one. That's why an appointment booked through AnyCRM is never missing from the front-desk schedule.

Booking a service on a specialist who isn't certified for it

Affects:My AI Front DeskGoodcallSmith.ai (human tier)
Why it happensZenoti happily accepts any combination of service and specialist at the center. If the specialist isn't certified for that service in Zenoti's service-employee mapping, the booking either errors at confirm time (after the guest has been told it's confirmed) or — worse, on some configurations — books and lands on the wrong specialist's schedule with the service flagged as uncovered. My AI Front Desk's Zapier action takes whichever specialist name the AI generates and posts it. There's no "is this person certified for this service?" check, no "is this person still active?" check. So a stylist gets booked for a botox consult and the guest arrives to find no injector on duty. Goodcall's scheduler hop assigns based on connector defaults rather than the certification matrix the center actually runs. Smith.ai's human receptionists rely on the receptionist's memory of who handles what — fine on a Tuesday morning, less reliable on a Friday at 8pm with a relief receptionist.
Why ours can'tAnyCRM does the heavy work in multiple steps: matches the service from the caller's intent, looks up the certified specialists for that service at that center from the AnyCRM team roster, filters out deactivated specialists, AND respects the existing preferred-therapist setting on the guest record if any. If the existing preference contradicts the inferred service routing, AnyCRM surfaces the conflict so the AI Receptionist asks the guest. My AI Front Desk and Goodcall can't do this because their architecture is one-shot. Smith.ai can't because it's human-mediated.

Inventing services or specialists that don't exist at the chosen center

Affects:My AI Front DeskGoodcall
Why it happensZenoti service catalogs are per-center. A medspa in Center A may offer hydrafacial; Center B may not. My AI Front Desk's Zapier-style action takes whatever service name the AI generates and posts it — there's no "read this center's real catalog first" step in a Zapier path. So the AI invents a service or a price that doesn't exist at that center, the write fails (or worse, succeeds against a like-named but differently-priced service at the wrong center), and the guest gets a surprise at checkout. Goodcall's connector hands the value through to Zenoti the same way. Zenoti's own AI Receptionist reads the catalog natively (this is one of its real strengths inside the Zenoti boundary), but it has no way to bake your specific service-visibility rules (Public vs Private / member-only) into the prompt the way AnyCRM does.
Why ours can'tAnyCRM reads each center's real catalog at setup, in a separate call to Zenoti's center-scoped service endpoint, and bakes them into the AI Receptionist's system prompt as a frozen table per center. So when the AI Receptionist takes a booking, it CAN ONLY pick from services that actually exist at that center, with the price and duration that center actually charges. This is N+1 API calls at setup time that My AI Front Desk and Goodcall don't make — and it's the difference between bookings that always succeed and bookings that silently rot your reporting.

Cancelling with a free-text reason instead of the right cancellation reason

Affects:My AI Front DeskGoodcallSmith.ai (human tier)
Why it happensCancelling a Zenoti appointment requires a cancellation reason from the center's configured list — not a free-text reason. The list is per-center and tied to fee policies. The wrong reason either skips a late-cancel fee the center should have charged or fires a fee that shouldn't have applied. My AI Front Desk's Zapier-style cancel action issues a single API call with whatever reason text the AI generated — that's the only operation Zapier exposes for it. Zenoti rejects free text, so the action either 400s or hard-codes one cancellation reason ID across the entire org, applying the wrong fee policy half the time and breaking reporting. Goodcall's cancellation happens in its scheduler, not against the Zenoti appointment — so the scheduler is updated but the Zenoti audit log never reflects the cancellation reason. Smith.ai human receptionists capture the reason verbally but the cancellation lands without the right reason mapping, so Zenoti's fee policy doesn't fire.
Why ours can'tAnyCRM's cancellation is multi-step: find the soonest upcoming appointment, capture the caller's reason verbatim, read THAT appointment's center cancellation-reason list (cached at setup), map the spoken reason to the closest configured one (with the center's preferred default for ambiguous cases), write the verbatim text as an appointment note, AND apply the cancellation against Zenoti. The right fee policy fires automatically, reporting stays clean, and the verbatim reason is preserved for the specialist to read. Three operations where My AI Front Desk and Goodcall do one (and usually the wrong one).

Wrong-center attribution on multi-center accounts

Affects:My AI Front DeskGoodcall
Why it happensZenoti's audit fields default to the API user's home center, not the center the appointment is for. A naive integration ends up with every appointment attributed to the head-office center in reporting, regardless of where the guest actually walked in. My AI Front Desk's Zapier action has no notion of "the right center for this caller" — it posts against whichever Zenoti account the connector is authorised on, so multi-center owners see Lincoln Park's bookings ghosting onto Logan Square's revenue dashboard. Goodcall's connector inherits the same blind spot. Zenoti's own AI Receptionist gets this right natively (it's a Zenoti product), but it doesn't surface center-level attribution into your ad-platform conversion events the way AnyCRM does, so paid-search reporting can't tell you which center's bookings each Ad actually drove.
Why ours can'tAnyCRM always asserts the right center on every step of the booking flow and writes the intake note with the center name explicit, so Zenoti's per-center reporting attributes the booking to the right location. The audit log shows AnyCRM as the creator at the correct center. The same center identifier travels through the lead event into your CRM and into your ad platforms server-side, so multi-center owners' dashboards stay accurate end-to-end.

Encoding your membership and deposit policy in the prompt or in middleware

Affects:My AI Front DeskGoodcallZenoti AI Receptionist
Why it happensMy AI Front Desk ships hardcoded "Send Appointment Confirmation" / "Trigger Follow-Up" actions that fire on every inbound call. There is no "only offer the membership upgrade if the guest is actually a candidate" logic. The action is single-step, so every call ends up applying the same default treatment, drowning the center in confirmations or missing the high-value upsells. The moment you change your membership tiers or add a deposit policy, you have to go back into the Zapier-style action list and rebuild it. Goodcall's connector applies whatever default behaviour the underlying integration shipped with — change your business, and the connector keeps doing what it did six months ago. Zenoti's own AI Receptionist can upsell add-ons and offers natively, but only on the rules you can express inside Zenoti's UI — anything that lives in your marketing stack (Klaviyo flows, deposit policy in a separate billing tool, custom intake logic) is invisible to it.
Why ours can'tAnyCRM does not encode your membership or deposit policy at all. AnyCRM sends a clean lead event straight to your CRM, into the receiving flow we wire up for you at onboarding. YOUR flow decides what happens: which membership tier? Update the flow. New deposit rule? Update the flow. New intake form? Update the flow. AnyCRM's behaviour stays consistent because AnyCRM's job stops at the conversation. My AI Front Desk and Goodcall can't separate these concerns because their architecture forces business policy into either Zapier middleware or a hardcoded action.

Web bookings and AI Receptionist bookings run on two separate conversion-tracking stacks

Affects:Zenoti AI ReceptionistMy AI Front DeskGoodcall
Why it happensZenoti's own AI Receptionist, My AI Front Desk, and Goodcall all treat phone and chat bookings as separate from Webstore / website-form bookings. None of them fire a real conversion event into Google Ads, Facebook Ads, or LinkedIn Ads when the AI Receptionist closes a call. So your Ad platforms only see the Webstore bookings, the bidding optimises for that (lower-intent) audience, your Cost per Lead looks deceptively low, ROAS reporting becomes a fiction, and the high-intent traffic that picks up the phone stays invisible to your Ad stack. Worse, when these competitors DO fire any tracking, it's client-side. Blocked by ad-blockers and degraded under iOS / Safari tracking restrictions. Zenoti's AI Receptionist surfaces a beautiful in-Zenoti dashboard for what it handled, but that signal never reaches the bidding algorithm.
Why ours can'tAnyCRM runs your website conversions AND your AI Receptionist conversions through the same Conversion Lift pipeline. Same event shape, same source taxonomy, same delivery to your CRM, AND the same server-side conversion event into Google Ads, Facebook Ads, and LinkedIn Ads — using the verified origin of your registered domain. Server-side means it can't be blocked client-side and doesn't degrade on iOS or Safari. The result is what Zenoti AI Receptionist / My AI Front Desk / Goodcall structurally can't deliver: lower Cost per Lead, higher ROAS, smaller CAC, complete analytics funnels, and attribution that doesn't fragment between web and voice.

The AI Receptionist is honest because AnyCRM doesn't let it lie. And AnyCRM is sophisticated because it doesn't pretend to own policy that belongs inside your CRM, while quietly fixing the conversion-tracking gap nobody else — not even Zenoti's own AI Receptionist — has thought to close.

Zenoti logoWorks with Zenoti
§ 09 — Side-by-side comparison

AnyCRM vs Zenoti's native AI Receptionist, My AI Front Desk, Goodcall on Zenoti

CapabilityAnyCRMZenoti AI ReceptionistMy AI Front DeskGoodcall
Live Zenoti appointment booked DURING the call (full four-step flow) Yes. Native Zenoti appointment, specialist-matched, room-locked, four-step flow atomic.Yes inside Zenoti, but limited to in-Zenoti workflow.Partial. Zapier-style "Book Appointment" action, can't walk the four-step flow.Partial. Scheduler hop, not Zenoti's native booking flow.
Dedup-before-write on mobile and email across centers Yes. Cross-center search on canonical mobile then email, always.Within-center only. Cross-center duplicates by Zenoti design.No. Single-step create with no cross-center search.No published guarantee.
Preserves existing preferred-therapist / preferred-center on returning guests Yes. Preferences are sacred.Yes natively inside Zenoti.No. Can overwrite.Depends on the underlying connector's defaults.
Routes by service certification and specialist (not by guesswork) Yes. Certification gate runs before the booking session opens.Yes inside Zenoti.No.No.
Service catalog & cancellation reasons frozen from your real per-center values Yes. Read at setup per center, baked into the prompt as a frozen table.Read natively, but no Public/Private/Ignored visibility control.No. Writes can fail on unknown values.No structural guard.
Cancellation preserves the audit trail (right reason from per-center list, fee policy fires) Yes. Zenoti-native cancellation with verbatim reason on the appointment note.Yes inside Zenoti.No. Free-text reason 400s or hard-codes one ID.No. Cancellation happens in the scheduler, not the appointment.
Reschedule in place (atomic reserve-confirm-release, no cancel-then-rebook) Yes.Yes inside Zenoti.No.No.
Membership / deposit / intake-form policy delegated to YOUR CRM's own flow Yes. Lead event delivered straight into your CRM, into the receiving flow we wire up at onboarding.No. Policy must live inside Zenoti's UI.No. Hardcoded action list.No. Connector-default behaviour.
Unified conversion pipe: web forms AND AI Receptionist → CRM + ad platforms server-side Yes. Same shape, same source taxonomy, same server-side delivery to your CRM and your ad platforms.No. Lives inside the Zenoti boundary, no server-side push to ad platforms.No. Web and voice run on separate stacks.No. Web and voice run on separate stacks.
Server-side conversion events sent to Google Ads, Facebook Ads, and analytics (origin = your registered domain) Yes. Every call and chat booking lands server-side.No.No.No.
Source attribution stays consistent across web and voice Yes. AI Receptionist Call, AI Receptionist Web, plus your web form identifiers.Attributed inside Zenoti, but not exposed to your wider marketing stack.No standardised taxonomy.Whatever the underlying connector defaults to.
Scale ceiling Bounded by Zenoti API limits, not by staffing.Bounded by Zenoti's per-account capacity and Zenoti's product roadmap.Bounded by Zapier-style rate limits and action contracts.Bounded by the scheduler-and-sync hop.
Zenoti logoWorks with Zenoti
§ 10 — Your Zenoti data passes through. It doesn't stick.

Your Zenoti data passes through AnyCRM. It doesn't stick.

AnyCRM processes your Zenoti data to answer the call. Then forgets it. The only thing AnyCRM persists is a conversation history ID so the AI Receptionist can recognise a returning caller. Guest records, appointments, intake notes, service catalog, specialist rosters. All of it stays in Zenoti, owned by your Zenoti organization.

What AnyCRM stores

Conversation history IDs only. So the AI Receptionist can pick up where it left off if a caller hangs up and rings back. No call audio, no transcripts of guest records, no caller PII, no intake notes, no clinical fields.

What AnyCRM doesn't

Guest names, mobiles, emails, Zenoti guest IDs, your specialist roster, your service catalog, your pricing, your appointment history, your loyalty data, your SOAP notes, your membership data. None of it. AnyCRM reads what it needs, hands it to the LLM, fires the events, and discards the payload.

Where data lives

In your Zenoti organization and in whatever systems your CRM's flow forwards lead events to. Guests, appointments, intake notes, payment data all live in Zenoti. Source-attributed (always AI Receptionist Call or AI Receptionist Web), attributed to AnyCRM in the audit log, revocable. AnyCRM does not build a shadow booking system alongside yours.

Revocation

Revoke the AnyCRM API key in your Zenoti admin panel (Admin → Organization → API Keys) and the AI Receptionist loses access immediately. There is no "export your data" step because there is no data to export. It was never AnyCRM's to hold.

For your developer: OAuth scopes & the smallest-surface principle

Zenoti uses an organization-level API key scoped to the API user's permissions. AnyCRM only calls the smallest set of endpoints required for the booking lifecycle. Nothing for analytics, nothing for marketing, nothing for billing or membership management.

  • Guests (read + write). Read and write guest records, dedup against existing guests by mobile then email across centers, append intake notes.
  • Bookings (read + write). Open booking sessions, read slots, reserve and confirm slots through Zenoti's required four-step flow.
  • Appointments (read + write). Read upcoming appointments per guest, reschedule, and cancel with the right reason from the center's configured list.
  • Centers, therapists, services (read). Read each center's roster and service catalog at setup so the AI Receptionist knows who works where and what they perform.
  • Not requested: billing / invoice data, payments, memberships, packages, gift cards, loyalty point ledgers, SOAP / clinical notes, employee schedules beyond service availability, your other integrations.

Same API key any Zenoti integration uses. Just a smaller surface. AnyCRM holds the key and presents a stable application identifier on every request (so every write is attributable to AnyCRM in Zenoti's audit log). The LLM never sees the key, and every tool call is logged with the operation name, never the raw payload.

Zenoti logoWorks with Zenoti
§ 11 — Pricing & the Transparency Ladder

$36 to get started. No monthly subscription. No commission on voice minutes. Ever.

The AI Receptionist industry has settled into a quiet little racket: wrap a public voice provider (usually Eleven Labs) and a public chat platform in your own UI, sell it back on a monthly subscription with a metered minute allowance, and pocket a 3–5× markup on every minute your customer's caller spends on the phone. The customer never sees the underlying price. We did not want to build that business.

AnyCRM uses Eleven Labs for voice. We say that out loud because it is true and because pretending otherwise would be the start of a small lie that grows. You pay Eleven Labs directly — at Eleven Labs' published price — and AnyCRM charges 0% commission on top. We make money from the Quickstart, the DIY Upgrades, and the optional Custom Implementation. Not from your call volume. The more customers call your business, the better — for you, not us.

The Transparency Ladder — you choose how far up you climb.

Most AI Receptionist products sell one thing: a monthly plan with a minute cap. AnyCRM sells five things, ordered by how much we do for you. Start at $36 with a prompt-and-pasted DIY agent. Stop there if it's enough. Or keep climbing through the upgrades to a full custom implementation with MCP tools, conversion tracking, and a CRM-side flow we configure for you.

Step 1
The Quickstart
$36 one-time

A prompt pack and a deployment guide. You wire up a basic AI Receptionist on web chat and voice using OUR humanizer prompts and OUR step-by-step videos.

  • Two humanizer prompts (warmth, pacing, filler words)
  • Web chat + voice setup videos
  • Same-afternoon live deployment
  • No MCP tools (no booking writes into your CRM)
  • No conversion tracking
  • No CRM-side lead-event flow
Step 1b · Order bump
30-min 1:1 Setup Call
+$63 one-time

Add this at checkout. We walk through your setup together so the Quickstart lands faster, without you reading the docs alone.

  • Live setup walkthrough
  • Humanizer prompt tuning to your voice
  • Q&A about your industry's quirks
Step 2
Availability & Booking Upgrade
$98–$196 one-time

Adds the first round of MCP tools so the AI Receptionist actually books appointments into your CRM (not just talks about booking them).

  • getAvailability + createContactAppointment MCP tools
  • Live booking into your CRM
  • Dedup-before-write on email and phone
  • Still DIY — you wire the tools yourself with our videos
Step 3
Full Lifecycle Upgrade
$196–$392 one-time

Adds search, reschedule, and cancel MCP tools. Now the AI Receptionist owns the whole appointment lifecycle — the same one we describe in the Availability and Lifecycle sections above.

  • Search + reschedule + cancel MCP tools
  • Audit-preserving cancellation
  • Specialist / team-member routing if your CRM supports it
  • Still DIY — conversion tracking and CRM flow not included

How AnyCRM stacks up against the monthly-subscription crowd.

Here is what you would pay each provider to handle 500 voice minutes a month — a fair mid-volume number for a service business that picks up after hours. Sourced directly from each vendor's published pricing page.

Cost & structure AnyCRM Smith.ai My AI Front Desk Vocaly AI
Pricing model One-time fee ($36 → $850+) + you pay Eleven Labs directly Monthly subscription, billed per call Monthly subscription, billed per minute Monthly subscription, billed per minute
Entry tier $36 one-time $300/mo (30 calls) $99/mo (200 voice min) $399/mo (2,500 min)
Cost for ~500 voice min / month $0 to AnyCRM + ~$25–85 paid directly to Eleven Labs ~$2,100/mo (Pro tier, ~300 calls) $99 + 300 overage min @ $0.25 = $174/mo $399/mo (2,500 min cap)
Commission / markup on voice minutes 0%. You pay Eleven Labs directly. Bundled (per-call pricing hides minute markup) ~3–5× markup on Eleven Labs' published rate Bundled (rate not disclosed)
Hard monthly minute cap No cap. Eleven Labs scales with your traffic. Yes, by call count Yes (200 min on $99 tier) Yes (2,500 min on $399 tier)
Underlying voice provider disclosed Yes — Eleven Labs. We say it openly. N/A (human receptionists) Not disclosed Not disclosed
CRM-side lead-event flow built for you Yes (Custom Implementation, tuned to your industry) No No (Zapier action list only) No (custom tier only, opaque)
Server-side conversion tracking to Google / Facebook / LinkedIn Ads Yes (Custom Implementation) No No No
Cost over 12 months at ~500 min/mo $36–$850 one-time + ~$300–$1,020 paid to Eleven Labs ~$25,200 ~$2,088 ~$4,788

Pricing as listed on each vendor's published pricing page (Smith.ai, My AI Front Desk / Frontdesk, Vocaly AI, Eleven Labs) at time of publication. Eleven Labs Conversational AI is currently $0.05–$0.17/min depending on plan; "$25–85 paid directly" assumes you sit on the Free, Starter, or Creator plan for low-volume usage. Smith.ai is human-staffed; My AI Front Desk & Vocaly AI are AI-only.

The math is uncomfortable for the industry. A service business paying My AI Front Desk $174/mo for 500 voice minutes is paying roughly $0.35/min, when Eleven Labs' own published rate for that traffic is $0.05–$0.17/min. The difference is pure margin sitting between you and the underlying provider. AnyCRM removes that layer. The Quickstart is $36 once. The Custom Implementation is a one-time quote. You pay your voice provider at their price. We never touch your call volume.
Zenoti logoWorks with Zenoti
§ 12 — The arithmetic

One backend. Six channels. Stacked ROI.

Indicative monthly numbers based on what service businesses already see from a single channel — multiplied by the channels you switch on. Update the agent once; every channel reflects it.

Channel
Customer reach
Leads / mo
Conv. value
Monthly ROI
Website ChatChatKit by OpenAI
100%
45–80
$150 / lead
$6,750 – $12,000
Voice AIEleven Labs
85%
30–50
$200 / lead
$6,000 – $10,000
WhatsAppBird Platform
78%
35–60
$125 / lead
$4,375 – $7,500
Instagram DMsBird Platform
65%
25–45
$100 / lead
$2,500 – $4,500
MessengerBird Platform
55%
20–35
$100 / lead
$2,000 – $3,500
TelegramBotFather direct
35%
15–25
$100 / lead
$1,500 – $2,500
Combined deployment
170–295
$23,125 – $40,000
The single-backend advantage. Six channels, one agent. Update the prompt once and every surface reflects it instantly — no middleware subscriptions, no fragmented flows, no Zapier per-execution billing.
Zenoti logoWorks with Zenoti
§ 13 — How it works

Four steps. One afternoon.

No Zapier. No n8n. If you can copy and paste, you can do this.

01

Open the Quickstart

You get the prompt pack, the humaniser prompts, and the deployment guide.

02

Connect Zenoti

One API key. The agent reads contacts and writes appointments — both ways.

03

Pick your channel

Web chat, voice line, or both. Same backend, same brain.

04

Go live

Test five calls yourself. Send the number to your team. Done.

Zenoti logoWorks with Zenoti
§ 14 — Get started

Live by tonight. Booking customers by tomorrow.

$36 once. If it doesn't work for your business, you've lost less than dinner.

Zenoti logoWorks with Zenoti