Never chase udhaar again: inside Kapda Stock’s auto-recovery ladder
Udhaar is the lifeblood of a textile shop — and its biggest headache. Here’s how Kapda Stock collects it for you, politely and automatically, without a single awkward phone call.
Every textile shopkeeper knows the feeling. A regular customer takes goods on udhaar, promises to pay next week, and then… weeks pass. You don’t want to sour a twenty-year relationship by asking again and again, so the balance quietly grows. Meanwhile your working capital sits in someone else’s cupboard, and you pay your own supplier from a shrinking bank balance.
Udhaar is not a problem to eliminate. In Indian retail, and especially in clothing and fabric, credit is how loyalty is built — the customer who is trusted with a wedding purchase on account comes back for the next wedding too. The problem is not giving credit. It is that collecting it depends entirely on one person remembering, and then finding the nerve to ask.
Kapda Stock was built to take both of those jobs away from you. This post walks through the whole credit system end to end — the ledger, credit limits, the automatic recovery ladder, promise-to-pay, and the aging report — including the limits of each, because a reminder system you trust blindly is worse than one you understand.
Why udhaar is so hard to collect
It is worth being precise about why the paper khata fails at recovery, because each failure is something the software has to replace:
- It never reminds anyone. A khata tells you a number when you open it. It does not tell the customer anything, ever.
- The maths is manual. Working out who is overdue means flipping pages, adding entries and remembering which bills were part-paid.
- Age is invisible. A ₹4,000 balance from last week and a ₹4,000 balance from last Diwali look the same on the page, and they are not remotely the same risk.
- Asking is personal. Every reminder comes from you, in your voice, to someone you will see at the next family function. So mostly, it does not get sent.
The last point matters most. The goal is not to be more aggressive about collection. It is to make the reminder impersonal enough that nobody takes offence, and consistent enough that nobody slips through.
The ledger: one number everyone agrees on
Everything starts with the customer’s ledger — the khata, rebuilt as a timeline of everything that changed what they owe. You never write in it by hand. It fills itself from what happens in the shop.
| Entry | Effect on what they owe | Created by |
|---|---|---|
| Credit | Increases | The unpaid part of a POS sale or issued invoice; an opening balance marked *Owes us* |
| Debit | Decreases | A payment recorded on the customer; a sale return or credit note; an opening balance marked *Advance* |
How the outstanding balance is calculated
The rule is deliberately simple: outstanding = total credits − total debits. A positive balance is money the customer owes you; a negative one means they have paid in advance. The same figure shows on the customers list, the customer page, the dashboard’s *Outstanding credit* tile and the aging report, so there is never a question about which number is right.
Ledger entries are financial records, so they are never edited or deleted. If something is wrong, you correct it with a new entry — money received is a Record payment, goods coming back are a sale return. That is what makes the ledger trustworthy in a dispute: every change is visible, with its date and what it refers to.
Statements that end arguments
The most useful button in the whole credit system is 📄 Statement PDF. It produces a statement with the customer’s details, every ledger entry with its running balance, and the closing balance, with your statement footer note — typically payment terms and UPI ID — printed at the bottom. When a customer says "I’m sure I paid that", send the statement. The conversation starts from the same numbers instead of two competing memories.
Recording a payment the right way
When a customer pays against their khata rather than a specific bill, use Record payment on the customer. Enter the amount (or Pay full), choose the method — Cash, UPI, Card, Bank transfer or Cheque — and set the date. You can backdate a payment, for cash collected yesterday, but not future-date one.
The payment is applied to the customer’s open invoices, oldest first. Each invoice it reaches is marked *Paid* or *Partially paid*, so the Invoices list and your reports stay in step with the ledger. With ₹3,000 outstanding from June and ₹2,000 from August, a ₹4,000 payment clears June and leaves ₹1,000 due on August. If a customer is paying for one particular bill, record the payment on that invoice instead. The full rules are in Payments & credit.
Two guardrails are worth knowing. A payment cannot exceed the outstanding balance — money paid in advance is recorded as an *Advance* opening balance instead. And recording payments needs the Manager role or above, so a read-only account cannot quietly mark a khata as settled.
Credit limits: the cheapest recovery is the one you never need
Before any reminder is sent, the best control is at the counter. Set a Credit limit ₹ on each credit customer (0 means no limit). When their outstanding balance reaches it, they show an Over limit badge everywhere.
More importantly, POS enforces it. If a sale would push a customer past their limit, a red warning shows the projected balance and the amount over. A Manager cannot complete that sale — they have to collect more, or ask for help. An Admin or the Owner can confirm Over credit limit → Override and bill, and the override is recorded on the invoice.
That split is the whole point. The counter staff never have to say no to a regular customer on their own authority, and you never discover a week later that the limit was quietly ignored. Set limits before the busy season, when you can think clearly about each customer, rather than in the middle of it.
The recovery ladder, step by step
Once a day at 10:30 AM IST, for every customer who owes at least your minimum amount, the app looks at the age of their oldest unpaid credit and sends the step that matches. Each step is a little firmer than the one before:
| Oldest unpaid credit | Step | What is sent |
|---|---|---|
| 7+ days | 💬 Polite reminder | A WhatsApp reminder with the amount due and how many days it has been outstanding |
| 15+ days | 💬 Reminder + UPI link | A WhatsApp reminder that includes a UPI payment link for the full balance |
| 30+ days | 📞 AI call | An automated voice call; if the call cannot be placed, a firmer final WhatsApp reminder instead |
The 15-day link is what makes the ladder collect rather than just nag. It uses the UPI ID from your Invoicing settings, so the customer taps it, their UPI app opens with the amount filled in, and the balance is cleared from wherever they happen to be sitting. Without a UPI ID set, the reminder still goes — just without the link — so set it before you switch the ladder on.
Only one step, and never more than once a month
Two rules keep the ladder polite. First, only the highest step a customer qualifies for is sent — a customer at 32 days gets the call, not the call plus two WhatsApp messages. Second, each step is sent at most once every 30 days per customer, so nobody is messaged daily however long the balance stays open. The ladder is persistent, not relentless.
The minimum khata
Customers who owe less than your Minimum khata ₹ are left alone entirely. It defaults to ₹500. The right number is a judgement about your trade: a shop selling ₹200 dupattas might drop it to ₹300; a wedding-wear shop where every credit bill is five figures might raise it to ₹2,000 so the ladder only spends its politeness on balances worth collecting.
Switching it on
It takes about two minutes, and an Owner or Admin account:
- Open Settings → 🤖 Automation.
- Tick Udhaar recovery ladder.
- Set Minimum khata ₹ — customers owing less are left alone.
- Click Save automation. You see *Automation settings saved*.
You do not have to wait for tomorrow morning to see it work. With the ladder on, ▶ Run now runs it immediately and reports either *Checked N overdue khata(s) — nothing new to send today* or *Sent N: Customer (💬 WhatsApp), Customer (📞 AI call)…*. The once-every-30-days rule still applies, so running it twice does not double-message anyone. The full reference is in Payment reminders, and the wider automation settings are in Automation.
The WhatsApp 24-hour rule — read this before you rely on it
This is the most important caveat in the whole feature, and we would rather you hear it from us than discover it in the message history.
In practice that means three things. Check the WhatsApp message history after the first run so you know your real delivery rate. Encourage credit customers to message your shop number — a "send us a hi for your bill" habit at the counter makes a large difference. And for the customers WhatsApp will not reach, the 30-day AI call and a plain phone call remain your channels. The WhatsApp delivery troubleshooting page covers the other reasons a message can fail.
Messages go out through your business’s WhatsApp connection — either your own number, if you have connected Meta Cloud API credentials, or the platform number. Your own number is strongly preferable for udhaar: the customer sees a reminder from the shop they know, and their replies come back to you.
The AI call at 30 days
At 30 days, the ladder escalates from a message to a voice. The call is placed through AI calling, powered by Retell AI, and the agent speaks your Payment reminder script with the customer’s name, your business name and the amount due filled in. AI calling is part of the Professional and Enterprise plans; on Growth, the 30-day step sends a firmer final WhatsApp reminder instead.
| Setup | Calls run on | Limit |
|---|---|---|
| Your own Retell account | Your account — Retell bills you directly | No monthly call limit |
| Nothing configured | Simulated — nothing is dialled | — |
Like WhatsApp, calling is bring-your-own: services that bill per use run on your own provider account and are billed by that provider, never marked up by the platform. Until you connect one, calls are simulated, so you can test your scripts before you commit.
Make the script sound like your shop
The default script is intentionally neutral: *Hello! {customer_name}. This is a call from {business_name}. A payment of ₹{amount} has been outstanding on your account for some time. Please pay at the earliest, or contact the shop. Thank you.* Edit it. Click a variable to insert it, watch the live preview, and save. A script that mentions how long you have known the family, or thanks them for their custom first, lands very differently from a generic demand.
Then place a 📞 Test call to your own mobile before a single customer is called. Test calls use sample values, are logged separately and never count towards the monthly limit. Hearing your own script out loud is the fastest way to find the sentence that sounds wrong. Every real call afterwards appears in the ☎️ Call log with its outcome, response and duration.
Promise to pay: the pause button that protects the relationship
Here is the feature that makes the ladder feel human. When a customer tells you "I’ll pay on the 5th", record it:
- Open the customer, then the Recovery tab (the same panel appears on Overview).
- Under Udhaar recovery, set Promise to pay to the date, add an optional note of up to 300 characters, and click Record.
- The panel shows 🤝 Promised to pay by DD/MM/YYYY — reminders are paused until then.
The ladder skips that customer entirely until the date has passed. No reminder fires, no call is placed, and nobody who has given you their word is hassled in the meantime. If the date passes without payment, the ladder simply resumes. If they pay early or the arrangement changes, click clear. The date cannot be in the past, which stops the pause being used to switch someone off indefinitely.
The same panel lists the five most recent reminders sent to that customer — the step, the amount it was for, any note and when it went — so before you pick up the phone yourself, you know exactly what they have already received.
Aging analysis: where your money actually is
The ladder works customer by customer. The aging report shows you the whole picture at once, and answers the question every owner asks at month-end: *who owes me, and how old is it?*
Each row is a customer, with their unpaid credit split into 0–30, 31–60, 61–90 and 90+ days, plus the total due. Older buckets are highlighted progressively so the risky money stands out, and a totals row sums each column — and follows your search, so it always sums what you are looking at. Export it as PDF for the file or as Excel for a follow-up list.
Why oldest-first matters
Payments and returns settle the oldest credit first. So a customer with ₹5,000 billed 75 days ago and ₹3,000 billed 10 days ago, who then pays ₹4,000, shows ₹1,000 in 61–90 days and ₹3,000 in 0–30 days. That is the honest picture: a regular part-payment does not make an old debt look new. It is also why the ladder keys off the *oldest* unpaid credit rather than the most recent bill.
For a wider view of how much of your revenue is being sold on credit at all, the Credit vs paid report shows the split over time — useful if you suspect credit is creeping up season on season.
A fifteen-minute weekly udhaar routine
The ladder handles the routine. This is the part that still deserves the owner’s attention, once a week, ideally on your quietest morning:
- Open the aging report and sort your attention by bucket. Anything in 61–90 or 90+ days gets a personal call from you this week. The ladder has already done its polite work; these customers need a human.
- Check the WhatsApp message history for FAILED reminders. Those customers heard nothing. Call them, or ask them to message the shop number next time they visit.
- Record every promise you were given in person. A promise made at the counter that isn’t recorded will trigger a reminder the customer finds rude.
- Review limits on repeat offenders. A customer who keeps appearing in the older buckets needs a lower credit limit, not a louder reminder.
- Send statements to anyone disputing a balance. Then let the numbers do the talking.
What the ladder will not do
A tool that promises to solve udhaar completely is not being straight with you. These are the honest limits:
- It will not reach everyone on WhatsApp. The 24-hour rule is Meta’s, and it is the single largest limit on automated reminders.
- It will not replace judgement about who to trust. Credit limits and the aging report inform that decision; they do not make it.
- It will not know about promises it wasn’t told about. Record them, or the ladder will carry on.
- It will not collect from someone who has decided not to pay. At 90+ days with no promise and no response, the problem is no longer a reminder problem.
“The app sends polite reminders for me. I can see every customer’s pending balance at a glance, and I only pick up the phone for the few that really need it.”
Set it once, then forget it
You configure the ladder a single time — the minimum, the UPI ID, the WhatsApp connection, the call script — and then it works every morning without you. That is the whole idea behind Kapda Stock: the busy-work disappears, and the shop runs itself a little more each week.
If you are about to head into a festive season, the other half of the udhaar story is controlling what goes out on credit in the first place — we cover that in Surviving the festive rush. If you are still moving off paper, get the opening balances right first, following the 30-day switching plan. The recovery ladder is available on every plan — see pricing, or browse the rest of the features.
Frequently asked questions
How does Kapda Stock send udhaar reminders automatically?
Once a day at 10:30 AM IST, the recovery ladder checks every customer owing at least your minimum amount and looks at the age of their oldest unpaid credit. At 7+ days it sends a WhatsApp reminder, at 15+ days a reminder with a UPI payment link, and at 30+ days it places an AI voice call. Only the highest step is sent, and each step at most once every 30 days. See Payment reminders.
Why did some WhatsApp reminders show as FAILED?
WhatsApp delivers business text messages only to people who have messaged your number in the last 24 hours. Reminders are sent as text, so for customers outside that window Meta rejects them. Encourage credit customers to message the shop number, and call the ones WhatsApp cannot reach.
Can I stop reminders for a customer who has promised to pay?
Yes. Record a promise-to-pay date on the customer’s Recovery tab and the ladder skips them until that date passes. If they do not pay by then, reminders resume automatically. You can clear the promise early at any time.
Do I need my own Retell account for the AI call?
Yes — and AI calls need the Professional or Enterprise plan. Calls run on your own Retell account, with no monthly limit, and Retell bills you directly for usage. Until you connect one, calls are simulated and nothing is dialled. See AI calling.
How is the aging report calculated?
Each credit entry is aged from the day it was created, and payments and returns settle the oldest credit first. The result is split into 0–30, 31–60, 61–90 and 90+ day buckets per customer, with totals, and can be exported as PDF or Excel. See Aging report.
What stops staff giving too much credit at the counter?
Credit limits. When a sale would push a customer past their limit, POS shows the projected balance and blocks a Manager from completing it. Only an Admin or the Owner can override, and the override is recorded on the invoice.
See it working in your own shop
Set up a workspace in under a minute, or read the step-by-step guides in the docs.