How to Build and Sell a WhatsApp Bot Business: The Complete 2026 Guide
Build16 min read·April 19, 2026·--

How to Build and Sell a WhatsApp Bot Business: The Complete 2026 Guide

From the first line of code to your first paying client. The exact stack, the exact pitch, and the exact workflow that turns WhatsApp automation into a ₦500k+/month business.

@
@kivorablog
April 19, 2026
Share

Why WhatsApp Bots Are One of the Best Businesses to Start in Africa Right Now


WhatsApp has 2.8 billion users globally. In Nigeria alone, over 90 million people use it daily — more than any other communication tool. Yet most businesses still respond to customer messages manually, one by one, for hours every day.


That gap is your business.


A WhatsApp bot handles FAQs, takes orders, qualifies leads, books appointments, and sends reminders — automatically. Businesses that understand this will pay ₦30,000 to ₦200,000 per month for a bot that saves their staff 30+ hours of repetitive work.


You build it once. You charge monthly. You maintain it in a few hours per week.




Understanding the Market


Before you write a single line of code, understand who you're selling to.


Ideal Clients


Business TypeProblem They HaveWhat the Bot Solves
RestaurantsAnswering "what's on the menu?" 50x per dayMenu bot, reservation booking
Salons & spasManual appointment booking via chatAppointment scheduler
ClinicsPatient FAQs, appointment remindersFAQ bot + reminder system
Real estate agentsLead qualification taking hoursAuto-qualifier, viewing scheduler
E-commerce storesOrder tracking, return queriesOrder status, return initiation
SchoolsFee payment queries, timetable requestsInfo bot, payment confirmation

Pricing Reality


Service TierWhat's IncludedMonthly Price
BasicFAQ bot, menu/info display₦30,000 – ₦60,000
StandardFAQ + appointment booking + lead capture₦60,000 – ₦120,000
PremiumFull automation + CRM integration + analytics₦120,000 – ₦250,000
EnterpriseMulti-location + custom workflows + SLA₦250,000+

At 5 Standard clients, that's ₦400,000–₦600,000/month. Your stack costs roughly ₦35,000/month total.




The Free Stack (Start With This)


ToolPurposeFree LimitMonthly Cost
Twilio WhatsApp SandboxTesting (not production)Free$0
Meta WhatsApp Business APIProduction messagingFree to set upPer-message fees
Node.js + ExpressBot serverFree$0
Railway.appServer hosting$5 free credits/month$5–$10
SupabaseDatabase for bot state500MB free$0
n8n (self-hosted)Advanced workflowsFree$0 (you host it)

Total: ₦0–₦8,000/month for the first 3 clients


The Paid Stack (When You Have 10+ Clients)


ToolPurposeMonthly CostWhy Upgrade
Twilio WhatsApp APIProduction messaging~$0.005/messageMore reliable, better support
DigitalOcean DropletDedicated server$12/monthMore resources, better uptime
Supabase ProDatabase$25/monthMore storage, daily backups
Typebot or BotpressVisual bot builder$39/monthManage client bots without code



Step-by-Step: Building Your First Bot


Step 1: Set Up Your Development Environment


mkdir whatsapp-bot && cd whatsapp-bot
npm init -y
npm install express twilio dotenv

Create a .env file:

TWILIO_ACCOUNT_SID=your_account_sid
TWILIO_AUTH_TOKEN=your_auth_token
TWILIO_WHATSAPP_NUMBER=whatsapp:+14155238886
PORT=3000

Step 2: Build the Core Bot Engine


// server.js
require('dotenv').config()
const express  = require('express')
const { MessagingResponse } = require('twilio').twiml
const app      = express()

app.use(express.urlencoded({ extended: false }))
app.use(express.json())

// In-memory session store (replace with Supabase in production)
const sessions = new Map()

// Bot configuration — customise per client
const BOT_CONFIG = {
  businessName: 'Lagos Grill Restaurant',
  greeting: 'Hello! Welcome to Lagos Grill. How can I help you today?',
  menu: {
    trigger: ['menu', 'food', 'what do you have', '1'],
    response: `*Our Menu* 🍽️

*Starters*
- Peppered Snail — ₦2,500
- Suya Platter — ₦3,500

*Main Courses*
- Jollof Rice + Chicken — ₦4,500
- Pepper Soup (Goat) — ₦5,000
- Fried Rice + Fish — ₦4,000

*Drinks*
- Fresh Juice — ₦1,500
- Malt/Soft Drinks — ₦500

Reply *ORDER* to place an order or *HOURS* for opening times.`
  },
  hours: {
    trigger: ['hours', 'open', 'time', '2'],
    response: `*Opening Hours* ⏰

Monday – Saturday: 11am – 10pm
Sunday: 12pm – 9pm

We're located at 14 Awolowo Road, Ikoyi, Lagos.

Reply *MENU* to see our menu or *BOOK* to make a reservation.`
  },
  booking: {
    trigger: ['book', 'reservation', 'reserve', 'table', '3'],
    response: `To book a table, please provide:

1. Your name
2. Number of guests
3. Preferred date and time
4. Any special requests

Our team will confirm your booking within 30 minutes.

Or call us directly: 0801 234 5678`
  }
},

function getResponse(inboundMessage, phoneNumber) {
  const msg = inboundMessage.toLowerCase().trim()

  // Check for menu trigger
  if (BOT_CONFIG.menu.trigger.some(t => msg.includes(t))) {
    return BOT_CONFIG.menu.response
  }

  // Check for hours trigger
  if (BOT_CONFIG.hours.trigger.some(t => msg.includes(t))) {
    return BOT_CONFIG.hours.response
  }

  // Check for booking trigger
  if (BOT_CONFIG.booking.trigger.some(t => msg.includes(t))) {
    return BOT_CONFIG.booking.response
  }

  // Default greeting for new sessions
  if (!sessions.has(phoneNumber)) {
    sessions.set(phoneNumber, { started: Date.now() })
    return BOT_CONFIG.greeting + '\n\nReply with:\n*1* or MENU — View our menu\n*2* or HOURS — Opening times\n*3* or BOOK — Make a reservation'
  }

  // Fallback
  return "I didn't quite catch that. Reply with:\n*1* — Menu\n*2* — Hours\n*3* — Book a table\n*HUMAN* — Talk to our team"
},

app.post('/webhook', (req, res) => {
  const inboundMessage = req.body.Body || ''
  const phoneNumber    = req.body.From || ''

  const reply = getResponse(inboundMessage, phoneNumber)

  const twiml = new MessagingResponse()
  twiml.message(reply)
  res.type('text/xml').send(twiml.toString())
})

app.listen(process.env.PORT, () => {
  console.log(`Bot running on port ${process.env.PORT}`)
})

Step 3: Make It Client-Configurable


Instead of hardcoding each client's config, store it in Supabase:


-- In Supabase SQL Editor
create table bot_configs (
  id uuid primary key default gen_random_uuid(),
  client_name text not null,
  phone_number text unique not null,
  config jsonb not null,
  active boolean default true,
  created_at timestamptz default now()
);

-- RLS: service key only
alter table bot_configs enable row level security;
create policy "service only" on bot_configs for all
  using (auth.role() = 'service_role');

Now fetch the config dynamically:


// In your webhook handler
const { data: client } = await supabase
  .from('bot_configs')
  .select('config')
  .eq('phone_number', req.body.To)  // bot's number
  .eq('active', true)
  .single()

const config = client?.config || DEFAULT_CONFIG

This means one codebase runs every client's bot. Adding a new client is just inserting a row in Supabase.


Step 4: Deploy to Railway


# Install Railway CLI
npm install -g @railway/cli

# Login and deploy
railway login
railway init
railway up

Railway gives you a public URL like https://your-bot.railway.app. That becomes your Twilio webhook URL.




Step 5: Getting Clients


The Cold Walk-In Pitch


Walk into any restaurant, salon, or clinic that you can see is handling WhatsApp manually. The evidence is usually obvious: a phone sitting on the counter with someone typing, a notice saying "WhatsApp us at 08X..." on a printed flyer.


Your opening line: "How many WhatsApp messages does your business get per day?"


When they say 20–100 (they always do), follow with: "What if your phone handled all of those automatically, 24/7, while your staff focused on actually serving customers?"


Show them a demo on your phone. A live bot they can message right now. That closes the conversation.


The Discovery Questions That Sell


QuestionWhy You're Asking It
"How many WhatsApp messages do you get per day?"Establishes the pain quantitatively
"Who answers them right now?"Identifies who's losing time
"What are the 5 most common questions?"This becomes your bot's menu
"What happens when you miss a message at night?"Gets them imagining lost revenue
"Have you tried any other solution for this?"Positions you against their alternatives

The Proposal Structure


Keep proposals simple. One page. Three sections:


  • The Problem: "Your team answers 50+ repetitive WhatsApp messages daily. That's 3+ hours of staff time that could go toward serving customers."
  • The Solution: "A custom WhatsApp bot that handles [their top 5 questions] automatically, 24/7, with a human handoff option."
  • The Investment: "₦80,000/month. Includes setup, monthly maintenance, and unlimited message volume."

Scaling From 1 to 10 Clients

What Changes at Scale

StageClientsKey ChallengeSolution
Starting1–3Building the first oneFocus on one industry
Growing4–7Managing multiple configsSupabase multi-tenant setup
Scaling8–15Client support timeBuild a client portal
Mature15+Technical complexityHire a junior dev or use Botpress

The Client Portal (Build This at 5 Clients)

A simple dashboard where clients can:

  • View their bot's conversation history
  • Edit their menu/FAQ responses
  • See response time analytics
  • Submit change requests

This reduces your support time dramatically and increases perceived value — clients who can see their bot working are far less likely to cancel.


What Could Go Wrong (And How to Prevent It)

RiskLikelihoodPrevention
Twilio outageLowSet up Supabase logs so you get alerts when messages stop
Client wants complex custom featureHighDefine scope clearly in the contract — "extras" are billed separately
Server goes down at 2amMediumSet up Railway health checks and uptime monitoring via UptimeRobot (free)
Client cancels after month 1MediumLock clients into 3-month minimum contracts
Messages cost more than expectedLowSet Twilio spending limits per client

The Real Numbers at 6 Months

A solo developer who follows this guide consistently:

  • Month 1: 1 client, ₦80,000 revenue, ₦12,000 costs, ₦68,000 profit
  • Month 2: 2 clients, ₦160,000 revenue, ₦15,000 costs, ₦145,000 profit
  • Month 3: 4 clients, ₦320,000 revenue, ₦25,000 costs, ₦295,000 profit
  • Month 6: 8 clients, ₦640,000 revenue, ₦45,000 costs, ₦595,000 profit

That is a ₦595,000/month business running on approximately 20 hours of work per week.

Read more on Kivora Blog

Read more on Kivora Blog

Get started →