Clinic Lead Qualification & Booking — Form → AI Qualify → Calendar + Sheet (free template)

Clinic Lead Qualification & Booking — n8n Template

Instagram/Web Form → AI Qualify → Calendar + Sheet

The problem

Clinic enquiries do not arrive neatly between 9 and 5. They land at night, on weekends, mid-treatment — and most clinics reply hours later, to everyone in the order the messages came in.

Two things go wrong:

  1. The ready-to-book lead waits. A person who asked about veneers, with a budget, wanting to start this month, sits in the same queue as someone idly browsing. By the time the team replies, she has booked somewhere else.
  2. The team’s time goes to the wrong conversations. Staff spend the morning chasing enquiries that were never qualified — no budget, no timeline, sometimes not even the right service — while real consultations wait.

The fix is not replying faster by hand. It is qualifying every enquiry the moment it arrives, and booking the good ones before a human ever touches them.

What this workflow does

  1. A short enquiry form (n8n Form Trigger) collects name, email, phone (optional), service interested in, budget range, timeline, a preferred consultation time (optional), and a free-text message. Put the form link in your Instagram bio and on your website.
  2. An AI qualification step (OpenAI) reads the enquiry against your approved clinic info — your services, prices, hours and policies — and returns:
    • a temperature: Hot, Warm or Cold, with clear rules (Hot = clear service + budget stated + timeline of ASAP or within 1 month);
    • a short summary your team can act on;
    • missing-info flags (no budget? no timeline? unclear service?);
    • a human flag if the message touches anything medical, sensitive, or outside the approved info.
  3. Bookable leads — Hot or Warm with nothing important missing — get a consultation booked straight into Google Calendar (at the lead’s preferred time if they gave one in ISO format, otherwise the next weekday at 10:00 UTC), are logged to a Google Sheet with status Booked, and trigger an email alert to your team.
  4. Everyone else — Cold leads, or anyone with a key detail missing — is logged with status Follow-up and receives a polite email asking for the missing piece. Nobody is deleted, nobody is ignored. Cold today books next month if the follow-up lands.

Your team starts the day with a qualified, prioritised lead sheet and consultations already on the calendar — not a pile of raw enquiries.

What you need to configure

This is a template: it runs on your own accounts. After importing workflow.json:

  1. Your clinic info — open the “Add your clinic’s approved info” node and replace the placeholder with your real services, starting prices, opening hours and policies. The AI qualifies and answers only from this text.
  2. Your OpenAI API key — in the “AI: qualify the lead” node, replace OPENAI_API_KEY_PLACEHOLDER in the Authorization header.
  3. A Google Sheet — create one with a tab named Leads and these headers: receivedAt, leadName, leadEmail, leadPhone, service, budget, timeline, temperature, summary, missingInfo, needsHuman, status. Connect your Google account in both Sheets nodes and select the Sheet (replaces GOOGLE_SHEET_ID_PLACEHOLDER).
  4. Your Google Calendar — in the booking node, connect your account and pick the calendar consultations should land on (replaces GOOGLE_CALENDAR_ID_PLACEHOLDER).
  5. Your Gmail — connect it in both Gmail nodes, and set TEAM_EMAIL_PLACEHOLDER in the team alert to the inbox your team reads.
  6. Your form — edit the service and budget dropdowns to match your clinic, then put the form’s production URL in your Instagram bio link and/or on your website.
  7. Activate the workflow, and test it with a fictional enquiry before real leads touch it.

Full setup notes are also inside the workflow itself — open the sticky notes.

Honest limits

  • It is a template, not a finished system. It becomes yours when your accounts, your clinic info and your rules go in. Expect to adjust the qualification rules, the form fields and the email wording to your clinic.
  • The AI only knows what you tell it. It works from your approved info and never invents prices, availability or treatment outcomes. If your info sheet is vague, the qualification will be vague.
  • Humans stay in charge of the sensitive stuff. Medical questions, complaints and anything outside the approved info are flagged for a person — the workflow does not try to handle them.
  • It books the slot; it does not confirm attendance. Reminders, no-show follow-up, rescheduling rules and CRM sync are production additions on top of this foundation.
  • The qualification is a single pass over the enquiry form. In a full build, the same logic sits behind Instagram DMs and website chat too, qualifying mid-conversation.

Why I built it this way

Most “AI chatbot” templates start with the chat. I start with the leak: enquiries that were never answered, never qualified, or never followed up. Qualification first, booking second, follow-up always — that order is what turns a form into consultations instead of a nicer inbox.


Built by Temitope Akinola — AI systems for cosmetic dentistry, aesthetic clinics & luxury real estate (temitope-akinola.pages.dev)

workflow.json — copy and import into n8n

Useful split. The human flag on anything medical is the part most lead templates skip, so good on that. Three things before anyone runs this on real leads. Pin the booking node to the clinic’s own timezone and business hours, the 10:00 UTC default slot is the middle of the night for half the world. Make the AI return service and budget as strict values from your form’s dropdowns, not free text, so a made-up service name can’t push a lead to Hot. And dedupe on email before the sheet append, form double-submits are normal and a Hot lead entered twice gets booked twice.

Thanks kartike — all three were fair catches, and the human-flag point means a lot coming from someone who’s clearly run these on real leads.

Short version: all three are now fixed, and enforced in code rather than just promised in the prompt. The Creator review also came back asking for layout fixes (overlapping notes), so I rebuilt the template properly instead of patching it:

Timezone/hours — the clinic’s timezone, open days and open/close hours are now structured settings. A preferred time is only honoured if it lands inside those hours; otherwise the booking falls back to the next open slot in the clinic’s own timezone. The 10:00 UTC default is gone.

Strict values — service, budget and timeline are always taken from the form’s dropdown values in code. If the AI returns anything off-list, it’s discarded and noted on the record — a made-up service can’t push a lead to Hot anymore.

Dedupe — every lead gets one stable ID at intake, stored on the Sheet row and the calendar event. The log is checked before booking: a repeat ID is flagged as a duplicate and never booked twice; a new ID proceeds.

The rebuild also fixed a quieter bug your points pointed at: a garbled AI reply could previously lose the lead’s details — the parse step now merges the original record, so the worst case is a follow-up with a human flag, never a lost lead.

One housekeeping note: the forum won’t let me edit the original post anymore (edit window closed for my account level), so the v2 workflow JSON is here in this reply — please use this one, not the JSON in the first post. The v2 file has also gone back to the Creator Portal and is under review again. Thanks again for the sharp read — it made the template genuinely better.

workflow.json — v2, copy and import into n8n

sounds good, great job!