Reddit Text Cleaner - TTS Ready Narration Scripts avatar

Reddit Text Cleaner - TTS Ready Narration Scripts

Pricing

from $0.19 / 1,000 text cleaneds

Go to Apify Store
Reddit Text Cleaner - TTS Ready Narration Scripts

Reddit Text Cleaner - TTS Ready Narration Scripts

Clean up Reddit posts for text-to-speech. It strips markdown, links and edit stamps, spells out AITA-style shorthand and can tone down swearing. Each row holds the narration text, one segment per sentence, word count, read time and a hook score. No AI key needed. $0.20 per 1,000 texts.

Pricing

from $0.19 / 1,000 text cleaneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Paste a Reddit post, or pipe a whole batch of them in, and get back text a voice can read straight off: markdown gone, link syntax gone, the "Edit: thanks for the gold" trailer gone, and the result split into one segment per sentence.

It runs on fixed rules, not a model, so there is no key to supply and nothing to pay a model provider. That also means it is literal: it does what its lists say and nothing cleverer, and the places where that bites are written out below rather than left for you to find.

InputOne block of text, or an array of texts or post objects
OutputOne row per text: the cleaned narration, its sentences, word and character counts, read time and a hook score
CeilingNo fixed limit, one row per text you send
Account neededNone
Price$0.20 per 1,000 texts, flat on every plan. The free plan's $5 a month covers about 25,000

🔍 What Reddit Text Cleaner does

Four passes over each text. It strips markdown and link syntax down to plain words. It expands Reddit shorthand so a voice does not spell it out letter by letter: AITA becomes "Am I the asshole" and MIL becomes "mother-in-law". It handles swearing the way you ask, from leaving it alone to removing it. Then it splits the result into sentences.

Each row also carries the numbers you need to decide whether a story fits a clip: word count, character count, sentence count, an estimated read time at your chosen speed, and a hook score out of 100 worked out from the opening sentence.

The texts array takes post objects as well as plain strings. On each object it uses the first of scriptText, narration, selftext, body or text it finds, so rows from both Reddit scrapers linked below drop in without reshaping.

📋 What data you get from each cleaned text

What you getField
The narration text, ready for a voicecleaned
The same text, one sentence per entryttsSegments
What you sent, kept for referenceoriginal
Counts taken on the cleaned textwordCount, charCount, sentenceCount
A read-aloud estimate at your speedreadTimeSeconds
How strong the opening sentence is, 0 to 100hookScore

▶️ How to clean up a Reddit post for a voiceover

  1. Open Reddit Text Cleaner and click Try for free.
  2. Paste one post into Text, or put your batch into Texts (batch).
  3. Pick a Profanity handling mode. soft swaps the commonest swear words for milder ones.
  4. Click Start.
  5. Take cleaned or ttsSegments from the dataset, or read them from the API.

💰 How much does it cost to clean up Reddit posts?

$0.20 per 1,000 texts, which is $0.0002 each. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 25,000 texts.

One text in, one row out, one charge. There is no model behind this and no key to add, so there is no separate bill on top.

📥 What you give it

{
"texts": [
"AITA for leaving? **So** here's the _story_. Check [this](https://x.com).",
"TIFU by replying all. Edit: yes I know."
],
"profanityMode": "soft",
"wpm": 150
}
FieldDefaultWhat it is
textnoneA single block of text. Fine for one post. The form opens with a sample post in it.
textsnoneAn array. Strings, or post objects carrying any of the fields named above.
expandAbbreviationstrueSpells out Reddit and internet shorthand. Read the limits before leaving it on.
profanityModekeepkeep, soft for milder swaps, censor for f***, or remove.
wpm150Narration speed used to estimate read time.

Give it one or the other. A run with both text and texts empty fails rather than finishing with an empty dataset.

📤 What you get back

A real row from a real run:

{
"ok": true,
"original": "AITA for leaving? **So** here's the _story_. Check [this](https://x.com).\n\nEdit: thanks for the awards! TL;DR: I left.",
"cleaned": "Am I the asshole for leaving? So here's the story. Check this.",
"ttsSegments": [
"Am I the asshole for leaving?",
"So here's the story.",
"Check this."
],
"sentenceCount": 3,
"wordCount": 12,
"charCount": 62,
"readTimeSeconds": 4.8,
"hookScore": 64
}
FieldHow to read it
cleanedThe narration text. This is the thing you feed to a voice.
ttsSegmentsThe same text as an array of sentences, for per-line timing or captions.
originalWhat you sent, kept for reference and cut off at 4,000 characters. cleaned is never cut.
wordCount, charCount, sentenceCountMeasured on the cleaned text.
readTimeSecondsWord count against your wpm. Set wpm to 0 and this comes back null.
hookScore0 to 100, scored on the first sentence. Useful for sorting a batch before you pick.

🧾 Reading the output

Every row is a cleaned text and every row is billed. ok is always true, there are no sample rows and no diagnostic rows, and nothing is filtered out silently.

Two things do get dropped, and it is worth knowing which:

What you sentWhat happens
An object in texts with none of the known text fields on itSkipped, no row written
Nothing at all, in either fieldThe run fails instead of writing an empty dataset

If the row count does not match what you sent, the first line is why.

💡 What people use it for

  • Prepping Reddit stories for a faceless video pipeline, where markdown read aloud ruins the take.
  • Taking the commonest swearing out of narration in bulk with soft, instead of editing by hand.
  • Sorting a pile of candidate stories by hookScore and readTimeSeconds before picking the three worth shooting.
  • Turning long posts into per-sentence segments so captions line up with the audio.

From a subreddit to a voice-over, in three steps:

  1. Run Reddit Scraper on the subreddits you want, with requireStory on.
  2. Put its rows into this actor's texts as they are, with profanityMode set to soft.
  3. Send the cleaned values to AI Text-to-Speech Voiceover as texts, with your own OpenAI key.

🚧 What it does not do

  • It does not remove emoji. Invisible zero-width characters go, visible emoji stay exactly where they were. Strip them yourself if your voice reads them out.
  • Abbreviation expansion is blunt. It matches shorthand without caring about case, so "5 mil" comes out as "5 mother-in-law" and a name like Sil becomes "sister-in-law". If your text has ordinary words that look like Reddit shorthand, turn expandAbbreviations off.
  • soft only knows four words. It swaps the f-word, "shit", "asshole" and "bitch" for milder ones and leaves every other swear word as written, so read the result before calling it ad-safe.
  • censor and remove match the start of a word. "Cocktail", "cockpit" and "Dickens" get starred out or deleted along with the swearing.
  • An Edit:, Update:, TL;DR:, ETA: or PS: label cuts the rest. Everything from the first one that starts a sentence to the end of the text is removed, and a dash after the label counts too. That is right for a thank-you trailer and wrong when the story keeps going after it.
  • Sentence splitting is mechanical. An abbreviation with a full stop in it, like "Mr.", starts a new segment.
  • English only, and one fixed word list. No language detection, and you cannot supply your own expansions or swaps.
  • It does not fetch anything. Give it text. To pull the posts in the first place, use the scrapers linked below.

🧭 Which Reddit actor do you need?

If you wantUse
Posts and their full text from subreddits or profiles you nameReddit Scraper
Posts matching a keyword, across Reddit or inside one subredditReddit Search Scraper
Reddit videos as one MP4 with the sound in itReddit Video Scraper
Post text you already have, cleaned up for a voice to readThis one
A post rewritten into a hook and a short-form scriptStory to Script Rewriter
A finished faceless short video from a subreddit or a storyAI Faceless Video Generator
The cleaned text read out loud, as an audio fileAI Text-to-Speech Voiceover

❓ Questions people ask

Does this call an AI model?

No. It is rules and word lists, which is why there is no key field and why the output is the same every time you send the same text.

Can I feed it the Reddit Scraper's output directly?

Yes. Put the rows into texts as they are. Reddit Scraper rows are read from scriptText, so the title comes through with the body.

Why is my read time wrong?

It is word count against wpm, nothing more. Set wpm to the speed your voice actually reads at. A wpm of 0 gives you null rather than a number.

Is original the whole post?

Only up to 4,000 characters. The cleaned field keeps the lot, so use that if length matters.

What does hookScore measure?

How strong the first sentence looks as an opener, scored 0 to 100. It is a sorting aid for a batch, not a verdict.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/reddit-text-cleaner. Either way the run happens on your Apify account at the same price.

🆘 If something breaks

Open the Issues tab on the actor page. Paste the text that came out wrong along with the run ID, and that is usually enough to see it.