Profanity Detector - Wordlist Filter, Catches f*ck & f4ck avatar

Profanity Detector - Wordlist Filter, Catches f*ck & f4ck

Pricing

from $0.32 / 1,000 screened texts

Go to Apify Store
Profanity Detector - Wordlist Filter, Catches f*ck & f4ck

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

Broke to Built

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 exact matched span, severity (1-3 tiered) + label, start/end positions
  • 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) or texts (array)
  • Returns: one record per text; isClean + matches + cleanedText summarize it
  • Bounded: 1,000 texts per run; failures isolate per text
  • Side effects: none (texts never leave the run)