The 3-Day Sprint
Most people overthink starting a WhatsApp bot business. They research for weeks, compare platforms, watch tutorials, and never ship. This guide is the antidote: a focused 3-day sprint that gets you from zero to a deployable bot with a paying client pipeline.
Day 1: Pick your niche and set up the stack.
Day 2: Build and deploy a working bot.
Day 3: Get your first client.
No fluff. Let's go.

Day 1: Pick a Niche and Set Up
Choose One Industry
Don't build a "general purpose" bot. Pick one vertical and own it. Here are the easiest entry points in African markets:
| Niche | Why It Works | Avg Monthly Fee |
|---|---|---|
| Restaurants | High message volume, simple FAQ patterns | ₦40,000 – ₦80,000 |
| Clinics & pharmacies | Appointment scheduling, drug availability queries | ₦50,000 – ₦100,000 |
| Real estate | Lead qualification, property listings | ₦60,000 – ₦120,000 |
| Hair salons & barbers | Appointment booking, price lists | ₦30,000 – ₦60,000 |
| Online stores | Order tracking, delivery updates | ₦50,000 – ₦90,000 |
Recommendation for Day 1: Pick restaurants. Everyone eats. Every restaurant gets the same 10 questions. The bot writes itself.
Set Up Your Stack (30 Minutes)
| Tool | Purpose | Cost |
|---|---|---|
| Meta Business Manager | WhatsApp Business API access | Free |
| Node.js + Express | Bot server | Free |
| Railway.app | Hosting | Free ($5 credit/month) |
| Supabase | Database for sessions/config | Free |
| Ngrok (dev only) | Tunnel localhost to internet | Free |
mkdir wa-bot-sprint && cd wa-bot-sprint
npm init -y
npm install express dotenv axios
Create .env:
PORT=3000
VERIFY_TOKEN=my_webhook_verify_token
WA_PHONE_NUMBER_ID=your_phone_number_id
WA_ACCESS_TOKEN=your_access_token
Get your credentials from business.facebook.com → WhatsApp → API Setup.
Day 2: Build and Deploy
The Core Webhook
Meta's WhatsApp Cloud API sends messages to your webhook. Here's the minimum viable bot:
// server.js
require('dotenv').config()
const express = require('express')
const axios = require('axios')
const app = express()
app.use(express.json())
// Meta verification endpoint
app.get('/webhook', (req, res) => {
const mode = req.query['hub.mode']
const token = req.query['hub.verify_token']
const challenge = req.query['hub.challenge']
if (mode === 'subscribe' && token === process.env.VERIFY_TOKEN) {
res.status(200).send(challenge)
} else {
res.sendStatus(403)
}
})
// Message handler
const FAQ = {
menu: {
triggers: ['menu', 'food', 'what do you have', '1'],
reply: '🍽️ *Our Menu*
*Main*
Jollof Rice + Chicken — ₦4,500
Fried Rice + Fish — ₦4,000
Pepper Soup — ₦5,000
*Drinks*
Fresh Juice — ₦1,500
Soft Drinks — ₦500
Reply *ORDER* to order or *HOURS* for opening times.'
},
hours: {
triggers: ['hours', 'open', 'time', '2'],
reply: '⏰ *Opening Hours*
Mon–Sat: 11am–10pm
Sun: 12pm–9pm
14 Awolowo Road, Ikoyi, Lagos.
Reply *MENU* to see our menu.'
},
order: {
triggers: ['order', '3'],
reply: 'To place an order, please send:
1. Your name
2. Your order items
3. Delivery address
We will confirm within 10 minutes! 🚀'
}
}
app.post('/webhook', async (req, res) => {
const data = req.body
if (data.object !== 'whatsapp_business_account') {
return res.sendStatus(404)
}
for (const entry of data.entry || []) {
for (const change of entry.changes || []) {
const messages = change.value?.messages
if (!messages) continue
for (const msg of messages) {
if (msg.type !== 'text') continue
const from = msg.from
const text = msg.text.body.toLowerCase().trim()
// Match FAQ
let reply = 'Hello! 👋 How can I help?
*1* or MENU — View menu
*2* or HOURS — Opening times
*3* or ORDER — Place order'
for (const [key, faq] of Object.entries(FAQ)) {
if (faq.triggers.some(t => text.includes(t))) {
reply = faq.reply
break
}
}
// Send reply
await axios.post(
`https://graph.facebook.com/v19.0/${process.env.WA_PHONE_NUMBER_ID}/messages`,
{
messaging_product: 'whatsapp',
to: from,
type: 'text',
text: { body: reply }
},
{
headers: {
Authorization: `Bearer ${process.env.WA_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
}
}
)
}
}
}
res.sendStatus(200)
})
app.listen(process.env.PORT, () => console.log('Bot live!'))
Deploy to Railway
npm install -g @railway/cli
railway login
railway init
railway up
Set your environment variables in Railway dashboard, then update the webhook URL in Meta Business Manager to point to https://your-app.railway.app/webhook.
Day 3: Get Your First Client
The Walk-In Method
Walk into 5 restaurants today. Ask one question: "How many WhatsApp messages do you get per day?"
When they say 30–100 (they always do), say: "I built something that answers those automatically. Can I show you?"
Message your bot from their phone. Let them see it respond instantly. That demo closes.
The DM Method
Hi [Name], I noticed [Restaurant] uses WhatsApp for
orders. I built an auto-responder that handles menu
queries, orders, and hours — 24/7. It's already running.
Can I show you a 30-second demo?
Pricing for First Client
| Approach | Price | Why |
|---|---|---|
| Free trial + paid | ₦0 for 7 days, then ₦50,000/month | Reduces risk for them |
| Discount launch | ₦30,000/month (first 3 months) | Gets a case study fast |
| Standard | ₦60,000/month with 3-month minimum | Professional from day one |
Our recommendation: Use the free trial approach. A working demo that the owner has already tested is the easiest sale you will ever make.
Real Cost Breakdown
| Item | Monthly Cost (NGN) | Monthly Cost (USD) |
|---|---|---|
| Railway hosting | ₦0 – ₦8,000 | $0 – $5 |
| WhatsApp API messages (500 convos/day) | ₦15,000 – ₦45,000 | $10 – $30 |
| Supabase (free tier) | ₦0 | $0 |
| Domain (optional) | ₦1,500 | $1 |
| **Total** | **₦16,500 – ₦54,500** | **$11 – $36** |
Revenue from 1 client: ₦50,000–₦80,000/month.
Profit margin at 1 client: 50–70%.
Scaling Beyond Day 3
| Milestone | What to Do | When |
|---|---|---|
| 3 clients | Build a client portal for self-service updates | Week 3 |
| 5 clients | Move to a multi-tenant Supabase setup | Month 2 |
| 10 clients | Hire a junior dev for maintenance | Month 4 |
| 15+ clients | Consider Botpress/Typebot for visual bot management | Month 6 |
The 3-day sprint is just the start. But nothing happens until you ship Day 2 and sell Day 3. Go.

