How accurate is AntiSpam? Method, data and dated results

Every spam filter claims a number. This page says where ours come from: what counts as spam, what data we test on, how the test is split, what we got wrong before, and what the numbers can't tell you. All figures are dated and will be updated in place.

Updated 23 October 2026 · Measurements by the developer, not an independent lab · A reproducible test pack is available to reviewers on request (see below).

Results at a glance

LanguageMeasuredTest dataPrecisionRecallLegitimate texts wrongly filtered
Turkish (engine 1.4) October 2026 13,117 real incoming SMS, 2,650 senders, received 2018–2026, sender-grouped 5-fold cross-validation 98.1% 96.1% 7 texts in the protected groups (codes, bank, delivery, personal) out of 13,117
English (engine 2.0) October 2026 28,675 texts from public research datasets (12,827 spam and scam, 15,848 legitimate); model scored only on texts it never saw in training (see details) 99.2% 82.6% 87 of 15,848 legitimate texts (0.55%)

In plain words, for Turkish: of every 100 texts AntiSpam moved to Spam, 98 really were spam; of every 100 spam texts, 96 were caught. The previous engine (version 1.2) caught 70 of 100 on the same data, and misfiled 78 texts in the protected groups instead of 7.

For English: of every 100 texts moved to Spam, 99 really were spam; of every 100 spam texts, 83 were caught. About 1 legitimate text in 180 was wrongly filtered. The English test is built from public research data, so read it with the caveats below.

Definitions

We don't report "accuracy" as a single percentage. In a dataset that is mostly legitimate texts, a filter that blocks nothing scores high on accuracy and is useless.

What counts as spam

The labels follow the product decision, not an academic convention:

Counting advertising as spam (a decision made in version 1.4) makes the task harder than scam-only filtering: the line between a bank's promotional text and its service notice is thinner than the line between a bank and a casino. The numbers above include advertising.

The Turkish measurement (October 2026)

Data

13,117 incoming SMS from 2,650 distinct senders, received by the developer between 2018 and October 2026. It is one person's real inbox, so it contains the mix a real user sees: bank alerts, one-time codes, deliveries, school and hospital reminders, carrier notices, personal texts, and eight years of Turkish spam, from illegal betting to fake court summonses. The data is private and is never published or uploaded; the labels and the engine's verdicts are produced locally.

Labelling

Texts were first labelled with simple rules (weak supervision), then every disagreement between the rules, the model and the labels was reviewed by hand. The labelling policy is the one above. An anonymised regression set of about 200 texts, with personal details removed, is kept in the code repository so that every change to the engine is checked against it.

Protocol

Five-fold cross-validation grouped by sender: the texts of any given sender appear in exactly one fold, so the model is always scored on senders it never saw during training. Rules and model are run together, exactly as on the phone, with advertising counted as spam. We prefer this to a random split because spam senders repeat themselves; a random split lets the model memorise a sender's template and then "recognise" it in the test, which inflates every number.

Results

What we got wrong before

Our first engines were measured on random splits and looked better than they were. In 2026 we compared lab numbers with the decisions the phone actually logged and found that the shipped filter was missing most Turkish spam sent from alphanumeric sender names, because a rule trusted a regulatory sender code that spammers had started to fake. Engine 1.4 removed that trust, added sender-grouped testing, and made the protected categories explicit rules rather than something the model had to learn. We mention this because a published number is only as good as the test behind it.

The English measurement (October 2026)

English filtering is new in version 2.0. Its numbers come from public data, not from a real person's inbox, and that changes how far you can trust them. Measured on 23 October 2026.

Data

28,675 English texts: 12,827 spam and scam texts and 15,848 legitimate ones. Every one of them comes from public research or open data:

None of it came from our users, our beta testers or volunteers we asked; all of it was already public. Promotions count as spam here, as they do in the Turkish test.

Protocol

Results

GroupSourceResult
Phishing, 2022–2023NCSU2,366 of 2,396 caught (98.7%)
Scams reported by the public, 2020–2024IMC 20253,523 of 4,569 caught (77%)
PromotionsIndian inbox3,726 of 4,337 caught (85.9%)
Older spamUCI (2011)276 of 589 caught (47%)
Personal textsNUS, UCI, Mishra & Soni7 of 10,997 wrongly filtered (0.06%)
One-time codesIndian inbox5 of 937 wrongly filtered (0.5%)
Bank alertsIndian inbox30 of 3,347 wrongly filtered (0.9%)
Delivery noticesIndian inbox34 of 504 wrongly filtered (6.8%)
Company service noticesSmishX11 of 63 wrongly filtered

Known weaknesses

What the numbers can't tell you

Reproduce it yourself

Reviewers and journalists can request a test pack by email: 40 anonymised English texts (20 spam and phishing, 20 legitimate including codes, bank alerts, delivery updates and reminders) with the expected verdict for each, plus instructions.

  1. Install AntiSpam on an iPhone and select it as the Text Message Filter (setup is described on the main page).
  2. Send the texts from a second phone whose number is not in the test iPhone's Contacts, and don't reply to it from the test iPhone (Apple stops filtering a sender after three replies).
  3. Check where each text lands: Spam folder, Unknown Senders or the main list. Compare with the expected verdicts.
  4. Send us the results, especially the mistakes. Write to iletisim@smsengellemeapp.com.

The pack is the same one we send to publications that review the app, and it is available to anyone who asks.

Measurement history

Questions

What do 98% precision and 96% recall mean in plain words?

Of every 100 texts AntiSpam moved to Spam in the Turkish test, 98 really were spam (precision). Of every 100 spam texts in the test, 96 were caught (recall). Both were measured in October 2026 on 13,117 real Turkish texts from 2,650 senders.

Why do you split the test data by sender instead of at random?

Spammers send near-identical texts from many numbers. With a random split, the model sees a sender's texts during training and is then tested on the same sender's texts, which inflates the score. Grouping by sender means every text in a test fold comes from a sender the model has never seen, which is closer to real life.

Are the English numbers as reliable as the Turkish ones?

Not in the same way. The Turkish engine was measured on eight years of one real inbox. The English engine was measured on public research datasets. The scam texts in them are real, but the legitimate bank alerts, codes and delivery notices come from an inbox in India, not from banks and services in the US, UK or Australia. The English figures are dated, and we'll update them when we can measure on more.

Do you test on my messages?

No. AntiSpam can't read messages outside Apple's filter extension, and the extension has no network access. The Turkish figures come from the developer's own inbox; the English figures come only from public research datasets. You can help by reporting a wrongly filtered text by email.

Judge it on your own inbox

One month free. If it hides a text it shouldn't have, tell us; that is how the protected rules grew.

Download on the App Store What it does and doesn't do · How it compares