# `disposable_stale` (phone): published by an SMS-receiving website, but not recently

The Spaw phone risk signal disposable_stale adds 40 points to risk_score when the open SMS-receiving lists Spaw merges carry the number but last showed it more than 365 days ago, or every list dropped it and last saw it more than 90 days ago (dataset disposable-phone-numbers).

- Weight: +40
- Dataset: `disposable-phone-numbers`
- Read from: `is_disposable`, `disposable_seen_at`
- Default SMS policy: does not block it on its own: +40 is within the default ceiling of 60, which blocks only a score above it.

It takes the place of disposable (+70) once a listing is no longer fresh: still listed and last seen more than 365 days ago, or dropped by every list and last seen more than 90 days ago. is_disposable stays true and disposable_seen_at gives the date, so you can apply a cut-off of your own.

The lists keep numbers long after a site stops showing them, and a number a site gave up may have gone back to its carrier and been issued to someone who never saw the site; the lower weight reflects that. A dropped number leaves the table 730 days after it was last seen.

**What it cannot tell you.**

- It cannot tell you whether the number was reissued: neither the lists nor the regulator tables record a reassignment, so a stale listing is a hint, not a verdict.
- An undated listing never reaches it while a list still carries the number: it counts as fresh.

**What to do.** Weigh it with the rest of the answer, or apply a cut-off of your own to disposable_seen_at. On its own it scores 40 and passes the default SMS policy, which blocks a score above 60; beside other signals the score can pass that.

The SMS policy is set per account with `PUT /api/v1/phone/policy` (https://spaw.co/docs/api/update-phone-policy) or the dashboard's SMS policy tab, and its `block_signals` may list any signal, this one included.

An excerpt of an answer carrying this signal alone, with the number and the other fields left out, because no test number answers it. The score and the decision are worked out as the lookup and the default SMS policy work them out.

```json
{
    "valid": true,
    "country": "GB",
    "line_type": "mobile",
    "line_type_source": "numbering_plan",
    "is_disposable": true,
    "disposable_seen_at": "2025-03-14",
    "risk_score": 40,
    "risk_level": "medium",
    "risk_signals": [
        {
            "signal": "disposable_stale",
            "weight": 40,
            "dataset": "disposable-phone-numbers"
        }
    ],
    "ok_to_send": true,
    "blocked_by": null
}
```

Related:

- [`disposable`](https://spaw.co/docs/signals/phone/disposable): published by an SMS-receiving website
- [`disposable_range`](https://spaw.co/docs/signals/phone/disposable_range): not listed, but in a range crowded with SMS-receiving numbers
- [The weights table in the phone guide](https://spaw.co/docs/phone-intelligence#signal-disposable_stale)
- [Stop OTP abuse with block data and disposable numbers](https://spaw.co/guides/stop-otp-abuse-with-block-data-and-disposable-numbers)
- [Glossary: SMS policy](https://spaw.co/glossary/sms-policy)

Reference: https://spaw.co/docs/signals/phone/disposable_stale
