WhatsApp API for Schools: Automate Parent Communication and Admin Alerts
Use WhatsApp API to automate parent notifications, attendance alerts, fee reminders, and school event updates. Rapiwa API ($5/month) for schools, colleges, and educational institutions.
WhatsApp API for schools lets educational institutions automatically send attendance alerts, fee reminders, exam schedules, school event notifications, and emergency alerts to parents via WhatsApp. Using Rapiwa API ($5/month, no per-message fees), schools replace phone call trees and printed circulars with instant WhatsApp notifications that parents actually read.
Why Schools Need WhatsApp Communication
School communication has a reach problem: printed circulars go unread in school bags, school email newsletters have 15–20% open rates, and phone trees are time-consuming and unreliable. WhatsApp solves this:
- 98% open rate — parents read WhatsApp messages within minutes
- Parents already use WhatsApp — it's the most widely used app in most families
- Two-way communication — parents can reply to confirm or ask questions
- Emergency broadcast — send a school closure alert to all parents in 30 seconds
- Cost: $5/month (Rapiwa) vs printing costs + postage for circular letters
Top 6 WhatsApp Automation Use Cases for Schools
1. Attendance Notification
The problem: When a student is absent, parents don't know until the end of the school day.
The solution: Automatic WhatsApp alert to parents within 30 minutes of absence being recorded.
curl -X POST https://app.rapiwa.com/send-message \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"number": "8801234567890",
"message": "📋 Attendance Alert — Bright Future Academy\n\nDear Parent/Guardian,\n\nThis is to inform you that *Aisha Rahman* (Class 7, Roll: 15) was marked *absent* on July 20, 2026.\n\nIf this is unexpected, please contact the school:\n📞 +880 2222 333444\n📧 admin@brightfuture.edu\n\nThank you."
}'
Expected response:
{
"status": "success",
"messageId": "msg_school_abc123",
"timestamp": "2026-07-20T09:30:00Z"
}
2. Fee Payment Reminder
The problem: Schools spend hours chasing late tuition fee payments.
The solution: Automated WhatsApp fee reminders at 7, 3, and 1 day before due date.
import requests
from datetime import date, timedelta
def send_fee_reminder(parent: dict, student: dict, fee: dict, days_until_due: int, api_key: str) -> dict:
if days_until_due > 0:
urgency_message = f"Fee is due in *{days_until_due} day{'s' if days_until_due > 1 else ''}*."
action = "Please pay before the due date to avoid a late fee."
elif days_until_due == 0:
urgency_message = "Fee is *due TODAY*."
action = "Please complete payment today."
else:
urgency_message = f"Fee is *{abs(days_until_due)} days overdue*."
action = "Please pay immediately to avoid suspension of services."
message = (
f"💰 Fee Reminder — {student['school_name']}\n\n"
f"Dear {parent['name']},\n\n"
f"This is a reminder for *{student['name']}* ({student['class']}):\n\n"
f"Fee type: {fee['type']}\n"
f"Amount: {fee['currency']} {fee['amount']:,}\n"
f"Due date: {fee['due_date']}\n\n"
f"{urgency_message} {action}\n\n"
f"Pay online: {fee['payment_url']}\n"
f"Questions? Call: {student['school_phone']}"
)
return requests.post(
'https://app.rapiwa.com/send-message',
headers={'Authorization': f'Bearer {api_key}'},
json={'number': parent['phone'], 'message': message}
).json()
def run_daily_fee_reminders(db, api_key: str) -> None:
"""Send fee reminders for upcoming and overdue fees."""
today = date.today()
reminder_offsets = [7, 3, 1, 0, -1, -3, -7] # Days relative to due date
for offset in reminder_offsets:
target_date = today + timedelta(days=offset)
fees_due = db.query("""
SELECT f.*, s.name as student_name, s.class,
p.name as parent_name, p.phone, s.school_name, s.school_phone
FROM fees f
JOIN students s ON f.student_id = s.id
JOIN parents p ON s.parent_id = p.id
WHERE f.due_date = %s AND f.status = 'unpaid'
AND p.whatsapp_opted_in = TRUE
""", [target_date])
for fee in fees_due:
days_until = (fee['due_date'] - today).days
send_fee_reminder(
parent={'name': fee['parent_name'], 'phone': fee['phone']},
student={'name': fee['student_name'], 'class': fee['class'],
'school_name': fee['school_name'], 'school_phone': fee['school_phone']},
fee={'type': fee['fee_type'], 'amount': fee['amount'],
'currency': 'BDT', 'due_date': str(fee['due_date']),
'payment_url': fee['payment_url']},
days_until_due=days_until,
api_key=api_key
)
3. Exam Schedule and Results Notification
The problem: Exam schedules printed on paper are lost. Parents miss result collection dates.
The solution: WhatsApp notifications for exam schedules and results.
Exam schedule:
"📝 Exam Schedule — Bright Future Academy
Dear Parent of *Aisha Rahman* (Class 7),
Mid-term examinations start July 25, 2026:
📅 July 25: Mathematics (9:00–11:00 AM)
📅 July 26: English (9:00–11:00 AM)
📅 July 27: Science (9:00–11:00 AM)
📅 July 28: Social Studies (9:00–11:00 AM)
Full schedule: https://brightfuture.edu/exams/2026
Wishing your child the best! ✏️"
Results notification:
"📊 Result Published — Bright Future Academy
Dear Parent,
*Aisha Rahman's* (Class 7) mid-term results are now available:
📈 Result: Available on student portal
🔗 https://brightfuture.edu/portal
Congratulations to all students! 🎉"
4. Emergency and School Closure Alert
The problem: Emergency announcements (school closure, weather, security) need to reach all parents instantly.
The solution: Broadcast WhatsApp message to all opted-in parents in under 60 seconds.
def send_emergency_broadcast(message: str, recipients: list, api_key: str) -> dict:
"""
Send an emergency WhatsApp broadcast to all parents.
⚠️ For emergencies only — adds urgency prefix automatically.
"""
emergency_message = f"⚠️ SCHOOL ALERT — Bright Future Academy\n\n{message}\n\n— School Administration"
results = {'sent': 0, 'failed': 0}
for parent in recipients:
result = requests.post(
'https://app.rapiwa.com/send-message',
headers={'Authorization': f'Bearer {api_key}'},
json={'number': parent['phone'], 'message': emergency_message}
).json()
if result.get('status') == 'success':
results['sent'] += 1
else:
results['failed'] += 1
import time
time.sleep(0.5) # 2 messages/second
return results
# Example: school closure due to flood
result = send_emergency_broadcast(
message=(
"School will be *closed tomorrow, July 21, 2026* due to flooding in the area.\n\n"
"Classes will resume on Monday, July 24, if conditions improve.\n\n"
"We will update you by 8:00 PM tonight with further information."
),
recipients=get_all_opted_in_parents(db),
api_key='YOUR_API_KEY'
)
print(f"Emergency broadcast: {result['sent']} sent, {result['failed']} failed")
5. Event Invitation and RSVP
The problem: School events like parent-teacher meetings, sports days, and graduation ceremonies have poor attendance because invitations are missed.
The solution: WhatsApp event invitation with RSVP via keyword reply.
"👨👩👧 Parent-Teacher Meeting — July 30, 2026
Dear Parent of *Aisha Rahman* (Class 7),
You are invited to our quarterly Parent-Teacher Meeting:
📅 Date: July 30, 2026
⏰ Time: 5:00 PM – 8:00 PM
📍 Venue: School Assembly Hall
Your assigned time slot: *6:00–6:15 PM* (with Class Teacher)
Please confirm your attendance:
Reply *YES* to confirm
Reply *NO* to decline
Reply *RESCHEDULE* if you need a different time slot
RSVP by: July 27, 2026"
Processing RSVP replies via webhook:
def handle_rsvp_reply(parent_phone: str, reply: str, event_id: str) -> None:
"""Process RSVP reply for school event."""
reply_upper = reply.strip().upper()
if reply_upper == 'YES':
mark_rsvp(parent_phone, event_id, 'confirmed')
send_confirmation(parent_phone, "✅ Your attendance is confirmed! See you on July 30.")
elif reply_upper == 'NO':
mark_rsvp(parent_phone, event_id, 'declined')
send_confirmation(parent_phone, "Understood. We hope to see you at the next meeting!")
elif reply_upper == 'RESCHEDULE':
available_slots = get_available_slots(event_id)
slots_text = '\n'.join([f"• {slot['time']}" for slot in available_slots])
send_confirmation(parent_phone,
f"Available time slots:\n{slots_text}\n\nReply with your preferred time.")
6. Daily Homework and Announcement Updates
The problem: Students forget homework assignments; parents don't know what their child should be doing.
The solution: Daily WhatsApp updates with homework and important announcements.
"📚 Daily Update — Class 7, July 20, 2026
Dear Parents,
Today's homework:
📘 Mathematics: Exercise 4.3, Q1–Q10
📗 English: Write a 200-word essay on 'My Summer Holiday'
📙 Science: Read Chapter 8 (pages 45–52)
📢 Announcements:
• Sports Day registration closes tomorrow
• Library books due for return by Friday
Have a productive evening! 🌟"
How to Set Up WhatsApp for Schools with Rapiwa
Step 1: Create Your Rapiwa Account
Sign up at rapiwa.com — 3-day free trial, no credit card.
Step 2: Collect Parent Opt-Ins
At enrollment: "May we send school notifications and alerts to your WhatsApp number?"
- Add checkbox in enrollment form
- Store consent in student management system
Step 3: Connect to Student Management System
Popular systems with API support: Fedena, SchoolTool, PowerSchool, or a custom database. Use n8n to connect:
def run_school_whatsapp_automation(db, api_key: str) -> None:
"""Daily school WhatsApp automation."""
today = date.today()
# 1. Attendance (triggered by teacher marking, not scheduled)
# 2. Fee reminders
run_daily_fee_reminders(db, api_key)
# 3. Exam schedule (7 days before exam period)
upcoming_exams = get_exams_starting_in_7_days(db, today)
for exam_schedule in upcoming_exams:
send_exam_schedule(exam_schedule, api_key)
# 4. Daily homework (sent at 4:00 PM after school hours)
# (configured as a scheduled job at 4 PM)
Results You Can Expect
- 70–80% parent open rate on WhatsApp vs 15–20% on email newsletters
- 40–50% reduction in late fee payments (proactive reminders)
- 30% higher attendance at parent-teacher meetings (WhatsApp invitations)
- 90%+ less time spent on phone tree calls (WhatsApp replaces manual calling)
- Faster emergency response — school closure alerts reach 500+ parents in under 2 minutes
FAQ
Is WhatsApp appropriate for school-parent communication? Yes — WhatsApp is widely used for school communication in South Asia, Southeast Asia, Middle East, and Africa. Schools in these regions are already using WhatsApp groups informally; automating it with an API makes it professional and scalable.
Does Rapiwa charge per school notification message? No. Rapiwa charges $5/month flat with no per-message fees. A school with 500 students sending daily updates pays $5/month total.
How do I collect parent WhatsApp consent? Add an opt-in checkbox at enrollment: "I consent to receive school notifications via WhatsApp at the number provided." Store the consent record with timestamp.
Can parents reply to attendance alerts? Yes. Set up a Rapiwa webhook to receive incoming replies. When a parent replies "She is unwell today," log it in the attendance system and notify the class teacher.
What if some parents don't use WhatsApp? The WhatsApp API only delivers to active WhatsApp numbers. For parents without WhatsApp, maintain a parallel email or SMS notification system. Check if the number is on WhatsApp before enrolling it.
