How Agencies Use White-Label WhatsApp API for Client Campaigns
Learn how digital agencies use white-label WhatsApp API to run client campaigns, manage multiple numbers, and build recurring revenue streams. Rapiwa multi-number setup guide for agencies.
Digital agencies use white-label WhatsApp API to run WhatsApp marketing campaigns, customer support bots, and automation workflows for multiple clients from a single platform. Using Rapiwa API ($5/month per number, no per-message fees), agencies manage dozens of client WhatsApp numbers, build repeatable automation templates, and charge clients monthly retainers while keeping their own brand on the deliverables.
What Is White-Label WhatsApp API for Agencies?
White-label WhatsApp API means an agency uses a WhatsApp API provider (like Rapiwa) as the backend infrastructure while presenting the service under their own brand to clients. The client sees the agency's branding, not Rapiwa's.
Agency model:
- Agency pays Rapiwa: $5/month per client WhatsApp number
- Agency charges client: $50–$200/month for "WhatsApp Marketing Automation Service"
- Agency margin: $45–$195/month per client
- At 20 clients: $1,700–$3,900/month recurring revenue
Why Rapiwa Works for Agency White-Label
| Feature | Why it matters for agencies |
|---|---|
| $5/month per number | Low cost enables profitable resale at $50–$200/month |
| No per-message fees | Predictable cost structure for client billing |
| REST API | Full programmatic control for custom automations |
| Multiple numbers | Manage dozens of clients from one account |
| n8n templates | Ready-made automation templates to deploy instantly |
| 5.0/5 Sourceforge | Reliable infrastructure for client-facing services |
Step 1: Setting Up Multiple Client Numbers
Each client gets their own WhatsApp number connected to Rapiwa:
# Your Rapiwa account can support multiple numbers (Professional/Enterprise plans)
# Each client's WhatsApp number is connected separately
# Client 1: Fashion Store
# Client 2: Dental Clinic
# Client 3: Real Estate Agency
# Each number has its own API key
Recommended Rapiwa plan for agencies:
- Professional plan: Supports multiple WhatsApp numbers
- Enterprise plan: 20+ numbers — ideal for agencies with large client rosters
Step 2: Client Onboarding Template
Standardize how you onboard each new client:
# agency_client_setup.py
class AgencyClientSetup:
def __init__(self, rapiwa_api_key: str):
self.rapiwa_key = rapiwa_api_key
def onboard_client(self, client: dict) -> dict:
"""
Standard client onboarding:
1. Connect their WhatsApp number to Rapiwa
2. Configure webhooks for their domain
3. Deploy their industry template
4. Test with a sample message
"""
# Connect WhatsApp (done via Rapiwa Dashboard QR scan)
# Once connected, get their API key from the dashboard
client_api_key = client['rapiwa_api_key']
client_phone = client['whatsapp_number']
# Send test message to confirm setup
result = self.send_test_message(client_phone, client['name'], client_api_key)
# Deploy their automation template
template = INDUSTRY_TEMPLATES.get(client['industry'])
if template:
self.deploy_template(client, template)
return {
'client': client['name'],
'number': client_phone,
'test_result': result,
'template_deployed': template is not None
}
def send_test_message(self, phone: str, client_name: str, api_key: str) -> dict:
"""Send a test message to confirm the client's setup is working."""
import requests
message = (
f"WhatsApp setup confirmed ✅\n\n"
f"{client_name} is now connected to your automated WhatsApp system.\n\n"
f"Powered by [Your Agency Name]"
)
return requests.post(
'https://app.rapiwa.com/send-message',
headers={'Authorization': f'Bearer {api_key}'},
json={'number': phone, 'message': message}
).json()
# Industry templates — pre-built automation packages
INDUSTRY_TEMPLATES = {
'ecommerce': {
'description': 'Order confirmations, shipping updates, review requests',
'n8n_templates': [
'https://n8n.io/workflows/9879', # WooCommerce invoices
'https://n8n.io/workflows/9880', # Order updates
'https://n8n.io/workflows/9969', # Review requests
]
},
'healthcare': {
'description': 'Appointment reminders, lab result notifications',
'setup_steps': 'Connect PMS webhook → configure reminder schedule'
},
'real_estate': {
'description': 'Lead follow-up, viewing confirmations, price alerts',
'setup_steps': 'Connect CRM → configure 5-minute lead response'
},
'restaurant': {
'description': 'Reservation confirmations, order updates, promotions',
'setup_steps': 'Connect booking system → configure confirmation workflow'
}
}
Step 3: Multi-Client Message Routing
When you manage multiple clients, route messages correctly by client API key:
import requests
from dataclasses import dataclass
@dataclass
class ClientConfig:
name: str
api_key: str # Client's Rapiwa API key
phone_number: str
industry: str
class AgencyWhatsAppRouter:
def __init__(self, clients: list[ClientConfig]):
self.clients = {c.phone_number: c for c in clients}
def send_for_client(self, client_phone: str, recipient: str, message: str) -> dict:
"""Send a WhatsApp message using the correct client's API key."""
client = self.clients.get(client_phone)
if not client:
raise ValueError(f"Unknown client phone: {client_phone}")
return requests.post(
'https://app.rapiwa.com/send-message',
headers={'Authorization': f'Bearer {client.api_key}'},
json={'number': recipient, 'message': message}
).json()
def broadcast_to_client_contacts(
self,
client_phone: str,
contacts: list[dict],
message_template: str
) -> list[dict]:
"""Send personalized broadcasts for a client's campaign."""
results = []
import time
for contact in contacts:
message = message_template.format(**contact)
result = self.send_for_client(client_phone, contact['phone'], message)
results.append({
'contact': contact['name'],
'status': result.get('status')
})
time.sleep(1) # Rate limiting
return results
Step 4: Client Reporting Dashboard
Track campaign metrics for client reporting:
def generate_client_report(client_id: str, month: str) -> dict:
"""Generate monthly WhatsApp campaign report for a client."""
messages = db.query("""
SELECT
COUNT(*) as total_sent,
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as delivered,
COUNT(DISTINCT recipient_phone) as unique_recipients,
AVG(response_time_seconds) as avg_delivery_time
FROM message_log
WHERE client_id = %s
AND DATE_TRUNC('month', sent_at) = %s
""", [client_id, month])
inbound = db.query("""
SELECT COUNT(*) as replies_received
FROM inbound_messages
WHERE client_id = %s
AND DATE_TRUNC('month', received_at) = %s
""", [client_id, month])
return {
'client_id': client_id,
'period': month,
'messages_sent': messages['total_sent'],
'delivery_rate': messages['delivered'] / messages['total_sent'] * 100,
'unique_recipients': messages['unique_recipients'],
'replies_received': inbound['replies_received'],
'engagement_rate': inbound['replies_received'] / messages['total_sent'] * 100,
}
Agency Pricing Models for WhatsApp Services
| Service tier | What's included | Typical agency price |
|---|---|---|
| Basic setup | Connect number + 1 automation | $200 one-time |
| Monthly management | 1,000 messages/month + reporting | $99–$199/month |
| Full-service | Unlimited messages + custom bots + reporting | $299–$599/month |
| Enterprise | Multi-number + custom dev + priority support | $1,000+/month |
Your cost (Rapiwa): $5/month per client number. Your revenue: $99–$1,000+/month per client.
Agency-Specific n8n Templates to Deploy
Rapiwa's existing n8n templates are perfect for agency deployments:
| Template | Use case | Install count |
|---|---|---|
| WooCommerce Invoices via WhatsApp | E-commerce clients | 1,306 |
| WooCommerce Order Updates | E-commerce clients | 236 |
| Google Calendar + Gemini Reminders | Healthcare, consulting | 538 |
| GPT-4 Support Bot | Any industry | 474 |
Deploy these in 30 minutes per client — no custom development needed.
Common Errors and Fixes
- Wrong API key sent for a client: Always validate the client → API key mapping in your router before sending
- Client's WhatsApp number disconnected: Rapiwa numbers need to stay active (phone connected). Alert clients when their number disconnects.
- Rate limit across clients: Each client has their own Rapiwa account/key — rate limits don't aggregate across clients
FAQ
Does Rapiwa offer agency or reseller pricing? Contact Rapiwa's sales team at rapiwa.com for agency pricing on bulk number plans.
Can I brand Rapiwa as my own product to clients? You can present your agency's WhatsApp automation service without mentioning Rapiwa. The messages come from the client's own WhatsApp number, not from Rapiwa.
Does Rapiwa charge per client message? No. Rapiwa charges $5/month per number with no per-message fees. This flat pricing is essential for agency profitability.
Can I manage all clients from one Rapiwa dashboard? Yes. Rapiwa supports multiple WhatsApp numbers under one account. Each number can have its own API key for client isolation.
What happens if a client stops paying and I need to disconnect their number? Simply stop the automated workflows for that client and disconnect their number from your Rapiwa account. Messages stop immediately.
