DENTAL / MEDICAL APPOINTMENT BOT

💰 Zero Cost Forever

Dental/Medical Appointment
AI Agent — Complete Guide

Self-hosted on Hostinger · 100% Free Stack · Sell for $300–$1,500 to USA Clinics

$0
Total Build Cost
$300–1.5K
Selling Price
24/7
Bot Uptime
60+
Steps Covered

📋 Table of Contents

1
Free Account Setup
2
Hostinger Hosting
3
AI Brain (Free LLM)
4
Bot Logic & Flows
5
Database & Appointments
6
SMS & Email Reminders
7
Website Chat Widget
8
Admin Dashboard
9
Testing & Deployment
10
Where & How to Sell
🔧
Phase 1: Free Accounts & Tools Setup
Create all accounts before writing a single line of code
Step 1 Create a GitHub Account (Free Code Storage) FREE â–¼

Go to github.com → Sign Up → Choose Free plan. This stores your bot code, lets you version control, and is needed to deploy automatically to Hostinger later.

Use a professional email like yourname@gmail.com — you’ll share this with clients as your portfolio.

What to do after signup:

  • Create a new repository called dental-appointment-bot
  • Set it to Private (protect your code)
  • Initialize with README
Step 2 Get Free Groq API Key (Ultra-Fast Free AI) FREE â–¼

Groq gives you free access to LLaMA 3.1, Gemma, and Mixtral models — completely free with high rate limits. This is the AI brain of your bot.

Why Groq? It’s 10x faster than ChatGPT API, completely free tier, and processes healthcare conversations perfectly.

Steps:

  • Go to console.groq.com
  • Sign up with Google account
  • Click “API Keys” → “Create API Key”
  • Copy and save your key: gsk_xxxxxxxxxxxxx
  • Free tier: 14,400 requests/day — more than enough
# Your free Groq models available: llama-3.1-70b-versatile # Best for conversations llama-3.1-8b-instant # Fastest responses mixtral-8x7b-32768 # Long context
Step 3 Create Free Twilio Account (SMS Reminders) FREE TRIAL â–¼

Twilio gives you a free trial with $15 credits — enough for hundreds of SMS. For your demo to clients, this is completely free.

  • Go to twilio.com → Sign up free
  • Verify your phone number
  • Get a free US phone number from Twilio Console
  • Copy: Account SID, Auth Token, Phone Number
  • Save these — you’ll add them to your .env file
For clients: Tell them to create their own Twilio account ($0.0075/SMS = less than 1 cent per message). You just set it up for them.
Step 4 Create Free Gmail / EmailJS Account (Email Reminders) FREE â–¼

Use EmailJS (free — 200 emails/month) OR configure Gmail SMTP with a dedicated Gmail account.

  • Go to emailjs.com → Sign up free
  • Add Gmail as your email service
  • Create an appointment reminder template
  • Copy your Service ID, Template ID, Public Key
Alternative: Use Resend.com — 3,000 free emails/month. Go to resend.com → sign up → get API key.
Step 5 Create Free Supabase Account (Free Database) FREE FOREVER â–¼

Supabase is a free PostgreSQL database with a visual dashboard, real-time updates, and built-in REST API. Free forever for small projects.

  • Go to supabase.com → Start for Free
  • Create a new project called “dental-bot”
  • Choose US East region (closest to US clients)
  • Set a strong database password and save it
  • Copy: Project URL and anon/public API key
Free tier: 500MB database, unlimited API calls, 2 free projects. More than enough.
🌐
Phase 2: Hostinger Hosting Setup
Deploy your bot on Hostinger’s shared or VPS hosting
Step 6 Choose the Right Hostinger Plan IMPORTANT â–¼

For this bot, you need Node.js support. Here are your options on Hostinger:

PlanMonthlyNode.js?Best For
Premium Shared~$2.99❌Static sites only
Business Shared~$3.99✅Small bots ✓
VPS KVM 1~$4.99✅Best choice ✓✓
VPS KVM 2~$7.99✅Multiple clients
Recommendation: Get VPS KVM 1 at $4.99/month. This gives you full root access, can host multiple bots for multiple clients, and run cron jobs for reminders.
Step 7 Connect to Hostinger VPS via SSH DO THIS â–¼

After purchasing VPS, Hostinger emails you the IP address, username (root), and password.

# On Windows: Download and install PuTTY (free) # On Mac/Linux: Open Terminal ssh root@YOUR_VPS_IP # Enter your password when prompted # You should see something like: root@vps:~# # Congratulations! You’re inside your server!
Step 8 Install Node.js, NPM, and PM2 on VPS RUN COMMANDS â–¼

Once logged into your VPS, run these commands one by one:

# Update system apt update && apt upgrade -y # Install Node.js 20 (LTS) curl -fsSL https://deb.nodesource.com/setup_20.x | bash – apt-get install -y nodejs # Verify installation node –version # Should show v20.x.x npm –version # Should show 10.x.x # Install PM2 (keeps bot running 24/7) npm install -g pm2 # Install Git apt install -y git # Install Nginx (web server for domain routing) apt install -y nginx
PM2 is crucial — it restarts your bot automatically if it crashes, and starts it on server reboot.
Step 9 Point Your Domain to VPS (Hostinger DNS) DNS SETUP â–¼

In Hostinger dashboard → Domains → DNS Zone Editor, add these records:

# Add A Record: Type: A Host: @ Points to: YOUR_VPS_IP_ADDRESS TTL: 14400 # Add www subdomain: Type: A Host: www Points to: YOUR_VPS_IP_ADDRESS TTL: 14400 # Wait 15-30 minutes for DNS to propagate
🤖
Phase 3: Build the AI Brain
Create the Node.js bot with Groq AI integration
Step 10 Create Project Folder & Install Dependencies CODE â–¼
# On your VPS, create project mkdir /var/www/dental-bot && cd /var/www/dental-bot npm init -y # Install all required packages (all free) npm install express groq-sdk @supabase/supabase-js npm install twilio nodemailer node-cron dotenv npm install cors helmet body-parser npm install date-fns uuid # Create folder structure mkdir src routes utils templates public
Step 11 Create the .env File (All Your Secret Keys) SECURITY â–¼
nano /var/www/dental-bot/.env # Paste this content and fill in your values: # Server PORT=3000 NODE_ENV=production # AI – Groq (FREE) GROQ_API_KEY=gsk_your_groq_key_here GROQ_MODEL=llama-3.1-70b-versatile # Database – Supabase (FREE) SUPABASE_URL=https://xxxx.supabase.co SUPABASE_ANON_KEY=your_anon_key # SMS – Twilio TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxx TWILIO_AUTH_TOKEN=your_auth_token TWILIO_PHONE=+1xxxxxxxxxx # Email EMAIL_USER=youremail@gmail.com EMAIL_PASS=your_app_password # Clinic Config (customize per client) CLINIC_NAME=Bright Smile Dental CLINIC_PHONE=+1-555-123-4567 CLINIC_ADDRESS=123 Main St, New York, NY CLINIC_HOURS=Mon-Fri 8AM-6PM, Sat 9AM-2PM TIMEZONE=America/New_York # Press Ctrl+X, then Y, then Enter to save
Step 12 Create the Main AI Conversation Engine (app.js) CORE CODE â–¼
nano /var/www/dental-bot/src/app.js // ============================================= // DENTAL AI BOT – Main Application // ============================================= const express = require(‘express’); const Groq = require(‘groq-sdk’); const cors = require(‘cors’); require(‘dotenv’).config(); const app = express(); const groq = new Groq({ apiKey: process.env.GROQ_API_KEY }); app.use(cors()); app.use(express.json()); app.use(express.static(‘public’)); // Store conversations in memory (per session) const conversations = new Map(); // SYSTEM PROMPT – The AI’s personality & rules const SYSTEM_PROMPT = ` You are a friendly, professional appointment assistant for ${process.env.CLINIC_NAME}. Your job is to: 1. BOOK appointments – collect: patient name, phone, email, preferred date/time, type of visit 2. RESCHEDULE existing appointments 3. CANCEL appointments 4. Answer questions about services, hours, location 5. Collect insurance information if needed Clinic Hours: ${process.env.CLINIC_HOURS} Address: ${process.env.CLINIC_ADDRESS} Phone: ${process.env.CLINIC_PHONE} Rules: – Always be warm, professional, and HIPAA-aware – Never store sensitive medical details in chat – Confirm all appointment details before booking – If emergency, direct to call ${process.env.CLINIC_PHONE} – Collect: full name, date of birth, phone, email – Available appointment types: Cleaning, Check-up, X-Ray, Filling, Crown, Emergency, Consultation – Ask one question at a time – After collecting all info, say “BOOK_APPOINTMENT” followed by JSON data Response format when booking is complete: BOOK_APPOINTMENT:{“name”:”…”,”phone”:”…”,”email”:”…”,”date”:”…”,”time”:”…”,”type”:”…”,”notes”:”…”} `; // Main chat endpoint app.post(‘/api/chat’, async (req, res) => { const { message, sessionId } = req.body; if (!conversations.has(sessionId)) { conversations.set(sessionId, []); } const history = conversations.get(sessionId); history.push({ role: ‘user’, content: message }); try { const completion = await groq.chat.completions.create({ model: process.env.GROQ_MODEL, messages: [ { role: ‘system’, content: SYSTEM_PROMPT }, …history ], max_tokens: 500, temperature: 0.7 }); const reply = completion.choices[0].message.content; history.push({ role: ‘assistant’, content: reply }); // Check if bot wants to book appointment if (reply.includes(‘BOOK_APPOINTMENT:’)) { const jsonStr = reply.split(‘BOOK_APPOINTMENT:’)[1].trim(); const apptData = JSON.parse(jsonStr); await saveAppointment(apptData, sessionId); } res.json({ reply, sessionId }); } catch (err) { console.error(err); res.status(500).json({ error: ‘Bot error’ }); } }); app.listen(process.env.PORT, () => { console.log(`Bot running on port ${process.env.PORT}`); });
Step 13 Create the Appointment Saving Function CODE â–¼
nano /var/www/dental-bot/src/appointments.js const { createClient } = require(‘@supabase/supabase-js’); const { v4: uuidv4 } = require(‘uuid’); const notifier = require(‘./notifier’); require(‘dotenv’).config(); const supabase = createClient( process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY ); async function saveAppointment(data, sessionId) { const appointment = { id: uuidv4(), patient_name: data.name, patient_phone: data.phone, patient_email: data.email, appointment_date: data.date, appointment_time: data.time, appointment_type: data.type, notes: data.notes || , status: ‘confirmed’, session_id: sessionId, created_at: new Date().toISOString() }; // Save to Supabase database const { error } = await supabase .from(‘appointments’) .insert([appointment]); if (!error) { // Send confirmation SMS + Email await notifier.sendConfirmation(appointment); console.log(`Appointment booked for ${data.name}`); } return appointment; } module.exports = { saveAppointment };
💬
Phase 4: Conversation Flows & Smart Logic
Make the bot handle all real clinic scenarios
Step 14 Bot Conversation Flow Design DESIGN â–¼

Your bot must handle these 5 main conversation paths:

Patient Says Hi
→
Detect Intent
→
Book / Reschedule / Cancel / FAQ
→
Collect Info
→
Confirm & Save
→
Send SMS/Email
📅
New Booking
Collect name, date, time, service type
🔄
Reschedule
Find existing appt, pick new time
❌
Cancel
Confirm cancellation, update DB
❓
FAQ
Hours, location, insurance, pricing
🚨
Emergency
Direct to call clinic immediately
📋
Status Check
Look up existing appointment
Step 15 Add Slot Availability Logic (No Double Booking) CODE â–¼
nano /var/www/dental-bot/src/slots.js // Check if a time slot is available async function isSlotAvailable(date, time) { const { data } = await supabase .from(‘appointments’) .select(‘*’) .eq(‘appointment_date’, date) .eq(‘appointment_time’, time) .eq(‘status’, ‘confirmed’); return data.length === 0; // true = available } // Get all available slots for a day async function getAvailableSlots(date) { const allSlots = [ ‘8:00 AM’, ‘8:30 AM’, ‘9:00 AM’, ‘9:30 AM’, ’10:00 AM’, ’10:30 AM’, ’11:00 AM’, ’11:30 AM’, ‘1:00 PM’, ‘1:30 PM’, ‘2:00 PM’, ‘2:30 PM’, ‘3:00 PM’, ‘3:30 PM’, ‘4:00 PM’, ‘4:30 PM’ ]; const { data: booked } = await supabase .from(‘appointments’) .select(‘appointment_time’) .eq(‘appointment_date’, date) .eq(‘status’, ‘confirmed’); const bookedTimes = booked.map(b => b.appointment_time); return allSlots.filter(s => !bookedTimes.includes(s)); } module.exports = { isSlotAvailable, getAvailableSlots };
🗄️
Phase 5: Database Setup (Supabase)
Create tables to store all appointments
Step 16 Create Database Tables in Supabase SQL â–¼

Go to Supabase Dashboard → SQL Editor and run this SQL:

— Create appointments table CREATE TABLE appointments ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, patient_name TEXT NOT NULL, patient_phone TEXT, patient_email TEXT, appointment_date DATE NOT NULL, appointment_time TEXT NOT NULL, appointment_type TEXT NOT NULL, notes TEXT, status TEXT DEFAULT ‘confirmed’, session_id TEXT, reminder_24h_sent BOOLEAN DEFAULT false, reminder_2h_sent BOOLEAN DEFAULT false, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); — Create index for faster queries CREATE INDEX idx_apt_date ON appointments(appointment_date); CREATE INDEX idx_apt_status ON appointments(status); — Create clinic_info table (per client config) CREATE TABLE clinic_info ( id SERIAL PRIMARY KEY, clinic_name TEXT, clinic_phone TEXT, clinic_email TEXT, clinic_address TEXT, business_hours JSONB, services JSONB, created_at TIMESTAMPTZ DEFAULT NOW() ); — Enable Row Level Security ALTER TABLE appointments ENABLE ROW LEVEL SECURITY; CREATE POLICY “Allow all” ON appointments FOR ALL USING (true);
📱
Phase 6: SMS & Email Reminders System
Automated reminders — the most valuable feature for clinics
Step 17 Create the Notification System (notifier.js) CORE FEATURE â–¼
nano /var/www/dental-bot/src/notifier.js const twilio = require(‘twilio’); const nodemailer = require(‘nodemailer’); require(‘dotenv’).config(); const twilioClient = twilio( process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN ); const emailTransporter = nodemailer.createTransport({ service: ‘gmail’, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS } }); // Send booking confirmation async function sendConfirmation(appt) { const msg = `Hi ${appt.patient_name}! ✅ Your appointment at ${process.env.CLINIC_NAME} is CONFIRMED for ${appt.appointment_date} at ${appt.appointment_time}. Type: ${appt.appointment_type}. Need to reschedule? Call ${process.env.CLINIC_PHONE}`; try { // Send SMS await twilioClient.messages.create({ body: msg, from: process.env.TWILIO_PHONE, to: appt.patient_phone }); // Send Email await emailTransporter.sendMail({ from: process.env.EMAIL_USER, to: appt.patient_email, subject: `Appointment Confirmed – ${process.env.CLINIC_NAME}`, html: getEmailTemplate(appt, ‘confirmation’) }); } catch (err) { console.error(‘Notification error:’, err.message); } } // Send reminder (24h and 2h before) async function sendReminder(appt, type) { const timeText = type === ’24h’ ? ‘tomorrow’ : ‘in 2 hours’; const msg = `Reminder: Hi ${appt.patient_name}! You have an appointment at ${process.env.CLINIC_NAME} ${timeText} (${appt.appointment_date} at ${appt.appointment_time}). Address: ${process.env.CLINIC_ADDRESS}. Questions? Call ${process.env.CLINIC_PHONE}`; await twilioClient.messages.create({ body: msg, from: process.env.TWILIO_PHONE, to: appt.patient_phone }); } module.exports = { sendConfirmation, sendReminder };
Step 18 Setup Automatic Cron Job for Reminders AUTOMATION â–¼
nano /var/www/dental-bot/src/scheduler.js const cron = require(‘node-cron’); const { createClient } = require(‘@supabase/supabase-js’); const notifier = require(‘./notifier’); // Run every hour to check for upcoming appointments cron.schedule(‘0 * * * *’, async () => { const now = new Date(); // Find appointments in next 24 hours const tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000); const { data: upcoming } = await supabase .from(‘appointments’) .select(‘*’) .eq(‘reminder_24h_sent’, false) .eq(‘status’, ‘confirmed’) .lte(‘appointment_date’, tomorrow.toISOString().split(‘T’)[0]); for (const appt of upcoming) { await notifier.sendReminder(appt, ’24h’); // Mark reminder as sent await supabase .from(‘appointments’) .update({ reminder_24h_sent: true }) .eq(‘id’, appt.id); console.log(`24h reminder sent to ${appt.patient_name}`); } }); console.log(‘Reminder scheduler started’);
💻
Phase 7: Embeddable Chat Widget
A floating chat bubble clinics embed on their website
Step 19 Create the Chat Widget (HTML/CSS/JS) FRONTEND â–¼
nano /var/www/dental-bot/public/widget.js // One-line embed: <script src=”https://yourdomain.com/widget.js”></script> (function() { const BOT_URL = ‘https://yourdomain.com’; const sessionId = Math.random().toString(36).substr(2, 9); // Inject styles const style = document.createElement(‘style’); style.textContent = ` #dental-bot-widget { position:fixed; bottom:20px; right:20px; z-index:9999; } #dental-bot-btn { width:60px; height:60px; border-radius:50%; background:#2563EB; border:none; cursor:pointer; font-size:24px; box-shadow: 0 4px 20px rgba(37,99,235,0.4); color:white; } #dental-bot-window { display:none; width:360px; height:500px; background:#fff; border-radius:16px; box-shadow:0 20px 60px rgba(0,0,0,0.15); flex-direction:column; overflow:hidden; margin-bottom:10px; } #dental-bot-header { background:#2563EB; color:#fff; padding:16px; display:flex; align-items:center; gap:10px; } #dental-bot-messages { flex:1; overflow-y:auto; padding:16px; display:flex; flex-direction:column; gap:8px; } .bot-msg { background:#F1F5F9; padding:10px 14px; border-radius:16px 16px 16px 4px; max-width:80%; font-size:13px; line-height:1.5; } .user-msg { background:#2563EB; color:#fff; padding:10px 14px; border-radius:16px 16px 4px 16px; max-width:80%; align-self:flex-end; font-size:13px; } #dental-bot-input { display:flex; padding:12px; border-top:1px solid #eee; gap:8px; } #dental-bot-input input { flex:1; border:1px solid #ddd; border-radius:24px; padding:10px 16px; font-size:13px; outline:none; } #dental-bot-input button { background:#2563EB; color:#fff; border:none; border-radius:50%; width:40px; height:40px; cursor:pointer; font-size:16px; } #dental-bot-badge { position:absolute; top:-4px; right:-4px; background:#EF4444; color:#fff; width:18px; height:18px; border-radius:50%; font-size:10px; display:flex; align-items:center; justify-content:center; } `; document.head.appendChild(style); // Create widget HTML const widget = document.createElement(‘div’); widget.id = ‘dental-bot-widget’; widget.innerHTML = ` <div id=”dental-bot-window” style=”display:flex”> <div id=”dental-bot-header”> <div style=”width:36px;height:36px;background:rgba(255,255,255,0.2); border-radius:50%;display:flex;align-items:center;justify-content:center”>🦷</div> <div> <div style=”font-weight:700;font-size:14px”>Appointment Assistant</div> <div style=”font-size:11px;opacity:0.8″>âš¡ Typically replies instantly</div> </div> </div> <div id=”dental-bot-messages”></div> <div id=”dental-bot-input”> <input type=”text” placeholder=”Type a message…” id=”dental-bot-text”/> <button onclick=”sendBotMsg()”>➤</button> </div> </div> <button id=”dental-bot-btn” onclick=”toggleBot()”>🦷</button> `; document.body.appendChild(widget); // Send initial greeting addBotMessage(“Hi! 👋 I’m your dental appointment assistant. I can book, reschedule, or answer questions. How can I help you today?”); async function sendBotMsg() { const input = document.getElementById(‘dental-bot-text’); const msg = input.value.trim(); if (!msg) return; addUserMessage(msg); input.value = ; addBotMessage(‘…’, ‘typing’); const res = await fetch(`${BOT_URL}/api/chat`, { method: ‘POST’, headers: { ‘Content-Type’: ‘application/json’ }, body: JSON.stringify({ message: msg, sessionId }) }); const data = await res.json(); removeTyping(); addBotMessage(data.reply); } window.toggleBot = () => { const w = document.getElementById(‘dental-bot-window’); w.style.display = w.style.display === ‘flex’ ? ‘none’ : ‘flex’; }; window.sendBotMsg = sendBotMsg; })();
Embed on any website with one line:
<script src="https://yourdomain.com/widget.js"></script>
📊
Phase 8: Admin Dashboard
Let the clinic see all appointments from a web panel
Step 20 Build Admin Panel (React or Plain HTML) DASHBOARD â–¼

Create a password-protected admin panel at yourdomain.com/admin

nano /var/www/dental-bot/public/admin.html <!– Simple Admin Dashboard –> <!DOCTYPE html> <html> <head><title>Clinic Admin Panel</title></head> <body> <h1>📅 Appointment Dashboard</h1> <div id=”stats”></div> <table id=”appointments-table”> <thead> <tr> <th>Patient</th> <th>Date</th> <th>Time</th> <th>Type</th> <th>Status</th> <th>Actions</th> </tr> </thead> <tbody id=”apt-body”></tbody> </table> <script> // Load appointments from your API fetch(‘/api/admin/appointments’) .then(r => r.json()) .then(data => { data.forEach(appt => { document.getElementById(‘apt-body’).innerHTML += ` <tr> <td>${appt.patient_name}</td> <td>${appt.appointment_date}</td> <td>${appt.appointment_time}</td> <td>${appt.appointment_type}</td> <td>${appt.status}</td> <td> <button onclick=”cancelAppt(‘${appt.id}’)”>Cancel</button> </td> </tr>`; }); }); </script> </body> </html>
🚀
Phase 9: Deploy, Test & Go Live
Final steps to make your bot live and accessible 24/7
Step 21 Start Bot with PM2 (24/7 Running) DEPLOY â–¼
cd /var/www/dental-bot # Start the bot with PM2 pm2 start src/app.js –name “dental-bot” # Save PM2 config (auto-restart on reboot) pm2 save pm2 startup # Run the command PM2 outputs # Check bot is running pm2 status pm2 logs dental-bot # Your bot is now live at http://YOUR_VPS_IP:3000
Step 22 Configure Nginx + SSL (HTTPS for Free) FREE SSL â–¼
# Configure Nginx as reverse proxy nano /etc/nginx/sites-available/dental-bot # Paste this config: server { server_name yourdomain.com www.yourdomain.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ‘upgrade’; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } # Enable the site ln -s /etc/nginx/sites-available/dental-bot /etc/nginx/sites-enabled/ nginx -t && systemctl restart nginx # Install FREE SSL with Let’s Encrypt apt install certbot python3-certbot-nginx -y certbot –nginx -d yourdomain.com -d www.yourdomain.com # Your bot is now at https://yourdomain.com
SSL is completely FREE via Let’s Encrypt. It auto-renews every 90 days. HTTPS is required for clinics (HIPAA compliance).
Step 23 Test All Bot Functions Before Selling TESTING â–¼

Test these scenarios manually:

  • ✅ Book an appointment → check database, check SMS received
  • ✅ Reschedule → confirm old slot freed, new slot booked
  • ✅ Cancel → confirm status updated to “cancelled”
  • ✅ Ask about hours → bot gives correct info
  • ✅ Ask emergency question → bot gives phone number
  • ✅ Try to book duplicate slot → bot says slot unavailable
  • ✅ Wait for reminder cron → manually trigger to test SMS
  • ✅ Check admin panel shows all appointments
  • ✅ Test widget embeds on a plain HTML page
Record a 2-minute demo video of the bot in action. This is your most powerful sales tool.
💰
Phase 10: How to Sell — Where, How & Pricing
The complete strategy to find USA clinic clients and close deals
Step 24 Pricing Strategy — What to Charge MONEY ▼
🔥 Starter Package — $299 One-Time
$299
  • Basic booking + reminders
  • Embed on 1 website
  • Email support 30 days
  • Basic admin panel
  • Setup & configuration
⭐ Professional Package — $599 One-Time
$599
  • Everything in Starter
  • SMS + Email reminders
  • Reschedule & cancel flows
  • Insurance question handling
  • Custom clinic branding
  • 3 months support
💎 Enterprise Package — $1,500 + $150/month
$1,500 + $150/mo
  • Everything in Professional
  • Multiple locations support
  • Google Calendar integration
  • Analytics dashboard
  • Custom AI training on their FAQs
  • Priority support, monthly updates
  • White-label (their brand name)
Pro Tip: The $150/month retainer on Enterprise is the real money. 10 clients × $150 = $1,500/month passive income while the bot runs itself.
Step 25 WHERE to Find USA Dental/Medical Clients SALES â–¼

🎯 Top Platforms to Find Clients:

Upwork.com
Post “Dental Chatbot” service. USA clinics hire freelancers here daily.
FREE to post profile
Fiverr.com
Create a gig: “I will build AI appointment bot for dental clinic”
FREE to list
LinkedIn
Search “Dental Practice Owner” in USA, send connection + cold message
FREE basic account
Facebook Groups
Join “Dental Practice Owners USA” groups, share your bot demo
FREE
Cold Email
Google “dental clinic New York”, email them your demo video
FREE with Gmail
Reddit
r/Dentistry, r/smallbusiness — offer free demo to get first clients
FREE

📧 Cold Email Template to Dental Clinics:

Subject: Your clinic is losing patients after hours (free fix)

Hi [Clinic Name] Team,

Did you know 67% of patients try to book appointments outside business hours — and leave if no one responds?

I built an AI assistant that books, reschedules, and sends reminders 24/7 — without hiring extra staff.

Here’s a 90-second demo: [your demo video link]

I’d love to show you a free demo customized for [Clinic Name]. Worth 15 minutes?

Best,
[Your Name]

🔍 How to Find Clinic Emails for Free:

  • Google Maps → search “dental clinic” in any US city → click each → copy website/email
  • Use Hunter.io (25 free email lookups/month)
  • Use Apollo.io free plan (50 leads/month)
  • Yelp.com → search dentists in any US city → many list emails
Step 26 How to Close the Sale — The Demo Strategy CLOSING ▼

5-Step Sales Process:

1. Send Cold Email/DM
→
2. Free Demo Call (20 min)
→
3. Show Live Bot Demo
→
4. Send Proposal
→
5. Get Paid via PayPal/Wise
Offer a FREE 7-day trial — let clinics test your bot for free. Once they see patients actually using it, they’ll pay. Conversion rate is very high.

Objections & Answers:

  • “We already have a receptionist” → “Your receptionist sleeps at night. My bot works 24/7 and costs less than 1 hour of their time.”
  • “Is it secure?” → “HTTPS encrypted, no sensitive medical data stored in chat, HIPAA-aware.”
  • “We use a booking system already” → “I can connect the bot to your existing system via a simple API.”
  • “Too expensive” → “If the bot books just 2 extra patients/month, it pays for itself in a week.”
Step 27 Scale to $3,000–$5,000/Month GROWTH ▼

Income Projection:

ClientsPackageOne-TimeMonthly Retainer
5 clients × $299Starter$1,495$0
3 clients × $599Professional$1,797$0
5 clients × $1,500Enterprise$7,500$750/month
After 3 months~$10,000$750+/month
Key insight: Once you build the bot once, each new client takes only 2-3 hours to set up (just configure the .env file and customize the system prompt). Your hourly rate becomes $100–$300/hour effectively.

Additional Revenue Ideas:

  • Sell the same bot to chiropractors, eye doctors, urgent care clinics
  • Offer monthly “hosting + maintenance” at $75–$150/month
  • Sell the source code as a template on Gumroad ($97–$297)
  • Create a YouTube tutorial about it — drive organic leads
  • List on Codester.com or CodeCanyon as a script product
🆓
Complete Free Tools Stack Used
Every single tool is free — zero cost forever
Groq AI
LLaMA 3.1 model API — AI brain of bot
FREE — 14,400 req/day
Supabase
PostgreSQL database with REST API
FREE — 500MB forever
Twilio
SMS reminders to patients
FREE trial $15 credits
Gmail SMTP
Email confirmation sending
FREE with Gmail account
Let’s Encrypt
Free HTTPS/SSL certificate
FREE forever
PM2
Keep bot running 24/7
FREE open source
Nginx
Web server & reverse proxy
FREE open source
Node.js
Backend runtime
FREE open source
GitHub
Code storage & version control
FREE for private repos
Resend.com
Alternative email — 3,000/month
FREE forever

🦷 Your Bot Is Ready to Sell!

Follow every step above and you’ll have a production-ready dental AI agent running on Hostinger for $0 in software costs. Start with 1 free demo client, perfect your pitch, then charge $299–$1,500 per clinic.

Check bot here

👇👇👇👇👇👇

If you want to buy this bot contact to us at the following Gmail majidfarooq295@gmail.com

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top