Subscription businesses are growing in Nepal - SaaS products, online courses, gym memberships, media subscriptions, and service retainers all want recurring billing. But recurring payments in Nepal work differently from the West. Here's what you need to know.
The Reality of Recurring Billing in Nepal
In mature markets like the US, recurring billing typically works like this:
- Customer saves a card on file
- Every billing cycle, the platform charges the card automatically
- No action required from the customer
This model doesn't work well in Nepal today for two reasons:
-
No card-on-file for wallets - Khalti and eSewa don't support saved payment methods for merchant-initiated charges. Each transaction requires active customer authentication.
-
Limited credit card use - Most Nepali consumers don't have credit cards for online use. Debit card infrastructure for recurring charges is still developing.
What Actually Works for Recurring Billing in Nepal
Model 1: Invoice-Based Billing (Most Common)
Generate an invoice each billing cycle and notify the customer to pay:
- Send an invoice via email/SMS with a payment link
- Customer clicks the link, pays via Khalti/eSewa/ConnectIPS
- Your system receives the webhook and activates/continues the service
Tools: PayBridgeNP payment links + email/SMS reminders
Best for: B2B services, consulting retainers, SaaS with smaller customer counts (under 1,000)
Model 2: Dunning-Driven Self-Service
Create a customer portal where subscribers can manage their own payments:
- Subscription expires or payment comes due
- System sends a reminder with a "Renew Now" link
- Customer pays within a grace period
- Service resumes automatically on payment
Tools: PayBridgeNP checkout sessions + webhooks + subscription state machine in your database
Best for: SaaS products, online memberships, digital subscriptions
Model 3: Annual Prepaid (Simplest)
Charge once per year. Much simpler than monthly:
- Customer pays annually upfront
- No recurring billing complexity
- Send a renewal reminder 30/14/7 days before expiry
Many Nepali SaaS companies prefer this because it eliminates the monthly collection headache.
Building a Subscription System with PayBridgeNP
Here's a minimal but production-ready subscription flow:
// 1. When subscription payment is due, create a checkout session
const session = await paybridge.checkout.create({
amount: 99900, // NPR 999/month
currency: "NPR",
customer: {
name: subscriber.name,
email: subscriber.email,
phone: subscriber.phone,
},
successUrl: `https://yourapp.com/billing/success?session={CHECKOUT_SESSION_ID}`,
cancelUrl: `https://yourapp.com/billing`,
metadata: {
subscriptionId: subscription.id,
period: "2025-05",
type: "renewal",
},
});
// 2. Email or SMS the payment URL to the customer
await sendEmail({
to: subscriber.email,
subject: "Your May invoice is ready",
body: `Pay here: ${session.checkoutUrl}`,
});
// 3. Webhook handler
case "payment.succeeded": {
const { subscriptionId, period } = event.data.metadata;
await db.subscriptions.update({
where: { id: subscriptionId },
data: {
status: "active",
currentPeriodEnd: endOfMonth(period),
lastPaymentAt: new Date(),
},
});
await sendConfirmationEmail(subscriptionId);
break;
}
case "payment.failed":
case "payment.cancelled": {
const { subscriptionId } = event.data.metadata;
await startGracePeriod(subscriptionId);
await sendPaymentReminderEmail(subscriptionId);
break;
}
Automated Reminders
Payment reminders dramatically reduce churn. Schedule reminders at:
- 7 days before due date (soft reminder)
- 3 days before (firmer reminder)
- Due date (invoice with payment link)
- 3 days after due (grace period warning)
- 7 days after due (final notice before suspension)
PayBridgeNP's scheduler handles automated reminders for payment links. You can also build your own notification logic on top of the webhook events.
Handling Grace Periods
Don't cut off access immediately when payment fails. A typical grace period:
async function startGracePeriod(subscriptionId: string) {
await db.subscriptions.update({
where: { id: subscriptionId },
data: {
status: "past_due",
gracePeriodEndsAt: addDays(new Date(), 7),
},
});
}
// Cron job: check for expired grace periods
async function checkExpiredGracePeriods() {
const expired = await db.subscriptions.findMany({
where: {
status: "past_due",
gracePeriodEndsAt: { lt: new Date() },
},
});
for (const sub of expired) {
await suspendSubscription(sub.id);
}
}
ConnectIPS for B2B Subscriptions
For business customers paying monthly retainers or SaaS invoices, ConnectIPS is often the preferred method. Business accounts have higher limits and bank-to-bank transfer is familiar to finance teams.
What's Coming
Nepal Rastra Bank is actively working on interoperable payment infrastructure. Merchant-initiated direct debits (similar to NACH in India) are on the roadmap. When this arrives, true automated recurring charges will be possible. Until then, invoice-based billing with good reminders is the right approach.
Summary
| Model | Automation | Effort | Best For |
|---|---|---|---|
| Invoice + link | Manual trigger | Low | B2B, small SaaS |
| Annual prepaid | None needed | Very low | Products with low churn |
| Portal self-service | Semi-auto | Medium | Consumer subscriptions |
| Full dunning flow | Mostly automated | High | Scale-up SaaS |
Start with invoice-based billing. Add automation as you grow. See the API guide for full webhook and checkout session details. PayBridgeNP provides the payment infrastructure - you focus on your product.