WhatsApp opt-in lists in India lose roughly 2-3% of their genuinely reachable contacts every month: numbers get disconnected and reissued, second SIMs get abandoned, and once-eager buyers quietly stop caring. That slow leak is invisible on your dashboard until it surfaces as a rising block-and-report rate, a yellow or red quality rating, and a messaging-limit tier demotion that halves your throughput overnight. List hygiene is the discipline of retiring dead contacts on your own schedule instead of letting Meta discover them for you.
Most Indian senders treat their opt-in list as an asset that only grows. It is closer to a perishable inventory. This guide sets out the five-stage method we see working in Indian cohorts - Collect, Score, Segment, Sunset, Re-permission - along with the failure signatures that identify a recycled number, the sunset thresholds worth defending, and the DPDP Act 2023 reason why consent freshness is a legal problem and not merely a deliverability one.
Why WhatsApp opt-in lists decay faster in India
Every market loses contacts. India loses them faster, and for structurally Indian reasons.
- Number recycling. Under TRAI's framework, a mobile number that stops being used goes through disconnection and a quarantine period before the operator returns it to the pool and reissues it to a new subscriber. The quarantine window is commonly discussed as around 90 days and varies by operator and circle. The practical consequence is unambiguous: a number you collected two years ago may today belong to a completely different person who has never heard of your brand.
- Dual-SIM abandonment. A large share of Indian handsets carry two SIMs, and the second one is frequently a data-only or price-driven secondary that gets dropped when a better plan appears. If your opt-in was captured on the secondary number, it dies quietly with the plan.
- Portability without behaviour portability. MNP keeps the number alive but often changes the handset, the WhatsApp install and the backup state. A ported user who reinstalls WhatsApp and skips restore looks perfectly healthy at the delivery layer and behaves like a stranger at the engagement layer.
- Campaign-season collection. Lists built during a festive push, an exhibition, or a one-time discount over-index on people who wanted one thing once. Their intent decays much faster than their number does.
- Lifecycle exit. A patient discharged, a student graduated, a tenant moved, an EMI closed. The person is reachable and simply no longer in your funnel.
Notice that only the first two produce a hard delivery failure. The rest produce a contact who is still technically deliverable but has quietly become a block risk. That is why hygiene cannot be a bounce-list exercise alone.
The decay math: what 2.5% a month actually costs
Take a 50,000-contact opt-in list and apply a directional 2.5% monthly decay - the middle of the range typical of the Indian consumer cohorts we see. Compounding does the rest.
| Age of list | Genuinely reachable | Dead weight still being messaged | Share of send budget wasted |
|---|---|---|---|
| At collection | 50,000 | 0 | 0% |
| 6 months | ~42,950 | ~7,050 | ~14% |
| 12 months | ~36,900 | ~13,100 | ~26% |
| 18 months | ~31,700 | ~18,300 | ~37% |
| 24 months | ~27,250 | ~22,750 | ~45% |
Illustrative compounding at 2.5% per month on a list that is never cleaned. Actual decay varies by acquisition channel and vertical - treat this as an order-of-magnitude planning figure, not a benchmark.
Two years in, close to half of every broadcast is spent on people who cannot or will not respond. The wasted spend is annoying. The reputational cost is worse, because those same contacts are the ones most likely to block you, and block rate is the input Meta actually scores.
Recycled-number detection: reading delivery-failure signatures
You cannot query an operator to ask whether a number was reissued. You can infer it from the shape of the failures. The trick is to separate a hard signal about the contact from a soft signal about your own sending pattern - most teams conflate the two, then retire good contacts while keeping dead ones.
| Signature | Typical status / error | Most likely cause | Hygiene action |
|---|---|---|---|
| Hard fail, repeated | 131026 undeliverable, 3+ attempts on separate days | Number not on WhatsApp, deregistered, or reissued to a non-user | Retire permanently after the third failure |
| Soft fail, window-related | 131047, or the legacy 470 re-engagement error | The 24-hour service window closed - a template-category problem, not a contact problem | Never retire on this signal. Fix the send path instead |
| Policy throttle | 131049 marketing limit | Meta is capping marketing volume to that specific user | Deprioritise for marketing, keep for utility. Do not retry in a loop |
| Delivered, never read | 5+ sends delivered, zero read receipts, 30+ days | Abandoned handset, archived or muted chat, or a reissued number ignoring you | Move to the sunset cohort, one re-permission attempt only |
| Read, never replied | Read receipts present, no inbound for 90 days | Passive but alive - tolerant rather than interested | Drop to low-frequency cadence, utility-led content only |
| Block or report cluster | Complaints concentrated by acquisition source or campaign | Consent was weak at the point of collection | Quarantine the whole source cohort and audit the opt-in wording |
The single most valuable rule in that table is the second row. Teams routinely see a wall of re-engagement errors, conclude the list is dead, and purge contacts who were perfectly fine - the send simply used the wrong message category outside the 24-hour window.
Engagement-cohort scoring: recency, reply, read depth
Once failures are classified, score the survivors. A workable model needs only three inputs that your webhook already delivers.
- Recency of inbound. Days since the contact last sent you anything. This is the strongest single predictor of whether the next message gets read rather than blocked.
- Read-to-delivered ratio. Measured over the last ten sends. A ratio below roughly 0.2 across a meaningful sample is a dead-handset tell.
- Reply frequency. Inbound messages in the last 180 days, weighted higher for anything carrying commercial intent - a quote request, a button tap, a catalogue view.
Bucket the result into four cohorts and let every downstream decision read the cohort tag rather than the raw list:
Get a 1-minute BSP audit on WhatsApp
Drop your WhatsApp number — we line-item your current invoice against Meta India rates in under 60 seconds. India-hosted, DPDP-compliant.
- Active - inbound in the last 30 days. Full cadence, marketing eligible.
- Warm - reads present, last inbound 31 to 90 days ago. Reduced marketing cadence, all utility.
- Dormant - no inbound for 90 to 180 days, reads thinning. Utility only, plus one re-permission attempt.
- Sunset - no inbound for 180 days or more, or the delivered-never-read signature. Stop marketing entirely.
The cohort label must be a stored attribute that recalculates on a schedule, not a filter someone remembers to apply before hitting send. Anything depending on human memory at broadcast time will fail during a festive rush, which is precisely when it matters most.
The quality-rating chain: how a dirty list becomes a throughput problem
List hygiene deserves engineering time rather than a quarterly spreadsheet because its failure mode is not "slightly lower open rates". It is a hard cap on how many messages you are allowed to send at all.
| Stage | What happens | What you can observe |
|---|---|---|
| 1. Stale contacts | Recycled and disengaged numbers stay inside the send set | Read rate drifts down while delivered rate still looks healthy |
| 2. Block and report | Strangers receiving brand marketing block or report it | Rising block signals in the WhatsApp Manager quality view |
| 3. Quality flag | Number quality moves green to yellow, then red | Quality rating notification against the phone number |
| 4. Tier demotion | Messaging limit steps down a tier, for example 100K to 10K to 1K unique users per 24 hours | Campaigns start failing partway through a send |
| 5. Operational loss | Your reachable audience shrinks below your active-customer base | Utility traffic - OTPs, delivery updates - now competes for a scarce cap |
Step four is the part that surprises people. Demotion does not only throttle marketing; it constrains the transactional traffic your operations depend on. If you want the mechanics of how limits step up and down, our explainer on WhatsApp broadcast limits and messaging tiers covers the ladder in detail, and the red quality rating recovery playbook covers what to do once you are already flagged. Hygiene is simply the cheaper version of both.
DPDP Act 2023: consent freshness is a legal exposure
The Digital Personal Data Protection Act 2023, administered under MeitY, sets a standard that a two-year-old spreadsheet cannot meet. Consent must be free, specific, informed, unconditional and unambiguous, given for a defined purpose - and it must be as easy to withdraw as it was to give. Two implications follow directly for list hygiene.
First, a recycled number destroys the consent chain entirely. The person who consented no longer holds that number. Continuing to message it is not a deliverability inefficiency; it is processing the personal data of someone who never gave you consent, and it is exactly the pattern that generates complaints.
Second, purpose drift is a real risk. Consent captured for order updates does not automatically extend to festive promotions two years later. A periodic re-permission cycle is the practical mechanism for refreshing scope, and it produces the audit trail - timestamp, source, wording shown, channel - that a Data Principal request will eventually ask for. Our guide to DPDP-compliant WhatsApp opt-in covers the record-keeping fields worth storing against every contact.
Meta's own business messaging policy runs in parallel and is stricter in one respect: opt-in may be obtained on any channel, but the business must be able to evidence it. Between the two regimes, "we bought this list" and "they filled a form back in 2023" are both untenable positions in 2026.
Designing a sunset policy you will actually enforce
A sunset policy is a written rule stating when you stop messaging someone. It only works if a job enforces it rather than a judgement call. Four decisions define it.
- The trigger. Pick one primary signal - typically no inbound for 180 days - plus the hard-fail rule, where three 131026 responses retire the contact immediately.
- The grace path. Before full retirement, every contact gets exactly one re-permission attempt. One, not a sequence.
- The reactivation rule. Any inbound message resets the contact to Active instantly. Sunset must never be a one-way door.
- The exception list. Contacts with a live transactional relationship - an open order, an active policy, a pending appointment - stay eligible for utility messages regardless of engagement score. Sunset governs marketing, not service.
Calibrate the window to your purchase cycle. A grocery or food brand can sunset at 90 days. An insurance, education or property business on an annual cycle would be destroying good contacts at that threshold; 270 to 365 days is more honest. The governing rule is that the sunset window should be longer than your natural repurchase interval, never shorter.
Re-permission campaigns that stay utility-safe
The re-permission message is the highest-risk message you will send all year, because by definition it goes to your least engaged people. Design it accordingly.
- Send one message, not a sequence. Repeated "we miss you" pings into a disengaged cohort are the fastest route to a block cluster.
- Make the ask about preference, not purchase. Two quick-reply buttons - keep receiving updates, or stop - convert a passive contact into an explicit signal either way. A "stop" tap is a win: it retires the contact cleanly with a documented withdrawal.
- Respect the template category honestly. If the content promotes anything, it is marketing and must be sent as marketing. Dressing a promotion up as a utility template risks template rejection and quality damage - do not do it. Genuine preference confirmation on an existing account or order relationship is the version that qualifies as utility.
- Throttle hard. Send the sunset cohort in small batches across several days, watching block signals between batches, rather than as one large blast.
- Honour the answer permanently. A stop response must write an opt-out flag that every future send respects, across every tool you use.
For rebuilding the list afterwards, the durable channels are the ones where the user initiates contact: Click-to-WhatsApp ads, website widgets and QR codes at point of sale. Our note on click-to-subscribe lead-magnet funnels covers those flows, and contacts acquired that way decay markedly slower because the intent was theirs.
The 5-stage lifecycle, automated end to end
Here is the whole method as an operating loop, with the system component that owns each stage.
- Collect. Every contact enters with source, timestamp, consent wording and channel stored as structured fields. No source, no send.
- Score. A webhook consumer ingests every sent, delivered, read, failed and inbound event, updating recency, read ratio and reply counters on the contact record in near real time.
- Segment. A nightly job recomputes cohort tags - Active, Warm, Dormant, Sunset - so campaign audiences are always built from fresh labels instead of a stale CSV.
- Sunset. A scheduled job applies the policy: three hard fails retire, 180 silent days move a contact to Sunset, any inbound reactivates. Retired contacts are excluded at the send layer, not by list-building discipline.
- Re-permission. Sunset entries receive one throttled preference-confirmation message with keep or stop buttons. Stop writes an opt-out. Silence retires the contact when the window closes.
On RichAutomate this maps onto standard building blocks: webhook status ingestion feeding contact attributes, tag-based dynamic segments, a scheduled flow for the sunset pass, and template campaigns targeted at cohort tags. Because the platform charges zero platform fee, zero setup and zero monthly - Client Pay is ₹0.10 per message plus Meta conversation charges billed directly by Meta - the cost of running hygiene is essentially the cost of the messages you choose to send, which is the correct incentive. Full details sit on the RichAutomate pricing page.
Run the loop monthly. A list cleaned every month never accumulates the 20 to 40% dead weight that triggers the quality chain in the first place, and the monthly volume of retirements stays small enough that nobody panics about "losing contacts".
Start with one clean cohort this week
You do not need a six-month project. Export your last 90 days of message status events, count how many contacts show delivered-but-never-read across five or more sends, and you will have your dead-weight number by the end of the day. Retire those, tag the rest, and put the sunset job on a schedule. That single pass typically removes the largest block-risk pool on the list.
RichAutomate gives you the webhook ingestion, cohort tagging, scheduled sunset jobs and re-permission templates to run this loop without building it yourself, on a 14-day free trial with 100 credits. Create your RichAutomate account and clean your first cohort this week - before Meta scores it for you.