Profanity Detector - Wordlist Filter, Catches f*ck & f4ck
Pricing
from $0.32 / 1,000 screened texts
Profanity Detector - Wordlist Filter, Catches f*ck & f4ck
Screen up to 1,000 texts per run against a tiered profanity wordlist with obfuscation heuristics (leet, spacing, partial masks) — severity, exact positions, masked cleanedText, Scunthorpe-guarded boundaries. A filter, NOT an AI moderation system. $0.0004 per text, junk entries never charged.
Pricing
from $0.32 / 1,000 screened texts
Rating
0.0
(0)
Developer
Broke to Built
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Profanity Detector — Wordlist Filter with Obfuscation Heuristics
Screen text for profanity — including the obfuscated kind (f*ck, sh!t, f u c k, f4ck, fuuuck) — and get back severity-tiered matches with exact positions plus a masked cleanedText. Up to 1,000 texts per run, online, by API, or as an agent tool via Apify MCP.
What this is — stated plainly: a wordlist + pattern-heuristic filter, not an AI moderation system. It matches a curated multi-tier term list with leetspeak/spacing/partial-masking tolerance. It does not understand context, sarcasm, harassment without swear words, hate speech phrased politely, or threats — and it makes no safety guarantees. Use it as the cheap first-pass layer (UGC pre-filters, username/comment hygiene, log sweeps); decisions that affect user safety need human review or a context-aware moderation system on top.
What you get
- isClean — the bottom-line flag per text
- matches — each hit: base
word, the exactmatchedspan,severity(1-3 tiered) + label,start/endpositions - cleanedText — your text with matched spans masked (
maskChar, default*), everything else untouched - severity / severityScore — the strongest tier found
- Obfuscation-tolerant, boundary-anchored: catches leet/spacing/censored variants while word boundaries prevent the classic Scunthorpe-problem false positives (class, assassin, Scunthorpe pass clean — asserted by our release test)
- Fail-soft: a non-string entry never fails the run —
{ok: false, error}, never charged.
Input
{ "texts": ["have a wonderful day!", "this is total bullsh1t"], "maskChar": "*" }
Or a single string via text.
Output (real run)
{"ok": true,"text": "what the f*ck is this sh!t","isClean": false,"matchCount": 2,"matches": [{ "word": "fuck", "matched": "f*ck", "severity": 2, "severityLabel": "strong", "start": 9, "end": 13 },{ "word": "shit", "matched": "sh!t", "severity": 2, "severityLabel": "strong", "start": 22, "end": 26 }],"severity": "strong","cleanedText": "what the **** is this ****"}
Pricing
$0.0004 per text screened. No start fee. Non-string entries are never charged. A 100,000-comment sweep costs $40 across runs.
Measured against store incumbents (2026-08-07): nibble/profanity-content-filter charges $0.002 per result, maximedupre/profanity-checker $0.00025 per text (cheaper than us, 2 users — but without positional matches/severity tiers per its listing).
Honest limits
- Wordlist-bound: only terms on the list (and their obfuscations) are caught. New slang, other languages, and creative insults that avoid listed terms pass clean.
- No context: "this is shit" and a quoted lyric score the same; a vile message with no listed words scores clean. This is inherent to wordlist filtering — we will not pretend otherwise.
- Not a compliance or brand-safety certification of any kind.
- English-focused list; leet handling covers Latin-script obfuscation only.
FAQ
Is this a content moderation system? No. It is the fast, deterministic, cheap layer that catches listed profanity including obfuscated spellings. Real moderation needs context models and humans; many pipelines use this filter first and escalate only flagged or ambiguous content.
How does it avoid the Scunthorpe problem? Matches are word-boundary anchored — a listed term embedded inside a longer word (classic, assassin, Scunthorpe) does not trip. Our automated release test asserts this on every deploy.
What do the severity tiers mean?
The built-in list is tiered mild(1)/strong(2)/severe(3); severity reports the strongest tier found so you can apply different policies (e.g. mask tier 1-2, reject tier 3).
Can I use cleanedText directly? Yes — masked spans keep their length and spacing, everything unmatched is byte-identical to your input.
Why did some rows come back ok: false?
Those entries were not strings. Recorded, never charged.
Use from code or AI agents
curl -s "https://api.apify.com/v2/acts/EliAI~profanity-detector/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-X POST -H 'Content-Type: application/json' \-d '{"texts": ["comment one", "c0mment tw0 with sh!t in it"]}'
Agents: connect Apify MCP and call the EliAI/profanity-detector tool.
- Capability: wordlist + obfuscation-heuristic profanity screening with severity, positions and masked text — NOT context-aware moderation, no safety guarantees
- Required input:
text(string) ortexts(array) - Returns: one record per text;
isClean+matches+cleanedTextsummarize it - Bounded: 1,000 texts per run; failures isolate per text
- Side effects: none (texts never leave the run)