Dunning and Failed Payment Recovery
Retry schedules, card-update emails, grace periods, suspension and reactivation for recurring payments that fail.
Shahid Malla · Top Rated on Fiverr and Upwork
600+ Fiverr reviews, 4.9 average · 13+ years · 900+ projects
Laravel queuesGateway webhooksEmail and SMS
About this package
This package adds dunning to a custom or Laravel billing system: when a recurring payment fails, it retries on a schedule you set, emails the customer a secure link to update their card, gives a grace period, then suspends the service and reactivates it the moment payment succeeds. It is for subscription, hosting and service businesses that lose customers to expired cards rather than to cancellations.
Stripe Smart Retries or your own rules?
If you bill only through Stripe Billing, its built-in retries and emails may be enough, and the Stripe subscription setup packages configure them. This build is for billing that runs in your own system, across PayPal, Square, Authorize.Net or several gateways, or where suspension has to reach your app, server or network.
The sequence, step by step
- Before renewal, customers with a card about to expire get a notice to update it.
- On failure, the decline reason is read from the gateway. Business treats soft declines, such as insufficient funds, differently from hard ones, such as a closed account, which are not retried.
- The card-update link opens the gateway's hosted page, so no card number passes through your system.
- After the grace period the service is suspended, not deleted; payment restores it automatically.
Business also offers a pause or a cheaper plan before cancellation, and sends a weekly report of recovered, pending and lost revenue. Premium covers up to three gateways, uses the card account updater where your gateway offers it, and adds a task queue so staff can call high-value accounts personally.
Honest limits
Some customers will not pay however polite the emails are. Card networks also restrict retries on some decline codes, so the schedule follows those limits. Email and SMS sending costs are paid to your providers.
Compare packages
| Package | Starter$449 | Business$1,049 | Premium$2,199 |
|---|---|---|---|
| Gateways covered | 1 | 1 | Up to 3 |
| Retry schedules | One, up to 4 tries | Per plan or group | Per plan or group |
| Card-update email | |||
| Grace period and suspension | |||
| Decline-reason rules | – | ||
| SMS notices | – | ||
| Recovery report | – | ||
| Card account updater | – | – | |
| Staff call queue | – | – | |
| Delivery time | 5 days | 10 days | 20 days |
| Revisions | 2 | 3 | 5 |
What I need from you
After you pay, a project opens for your order. Send these there and the delivery clock starts.
- Admin and webhook access to your billing system and gateways
- Your current rules: retries, grace days and when service is cut
- Email and SMS sending accounts in your name (Postmark, SES, Twilio)
- An export of the last three months of failed payments, if you have it
- Your current reminder emails or notes on your brand voice
About the developer
Shahid Malla
AI agent and AI chat developer, full-stack developer
Top Rated on Fiverr and Upwork
- Based in
- Kashmir, India
- Experience
- 13+ years
- Projects
- 900+ delivered
- Languages
- English, Hindi
I have built websites, WHMCS modules and web apps for clients since before AI coding tools existed. Today I build with AI-assisted tools and review every change myself, which is why fixed prices here are lower than an agency's for the same scope. I work while the US, Canada and Australia sleep, so each morning there is progress on your staging link.
Read my 600+ Fiverr reviews · Upwork profile · Portfolio · About me
Questions about this package
Will suspended customers lose their data?
No. Suspension blocks access or service but keeps the account, data and settings. Your policy decides how long a suspended account is kept before termination, and the system sends a final notice before that date. Paying the balance at any point before termination restores everything without staff action.
Can I stop retrying a card reported lost or stolen?
Yes, and on Business it happens automatically. Hard declines such as lost, stolen or closed-account codes skip further retries and go straight to the card-update email, because retrying them only adds fees and can draw attention from the card networks.
Can I see how much revenue the dunning actually recovers?
On Business and Premium a weekly report lists failed payments, how many were recovered by retry, by card update or by staff, and how many were lost. It reads from your own payment records, so the figures match what your gateway shows.
How ordering a package works
-
1
Choose a plan
Pick Starter, Business or Premium and pay once by card, PayPal or crypto. The price on the page is the price.
-
2
Send your content
A project opens for your order. Send your text, logo, photos and any logins I need there.
-
3
I build it
I build on a private staging link you can open on your phone, with updates as I go.
-
4
Launch and handover
After your approval the site goes live on your domain, and every login is yours.
One-time price, no monthly fee from me
You pay for the build once. Your domain and hosting are registered in your name and renewed with your hosting provider, who bills you directly. I add nothing on top, and the site keeps running whether or not you hire me again.
What I do not build
Gambling and adult websites, and sites that sell content without the rights to it. Need something not listed? Ask for a custom quote.
More custom billing systems
- Custom Billing SystemYour own recurring billing platform in Laravel: clients, products, invoices, gateways, reminders, a client portal and an admin.Starting at $999 · 15 days
- Usage-Based and Metered BillingBill for API calls, storage, minutes or seats: usage import, rating rules and an invoice preview before anything is charged.Starting at $799 · 12 days
- ISP and Broadband Billing SystemBilling for wireless and fiber ISPs: plans, invoices, RADIUS or MikroTik links, suspension on non-payment and CPE inventory.Starting at $999 · 15 days