# The ROI Math of Running a Litigator Filter on Every SMS Send

> One extra API credit per message vs. a $500 to $1,500 TCPA statutory damages claim. We show the unit economics so you don't have to guess.

Published 2026-05-25, updated 2026-10-03 by Marcus Whelan. Canonical: https://checkthatphone.com/blog/the-roi-math-of-running-a-litigator-filter-on-every-sms-send

A fair question to ask about a litigator filter: is the extra credit it adds to every lookup worth it? Run the numbers and the answer is almost embarrassing. A single suppressed litigator can pay for scrubbing a large list many times over.

Every SMS campaign carries a line item nobody puts on the spreadsheet: TCPA exposure. The Telephone Consumer Protection Act sets statutory damages of $500 per violation, and a court can raise that to $1,500 if the violation was willful or knowing ([47 U.S.C. § 227(b)(3)](https://www.law.cornell.edu/uscode/text/47/227)). For texts, each message can count as a violation. Some plaintiffs file TCPA suits repeatedly, and a certified class action can turn a modest campaign into an eight-figure liability.

So the question isn't whether to run a litigator filter. It's whether you've ever done the arithmetic on how cheap it is.

## What does a litigator scrub cost?

One extra credit per lookup: $0.003 on the 10K plan. CheckThatPhone prices lookups in credits. The [10,000-credit plan is $30/month](/pricing). Each standard lookup is one credit. Adding the litigator filter, by passing `litigatorFilter: true` in your request body, costs one more credit per lookup.

So a fully enriched lookup with carrier dip data (`dipCarrier`, `dipCarrierType`, `dipCarrierSubType`, `dipPorted`), line-type classification (`nanpType`), deliverability signals (`deliverable`, `blackList`, `reason`, `action`, `deactivationDate`), and the litigator scrub (`litigator`, `litigator_type`, `litigator_name`) is two credits total.

At the $30 / 10K rate, one credit is $0.003. Two credits is $0.006 per number.

Sending to more than 10,000 numbers? Overage is simple. An extra 10,000 scrubs (the litigator add-on credit) runs about $30 in overage. That is the incremental cost of protecting 10,000 sends.

Cost to litigator-scrub 10,000 numbers: about $30.

## What does one TCPA claim cost?

Statutory damages start at $500 per message, and they are fixed by statute, not by actual harm:

- $500 per violation
- Up to $1,500 per violation if the court finds it willful or knowing

For texts, that is per message. If your drip sends three messages to a litigator who never opted in, you are looking at $1,500 to $4,500 before legal fees, before discovery, before any settlement premium.

Then there is class-action math. Courts have certified TCPA classes where the defendant sent the same message to thousands of recipients. At $500 per message times 50,000 class members, that is $25,000,000 in statutory exposure before anyone proves actual harm.

Settlement amounts and defense costs vary widely and mostly aren't public, so I've left them out of the math below. Everything here uses the statutory figures, which are fixed by law. Real costs only go up from there, because defending even a claim that settles early means paying counsel.

## $0.003 versus $500

Put it in a table.

| Scenario | Cost |
|---|---|
| Litigator-filter credit (1 add-on credit) | $0.003 |
| Litigator-filter for 10,000 sends | ~$30 |
| Single TCPA statutory claim | $500 per message |
| Single TCPA statutory claim (willful or knowing) | Up to $1,500 per message |
| Class action (50K members, 1 message) | $25,000,000 statutory exposure |

The ratio at the single-credit level is roughly 166,000:1 against the minimum statutory amount. You would need to scrub about 166,667 numbers at the incremental credit cost ($0.003 each) to equal the statutory damages for one violation: one message to one person.

That is not a close call. It is a rounding error on your legal budget.

## How the API integration works

For real-time sends, like a contact form submission, a lead capture, or an onboarding flow, you call the single-number endpoint:

```
POST https://api.checkthatphone.com/v1/lookup
Authorization: Bearer <key>

{
  "phone": "2125550147",
  "litigatorFilter": true
}
```

The response includes `litigator` (the string `"true"` or `"false"`), `litigator_type` (`"litigator"`, `"plaintiff"` or `"agitator"`), and `litigator_name` (the name on record, when there is one). Your send logic checks `litigator === "true"` and suppresses that number before it ever touches your SMS provider. The `credits_used` field in the response confirms the credit cost so you can reconcile against your plan.

You also get the full carrier and line-type envelope in the same call. `dipCarrier` tells you which carrier the number is currently on, `dipPorted` flags whether it has moved from its original carrier, and `dipCarrierType` confirms mobile vs. landline from a live carrier dip. Most landlines can't receive SMS (about 7% of landlines we check are SMS-capable), so suppressing non-mobile numbers in the same request is genuinely additive. The `action` field already does this for you: it returns `"unsubscribe"` for a litigator match or a line that can't take a text.

See the full field reference in the [API docs](/docs).

## Cleaning large lists before a campaign

For bulk pre-send hygiene, like a re-engagement campaign, a purchased list, or a migrated CRM, the per-request endpoint is not the right tool. CheckThatPhone's [bulk CSV verification](/bulk-phone-validation) (Bulk CSV in the dashboard) is built for this. You upload your list, we deduplicate it, run carrier and line-type validation plus the litigator add-on against every unique number, and deliver a downloadable result file. The upload and the result file are hard-deleted within 24 hours, which matters for data handling and vendor agreements.

For a 50,000-number list, that is 50,000 litigator-filter credits, roughly $150 in add-on cost at the 10K plan's $0.003 overage rate, to validate a list before a single message goes out. Against the exposure profile of a 50,000-recipient campaign, $150 is not a line item worth debating.

Learn more about the practical workflow in our [contact list hygiene use case](/use-cases/contact-list-hygiene).

## What the filter actually catches

The `litigator_type` field says how the match was classified: `"litigator"`, `"plaintiff"`, or `"agitator"`. All three carry the same recommended action, so treat them identically. The data behind it is refreshed daily. The free `dncComplainer` check covers a different group: people who have complained about telemarketers but haven't sent a demand letter or filed suit.

`litigator_name` gives you the name on record when there is one, which helps with internal compliance documentation. Treat it as sensitive and don't log it more than you need to. A record showing that you ran a litigator filter at send time and suppressed matched numbers is also useful evidence of your compliance process if a claim ever comes up.

For a deeper look at the compliance use case, see [TCPA litigator scrub](/use-cases/tcpa-litigator-scrub). For what the litigator database contains and how serial plaintiffs operate, see [how to filter out professional plaintiffs before you dial or text](/blog/tcpa-litigator-scrub-how-to-filter-out-professional-plaintiffs-before-you-dial-or-text), and for how the scrub fits next to DNC lists and your own opt-outs, see [why you need all three](/blog/litigator-scrub-vs-dnc-registry-vs-internal-opt-out-why-you-need-all-three).

## When to run it

If your SMS send volume is above zero, the litigator filter is worth running. The unit economics are so skewed in your favor that "is it worth it" answers itself in the first line of arithmetic. The only real implementation question is when to call the API, and the answer is: before you add a number to any sendable segment, whether that is at list upload (Bulk CSV) or at point of capture (real-time `/v1/lookup`).

Check your current send-list size against the [pricing page](/pricing), confirm you are on a plan that covers your volume with the add-on credits, and build the `litigatorFilter: true` flag into your standard lookup payload. It is one parameter. The math handles the rest.

---

CheckThatPhone is a phone validation API for US and Canada numbers: https://checkthatphone.com (docs: https://checkthatphone.com/docs.md, pricing: https://checkthatphone.com/pricing.md).
